读【Java代码与架构师之完美优化——实战经典】分享笔记

这可能是我第一次写读技术书籍的分享的文章,也是2022年新的一年第一篇文章,无论你在哪里读到此笔记,都是有缘千里来相会,再次感谢!

关于作者:

此书于作者颜廷吉著,耗时2年,作者借助自己10年一线的实战经验、在日本求学获得代码优化及品质管理培训技术资料,同时参考大量文献以及各种博客等优质网络资源,借助Checkstyle 134例、FindBugs 408例、PMD 368例代码规范工具,最终问世本书。

关于适用人群:

一百个读者就有一百个哈姆雷特,但以我自己的角度分析,此书既适用于初出茅庐的开发小伙伴,便于快速建立起自己的代码友好规约。同时也适用于行走江湖多年的老前辈,可能你一天就可以完成阅读,但整本书下来,对你的知识巩固以及程序友好化编写,都会有些许提升,这也是我一天读完此书后想做笔记的一个想法——无论啥书籍,及时给人印象最坏的书籍,除了耗费你的时间外,总会有或多或少的收获。

书籍篇章结构:

整本书围绕以下几点进行挑精进行讲解:
读【Java代码与架构师之完美优化——实战经典】分享笔记_第1张图片
从目录结构就可以看出,作者的初衷,要有扎实的理论知识,才能进一步进行代码优化方面的工作。
由于时间关系,我想以自己阅读中给我印象最深受益最多的地方挑选的给大家。

第1章 代码质量

软件质量是满足客户软件需求的能力,代码质量是满足软件质量的先决条件!
那如何提高代码质量呢?有如下两种手段:
1、精细测试,为外部表现。
2、代码检查,为内部功底。
这两句话,必须每位立志成为架构师的你,随时铭刻在心。
我听说过有这样一位程序员,他说,他编写代码有时能体会到上帝造物的感觉(对客户需求的满足),也能体会到别的程序员的心声(对既存代码的理解)......

第2章 代码质量静态检查工具

代码分析技术分为:
1、静态分析:对程序代码的检查。
2、动态分析:程序运行时检查,着重于内存、性能和资源。
大家可以常用Checkstyle+FindBugs工具,一个偏重代码编写风格,一个偏重发现代码缺陷,黄金搭档。

第3章 代码优化通用准则

以下准则,是作者从业多年精心挑选告诫大家务犯的点:
1、避免使用空类(就是除了类的定义或默认结构方法以外没有任何其他代码的类)【建议】
2、去掉多余的import(就是类头部,不要存在各种多余或者无用的import)【强制】
3、去掉你复制粘贴过来的无用代码(就是你从其他地方拷贝过来的那些代码,存在没涉及的就不要保留了,容易后面自己都不知道是什么)【强制】
4、需要制定命名体系规约(就是变量名、方法名、类名、包名等,都需要规范)【强制】
5、去掉重复代码(有多个地方使用的重复的代码块,就抽离出来吧)【强制】
6、使用switch语句,不要省略break或者default语句(就是字面意思,容易出现跨越分支情况)【强制】
7、用大写L代替小写l(l真的和1很像)【建议】
8、避免在一条语句中声明或赋值多个变量(可读性和测试性大大降低,别省这个事了)【建议】
9、避免赋予临时变量过多的角色(就是同一个方法内,不要定义一个临时变量来干多件事)【建议】
10、尽量使用Enum代替Integer类型码常量(枚举你不用不知道它有多香)【建议】
11、避免使用复杂条件式或分支(就是如果多个条件在同一行或同一个代码块,最好进行拆分)【建议】
12、不要在用正则表达式避开它(就是需要熟悉正则语法,知晓度娘常涉及的正则表达式)【强制】

第4章 方法优化技巧

1、最小优化原则(设计的类,pulic、protected、private、friendly这些修饰符,要慎用,该怎么用就怎么用)【强制】
2、hasCode和equals是孪生兄弟(就是需要一起被重写,出生入死)【强制】
3、str.equals("xx")要谨慎(就是这种用法容易报异常,最好使用"xx".equals(str))【建议】
4、实现方法需要检查参数的有效性(字面意思哦)【建议】
5、避免使用可变参数(虽然可变参数好处多,但一个通用性太强的参数方法,往往会带来使用时的潜在风险)【建议】
6、避免超过7个的过长参数方法(就是如果参数超过7个,就需要考虑使用对象来传递了)【建议】
7、避免使用过时的API(字面意思,这些api肯定有新的可以进行替代,性能安全各方面会更加得到保障)【建议】
8、避免重复发明轮子(比如判断字符串是否空,人家commons-lang.jar包早有了,而且比你写的可靠,commons-beanutils.jar是Bean工具包,commons-collections.jar是集合处理工具包,joda-time.jar是时间处理工具包,处理国际化日期的优雅包)【建议】
9、对臃肿的代码需要瘦身(字面意思)【建议】

第5章 如何保证多线程代码质量

1、不要重写start()方法(你重写了调用就只是单纯调用此方法了,好好的干嘛重写)【强制】
2、避免使用非线程安全的初始化方法(比如单例模式的饿汉式,会使用synchronized同步锁)【强制】

第6章 如何优化类与接口

1、避免创建不必要的对象(这个就是字面意思,既降低程序性能,又占用堆内存)【强制】
2、需要对臃肿的类进行手术(怎么个手术法,就仁者见仁智者见智)【强制】
3、避免在接口中实现代码(接口是一种契约,非必要情况下,就只是当做对实现者的一个约束)【强制】

第7章 如何正确使用异常

1、避免定义继承Error或Throwable子类(这是明文禁止,可以使用继承Exception)【强制】
2、避免抛出RuntimeException或Exception(不要抛一个总的异常出来,需要细化到是什么异常)【建议】
3、避免在finally块中处理返回值(finally块内代码是必然执行的,在这里处理,容易覆盖块外的值)【建议】
4、将优雅的异常信息反馈给用户(默认的异常信息是给程序员看的,我们需要包装好它进行返回给用户)【强制】

第8章 如何优化代码性能

1、避免在大量的字符串拼接时用“+”(这个性能真的很差,用StringBuild或StringBuffer吧)【强制】
2、避免在循环体内生成临时对象(字面意思)【强制】
3、在文件操作后要进行清理动作(就是用完要关闭资源)【强制】

第9章 架构优化

1、单一职责原则
2、接口隔离原则
3、依赖倒置原则
4、里氏替换原则

其他章节涉及项目包的优化以及代码风格借助工具模板的优化,这些相信大家每个公司都有对应的规约,就不一一列举了。

在此接近尾声,也希望这篇文章对你有所收获,下次再见!

你可能感兴趣的