高并发系统设计面试题

2025年 阅读约 13 分钟 面试指南 · 系统设计

精选高并发系统设计面试题,涵盖限流降级、秒杀系统、短链系统等经典设计题,附架构方案和核心思路。

一句话总结

高并发设计考察实战能力,核心考点:限流算法(固定窗口/滑动窗口/令牌桶/漏桶)、秒杀系统(前端→网关→Redis预减→MQ异步→DB乐观锁)、短链系统(Base62编码+302重定向)、信息流(推拉结合模式)。核心思路:尽量将请求拦截在上游

限流与降级

限流算法:

1. 固定窗口:时间窗口内计数,简单但有临界突刺问题。

2. 滑动窗口:细化时间粒度,平滑限流。

3. 令牌桶:恒定速率生成令牌,允许突发流量。Google Guava RateLimiter实现。

4. 漏桶:恒定速率处理请求,平滑输出。

降级策略:返回默认值、返回缓存数据、关闭非核心功能、页面降级。

秒杀系统设计

核心挑战:瞬时高并发、超卖问题、防作弊。

架构方案:

1. 前端:按钮防抖、验证码、倒计时、CDN静态化

2. 网关层:限流、黑名单、请求过滤

3. 服务层:Redis预减库存(Lua脚本保证原子性)、消息队列异步下单

4. 数据库:乐观锁防超卖 UPDATE stock SET count=count-1 WHERE id=? AND count>0

关键点:尽量将请求拦截在上游,不让流量打到数据库。

短链系统设计

核心流程:长链→生成短链→存储映射→访问短链→302跳转

短链生成方案:

1. 哈希+碰撞检测:MurmurHash生成短码,碰撞时重新哈希。

2. 发号器:自增ID转62进制(0-9a-zA-Z),6位可表示568亿组合。

存储方案:Redis缓存热点映射 + MySQL持久化。

302 vs 301:302临时重定向可统计点击量,301永久重定向浏览器缓存不经过服务器。

信息流系统设计

推模式(写扩散):发帖时写入所有粉丝的收件箱。适合粉丝少的场景。

拉模式(读扩散):读帖时从关注列表拉取。适合粉丝多的场景。

推拉结合:大V用拉模式,普通用户用推模式。活跃粉丝推,非活跃粉丝拉。

存储方案:Redis Sorted Set按时间排序,支持分页加载。

实战场景

场景:秒杀系统 Redis Lua 原子扣库存

-- Redis Lua 脚本:原子扣库存 local key = KEYS[1] -- 库存key local qty = tonumber(ARGV[1]) -- 购买数量 local stock = tonumber(redis.call('get', key)) if stock == nil then return -1 -- 商品不存在 end if stock < qty then return 0 -- 库存不足 end redis.call('decrby', key, qty) return 1 -- 扣减成功 -- Java 调用 String script = "..."; Long result = redis.eval(script, Collections.singletonList("stock:1001"), Collections.singletonList("1")); if (result == 1) { mq.send("order-create", order); // 异步下单 } else if (result == 0) { throw new BizException("已售罄"); }