合抱之木,生于毫末;九层之台,起于垒土;千里之行,始于足下。-----------送给在码农之路上搬砖的自己。
总结自己遇见的各种错误,使用的开发中小坑及小技术。
1. equal()方法使用: 使用equal()方法。A.equal(B)时,最好保证A不为空,不然容易造成NPE,其中B可以为空。
2. Long对象不能直接使用==进行比较。需要将其转换成long基本数据类型才能使用==比较。其他的几个原始封装类型也是一样。不转换成基本数据类型只能使用equal()方法进行比较。
3. excel导入批量操作不会很难,导入进行数据的判断通过使用基本的工具类就能解决,比较困难的地方是在将数据插入到数据库中,需要进行各种判断的时候比较麻烦。
4. 每次使用json的时候注意序列化与反序列化的方式是否对的上。
5. 不懂的bug自己超过10min还没有解决就需要问别人了,自己满满琢磨肯定能够解决,但是时间就发的比较多了,可能别人只需要提示一下,你就懂了。
6. 需求分析不懂的地方超过30min还是没有方案的话,就需要跟组长讨论下了
7. Map>中,经过json转换之后,Long类型的key可能会变成String类型。
8. mybatis中需要查询最大的一行或者最小的一行的记录,只需要按照大小顺序查询然后limit 0,1就好。没有那么复杂的查询。
9. 尽量将sql语句写成通用模式,不需要来一个需求写一条sql语句
10. @RequestParam(required = false) Long pitemId,required=false.表示 pitemid不存在实默认为null。pitemid可以不传也可以传,不传的时候不会饱参数不存在的错误,没有传参时默认为null。
11. Object.getObject.getList()这样的写法容易造成NPE问题
12. debug断点不可用的问题,造成断点调试不走断点的原因:1. 代码不是最新的 2. 更新了代码之后没有进行重新编译,itellij认为它不是改动的部分,没有重新编译。 解决方案: 1. 更新下最新代码,然后重新编译项目。
13. Constants常量类中如果只是自己使用的话尽量在类里面当作一个常量,不会暴露给别人使用的枚举常量不要放在domain/common包下。domain/common包下的类是可以暴露出去被其他系统使用。
14. Constants常量使用简单明了且常量必须是大写+下划线的格式
15. javaDoc使用需要严格按照规则使用,不然就别用
16. 代码流程中自己的主服务流程尽量在调用dubbo等服务之前。尤其是在事物中使用。
17. dubbo服务咋使用map等集合框架时,尽量不要在数组中带有null的元素,在dubbo反序列化的时候容易抛出空指针异常,很难检测到。
18. 以后每次涉及到接口的时候,更新接口需要考虑到接口导致状态改变 对C端B端的影响,以及用户(运营/客户)的体验。
19. merge之后。commit之前的回退?使用 git merge --abort
20. commit之后的回退? 缺点没有问题的时候使用 git reset --hard HEAD^
2018-3-5
21. @RequestParam(default = false) Boolean isNew,default=false.表示 isNew没有时默认为false。isNew可以不传也可以传,不传的时候不会报参数不存在的错误,默认为default的值。
22. List teamSpuIds = new ArrayList<>();
wxhcPitemDTOS.forEach(e -> teamSpuIds.add(e.getTeamSpuId()));
java 1.8新引入
23. instanceof 用法 用于 A instanceof B 用于检测A是否属于B类,或者A是否是B的派生类(子类) 。与getClass()有很大的不同
24. @Deprecated
private Long horizonDistributorId;
@Deprecated的使用
25. 写代码不能太心急了
26. 高内聚低耦合的理解
27. 乐观锁/被关锁
28. 以后通过异步实现的功能,都需要进行数据可靠性校验。
29. alibaba java coding guideline
30. 每次详细设计之后 写代码的时候还是出现写的不流畅的情况,都是详细设计没有做好。这才做详细设计还是没有很好的把接口的具体流程写清楚,导致具体写接口的时候还是挡住一会儿。
31. 同步方式/异步方式取舍。如果是用户体验感有需要的话,尽量使用异步方式,异步方式看对数据可靠性的要求进行数据校验;而在关联表中,用户体验没有要求但是对数据可靠性有要求的话,尽量使用同步方式。
32. 将阿里的插件(alibaba java coding guideline)与自己的代码规范结合使用 简直完美。
33. java开发的详细设计中的接口用例是啥?用户操作涉及到与后端数据交互的点击操作就是一个接口用例。
34. 数据库表的数据海量的时候,考虑数据库的拆分,横向拆分/纵向拆分
35. mybatis.xml文件中 一般表中的 创建时间 更新时间这两个字段 可以直接使用 now()方法生成
gmt_modified=now()
‘’‘
is_delete,
gmt_modified,
gmt_create,
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="name != null">
#{name,jdbcType=VARCHAR},
</if>
<if test="platform != null">
#{platform},
</if>
<if test="isDelete != null">
#{isDelete,jdbcType=BIT},
</if>
now(),
now(),
36. 方法拆分的缘由
1. 是不是可以被多次服用
2. 对于代码逻辑理解
37.本地dubbo服务启动慢的原因之一 获取本机的IP地址慢了导致初始化时间延长
com.alibaba.dubbo.config.ServiceConfig类获取host的代码卡住了5秒
if (NetUtils.isInvalidLocalHost(host)) {
anyhost = true;
try {
host = InetAddress.getLocalHost().getHostAddress();
} catch (UnknownHostException e) {
logger.warn(e.getMessage(), e);
}
。。。
请检查vi /etc/hosts 文件127.0.0.0 对应的host名称是否正确。我本机是错误的(因为操作系统升级会改变host名称)
127.0.0.1 your_host_name。