高并发常见面试题
→ 返回 面试
高并发 = 高 QPS + 数据一致性 + 可用性 的权衡。专题见 高并发、高并发概述。
总体思路
流量入口(CDN/网关限流)
▼
缓冲与塑形(队列、令牌)
▼
缓存(多级、热点隔离)
▼
异步(MQ 削峰)
▼
数据层(分库分表、读写分离、扣库存原子化)
三大问题(缓存)
| 问题 | 方案 |
|---|---|
| 穿透 | 布隆、空值 TTL |
| 击穿 | 互斥锁、逻辑过期 |
| 雪崩 | TTL 抖动、集群、降级 |
详见 Redis常见面试题。
限流
| 算法 | 特点 |
|---|---|
| 固定窗口 | 实现简单,边界双倍突发 |
| 滑动窗口 | 更平滑 |
| 令牌桶 | 允许一定突发 |
| 漏桶 | 恒定出口速率 |
落地:Gateway、Sentinel、Redis + Lua、Nginx limit_req。
熔断与降级
| 概念 | 说明 |
|---|---|
| 熔断 | 下游故障率/慢调用超阈值 → 快速失败,避免雪崩 |
| 降级 | 关闭非核心功能,保核心链路 |
| 隔离 | 线程池/信号量隔离,防拖垮 |
Sentinel:FlowSlot 限流 + DegradeSlot 熔断。见 Sentinel。
秒杀 / 强一致库存
CDN 静态页 → 网关限流 → 秒杀令牌 → Redis Lua 预扣 → 创建订单(幂等) → 超时回滚
| 要点 | 说明 |
|---|---|
| 不能超卖 | Redis 原子 DECR / DB 乐观锁 WHERE stock>=1 |
| 热点 key | 本地缓存、分片 key、读写分离 |
| 幂等 | 用户+SKU 唯一键、Redis NX |
| 异步 | 下单成功后再 MQ 扣 DB、发通知 |
读多写少(热搜)
CDN + 多级缓存 + 热点本地缓存 + MQ 合并写。见 热搜与读风暴。
分布式 ID
| 方案 | 特点 |
|---|---|
| UUID | 无序,B+ 树插入慢 |
| DB 号段 | 趋势递增,DB 压力 |
| Snowflake | 时间+机器+序列,趋势递增 |
| Redis INCR | 简单,需高可用 |
见 分布式ID。
消息削峰
瞬时流量写入 MQ,消费者按能力拉取。见 消息队列常见面试题。
CAP 与 BASE(了解)
| 说明 | |
|---|---|
| CAP | 分区发生时 C 与 A 二选一;P 必牺牲 |
| BASE | 基本可用、软状态、最终一致(互联网常用) |
常见面试题
Q:如何设计一个秒杀系统?
A:分层限流 + 令牌 + Redis 预扣 + 幂等下单 + MQ 异步 + 库存对账;强调不超卖与体验(排队/售罄)。
Q:限流和熔断区别?
A:限流控入口流量;熔断在下游异常时切断调用,防连锁故障。
Q:双 11 流量怎么扛?
A:全链路:CDN、网关、缓存、异步、降级、扩容;按场景选型见 场景选型指南。
Q:乐观锁 vs 悲观锁高并发?
A:读多写冲突少 → 乐观锁(版本号);冲突激烈 → 悲观锁或 Redis 原子操作。