阿里Java开发手册
2023-07-27 20:13:55 1 举报
AI智能生成
阿里Java开发手册
作者其他创作
大纲/内容
编程规约
命名风格
中括号是数组类型的一部分
POJO 类中布尔类型的变量,都不要加 is
包名统一使用小写、单数,类名可以复数
杜绝完全不规范的缩写
类名中体现出具体设计模式
枚举类名建议带上 Enum 后缀
常量定义
不允许任何魔法值
long初始赋值时,必须使用大写的 L
按常量功能进行归类,定义多个常量类
代码格式
OOP 规约
所有的覆写方法,必须加@Override 注解
已对外提供API,不允许修改方法签名
使用常量或确定有值的对象来调用equals
包装类对象之间值的比较,使用 equals 方法
基本数据类型与包装数据类型的使用标准
包装数据类型
所有的 POJO 类属性
RPC 方法的返回值和参数
基本数据类型
所有的局部变量
定义 DO/DTO/VO 等 POJO 类时,不要设定任何属性默认值
构造方法里面禁止加入任何业务逻辑
POJO 类必须写 toString 方法
getter/setter 方法中,不要增加业务逻辑
集合处理
只要重写 equals,就必须重写 hashCode
ArrayList的subList结果不可强转成ArrayList
在 subList 场景中,不要对原集合元素个数的修改
使用集合转数组的方法,必须使用集合的 toArray(T[] array)
Arrays.asList()把数组转换成集合时,add/remove/clear 方法异常
remove 元素请使用 Iterator
集合初始化时,指定集合初始值大小
使用 entrySet 遍历 Map 类集合 KV
JDK8,使用 Map.foreach 方法
利用 Set 元素唯一的特性,快速对集合进行去重操作
并发处理
线程资源必须通过线程池提供
线程池不允许使用 Executors 去创建,而是通过 ThreadPoolExecutor 的方式
SimpleDateFormat 是线程不安全的类
高并发时,同步调用应该去考量锁的性能损耗
能用无锁数据结构,就不要用锁
能锁区块,就不要锁整个方法体
能用对象锁,就不要用类锁
对多个资源,需要保持一致的加锁顺序
并发修改同一记录时,避免更新丢失,需要加锁
应用层加锁
缓存加锁
数据库乐观锁
每次访问冲突概率小于 20%
多线程并行处理定时任务,使用 ScheduledExecutorService
使用 CountDownLatch 进行异步转同步操作,注意 catch 异常,确保 countDown 方法可以执行
多线程下使用ThreadLocalRandom
双重检查锁,将目标属性声明为 volatile 型
HashMap 在容量不够进行 resize 时由于高并发可能出现死链,导致 CPU 飙升
ThreadLocal 对象使用 static修饰
控制语句
循环体中的语句要考量性能
try-catch 是否可以移至循环体外
做批量操作的接口,入参保护
注释规约
代码修改的同时,注释也要进行相应的修改
注释力求精简准确、表达到位
特殊注释标记,请注明标记人与标记时间
待办事宜(TODO):( 标记人,标记时间,[预计处理时间])
错误,不能工作(FIXME):(标记人,标记时间,[预计处理时间])
其它
在使用正则表达式时,利用好其预编译功能
不要在视图模板中加入任何复杂的逻辑
对于“明确停止使用的代码和配置”,要坚决从程序中清理出去
异常日志
异常处理
异常不要用来做流程控制
finally 块必须释放资源对象
不能在 finally 块中使用 return
使用Optional 类来防止 NPE 问题
使用有业务含义的自定义异常
对于公司外的 http/api 开放接口必须使用“错误码”,而应用内部推荐异常抛出
日志规约
依赖使用日志框架SLF4J 中的 API
应判断日志级别,再输出日志
异常信息应该包括:案发现场信息和异常堆栈信息
MySQL 数据库
建表规约
表名、DO都是单数
小数类型decimal
varcahr可变字符串,限制5000
索引规约
业务上具有唯一特性的字段,必须建成唯一索引
禁止超过三个表 join
禁止左模糊或者全模糊
order by索引字段
利用延迟关联或者子查询优化超多分页场景
索引性能,consts>ref>range
防止隐式转换,导致索引失效
SQL 语句
count(*)统计行数,包含NULL
全NULL列,count(col)为0,sum(col)为NULL
禁止使用存储过程
in操作控制1000内
ORM 映射
工程结构
应用分层
二方库依赖
二方库版本号命名方式:主版本号.次版本号.修订号
线上应用不要依赖 SNAPSHOT 版本(安全包除外)
接口返回值不允许使用枚举类型
服务器
高并发服务器建议调小 TCP 协议的 time_wait 超时时间
调大服务器所支持的最大文件句柄数(File Descriptor,简写为 fd)
给 JVM 设置-XX:+HeapDumpOnOutOfMemoryError 参数,让 JVM 碰到 OOM 场景时输出dump 信息
服务器内部重定向使用 forward,外部重定向地址使用 URL 拼装工具类来生成
安全规约
用户请求传入的任何参数必须做有效性验证
用户敏感数据禁止直接展示
用户输入的 SQL禁止字符串拼接
禁止向 HTML 页面输出未经安全处理的用户数据
表单、AJAX 提交必须执行 CSRF 安全过滤
在使用平台资源,必须实现正确的防重放限制
等用户生成内容的场景必须实现防刷、文本内容违禁词过滤等风控策略
0 条评论
下一页