今天看到一篇非常好的文章,结合最近遇到的一些小问题,正好总结一下。

这里可以下载,还有一个插件,可以帮助检查代码规范。在文档中都有。

遇到的一些总结,这是已经遇到问题:

  1. Git每次提交代码钱,都需要 合一下最新的Master或者Dev的代码

  2. 对于所有的冲突,一定要好好检查冲突代码,不允许强制覆盖

  3. 每次提交代码之前,必须diff检查review所有修改的代码,仔细查看问题

  4. 使用idea fix所有warning,这个非常重要

  5. 删掉无用的代码,被注释的代码或者所有 容易产生误解的注释

  6. 捕捉到的异常,坚决不允许不作任何处理截断

  7. 调用equals方法时,一定要注意比较的类型。调用Map.get方法也需要注意类型。

  8. 枚举类型的使用

  9. final关键字的使用

  10. Pojo类必须重写ToString方法

  11. 严格控制访问范围,需要手动写明。

    工具类不允许出现publicdefault构造方法

    类static成员变量如果仅在奔雷使用,必须是pricate

    任何类、方法、参数、变量,严格控制范围。过于宽泛的访问范围,不利于模块解耦。

  12. 避免Random实例被多线程使用,虽然该共享实例是安全的,但会因为竞争同一个seed导致性能下降。正确的方法应该是使用ThreadLocalRandom实例,具体的可以看:

[这个刚刚用到]: https://stackoverflow.com/questions/363681/how-do-i-generate-random-integers-within-a-specific-range-in-java
  1. 每个switch语句中,case要么通过break/return语句中止,要么注释说明到哪个case为止;在同一个switch块内,都必须包含一个default语句并且放在最后,即使它什么代码也没有

  2. 在if/else中,即使只有一行代码,也许加括号

  3. 下列情形,需要进行参数校验

    • 调用频次低的方法

    • 执行时间开销很大的方法

    • 需要极高稳定性和可用性的方法

    • 对外提供的开放接口,不管是RPC/API/HTTP接口

    • 敏感权限接口

  4. 下面情形,不需要校验

    • 极有可能被循环调用的犯法。

    • 底层调用频度比较高的方法

    • 被声明成private 的方法,自己内部调用

在接下来的工作中需要注意的

  1. 类内方法的定义顺序:共有方法或者保护方法>私有方法>get/set方法

  2. subList场景中,高度注意对原集合元素个数的修改,会告知子列表的遍历、增加、删除均会产生ConcurrentModificationExcption异常

  3. 不要再foreach中进行元素的removeadd操作,remove元素请使用Iterator方式,如果并发操作,还需要对Iterator对象加锁。

  4. 集合初始化时,指定集合初始值大小

  5. 推荐使用 entrySet遍历Map类集合KV,而不是KeySet方式进行遍历。

  6. 利用好set的唯一性,可以快速对一个集合进行去重。

  7. 线程资源必须通过线程池提供,不允许自行创建线程

  8. 线程池不允许使用Executors创建,而要通过ThreadPoolExecutor的方式。

  9. volatile解决多线程内存不可见问题。ThreadLocal无法解决共享对象的更新问题,对象建议使用Static修饰。

  10. 所有的抽象方法,必须加注释

  11. 所有的类必须添加创建者和创建日期

  12. 注意包装类型和基本类型

  13. 抛出异常,优先考虑result方式,封装 code ,message,body等参数

  14. 应用中不可以直接使用日志系统,而应该依赖使用日志框架slf4j的api,有利于维护各个类的日志处理方式统一。

  15. 使用占位符,而不是拼接字符串的方式输出日志

  16. 单元测试

  17. 数据库方面

    • 表名必须小写

    • 小数类型使用decimal

    • 修改字段的,及时更新字段注释

    • 单表行数超过500万行或单表容量超过2GB,才推荐分库分表

    • 合适的字符存储长度。

  18. 不要以为唯一索引影响了insert速度

  19. 利用延迟关联或者子查询优化超多分页场景

  20. 不要用count(列名)来代替count(*)

  21. 不得使用外键和级联,一切外键概念必须在应用层解决

  22. 禁止使用存储过程

  23. in操作能避免则避免,否则不要超过1000个

  24. 如果需要存储表情,使用utfmb4来存储,注意与utf-8的区别