Java 开发手册笔记

Java 开发手册笔记 前言 【Java 开发手册笔记】阿里规范手册看过之后,实际开发中还是难免按照规范编码,有空还是得反复看下。实际中可以给IDEA安装对应插件扫描代码。文末指出相关插件。
编程规约

  1. POJO类中布尔类型的变量都不要加is前缀,否则部分框架会引起序列化错误。
  2. 杜绝不规范的缩写,避免词不达义。
  3. if / for / while / switch /do 等保留字与括号之前都必须加空格。
  4. 运算符左右两边都需要加一个空格。
  5. 不同逻辑、不同语义、不同业务的代码之间插入一个空行分隔开来,以提升可读性。
  6. 不能使用过时的方法。
  7. 所有相同类型的包装类对象之间指的比较,全部使用equals方法。
  8. Object的equals方法容易抛空指针异常,应使用常量或确定有值的对象来调用equals
  9. 所有的POJO类属性必须使用包装数据类型。
  10. 只要重写equals,就必须要重写hashCode。
  11. 在创建线程或者线程池,请指定有意义的线程名称。
  12. 线程资源必须通过线程池提供,不允许在应用中自行显示创建线程。
  13. 在高并发场景中,同步调用应该去考量锁的性能损耗。能用无锁数据结构,就不用用锁;能锁区块就不要锁整个方法体;能用对象锁,就不用类锁。
  14. 在并发修改同一记录时,为避免更新丢失,需要加锁。要么在应用层加锁,要么在缓存层加锁,要么在数据库层使用乐观锁,使用version作为更新依据。
  15. 在 if / else / for / while / do 语句中,必须使用大括号。即使只有一行代码,也应避免采用单行的编码方式。
  16. 在高并发场景中,避免使用“等于”判断作为中断或退出的条件。
  17. 类、类属性、类方法的注释必须使用Javadoc规范。
  18. 所有的类必须添加创建者和创建日期
  19. 所有的枚举类型字段都必须要有注释,说明每个数据项的用途。
  20. 在修改代码的同时,要对注释进行相应的修改,尤其是参数、返回值、异常、核心逻辑等修改。
  21. 及时清理不在使用的代码段或配置信息。
异常日志
  1. Java类库中定义的可以通过预检查方式规避的RuntimeException不应该通过catch的方式来处理,如:IndexOutOfBoundsException,NullPointerException等。
  2. 异常不要用来做流程控制、条件判断。
  3. 捕获异常是为了处理它,不要捕获了却设呢都不处理而抛弃之,如果不想处理它,请将该异常抛给它的调用者。最外层的业务使用者必须处理异常,将其转化成用户可以理解的内容。
  4. 应用中不可直接使用日志系统(Log4j、Logback)中的API,而应依赖使用日志框架SLF4J中的API。使用门面模式的日志框架,有利于维护和各个类的日志处理方式统一。
  5. 对trace/debug/info级别的日志输出,必须使用条件输出形式或者占位符的方式。
  6. 异常信息应该包括两类:案发现场信息和异常堆栈信息。如果不处理,那么通过关键字throws往上抛出。
单元测试
  1. 单元测试中不准使用System.out进行人肉验证,必须使用assert验证。
  2. 保证单元测试的独立性。为了保证单元测试稳定可靠且便于维护,单元测试用例之间绝不能相互调用,也不能以来执行的先后次序。
  3. 单元测试是可以重复执行的,不能收到外界环境的影响。
  4. 对于单元测试,要保证测试粒度足够小,有助于精确定位问题。单元测试粒度至多是类级别,一般是方法级别。
  5. 核心业务、核心应用、核心模块的增量代码确保单元测试通过。
  6. 单元测试的基本目标;语句覆盖率达到70%;核心模块的语句覆盖率和分支覆盖率都要达到100%。
  7. 和数据库相关的单元测试,可以设定自动回滚机制,不给数据库造成脏数据。或者对单元测试产生的数据有明确的前后缀标识。
安全规约
  1. 隶属于用户个人的页面或者功能必须进行权限控制校验。
  2. 用户敏感数据禁止直接展示,必须对展示数据进行脱敏。
  3. 用户输入的SQL参数严格使用参数绑定或者METADATA字段值限定,防止SQL注入,禁止字符串凭借SQL访问。数据库。
MYSQL数据库
  1. 表达是与否概念的字段,必须使用is_XXX的方式命名,数据类型unsingned tinyint(1标识是,0标识否)。
  2. 禁用保留字。
  3. 小数类型为decimal,禁止使用float和double。
  4. 如果存储的字符串长度几乎相等,则应使用char定长字符串类型。
  5. 当单表行数超过500万行或者单表容量超过2GB时,才推荐进行分库分表。
  6. 业务上具有唯一特性的子弹,即使是多个字段的组合,也必须建成唯一索引。
  7. 超过三个表禁止join。需要join的字段,数据类型必须绝对一致;当多表关联查询是,保证被关联的字段需要有索引。
  8. 不要使用count(列名)或count(常量)来替代count(*),count(*)统计行数跟数据库无关,跟NULL和非NULL无关。
  9. 使用ISNULL()来判断是否有空指。
  10. 不得使用外键与级联,一切外键概念必须在应用层解决。
  11. 数据订正(修改,删除记录)时,要先select,避免出现误删除,确认无误才能执行更新语句。
  12. 在表查询中,一律不要使用*作为查询的字段列表,需要哪些字段必须明确写明。
  13. sql.xml配置参数使用#{},#param#,不要使用${},此种方式容易出现SQL注入。
相关插件 IDEA比较常用的两种规范插件:
  • 阿里开发手册对应的p3c插件:按照手册扫描代码,扫出不规范的地方。
  • FindBugs:帮助查找代码中隐藏的bug。

    推荐阅读