博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
阿里巴巴代码规范-note
阅读量:2118 次
发布时间:2019-04-30

本文共 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.
    • A 自动化
    • I 独立性
    • R 可重复
  • 单元测 试中不准使用 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/

你可能感兴趣的文章
如何在 Linux 上自动设置 JAVA_HOME 环境变量
查看>>
MSSQL复习笔记
查看>>
Spring基础知识汇总
查看>>
Chrome扩展插件
查看>>
log4j.xml 日志文件配置
查看>>
如何删除MySql服务
查看>>
BAT Java和Rti环境变量设置
查看>>
NodeJs npm install 国内镜像
查看>>
python3.5.2 mysql Exccel
查看>>
mysqlDump 导出多表,其中部分表有限制数据内容
查看>>
vi 替换方法
查看>>
BAT 相关
查看>>
ANT集成SVNANT访问SVN(Subversion)
查看>>
高可用架构-- MySQL主从复制的配置
查看>>
jvm调优-从eclipse开始
查看>>
构建微服务:Spring boot 入门篇
查看>>
jvm调优-命令大全(jps jstat jmap jhat jstack jinfo)
查看>>
Spring boot Myibatis
查看>>
spring boot(七):springboot+mybatis多数据源最简解决方案
查看>>
Spring Boot 笔记
查看>>