阿里java开发手册重点记录

编程规约

1、POJO 类中布尔类型的变量,都不要加 is,否则部分框架解析会引起序列化错误。
2、避免通过一个类的对象引用访问此类的静态变量或静态方法,无谓增加编译器解析成本,直接用类名来访问即可。
3、所有的覆写方法,必须加@Override 注解。作用一是检测覆写方法签名一致无差异,二是当抽象类方法签名更改时报错提示开发者同时修改实现。
4、Object 的 equals 方法容易抛空指针异常,应使用常量或确定有值的对象来调用equals。
5、循环体内,字符串的连接方式,使用 StringBuilder 的 append 方法进行扩展。若使用String赋值,则会多次创建新的String对象,造成过多资源占用。
6、类成员与方法访问控制从严,过于宽泛的访问范围,不利于模块解耦,同时也会无谓拓宽编码时思考范围。
7、不要在 foreach 循环里进行元素的 remove/add 操作。remove 元素请使用 Iterator方式,防止出现ConcurrentModificationException。
8、获取单例对象需要保证线程安全,其中的方法也要保证线程安全(Controller为单例模式,因其内部不定义成员变量。若非要定义则需将@scope改为prototype)。
9、避免 Random 实例被多线程使用,虽然共享该实例是线程安全的,但会因竞争同一seed 导致的性能下降。
10、将复杂逻辑判断的结果赋值给一个有意义的布尔变量名,以提高可读性。
11、类、类属性、类方法的注释必须使用 Javadoc 规范,使用/*内容/格式,以便生成到html文件中,不得使用// xxx 方式。

异常日志

1、try-catch代码块尽量小,区分稳定代码块和非稳定代码块。
2、finally 块必须对资源对象、流对象进行关闭,有异常也要做 try-catch。
3、不能在 finally 块中使用 return,finally 块中的 return 返回后方法结束执行,不会再执行 try 块中的 return 语句。
4、避免出现重复的代码(Don’t Repeat Yourself),即 DRY 原则。随意复制和粘贴代码,必然会导致代码的重复,在以后需要修改时,需要修改所有的副本,容易遗漏。必要时抽取共性方法,或者抽象公共类,甚至是组件化。
5、谨慎地记录日志。生产环境禁止输出 debug 日志;有选择地输出 info 日志;如果使用 warn 来记录刚上线时的业务行为信息,一定要注意日志输出量的问题,避免把服务器磁盘撑爆,并记得及时删除这些观察日志。
6、避免重复打印日志,浪费磁盘空间,务必在 log4j.xml 中设置 additivity=false。

单元测试

1、对于单元测试,要保证测试粒度足够小,有助于精确定位问题。单测粒度至多是类级别,一般是方法级别。
2、单元测试代码必须写在如下工程目录:src/test/java,不允许写在业务代码目录下。
3、对于不可测的代码建议做必要的重构,使代码变得可测,避免为了达到测试要求而书写不规范测试代码。

安全规约

1、用户输入的 SQL 参数严格使用参数绑定或者 METADATA 字段值限定,防止 SQL 注入,禁止字符串拼接 SQL 访问数据库。
2、用户敏感数据禁止直接展示,必须对展示数据进行脱敏。
3、禁止向 HTML 页面输出未经安全过滤或未正确转义的用户数据。

Mysql数据库

1、表达是与否概念的字段,必须使用 is_xxx 的方式命名,数据类型是 unsigned tinyint( 1 表示是,0 表示否)。
2、表名、字段名必须使用小写字母或数字,禁止出现数字开头,禁止两个下划线中间只出现数字。数据库字段名的修改代价很大,因为无法进行预发布,所以字段名称需要慎重考虑。
3、varchar 是可变长字符串,不预先分配存储空间,长度不要超过 5000,如果存储长度大于此值,定义字段类型为 text,独立出来一张表,用主键来对应,避免影响其它字段索引效率。
4、表必备三字段:id, gmt_create, gmt_modified。
5、单表行数超过 500 万行或者单表容量超过 2GB,才推荐进行分库分表。
6、业务上具有唯一特性的字段,即使是多个字段的组合,也必须建成唯一索引。
7、不要使用 count(列名)或 count(常量)来替代 count(),count()会统计值为 NULL 的行,而 count(列名)不会统计此列为 NULL 值的行。
8、不得使用外键与级联,一切外键概念必须在应用层解决。
9、数据订正时,删除和修改记录时,要先 select,避免出现误删除,确认无误才能执行更新语句。
10、POJO 类的布尔属性不能加 is,而数据库字段必须加 is_,要求在 resultMap 中进行字段与属性之间的映射。
11、sql.xml 配置参数使用:#{},#param# 不要使用${} 此种方式容易出现 SQL 注入。
12、更新数据表记录时,必须同时更新记录对应的 gmt_modified 字段值为当前时间。

你可能感兴趣的:(阿里java开发手册重点记录)