Java开发中避免踩坑的建议

一、遇到自己不熟悉的新类,在不了解之前不要随意使用。

如CopyOnWriteArrayList,在不知晓原理之前用它大量写操作的场景解决ArrayList的线程安全,那么很可能遇到性能问题。

二、尽量使用更高层次的框架。

三、关注各种框架和组建的安全补丁和版本更新。

四、尽量少自己造轮子,使用流行的框架。

比如,直接使用 JDK NIO 来开发网络程序或网络框架的话,我们可能会遇到 epoll 的 selector 空轮询 Bug,最终导致 CPU 100%。而 Netty 规避了这些问题,因此使用 Netty 开发 NIO 网络程序,不但简单而且可以少踩很多坑。

五、开发的时候遇到错误,除了搜索解决方案外,更重要的是理解原理。

只有知其所以然,才能从根本上避免踩坑。

六、网络资料很多,但不一定可靠,最可靠的还是官方文档。

网上的各种资料,大家自己学习分享的经验和心得,不一定都是对的。不一定会面面俱到地考虑到资源释放、并发等问题。

七、做好单元测试和性能分析。

许多坑都涉及线程安全、资源使用,这些问题只有在高并发的情况下才会产生。没有经过性能测试的代码,只能认为是完成了功能,还不能确保健壮性、可扩展性和可靠性。

八、做好设计评审和代码审查工作。

比如,对于熟悉 IO 的开发者来说,他肯定知道文件的读写需要基于缓冲区。如果他看到另一个同事提交的代码,是以单字节的方式来读写文件,就可以提前发现代码的性能问题。

又比如,一些比较老的资料仍然提倡使用MD5 摘要来保存密码。但是,现在 MD5 已经不安全了。

九、借助工具帮我们避坑。

比如,使用 YYYY 进行日期格式化的坑、使用 == 进行判等的坑、List.subList原 List 和子 List 相互影响的坑等,都可以通过阿里 P3C 代码规约扫描插件发现。

还建议在 CI 流程中集成Sonarqube代码静态扫描平台,对需要构建发布的代码进行全面的代码质量扫描。

十、做好完善的监控报警。

诸如内存泄露、文件句柄不释放、线程泄露等消耗型问题,往往都是量变积累成为质变,最后才会造成进程崩溃。如果一开始我们就可以对应用程序的内存使用、文件句柄使用、IO 使用量、网络带宽、TCP 连接、线程数等各种指标进行监控,并且基于合理阈值设置报警,那么可能就能在事故的婴儿阶段及时发现问题、解决问题。

 

原文链接:https://time.geekbang.org/column/article/209108

posted @ 2022-08-09 15:17  白玉神驹  阅读(78)  评论(0编辑  收藏  举报