【Adobe 面试真题分享 | Load Balancer 负载均衡】

最近遇到一道 Adobe 面试真题,难度中偏上,主要考察 系统设计 + 算法调度 + 数据结构 的综合能力。
做系统设计的同学一定要掌握!


📌 题目

实现一个 Round-Robin(轮询)负载均衡器,用于将请求分配到 n 个服务器上。

  • 共有 n 个服务器(编号从 1 到 n)
  • m 个请求,每个请求的:
    • 到达时间:arrival[i]
    • 执行时间:burstTime[i]

🎯 分配规则:

  1. 请求到达时,把它分给 当前可用的编号最小的服务器
  2. 服务器从接到请求开始,到 arrival[i] + burstTime[i] 时间点内都不可用
  3. 如果多个请求同一时间到达,按原顺序处理
  4. 如果没有服务器可用,返回 -1(表示被丢弃)

📤 输出:长度为 m 的数组
记录每个请求被哪个服务器处理(1-based),若被丢弃返回 -1


🧠 示例

n = 3
m = 5
arrival =     [2, 4, 1, 8, 9]
burstTime =  [7, 9, 2, 4, 5]

输出: [2, 1, 1, 3, 2]
请求序号到达时间执行时间结果
312server 1
127server 2
249server 1
484server 3
595server 2

🧩 题目考点总结

考点说明
优先队列 / 小顶堆维护最早空闲且编号最小的 server
事件流思维按时间推进模拟任务调度
System Design 基础负载均衡的核心思想
并发调度 & 资源管理怎么处理冲突和等待队列

🔑 关键解法思路:

  • 使用一个最小堆 busy 维护正在运行的任务(记录结束时间 & 服务器编号)
  • 使用一个最小堆 free 维护当前空闲服务器(按编号排序)
  • 按请求时间前进,把已完成任务释放回 free

💡 面试中重点讨论方向

🤔 如果 m 和 n 都很大(10⁵级别)怎么办?
必须 O(m log n) 时间处理,暴力会超时

🎯 如果多个 region?多个 load balancer?
可以扩展到:

  • 分层调度
  • heartbeat 健康检查
  • consistent hashing

📣 最后说一句

现在大厂面试对 系统设计 + 实战算法 要求越来越高,很多人不是不会写代码,而是:

不会面试策略,不会表达思路,不会拆解问题

如果你 有即将到来的面试 / 需要真题演练 / 想模拟真实场景
可以留言或私信:
📌 支持大厂 System Design / CodePair 现场辅助 / 语音实战演练
帮助你提升思维表达,让面试官看到亮点

➡️ 可以联系 CSOAHelp(我们提供高质量 OA/VO 面试辅助与全流程解析)。

Leave a Reply

Your email address will not be published. Required fields are marked *