面试题 / 设计题

系统设计补充题

如何设计一个微信红包功能?

这题核心考察的是金额拆分、并发控制和资金安全。

可以从这些方面回答:

  1. 红包模型:普通红包、拼手气红包、固定金额红包。
  2. 金额拆分:保证总金额守恒、每份金额合法、随机性合理。
  3. 并发抢红包:库存扣减、幂等、防重复领取、超发保护。
  4. 存储设计:红包主表、明细表、领取记录表、账户流水表。
  5. 性能优化:缓存、异步落库、消息队列、热点隔离。
  6. 安全与一致性:支付成功、红包创建、领取入账、失败补偿。

面试时如果想答得更完整,可以补:

  • 如何防止一个用户重复抢。
  • 如何防刷。
  • 如何处理红包过期和退款。

如果让你实现一个高可用的小型架构:一个接口上传文本,一个接口获取内容,要求避免单机房故障并让业务代码无感,你会怎么设计?

这题重点是“高可用”和“业务无感切换”。

可以按下面的结构来答:

  1. 接入层:域名 + 负载均衡 + 多机房流量切换。
  2. 应用层:无状态服务,多实例部署,跨机房冗余。
  3. 存储层:主从、双写、异地多活或主备切换。
  4. 缓存层:读取走缓存,提高查询性能。
  5. 故障切换:健康检查、自动摘除故障节点、流量自动漂移。
  6. 代码无感:通过统一服务发现、配置中心、代理层或中间件屏蔽底层切换。

这类题的关键不是堆名词,而是说明:

  • 写路径怎么保证一致性。
  • 读路径怎么保证可用性。
  • 单机房挂掉后流量如何切到另一侧。

来源引用