前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java Web技术经验总结(十一)

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

作者头像
阿杜
发布2018-08-06 11:33:52
5430
发布2018-08-06 11:33:52
举报
文章被收录于专栏:阿杜的世界
  1. Git工作流:Git 工作流程
  2. Maven版本管理:阅读Maven最佳实践:版本管理
  3. 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下的使用
  4. MySQL的主从延迟和解决方案:MySQL主从数据库同步延迟问题解决
  5. 来自《Effective Java》中的第6条规则:内存泄漏的另一个来源是缓存。一旦你将对象引用放在缓存中,它就很容易被忘掉,从而使得它在不再有用之后很长一段时间仍然留在缓存中。这种情况下,可以使用WeakHashMap代表缓存,只要在缓存外存在某个像的键的引用,该项就有意义;当缓存项的键的生命周期结束后,该项也会自动被删除。关于WeakHashMap,可以参考这篇文章:深入理解WeakHashMap
  6. 关于Code Review的一篇文章:说说Code Review,其中不仅讲了code review,还讲了带新人的方法。另外,关于这个主题,可以参考《Clean Code》和《重构》这两本书。
  7. 实现分布式锁的方法,这篇文章讲得很详细:分布式锁1 Java常用技术方案
  8. 使用Intelij IDEA中的git插件进行分支合并的步骤(例如:branch1合并到branch2):
  • 切换到目标分支,branch2
  • 在右下角git快捷窗口——>branch1——>merge,就会将branch1合并到branch2。

快捷合并分支1

分支合并结果

  1. 这两天遇到一个业务场景:一个数据库修改的请求,客户端由于历史原因,经常会发出两个完全相同的请求,导致服务端发生唯一键冲突。为了解决这个问题,我们决定使用分布式锁解决这个问题,在进行数据库插入操作之前要先拿分布式锁,拿到锁以后也要先检查数据库,没有的话再插入数据。 我在测试的时候发现分布式锁不起作用,先是以为自己的锁有问题,排除这个问题之后,开始回顾之前的代码。发现一个坑:原有的代码在接口定义层用了@Transactional注解,Spring中的事务是基于AOP实现的,如果在RPC接口使用事务注解,那么事务会在RPC接口返回之后才会提交。可以看出,当事务的范围大于同步代码块的范围时会有问题。A请求释放了锁,但是它的事务还没有提交;B请求已经拿到了锁,但是看不到A请求的事务修改的东西,导致脏读。 关于Spring中的事务,可以参考官方文档。 我的经验是:(1)只有某个业务要求同时修改两张以上的表的数据的时候,再使用事务,并且要在方法级别使用;(2)事务和同步代码块不可嵌套使用。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016.08.23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 MySQL
腾讯云数据库 MySQL(TencentDB for MySQL)为用户提供安全可靠,性能卓越、易于维护的企业级云数据库服务。其具备6大企业级特性,包括企业级定制内核、企业级高可用、企业级高可靠、企业级安全、企业级扩展以及企业级智能运维。通过使用腾讯云数据库 MySQL,可实现分钟级别的数据库部署、弹性扩展以及全自动化的运维管理,不仅经济实惠,而且稳定可靠,易于运维。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档