Skip to content

系统设计 速查卡

🎯 覆盖 20 题 | ⭐ 高频 4 题 | 预计扫描 10 分钟 📌 系统设计题答题框架:整体架构思路 → 核心问题拆解 → 兜底/降级方案


一、秒杀 / 高并发

知识地图:前端限流→CDN→网关限流→Redis预扣→MQ削峰→DB乐观锁

⭐ 秒杀系统 + 防超卖

一句话: 分层削峰(前端→网关→Redis→MQ→DB),防超卖三道防线——Redis Lua 原子预扣减(主) + MQ 异步下单(削峰) + DB 乐观锁(兜底)。

七层架构链:

① 前端限流(倒计时/答题) → ② CDN(页面静态化) → ③ 网关限流(令牌桶)
→ ④ Redis Lua 预扣库存 → ⑤ MQ 异步下单 → ⑥ 消费者处理 → ⑦ DB 乐观锁兜底

Redis Lua 防超卖核心: GET stock → stock<=0 拒绝 → DECR stock(三步原子执行)

DB 兜底: UPDATE product SET stock=stock-1 WHERE id=? AND stock>0

一人一单: Redis SETNX 快速拦截 + DB 唯一索引(user_id, product_id)兜底

⚠️ 易错:Redis 预扣减不直接查 DB,全在内存操作;但需保证 Redis 和 DB 库存最终一致(定期对账+异常补偿)


二、缓存设计

知识地图:L1 本地缓存(Caffeine) → L2 Redis → L3 数据库

缓存更新策略(Cache Aside)

写操作: 先更新 DB → 再删除 Cache(不是更新)

多级缓存一致性: 短 TTL(5s) + Redis Pub/Sub 广播失效

AI 结果缓存: 对 query 归一化(trim+lowercase) → SHA256 生成 key → Redis 存结果带 TTL;Semantic Cache 用向量相似度匹配近似问题


三、排行榜 / 推送

⭐ Redis ZSet 实时排行榜

一句话: 用 ZSet 存排行数据(score=分数, member=用户ID),ZADD/ZINCRBY 原子更新,ZREVRANGE 取 TOP N,天然有序。

ZADD leaderboard 1500 user:1001         # 写入/更新
ZINCRBY leaderboard 50 user:1001        # 原子加分
ZREVRANGE leaderboard 0 9 WITHSCORES    # 取 Top10
ZREVRANK leaderboard user:1001          # 查排名

分周期: key 中嵌入时间维度(leaderboard:daily:2024-01-15)+ 设置 EXPIRE

超大量用户: 只保留 Top 10000(ZREMRANGEBYRANK 清理尾部),底部用户显示"10000+"


Feed 流(朋友圈)

推拉结合: 普通用户 = 推模式(发帖时推到关注者列表);大 V = 拉模式(读时实时拉取合并)

原因: 大 V 用推模式 = 百万粉丝 × 百万次 Redis 写,写放大严重


四、订单超时

⭐ 订单 15 分钟超时取消

一句话: 推荐 RocketMQ 延迟消息(主)+ 本地消息表(兜底补偿),消费时幂等检查订单状态。

方案优点缺点
MQ 延迟消息(推荐)可靠,失败可重试RocketMQ 延迟级别固定
Redis ZSet精确到秒,支持任意延迟Redis 宕机可能丢失
定时扫库简单全表扫描性能差,不精确
时间轮(Netty)纯内存高效进程重启丢失

生产级方案:

下单 → DB 插订单+本地消息表(同事务) → 发 MQ 延迟消息
15min 后消费 → 幂等检查(状态仍是PENDING?) → 取消订单 → 更新消息表
定时任务兜底(每5min) → 扫描本地消息表中超时未处理记录 → 补发或直接取消

五、限流 / 熔断

限流三层

接入层(Nginx): 全局 QPS 限制
网关层(Gateway): 按接口/用户限流
应用层(Sentinel): 方法级细粒度

熔断状态机

Closed(正常) → 错误率>阈值 → Open(快速失败) → 等待恢复 → Half-Open(少量测试)
→ 测试成功回 Closed / 失败重回 Open

降级策略(从好到坏): 返回缓存旧数据 > 返回默认值 > 降级提示 > 快速失败 503


六、分布式 / 大数据

跨实例限流

Redis 分布式限流: 所有实例共享 Redis 计数器(Lua 原子操作) 或 Redisson RRateLimiter

链路追踪

OpenTelemetry: Trace ID(全局) + Span ID(子操作),通过 HTTP Header 传播

一致性方案: Saga(补偿式,适合长流程) / TCC(预留式,资金类) / 本地消息表(最终一致)

大数据 Top K

10GB 日志找 Top10 接口: Hash 分片为 100 个小文件(各100MB) → 各片 HashMap 统计 + 小顶堆 Top10 → 汇总 100 个 Top10 取全局 Top10

两个 20GB 文件找重复 URL: Hash 分片到 1000 个桶(相同 URL 必在同一桶) → 逐桶 HashSet 求交集


七、AIGC

LLM 响应慢的优化

最核心: 流式输出(SSE)——每生成一个 token 立即推送,首字节 200ms 内可见

① 流式输出(SSE) → ② 缓存(Semantic Cache) → ③ 预加载(输入时预测提前请求)
→ ④ 分段返回(先摘要后详情) → ⑤ 小模型路由(简单问题用快模型)
→ ⑥ TTFT 优化(KV Cache预热/投机采样/量化部署)

补充速览

关键词核心答案
转账服务幂等(transferId去重) + 分库分表 + 同库事务(FOR UPDATE固定顺序防死锁) + 跨库TCC
退单处理DB 库存+1 → Redis 库存+1 → 删一人一单标记;用退款单ID做幂等防重
秒杀 QPS 隔离物理隔离(独立集群) / 逻辑隔离(线程池隔离) / Sentinel 热点参数限流
工单超时定时器小顶堆(堆顶=最近超时);Redis 用 ZSet(score=超时时间戳);DB 用 execute_at 索引
新闻推荐召回(规则+协同过滤+向量) → 过滤(已读+黑名单) → 排序(点击率+完读率+时效性)
兴趣动态变化时间衰减 + 短期/长期兴趣分离 + 会话上下文 + 显式偏好
⭐ 短链系统分布式ID+Base62生成短码;Redis缓存热点(命中率>95%);302重定向;防刷+过期清理+统计分析
分布式任务调度调度中心+执行器架构;抢占式/中心分配/一致性哈希;Redis分布式锁防重复执行;失败重试+告警

🧠 助记汇总

口诀含义
前CDN关Redis MQ DB秒杀七层架构
Redis预扣→MQ削峰→DB兜底防超卖三道防线
关开半熔断状态机:Closed→Open→Half-Open
缓默降快降级四级:缓存旧数据/默认值/降级提示/快速失败
分片→各片TopK→汇总大数据 TopK 通用模式
ID+Base62→Redis→302短链系统核心链路

✅ 自测清单

#问题你能说出...
1秒杀系统七层架构 + 防超卖三道防线
2一人一单Redis SETNX + DB 唯一索引 + 退单处理
3排行榜ZSet 命令 + 分周期 + 大数据量处理
4订单超时四种方案对比 + 生产级方案
5限流熔断三层限流 + 熔断状态机 + 降级策略
6Feed 流推拉结合 + 为什么大 V 用拉
7大数据 TopKHash 分片 + 小顶堆合并
8AIGC 响应优化六大手段(SSE 最核心)
9短链系统ID+Base62 + Redis缓存 + 302 重定向
10分布式任务调度调度中心+执行器 + 防重复执行

💡 首次全部过一遍 → 第2天只过答不上来的 → 第4天再复习 → 面试前一天最后扫一遍