信息技术大学
资金类场景
系统设计与场景题 · 第 2 章 高频场景题
按 空格/→ 演示下一步
全部页面点击任意一页,跳回舞台从这页播放
信息技术大学
资金类场景
系统设计与场景题 · 第 2 章 高频场景题
红包拆分算法
拆红包两种流派:二倍均值法即拆即定,先拆完再抢逐步抽取——随机感与确定性的取舍。
二倍均值
每次抽 0.01 到剩余均值两倍之间,实时拆分
先拆后抢
发红包时切好金额,抢时原子取号依次领
保底约束
每人至少一分钱,剩余量控制不为负
防超发与对账
钱的事故都是头条:预扣防超发,流水防篡改,对账兜底找差错。
预扣
库存式预扣减,扣成功才有资格发放
流水
每笔变动记流水,可重放可审计
对账
发放总额、领取总额、余额三方核对
幂等性落地
用户手抖双击、网络层重试:领红包接口必须幂等,红包加用户唯一约束。
唯一键
红包 ID+用户 ID 唯一索引,重抢直接拒绝
状态机
待领取到已领取单向流转,重复请求被拒
Token
领取前取一次性 token,核销即失效
本节要点
- ✓二倍均值法:即拆即定有惊喜
- ✓预扣、流水、对账三道防线
- ✓幂等:唯一键+状态机+Token
延伸主题:推一遍二倍均值法边界设计一个对账任务
课后思考
先自己回答,再展开参考答案——能讲出来才算真懂。
1微信红包为什么用「拆完再抢」而非「抢时实时算」?
参考答案实时算要在抢的高峰加锁计算金额,热点高度集中;先拆后抢把计算前移,抢的过程只是原子取号。简单快速,且「手气」在拆分时就已注定。
2资金系统的对账为什么不可省?
参考答案任何系统都有异常:超时、重试、部分失败。对账是最后防线——发放、领取、余额三方核对,差错可定位可回补。没有对账的资金系统等于裸奔。
3「先扣后发」与「先发后扣」哪个对?
参考答案先扣后发:扣减失败最多发不出去,不会超发;先发后扣一旦扣不上就是真金白银的资损。资金安全的原则是宁可暂不可用,不可多付一分钱。