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

假设需要你从零开始设计一个购物车功能,你会如何规划和实现?请说明你的设计思路。

后端开发问题拆解风险判断系统设计MySQLRedis

考察说明

考查候选人面对开放场景时的系统设计能力,包括数据建模、接口设计、状态管理和并发处理。

回答思路

  1. 【回答框架 1】购物车是电商中用户挑选商品后的临时存储,核心需求是增删改查、数量调整、商品信息快照、价格计算和结算跳转。从后端设计角度,先确定存储方案:未登录用户可用本地存储或Redis以deviceId关联,登录用户则持久化到MySQL,表设计为cart表和cart_item表,cart记录用户信息和总价,cart_item记录商品ID、数量、选中状态、加购时间,并冗余商品标题和单价快照,避免商品变更影响购物车展示。
  2. 【回答框架 2】接口设计围绕REST风格:添加购物车接收userId、skuId、数量,校验库存后写入;修改数量需校验数量合法性;删除和清空操作需支持批量;查询购物车返回列表和汇总金额。对未登录用户,前端将购物车数据存localStorage,登录时合并到后端,合并策略以服务端数据为准并提示用户。
  3. 【回答框架 3】并发和一致性是关键:添加商品时需防止重复提交,前端按钮置灰,后端用唯一索引或分布式锁对同一用户同一商品加锁,保证幂等。修改数量时用乐观锁,update语句带version条件,避免覆盖。库存扣减应在订单生成时进行,购物车本身只保存订购意向,不锁库存。
  4. 【回答框架 4】价格计算必须实时:查询购物车时遍历商品,调用价格服务获取最新单价,计算小计和总价,并展示优惠信息,如满减券,但实际优惠以结算页为准。购物车还支持失效商品标记和批量移除,以及库存不足提示。性能上增加Redis缓存购物车数量和选中商品数,减轻DB压力。
  5. 【回答框架 5】扩展性考虑:支持多店铺购物车分组,支持拆单,支持优惠券选择,支持预约商品和预售。设计上遵循模块化,购物车独立服务,通过RPC调用商品、库存和价格服务,降低耦合。
  6. 【关键点 1】采用cart和cart_item两级表结构,冗余商品快照字段。
  7. 【关键点 2】区分登录和未登录状态,未登录用本地存储,登录时合并数据。
  8. 【关键点 3】添加购物车接口需幂等,修改数量用乐观锁。
  9. 【关键点 4】价格实时计算,购物车不锁库存。
  10. 【关键点 5】接口支持批量删除和选中状态管理。
  11. 【易错点 1】不处理并发可能导致数据不一致,如超卖或数量覆盖。
  12. 【易错点 2】直接使用商品实时价格而不做快照,商品改价后历史加购记录展示混乱。
  13. 【易错点 3】忽略未登录用户的购物车合并,导致用户登录后数据丢失。