第五章 格式算法
5.1 垂直分布 调用者函数方法应该尽可能在被调用者函数方法之上,挨着比较好。 注意缩进。spring
第六章 对象和数据结构编程
6.1 尽可能封装对象传参,安全
第七章 错误处理数据结构
7.1 上游try catch finally 下游throw 会使得代码整洁,根据状况而定 尽可能不让null进入程序并发
第八章 边界函数
8.1 集合尽可能使用泛型工具
8.2 使用API能够多写测试用例,方便新版本发布的时候运行下看看新旧版本的差别作出更新,使用新API的能力。单元测试
8.3 善于利用桥接模式在不给API文档的时候写好接口,实现类能够等给了接口写。测试
第九章 单元测试
9.1 快速 独立 可重复 自足验证 及时
第十章 类
10.1 单一职责 内聚 对修改封闭,对添加开放
第十一章 系统
11.1 最好的集成方法是无侵入式集成,可插拔式集成。springaop切面就作的很好。 最好的系统就是代码尽可能简洁。
第十二章 跌进
12.1 单一职责很重要。 类尽可能小聚合,保持类方法尽可能少
第十三章 并发编程
13.1 对象是过程的抽象,线程是调度的抽象。
13.2 单一权责原则 分离并发和和其余代码; 限制数据做用域 如:synchronized关键字; 使用数据副本; 线程应尽量的独立
13.3 线程执行模型:
13.4 锁的使用:
警戒同步方法之间的依赖
13.5 保持同步区域微小
13.6 很难编写正确的关闭代码
第十四章 逐步改进
14.1 代码整洁
代码重构,在于一直更新本身很差的代码趋向于本身认为的完美。 时刻保持本身代码的整洁。
第十五章 JUnit内幕
全部代码都能重构的比以前更好,要推翻以前的不断试错,不断更新才能更好。
第十六章 重构 SerialDate
代码不合理的须要迁移。
第十七章 味道与启发
17.1 注释简洁明了,没用的注释别写,过时的删除,多些一些代码中没有的可是须要注意的细节。
17.2 把多部才能实现的构建最好整成一歩,多步才能作到的测试整成一步。
17.3 函数 参数超过3个就须要考虑是否该改造方法了,最好是没有参数的方法,输出参数最好不要有,好比能够用改对象的状态来作替代,标识参数也很让人迷惑,违反了单一职责原则,应当消灭它,死函数就要删除,代码管理工具能够作找回。
17.4 通常性问题 一个文件中最好语言统1、不能忽视安全、避免重复、 抽象层级注意正确性、基类不能依赖于派生类、信息不能过多、死代码记得删除、垂直分隔关联代码少于100行代码、先后一致、混淆视听避免、人为耦合注意、特性依赖不应有、选择算子参数、晦涩的意图须要注释、位置放对地方、恰当的静态方法、使用解释性变量、函数名称应该表达其行为、理解算法、把逻辑依赖改成物理依赖、用多态替代if/else 或 switch/case、遵循标准约定、用命名常量替代魔法值、准确、结构甚于约定、封装条件、避免否认性条件、函数只该作一件事、掩蔽时序耦合、别随意、封装边界条件、函数应该只在一个抽象层级上、在较高层级放置可配置数据、避免传递浏览、合理使用通配符、不要集成常量、而是该导入常量类、采用描述性名称、名称应该与抽象层级相符、尽量使用标准命名法、无歧义的名称、为较大做用范围选用较长名称 、避免编码、名称应该说明反作用。
17.5 测试 别略太小测试、使用覆盖率工具、被忽略的测试就是对不肯定事物的疑问、测试边界条件、全面测试相近的条件、测试失败的模式有启发性、测试覆盖率的模式有启发性、测试应该快速。
附录A 并发编程 II
死锁:1. 互斥 2. 上锁及等待 3. 无抢先机制 4. 循环等待
避免死锁: 1. 不互斥 几乎不可能,大多数资源都有上限 2. 不上锁及等待,可能会引发线程饥饿或者活锁。 3. 知足抢先机制,管理请求复杂。 4. 不作循环等待,若是获取资源的顺序和使用资源的顺序不匹配也就没法知足,或者没法获取资源顺序那么这个条件也没法知足。