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