Skip to content

编码自检与接口幂等速查

覆盖:提交代码前的 16 条自检清单、接口幂等性 5 种实现方案。后续编码规范类条目直接追加本篇。

一、编码自检清单(提交前过一遍)

#检查项要点
1自测修改完代码记得自测,再小的修改也要测
2入参校验方法入参尽量都做检验
3接口兼容修改老接口时,思考接口的兼容性
4注释复杂的代码逻辑添加清楚的注释
5资源关闭使用完 IO 资源流需要关闭
6运行边界采取措施避免运行错误(如数组边界溢出)
7循环内调用尽量不在循环里做远程调用或数据库操作,优先批量
8并发脑洞写完代码想一下多线程执行会怎样,注意并发一致性
9判空获取对象属性前,先判断对象是否为空
10线程池异步优先用恰当的线程池而不是 new Thread(降损耗、提响应、可复用),注意线程池隔离
11SQL 预检手写业务 SQL 先拿去数据库跑一下,并 explain 看执行计划
12第三方接口调用第三方要考虑异常处理、安全性、超时重试;重要的加签名、加密
13幂等接口考虑幂等性(详见下节)
14线程安全多线程情况下考虑线程安全问题
15主从延迟读写分离场景考虑主从延迟的影响
16缓存考虑缓存与 DB 的一致性,以及缓存穿透、雪崩、击穿
sql
-- 第 11 条示例:上线前先看执行计划
explain select * from user where userid = 1;

二、接口幂等性 5 种方案

定义:对同一操作执行多次,结果相同且不产生副作用。用于避免重复提交、重试导致的数据不一致。

方案做法适用场景
唯一标识符请求携带 UUID,服务端据此判重,已处理则直接返回之前结果通用防重,如订单创建
版本号接口带版本号,服务端已处理过该版本请求则直接返回接口多版本演进
Token服务端预发 Token(或客户端生成唯一串),请求携带,服务端判重表单防重复提交
乐观锁数据库更新带版本号/时间戳条件,并发更新只有一个成功并发更新同一行数据
幂等性校验服务端处理前先查是否处理过,未处理则执行并缓存结果供后续请求复用消息消费、回调通知

选型提示

  • 防"用户手抖双击" → Token / 唯一标识符
  • 防"MQ 重复投递、回调重试" → 幂等性校验(处理记录表)
  • 防"并发改同一条数据" → 乐观锁