Java Web技术经验总结(十一)

Java Web技术总结(目录) - 简书
http://www.jianshu.com/p/539bdb7d6cfahtml

Java Web技术经验总结(一)
Java Web技术经验总结(二)
Java Web技术经验总结(三)
Java Web技术经验总结(四)
Java Web技术经验总结(五)
Java Web技术经验总结(六)
Java Web技术经验总结(七)
Java Web技术经验总结(八)
Java Web技术经验总结(九)
Java Web技术经验总结(十)
Java Web技术经验总结(十一)
文/杜琪(简书做者)原文连接:http://www.jianshu.com/p/539bdb7d6cfa著做权归做者全部,转载请联系做者得到受权,并标注“简书做者”。git


Java Web技术经验总结(十一) - 简书
http://www.jianshu.com/p/08e36f5ba119
Git工做流:Git 工做流程
Maven版本管理:阅读Maven最佳实践:版本管理
lombok project,在Java开发中,咱们经常须要写不少使人厌烦的getter/setter代码、须要本身覆盖equals、toString和hashcode等方法,不胜其烦且容易出错。lombok就是为此而生的,经过给bean类添加一些注解,能够自动生成上述函数。不过在我过去的开发中,若是须要定制本身的equals方法,我经常使用Apache Commons中提供的EqualsBuilder和HashCodeBuilder两个类,参考:Java 中正确使用 hashCode 和 equals 方法。PS:lombok我刚刚接触,还不清楚它是否也有定制具体实现的功能;PS2:在IDEA中使用lombok须要安装对应的插件,参考:lombok在IntelliJ IDEA下的使用
MySQL的主从延迟和解决方案:MySQL主从数据库同步延迟问题解决
来自《Effective Java》中的第6条规则:内存泄漏的另外一个来源是缓存。一旦你将对象引用放在缓存中,它就很容易被忘掉,从而使得它在再也不有用以后很长一段时间仍然留在缓存中。这种状况下,可使用WeakHashMap表明缓存,只要在缓存外存在某个像的键的引用,该项就有意义;当缓存项的键的生命周期结束后,该项也会自动被删除。关于WeakHashMap,能够参考这篇文章:深刻理解WeakHashMap
关于Code Review的一篇文章:说说Code Review,其中不只讲了code review,还讲了带新人的方法。另外,关于这个主题,能够参考《Clean Code》和《重构》这两本书。
实现分布式锁的方法,这篇文章讲得很详细:分布式锁1 Java经常使用技术方案
使用Intelij IDEA中的git插件进行分支合并的步骤(例如:branch1合并到branch2):
切换到目标分支,branch2
在右下角git快捷窗口——>branch1——>merge,就会将branch1合并到branch2。spring

2569324-04447f52a8d43741.png
快捷合并分支1

2569324-582d42b3f315bbf4.png

分支合并结果数据库

这两天遇到一个业务场景:一个数据库修改的请求,客户端因为历史缘由,常常会发出两个彻底相同的请求,致使服务端发生惟一键冲突。为了解决这个问题,咱们决定使用分布式锁解决这个问题,在进行数据库插入操做以前要先拿分布式锁,拿到锁之后也要先检查数据库,没有的话再插入数据。我在测试的时候发现分布式锁不起做用,先是觉得本身的锁有问题,排除这个问题以后,开始回顾以前的代码。发现一个坑:原有的代码在接口定义层用了@Transactional注解,Spring中的事务是基于AOP实现的,若是在RPC接口使用事务注解,那么事务会在RPC接口返回以后才会提交。能够看出,当事务的范围大于同步代码块的范围时会有问题。A请求释放了锁,可是它的事务尚未提交;B请求已经拿到了锁,可是看不到A请求的事务修改的东西,致使脏读。关于Spring中的事务,能够参考官方文档。个人经验是:(1)只有某个业务要求同时修改两张以上的表的数据的时候,再使用事务,而且要在方法级别使用;(2)事务和同步代码块不可嵌套使用。缓存

文/杜琪(简书做者)原文连接:http://www.jianshu.com/p/08e36f5ba119著做权归做者全部,转载请联系做者得到受权,并标注“简书做者”。intellij-idea