Code Review 约定
- 统一的代码格式
- 使用统一的配置文件,提交前进行格式化(不属于review内容)
- 编程风格,可读性和可维护性
- 变量命名是否做到简洁、清晰无歧义(clear,precise)
- 方法是否进行了合理的抽象,避免为了复用而复用(方法vs代码块)
- 方法抽象层次是否合理(同级方法都在同一个抽象层次上)
- 方法是否只做了一件事,是否和命名相符,是否有副作用
- 是否遵循OOP原则(SOLID),类是否内聚,是否使用了合适的设计模式解耦
- 是否有其他坏味道(参考重构、Clean Code、编写可读代码的艺术)
- 代码健壮性,防御性编程
- 参数检查(入口、DAO)
- 参数异常情况时的返回值,是否存在二义性
- NPE问题
- unboxing、方法避免返回null、使用空值容忍的工具类
- 异常处理
- 异步处理(mq、线程池)时的异常处理、异常分类、RPC服务异常处理、事务边界
- 控制对外部资源的访问
- 超时设置、返回值检查、隔离策略
- 并发处理
- 接口是否要支持幂等
- 分布式锁使用
- 加锁及释放锁场景是否完备,锁超时设置是否合理,是否会死锁,锁基础设施不可用时的策略
- 参数检查(入口、DAO)
- 性能问题
- 循环或高并发访问数据库/外部服务
- SQL效率
- 索引,count最大数量限制,排序
- 缓存使用(本地,远程)
- 考虑缓存一致性,内存占用,是否有击穿问题
- 高成本对象的创建
- 是否可复用,是否线程安全
- 接口容量预估(耗时、调用量),限流降级策略
- 业务逻辑
- 实现是否和设计时一致
- 是否夹带私货(不在本次业务范围内的修改)
- 是否灰度上线,灰度开关是否可逆,回退影响面
- 运维问题
- 异常日志是否完备,是否能通过日志定位问题
- 重要操作是否有日志(记录操作人,操作时间,防抵赖)
- 业务监控告警配置
- 环境问题
- 线上预发是否需要隔离(mq、定时任务、缓存)
场景注意点
新增接口
接口文档(接口定义,QPS/RT/SLA约定)
入参检查,异常返回值/错误码
修改接口
新增依赖接口
新增MQ处理
是否要支持幂等,是否存在并发消费问题,是否要保证消费顺序
消费者数量,重试场景/次数
是否配置堆积监控