后端岗位面试题更新 2026-08-05

在电商系统中,用户重复提交订单且未支付会占用库存,请你阐述有哪些策略可以防止这种情况,并说明每种策略的适用场景和可能的副作用。

后端开发风险判断系统设计方案权衡Redis

考察说明

考查候选人对分布式系统下防止重复提交和库存控制的方案设计与权衡能力。

回答思路

  1. 【回答框架 1】防止重复下单的核心是请求幂等性,即同一请求多次提交只产生一次有效结果。常见方案有前端按钮防抖、后端唯一索引、分布式锁和状态机等,应结合业务复杂度、并发量和一致性要求选择组合。
  2. 【回答框架 2】前端可通过提交按钮置灰、标志位控制阻止重复点击,但用户可绕过,只能作为辅助手段。后端需结合唯一标识如订单号或用户加商品加时间的哈希,在数据库表上加唯一约束,重复插入会失败,从而保证幂等,这是最可靠的保障。
  3. 【回答框架 3】对于高并发场景,可使用分布式锁(如Redis)以用户或订单维度加锁,锁内检查是否已有未支付订单,若存在则拒绝新单。但分布式锁只保证互斥,不能单独保证幂等,还需配合唯一约束或状态记录。锁的粒度影响吞吐,需设置合理超时防止死锁。
  4. 【回答框架 4】库存扣减应在订单创建成功或支付时进行,未支付订单不扣减库存,或者使用预占库存并设置过期释放,以免长期占用。可结合消息队列异步释放超时未支付订单的库存,并利用分布式事务或本地消息表保证库存一致性。
  5. 【关键点 1】幂等性设计是防止重复下单的关键,要保证重复请求只生效一次。
  6. 【关键点 2】数据库唯一约束是强一致性的兜底方案,能有效防止并发重复插入。
  7. 【关键点 3】分布式锁只保证互斥,不能替代幂等唯一性,需配合唯一标识和状态记录。
  8. 【关键点 4】库存预占需设置有效期限,超时未支付订单应自动释放库存,避免占用。
  9. 【易错点 1】仅依赖前端限制不可靠,用户可绕过,必须结合后端校验。
  10. 【易错点 2】分布式锁加锁和解锁必须成功配对,注意锁过期时间,防止误删锁或死锁。
  11. 【易错点 3】库存释放与订单状态更新需保证事务一致性,否则可能造成数据不一致。