# 代码回顾检查清单

基于：《Java 持续交付》

```checklist
- 代码回顾检查清单
  - 理解性问题
    - 使用解决方案或者问题域的名称
    - 使用含义显而易见的名称
    - 尽量减少类和成员的可访问性
    - 尽量减少局部变量的作用域
    - 在单个逻辑组件（包、服务或者服务）中，要遵循『不要重复自己（DRY）』的原则
    - 用代码来解释代码
    - 使用异常而不是难懂的错误代码，并且不返回 null
  - 语言规范问题
    - 对可恢复条件使用已检查问题，对编程错误使用运行时异常
    - 检查参数的有效性，使其尽可能接近规范要求或者用户输入
    - 标明哪些参数可以为 null
    - 在公共类中，尽量使用访问器方法，而非公共字段
    - 通过接口来引用对象
    - 使用枚举来替换 int 常量
    - 使用标记接口（marker interface）来定义类型
    - 同步对共享可变数据的访问
    - 优先使用 executors 来执行任务和线程
    - 将线程安全记录到文档中
  - 安全性问题
    - 应该检查输入数据的大小和范围，始终保证提供给数据存储、中间件或第三方系统的任何输入数据都是安全的。
    - 不要在日志中记录高度敏感的信息
    - 不要在异常中保留敏感信息（如，文件路径、系统内部逻辑、配置信息等）
    - 考虑在使用后从内存中清除高度敏感的数据。
    - 遵循最小权限原则
    - 将其他与案例相关的信息记录到文档中
  - 性能问题
    - 注意低效的算法（如多层循环）
    - 避免创建不必要的对象
    - 注意字符串连接的性能损失
    - 避免过度使用同步，并保持同步代码块范围尽可能小
    - 注意算法中潜在的死锁或活锁
    - 确保正确配置了线程池和缓存
```
