java面试汇总(三)
17、List 去重问题
https://mp.weixin.qq.com/s/puq6r1bq0WLDbTw2bxtrgg
法一:
我们大家都知道,set集合的特点就是没有重复的元素。如果集合中的数据类型是基本数据类型,可以直接将list集合转换成set,就会自动去除重复的元素,这个就相对比较简单。
如下示例:
public class Test {
public static void main(String[] args) {
List list = new ArrayList();
list.add(11);
list.add(12);
list.add(13);
list.add(14);
list.add(15);
list.add(11);
System.out.println(list);
Set set = new HashSet();
List newList = new ArrayList();
set.addAll(list);
newList.addAll(set);
System.out.println(newList);
}
}
输出结果为:
我们可以看到去重成功了。
当list集合中存储的类型是对象类型的时候,我们就不能简单的只把list集合转换成set集合。
还需要对该对象类型实现equals和hashcode方法。
18、常用设计模式
单例
工厂模式:spring IOC就是使用了工厂模式
代理模式:spring AOP使用了代理模式
包装模式
19、Java死锁排查和Java CPU 100% 排查的步骤整理
https://www.cnblogs.com/aflyun/p/9194104.html
1、死锁:jps+jstack
jps -l
jstack -l 12316 (PID)
jconsole连接,检测死锁
jvisualvm (图形化监控工具,查看线程情况)
2、CPU 100% 排查
top
pidstat -p
找到cpu占用较高的线程TID
将TID转换为十六进制的表示方式
jstack -l
查找 TID对应的线程(输出的线程id为十六进制),找到对应的代码