面试鸭返利网

滑动时间窗口、令牌桶算法、漏桶算法

滑动时间窗口、令牌桶算法和漏桶算法是程序员必须掌握的三大限流策略。滑动时间窗口通过动态统计最近N秒请求量实现精准限流,适合API网关等实时场景;令牌桶算法以恒定速率生成令牌,允许突发流量消耗积攒令牌,是Guava RateLimiter的实现原理;漏桶算法则严格控制输出速率,保证绝对平滑的流量整形。这三种算法各有优势:滑动窗口简单高效,令牌桶适合开放平台API,漏桶则用于支付系统等对稳定性要求极高的场景。2025年Java面试中限流策略是高频考点,掌握这些算法能帮助开发者设计高并发系统,有效应对秒杀、抢购等流量高峰。面试鸭返利网提供海量限流算法真题解析,助你轻松备战大厂技术面试。

滑动时间窗口、令牌桶算法、漏桶算法:程序员必懂的限流三剑客

📥 2025年Java面试高频宝典
🔗 百度网盘链接
🔐 提取码:9b3g
(限流策略常考!速存防失效)


🔍 什么是滑动时间窗口算法?

咱们程序员面试被问限流,滑动时间窗口绝对是高频考点!它的核心思想是动态统计最近N秒内的请求量。举个栗子🌰:面试官问“如何实现1分钟内最多100次调用?”

这时候滑动时间窗口就派上用场了:

  1. 维护一个时间线队列,记录每次请求的时间戳
  2. 新请求到来时,剔除超过1分钟的老数据
  3. 检查当前队列长度是否<100
  4. 若未超限则加入队列,否则拒绝

滑动时间窗口示意图
▲ 滑动窗口动态移动边界,实时性优于固定窗口

实际场景

  • API网关限流(如Nginx限流模块)
  • 分布式场景需用Redis + Lua保证原子性
  • 注意时间精度影响内存消耗(毫秒级需更多存储)

🪙 令牌桶算法:应对突发流量的神器

当面试官追问“如何允许突发流量?”时,令牌桶算法就是标准答案!它的运作像极了游乐园🎢:

  1. 有个桶以恒定速率生成令牌(如10个/秒)
  2. 请求到来时消耗1个令牌
  3. 桶满时丢弃多余令牌
  4. 突发流量可消耗积攒的令牌
        [令牌桶]
   │  ▲
   │  │ 固定速率注入
   │  ▼
┌──┴──┐
│  █  │  → 消耗令牌 → 请求通过
└─────┘

▲ 令牌不足时直接拒绝请求

核心优势
✅ 允许短时间内突发流量(如抢购场景)
✅ 平滑过渡到平均速率
✅ Guava RateLimiter就是经典实现


🪣 漏桶算法:最严格的流量整形

漏桶算法像是个带孔的水桶🪣,强调绝对平滑的输出

  1. 请求进入桶队列(桶有容量上限)
  2. 固定速率从桶底漏出请求处理
  3. 桶满时新请求被丢弃

漏桶算法示意图
▲ 无论输入多波动,输出始终保持恒定

vs 令牌桶关键区别
| 特性 | 漏桶算法 | 令牌桶算法 | |--------------|----------------|------------------| | 流量控制方向 | 控制输出速率 | 控制输入速率 | | 突发处理 | 严格禁止 | 允许消耗存量 | | 典型应用 | 流量整形 | 突发流量管控 |


💡 面试实战技巧

当被要求“对比三种算法”时,可以这样组织答案:

  1. 滑动时间窗口:实时统计简单,但精度受窗口划分影响
  2. 令牌桶:适合需要容忍突发的场景(如API限流)
  3. 漏桶:强保证输出速率(如视频流转码)

🚀 刷题资源福利
需要面试鸭会员的小伙伴,通过 面试鸭返利网 找我可返25元!海量真题+限流算法源码解析助你通关!


🌐 该用哪个?场景决定

  • 监控告警系统 → 滑动时间窗口(快速统计)
  • 开放平台API → 令牌桶算法(允许合理突发)
  • 支付系统下游调用 → 漏桶算法(保护脆弱系统)

💻 技术人都在用的提效工具:
面试鸭返利网
更多架构设计真题 → 访问 面试鸭返利网

如果你想获取更多关于面试鸭的优惠信息,可以访问面试鸭返利网面试鸭优惠网,了解最新的优惠活动和返利政策。

立即加入面试鸭会员 →