1.常量接口不应该被效仿
在接口中定义常量可以使得实现类中很方便的使用这些常量,但是这是不规范的
首先接口是面向api的,实现一个常量接口会导致实现细节泄露到类的到处api中
其次,如果一个非final类实现了常量接口,那么它的所有子类的命名空间都会被接口中
的常量污染
2.谨慎使用接口默认方法
比如Colleciton中后期增加了removeif这个方法,并提供了默认实现,但是某些同步实现类中
并不能感知到这种改变,那么在使用同步类中的removeif方法时就会暴露问题。
3.非静态内部类会持有外部类的引用,所以如果内部类没有被回收,外部类也不会被回收
尽量使用静态内部类
4.httpclient连接池设置首先tcp设置可以重用wait_time状态的端口,这个参数是net.ipv4.tcp_tw_reuse=1(默认为0)
timewait状态是在客户端主动断开连接后,但是他不相信客户端已断开,所以会发送试探报文,一般会发送两次,
所以timewait状态的时间一般是两个MSL时间(最大报文段生存时间),linux下MSL一般为60s
5.mysql的可重复读解决了幻读问题吗?
1我们执行事务1 ,select * from user -> 查询出1条结果
2执行事务2,insert into user values(...) 并提交
3继续事务1 ,select * from user 发现还是只有1条结果
貌似mysql的mvcc解决了幻读问题,但是如果我们在事务1的第二步执行set操作,会发现事务1 吧事务2 插入的那一条数据
也修改了,就说明可重复度只解决了读的幻读问题,对于修改的幻读问题还是存在的,那么这种情况下可以通过两种方式
解决:1修改为序列执行事务2通过间隙锁来解决,也就是在事务1 的select操作中,将事务2插入的数据包含在事务1的查询中
通过id > 1这种方式