本文共 2149 字,大约阅读时间需要 7 分钟。
阿里巴巴在之前的云栖大会上正式发出了 阿里巴巴Java开发手册. 并发布相关的Idea插件. 具体的信息可以到Github主页 查看. 最近将手册重新学习了一遍, 发现在之前的工程项目里面, 有太多不规范的地方. 将特别注意的地方, 重点标记出来.
- Object 的 equals 方法容易抛空指针异常. 尽量使用, Objects.equals(JDK7进行比较, 匹配).
- 所有的相同类型的 包装类对象之间值的比较,全部使用 equals 方法比较. 否则超过128的时候, 会出现bug.
- RPC方法的返回值和参数必须使用包装数据类型 . 防止初始化, 设置了相应的默认值. 这点非常重要
- 在 getter/setter 方法中,不要增加业务逻辑,增加排查问题的难度. 可以使用lombok依赖包.
- 循环体内,字符串的连接方式,使用 StringBuilder 的 append 方法进行扩展
- ArrayList的subList结果不可强转成ArrayList,否则会抛出ClassCastException 异常,即java.util.RandomAccessSubList cannot be cast to java.util.ArrayList.
- 集合初始化时,指定集合初始值大小。
- 创建线程或线程池时请指定有意义的线程名称,方便出错时回溯.
- 线程资源必须通过线程池 供,不允许在应用中自行显式创建线程. 需要通过线程池进行资源定位.
- 线程池不允许使用 Executors 去创建,而是通过 ThreadPoolExecutor 的方式,这样 的处理方式让写的同学更加明确线程池的运行规则,规避资源耗尽的风险。
- 在一个 switch 块内,都必须包含一个 default 语句并且 放在最后,即使它什么代码也没有
- 尽量避免 if else else if. 超过三层的嵌套使用 卫语句来进行编程.
- 类、类属性、类方法的注释必须使用 Javadoc 规范,使用/*内容/格式,不得使用 // xxx 方式.
- 方法内部单行注释,在被注释语句上方另起一行,使用//注释
- 获取当前毫秒数 System.currentTimeMillis(); 而不是 new Date().getTime();
- 任何数据结构的构造或初始化,都应指定大小,避免数据结构无限增长吃光内存。
- 及时清理不再使用的代码段或配置信息
- 对大段代码进行 try-catch,这是不负责任的表现
- 有 try 块放到了事务代码中,catch 异常后,如果需要回滚事务,一定要注意手动回 滚事务. 这个需要确定如何执行?
- 防止NPE是调用者的责任. 明确出来. 要考虑你使用的对象是否可能为空指针.
- 远程调用的时候, 一律要求进行空指针判断. 防止NPE问题的产生. 防止NPE问题, 可以使用JDK8的 optional. .
- 异常信息应该包括两类信息:案发现场信息和异常堆栈信息.
- 大量地输出无效日志,不利于系统性能 升,也不利于快速定位错误点.
- 好的单元测试必须遵守AIR原则. 必须执行AIR.
- 单元测 试中不准使用 System.out 来进行人肉验证,必须使用 assert 来验证. 单元测试, 是一个重要而不紧急的事情.
- 核心业务、核心应用、核心模块的 增量代码确保单元测试通过
- 在工程规约的应用分层中 到的 DAO 层,Manager 层,可重用度高的 Service,都应该 进行单元测试。
- 和数据库相关的单元测试,可以设定自动回滚机制,不给数据库造成脏数据
- 小数类型为 decimal,禁止使用 float 和 double
- 表必备三字段:id, create_time, mod_time. 自增ID, 创建时间, 修改时间.
- 不过过早的进行分表, 单表行数超过 500 万行或者单表容量超过 2GB,才推荐进行分库分表。
- 业务上具有唯一特性的字段,即使是多个字段的组合,也必须建成唯一索引.(建立唯一索引)
- SQL操作消小心: 数据订正时,删除和修改记录时,要先 select,避免出现误删除,确认无误才能执 行更新语句
- @Transactional 事务不要滥用. 事务会影响数据库的 QPS,另外使用事务的地方需 要考虑各方面的回滚方案,包括缓存回滚、搜索引擎回滚、消息补偿、统计修正
- 在 Service 层出现异常时,必须记录出错日志到磁盘,尽可能带 上参数信息,相当于保护案发现场. 一定要保留请求参数. 保留案发现场.
- 线上应用不要依赖 SNAPSHOT 版本(安全包除外).
- 给 JVM 设置-XX:+HeapDumpOnOutOfMemoryError 参数,让 JVM 碰到 OOM 场景时输出 dump 信息.
- 在线上生产环境,JVM的Xms和Xmx设置一样大小的内存容量,避免在GC 后调整堆 大小带来的压力。
from: http://www.razorer.com/2017/12/17/%E9%98%BF%E9%87%8C%E5%B7%B4%E5%B7%B4%E4%BB%A3%E7%A0%81%E8%A7%84%E8%8C%83-note/ 转载地址:http://nxgef.baihongyu.com/