第11章:序列化

74. 谨慎地实现Serializable接口

实现序列化接口带来的问题:

灵活性:实现序列化接口会导致程序发布后灵活性变差(导出后要永远支持这种序列化形式)。

安全性和BUG:增加了BUG和安全漏洞的可能性:反序列化机制是一个“隐蔽的构造器”。依靠默认的反序列化机制,很容易使对象的约束关系遭到破坏,以及遭到非法访问

测试负担:随着类发型新的版本,相关的测试负担也增加了。

最佳实践:为了继承而设计的类,应尽可能少地去实现序列化接口。

75. 考虑使用自定义序列化形式

76. 保护性地编写readObeject方法

针对74条中的安全性问题,可以使用readO......

第10章:并发

这一章还是比较简单。因为之前看过并发编程实战这本书的内容。如果需要完整了解并发,还是需要看下那本书。

66. 同步访问共享的可变数据

67. 避免过度同步

在同步区域内做尽量少的工作。例如调用外星方法以及引用可变对象都会造成线程不安全。

68. executor和task优先于线程

自己去通过Thread编写多线程任务是不太好的,因为要考虑很多细节。采用并发包中的ExecutorService来管理线程任务是最佳实践

69. 并发工具优先于wait和notify

并发操作,都优先使用并发包里面的工具和数据结构。

70. 线程安全性的文档化

提供一些线程......

第8章:通用程序设计

45. 将局部变量的作用域最小化

在第一次使用它的地方声明

46. for-each循环优于传统的for循环

性能更好;

避免使用iterator时候产生的一些迭代问题

以下情况无法使用for-each

过滤:需要在遍历时删除元素

转换

平行迭代

47. 了解和使用类库

避免重复造轮子

48. 需要精确的答案,避免使用float和double

货币计算可以使用BigDecimal、int和long

49. 基本类型优于装箱基本类型

避免对象的NullPointerException方法,同时性能也会好点

50. 如果其他类......