高并发常见面试题

返回 面试

高并发 = 高 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、发通知

详见 秒杀与抢购12306春节高峰


读多写少(热搜)

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 原子操作。


相关笔记