List泛型建议使用顺序
建议的采用顺序是List<T>、List<?>、List<Object>
List<T>、List<?>、List<Object>这三者都可以容纳所有的对象,但使用的顺序应该是首选List<T>,次之List<?>,
最后选择List<Object>,原因如下:
(1)、List是确定的某一个类型 List<T>表示的是List集合中的元素都为T类型,具体类型在运行期决定;List<?>表示的是任意类型,与List<T>类似,
而List<Object>则表示List集合中的所有元素为Object类型,因为Object是所有类的父类,
所以List<Object>也可以容纳所有的类类型,从这一字面意义上分析,List<T>更符合习惯:
编码者知道它是某一个类型,只是在运行期才确定而已。
(2)List可以进行读写操作 List<T>可以进 ...
Java 动态代理机制详解
在学习Spring的时候,我们知道Spring主要有两大思想,一个是IoC,另一个就是AOP,对于IoC,依赖注入就不用多说了,而对于Spring的核心AOP来说,我们不但要知道怎么通过AOP来满足的我们的功能,我们更需要学习的是其底层是怎么样的一个原理,而AOP的原理就是java的动态代理机制,所以本篇随笔就是对java的动态机制进行一个回顾。
在java的动态代理机制中,有两个重要的类或接口,一个是 InvocationHandler(Interface)、另一个则是 Proxy(Class),这一个类和接口是实现我们动态代理所必须用到的。首先我们先来看看java的API帮助文档是怎么样对这两个类进行描述的:
InvocationHandler:
123
InvocationHandler is the interface implemented by the invocation handler of a proxy instance.Each proxy instance has an associated invocation handler. When a metho ...
zip4j实现多线程压缩
使用的jar包:zip4j_1.3.2.jar基本功能:针对ZIP压缩文件创建、添加、分卷、更新和移除文件(读写有密码保护的Zip文件)(支持AES 128/256算法加密)(支持标准Zip算法加密)(支持zip64格式)(支持Store(仅打包,默认不压缩,不过可以手动设置大小)和Deflate压缩方法(针对分块zip文件创建和抽出文件)(支持编码)(进度监控)压缩方式(3种):static final int COMP_STORE = 0;(仅打包,不压缩) (对应好压的存储)static final int COMP_DEFLATE = 8;(默认) (对应好压的标准)static final int COMP_AES_ENC = 99;
压缩级别有5种:(默认0不压缩)级别跟好压软件是对应的;static final int DEFLATE_LEVEL_FASTEST = 1;static final int DEFLATE_LEVEL_FAST = 3;static final int DEFLATE_LEVEL_NORMAL = 5;static final int DEF ...
mysql字段大小写敏感设置
mysql中varchar类型的字符集一般设置成utf8,然而mysql默认是对大小写不敏感(不区分),如果想要mysql区分大小写需要设置排序规则,规则详解如下:在mysql中存在着各种排序规则:
1,utf8_bin将字符串中的每一个字符用二进制数据存储,区分大小写。2,utf8_genera_ci不区分大小写,ci为case insensitive的缩写,即大小写不敏感。3,utf8_general_cs区分大小写,cs为case sensitive的缩写,即大小写敏感。用utf8_genera_ci没有区分大小写,导致这个字段的内容区分大小写时出问题,比如作为区分大小写的code或者验证码时就出问题了。utf8_general_cs这个选项一般没有,所以只能用utf8_bin区分大小写。
centos7 nginx配置ssl证书实现https访问同时http访问
1,首先将你申请到的nginx 分类下的ssl证书上传到nginx的config下(可以新建一个目录叫ssl。)
2.修改nginx的config配置
12345678910111213141516171819server { listen 80;**(监听80端口)** listen 443 ssl;**(监听443端口,阿里服务器在安全组开放443端口)** server_name [www.zjrzb.cn;**(此处改为你的域名)**](http://www.zjrzb.cn%3B/)####端口转发配置 location / { proxy_pass http://127.0.0.1:8090; proxy_set_header Host $host:80; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } ss ...
线上服务的FGC问题排查
线上服务的GC问题,是Java程序非常典型的一类问题,非常考验工程师排查问题的能力。同时,几乎是面试必考题,但是能真正答好此题的人并不多,要么原理没吃透,要么缺乏实战经验。
过去半年时间里,我们的广告系统出现了多次和GC相关的线上问题,有Full GC过于频繁的,有Young GC耗时过长的,这些问题带来的影响是:GC过程中的程序卡顿,进一步导致服务超时从而影响到广告收入。
这篇文章,我将以一个FGC频繁的线上案例作为引子,详细介绍下GC的排查过程,另外会结合GC的运行原理给出一份实践指南,希望对你有所帮助。内容分成以下3个部分:
从一次FGC频繁的线上案例说起
GC的运行原理介绍
排查FGC问题的实践指南
01 从一次FGC频繁的线上案例说起去年10月份,我们的广告召回系统在程序上线后收到了FGC频繁的系统告警,通过下面的监控图可以看到:平均每35分钟就进行了一次FGC。而程序上线前,我们的FGC频次大概是2天一次。下面,详细介绍下该问题的排查过程。
1. 检查JVM配置通过以下命令查看JVM的启动参数:
12345678910111213ps aux | grep &q ...
git配置ssh登陆
一、 生成ssh密钥在git客户端执行:
1ssh-keygen -t rsa -C "xxx@xxx.com"
引号处xxx@xxx.com为使用的邮箱名,默认生成路径不需要改,按enter后输入密码。
此时在C:\Users\(当前系统用户名).ssh目录中将会生成id_rsa和id_rsa.pub两个文件,前者是私匙,后者是公匙
二、 GitHub中添加ssh公钥进入git 点Settings–>点SSH key 将id_rsa.pub用记事本打开复制内容到SSH key输入框中 title可以自定义,过期时间可以选择长一点。
三、 测试ssh1ssh -T git@github.com
输入生成公钥私钥填写的密码,返回Welcome to GitLab, 表示配置成功,下面就可以按命令操作git仓库了
四、git常用命令1234567891011121314151617181920212223242526272829303132333435363 ...
JVM 性能调优监控工具 jps、jstack、jmap、jhat、jstat、hprof 使用详解(转载)
··author: Josh_Persistence··
一、 jps(Java Virtual Machine Process Status Tool) :基础工具jps主要用来输出JVM中运行的进程状态信息。语法格式如下:
1jps [options] [hostid]
如果不指定hostid就默认为当前主机或服务器。命令行参数选项说明如下:
1234567-q 不输出类名、Jar名和传入main方法的参数-m 输出传入main方法的参数-l 输出main类或Jar的全限名-v 输出传入JVM的参数
比如下面:
12345678root@ubuntu:/# jps -m -l2458 org.artifactory.standalone.main.Main /usr/local/artifactory-2.2.5/etc/jetty.xml29920 com.sun.tools.hat.Main -port 9998 /tmp/dump.dat3149 org.apache.catalina. ...
Kafka、RabbitMQ以及RocketMQ对比
Kafka的优势和劣势Kafka的吞吐量几乎是行业里最优秀的,在常规的机器配置下,
一台机器可以达到每秒十几万的QPS,相当的强悍。
Kafka性能也很高,基本上发送消息给Kafka都是毫秒级的性能。可用性也很高,Kafka是可以支持集群部署的,
其中部分机器宕机是可以继续运行的。
但是Kafka比较为人诟病的一点,似乎是丢数据方面的问题,因为Kafka收到消息之后会写入一个磁盘缓冲区里,
并没有直接落地到物理磁盘上去,所以要是机器本身故障了,可能会导 致磁盘缓冲区里的数据丢失。
而且Kafka另外一个比较大的缺点,就是功能非常的单一,主要是支持发送消息给他,然后从里面消费消息,
其他就没有什么额外的高级功能了。所以基于Kafka有限的功能,可能适用 的场景并不是很多。
因此综上所述,以及查阅了Kafka技术在各大公司里的使用,基本行业里的一个标准,
是把Kafka用在用户行为日志的采集和传输上,比如大数据团队要收集APP上用户的一些行为日志,
这种日志就是用Kafka来收集和传输的。
因为那种日志适当丢失数据是没有关系的,而且一般量特别大,要求吞吐量要高,一般就是收发消息,
不需要太 ...
(转载)全文搜索引擎Elasticsearch
Lucene 目前市场上开放源代码的最好全文检索引擎工具包就属于 Apache 的 Lucene了。
但是 Lucene 只是一个工具包,它不是一个完整的全文检索引擎。
Lucene 的目的是为软件开发人员提供一个简单易用的工具包,
以方便的在目标系统中实现全文检索的功能,或者是以此为基础建立起完整的全文检索引擎。
目前以 Lucene 为基础建立的开源可用全文搜索引擎主要是 Solr 和 Elasticsearch。
Solr 和 Elasticsearch 都是比较成熟的全文搜索引擎,能完成的功能和性能也基本一样。
但是 ES 本身就具有分布式的特性和易安装使用的特点,而 Solr 的分布式需要借助第三方来实现,
例如通过使用 ZooKeeper 来达到分布式协调管理。
不管是 Solr 还是 Elasticsearch 底层都是依赖于 Lucene,
而 Lucene 能实现全文搜索主要是因为它实现了倒排索引的查询结构。
如何理解倒排索引呢?假如现有三份数据文档,文档的内容如下分别是 ...