开发问题集
泛型
编译时泛型擦除
public static void method1(ArrayList<String> list1) {
System.out.println("Arraylist<String> list1");
}
public static void method1(ArrayList<Date> list1) {
System.out.println("Arraylist<Date> list1");
}
以上代码编译器报错:‘method1(ArrayList)’ clashes with ‘method1(ArrayList)’; both methods have same erasure
原因是这两个方法在编译后,由于“泛型擦除”,导致编译后两个方法变得一致。
jdk 版本问题
接口调用异常:javax.net.ssl.SSLException: Received fatal alert protoocol_version
此问题,是由于接口调用时,调用方和被调用方使用的 jdk 版本不一致导致的,具体情况如下:
接口调用方:jdk1.6 ----------------> 接口提供方:jdk1.8
经查资料发现,当接口的协议使用的是 https 时,需要进行 SSL 的验证。而 jdk1.8 默认的TLS 的版本是 TLSv1.2, jdk1.6 默认的 TLS 的版本是 TLSv1.1 且 jdk 最高只支持 TLSv1.1,因此接口调用时会抛异常。
关于TLS协议和SSL的区别及介绍,可以看此文章:https://kb.cnblogs.com/page/197396/
解决方案:
- 接口提供方修改接口协议,将 https 改为 http,从而跳过 SSL 验证。
- 接口提供方修改 TLS 协议,将 TLS 协议版本从默认的 TLSv1.2 改为 TLSv1.1。
- 接口调用方将 jdk 升级为 1.8,考虑本项目升级较为困难,可以在中间加一层系统进行接口转发。
NoClassDefFoundError
ClassNotFoundException | NoClassDefFoundError |
---|---|
从java.lang.Exception继承,是一个Exception类型 | 从java.lang.Error继承,是一个Error类型 |
当动态加载Class的时候找不到类会抛出该异常 | 当编译成功以后执行过程中Class找不到导致抛出该错误 |
一般在执行Class.forName()、ClassLoader.loadClass()或ClassLoader.findSystemClass()的时候抛出 | 由JVM的运行时系统抛出 |
具体请参阅:ClassNotFoundException和NoClassDefFoundError的区别
生产问题
cpu 飙升问题定位
引发 cpu 飙升的原因
java 进程
-
原因
- 循环过久甚至死循环
- GC 频繁
-
问题定位
- 使用 top 命令查看进程的 cpu 使用情况,获取需要分析的进程 PID
- 在使用
top -Hp PID
分析进程中线程的 cpu 使用情况,获取道需要分析的线程号
注意:线程号为十进制的数值,需要将其转换为十六进制printf "%x\n" 30309
- 使用
jstack -l
命令将快照信息输入到指定文件中,再进一步分析
jstack -l xxxx > ./jstack_result.txt
-
资料
- top 命令
- https://blog.csdn.net/langzi6/article/details/124805024?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168353642416800211554221%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=168353642416800211554221&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_positive~default-1-124805024-null-null.142v86insert_down1,239v2insert_chatgpt&utm_term=top&spm=1018.2226.3001.4187
- https://blog.csdn.net/yangjnsjbad/article/details/125757084?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168353653716800227449292%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=168353653716800227449292&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduend~default-1-125757084-null-null.142v86insert_down1,239v2insert_chatgpt&utm_term=top%20-Hp&spm=1018.2226.3001.4187
- cpu 飙升场景
- https://blog.csdn.net/u012756916/article/details/129907139?ops_request_misc=&request_id=&biz_id=102&utm_term=cpu%E9%A3%99%E5%8D%87%E7%9A%84%E5%87%A0%E7%A7%8D%E5%9C%BA%E6%99%AF&utm_medium=distribute.pc_search_result.none-task-blog-2allsobaiduweb~default-0-129907139.142v86insert_down1,239v2insert_chatgpt&spm=1018.2226.3001.4187
- top 命令