背景:本文整理自 2026 年 1–4 月通过 oavoservice 学员渠道获得的 BBG VO 反馈共 18 份,涵盖 SDE I/II、Quant Dev、Infra/SRE 三类岗位。一亩三分地上的 Bloomberg 面经普遍信息断裂,本文按"轮次 → 题型 → 应对模板"重新结构化。
一、Bloomberg 面试整体流程
HR Screen (30min)
│
▼
Coding Round 1 (60min, 1–2 题 LC Med)
│
▼
Team Match (HM Chat, 30min)
│
▼
Onsite/Final (3 轮)
├── Algorithm + Data Structure (60min)
├── System Design / Project Deep Dive (60min)
└── Behavioral + Manager Round (45min)
时长:从 HR screen 到 offer 通常 3–6 周;BBG 的 team match 是双向选择,不通过会直接 reject。
二、第一轮:算法与数据结构(60 min)
2.1 高频题型分布(2026 Q1)
| 题型 | 出现频率 | 典型代表 |
|---|---|---|
| LinkedList / 设计类 | ~30% | LRU、LFU、双向链表 + HashMap |
| Heap / 调度 | ~20% | Top K、Meeting Rooms II、CPU 调度 |
| Tree / Trie | ~20% | 序列化反序列化、Word Search II |
| 字符串 | ~15% | 滑窗、最长无重复、整数转 Roman |
| 图 / DP | ~15% | Word Ladder、买卖股票、岛屿数量 |
2.2 真题 #1:自定义 LRU + TTL
题目(变体):实现一个支持 TTL(time-to-live)的 LRU 缓存。get(key, now_ts) 若 key 已过期则视为不存在;put(key, value, now_ts, ttl) 更新或新增。
关键设计:
- HashMap 节点 → 双向链表节点;
- 节点存
(key, value, expire_ts); get时检查 expire,过期则删除并返回 -1;- 不要在每次 op 都扫描全表,惰性清理即可。
class Node:
__slots__ = ('key', 'val', 'exp', 'prev', 'next')
def __init__(self, k=0, v=0, e=0):
self.key, self.val, self.exp = k, v, e
self.prev = self.next = None
class LRUTTL:
def __init__(self, cap):
self.cap = cap
self.map = {}
self.head = Node() # most recent
self.tail = Node() # least recent
self.head.next = self.tail
self.tail.prev = self.head
def _remove(self, node):
node.prev.next = node.next
node.next.prev = node.prev
def _add_front(self, node):
node.next = self.head.next
node.prev = self.head
self.head.next.prev = node
self.head.next = node
def get(self, key, now):
if key not in self.map:
return -1
node = self.map[key]
if node.exp <= now:
self._remove(node)
del self.map[key]
return -1
self._remove(node)
self._add_front(node)
return node.val
def put(self, key, val, now, ttl):
if key in self.map:
node = self.map[key]
node.val = val
node.exp = now + ttl
self._remove(node)
self._add_front(node)
return
if len(self.map) >= self.cap:
lru = self.tail.prev
self._remove(lru)
del self.map[lru.key]
node = Node(key, val, now + ttl)
self._add_front(node)
self.map[key] = node
复杂度:get/put 均摊 O(1)。
Bloomberg 面试官常追问:
- 若 TTL 大小相近,能否用最小堆批量清理?
- 多线程下如何加锁?(提示:双向链表 + 单写多读 + 分段锁)
- 如果 cap = 10^8,内存怎么办?(分级缓存)
2.3 真题 #2:股票数据流的滑动中位数
题目(变体):BBG 终端持续推送股票价格 add(price),随时查询最近 k 笔的中位数 median()。
核心思路:双堆(max-heap + min-heap)+ 长度为 k 的队列,超过 k 时延迟删除(lazy deletion)。
import heapq
from collections import deque, defaultdict
class RollingMedian:
def __init__(self, k):
self.k = k
self.lo = [] # max-heap (negate)
self.hi = [] # min-heap
self.q = deque()
self.removed = defaultdict(int)
self.size_lo = 0
self.size_hi = 0
def _prune(self, heap):
while heap and self.removed[heap[0] if heap is self.hi else -heap[0]] > 0:
v = heap[0] if heap is self.hi else -heap[0]
self.removed[v] -= 1
heapq.heappop(heap)
def add(self, price):
# push into correct heap
if not self.lo or price <= -self.lo[0]:
heapq.heappush(self.lo, -price)
self.size_lo += 1
else:
heapq.heappush(self.hi, price)
self.size_hi += 1
self.q.append(price)
# evict oldest if exceed k
if len(self.q) > self.k:
old = self.q.popleft()
self.removed[old] += 1
if old <= -self.lo[0]:
self.size_lo -= 1
else:
self.size_hi -= 1
self._rebalance()
def _rebalance(self):
# ensure size_lo == size_hi or size_lo == size_hi + 1
while self.size_lo > self.size_hi + 1:
v = -heapq.heappop(self.lo)
heapq.heappush(self.hi, v)
self.size_lo -= 1
self.size_hi += 1
self._prune(self.lo)
while self.size_lo < self.size_hi:
v = heapq.heappop(self.hi)
heapq.heappush(self.lo, -v)
self.size_hi -= 1
self.size_lo += 1
self._prune(self.hi)
self._prune(self.lo)
self._prune(self.hi)
def median(self):
n = self.size_lo + self.size_hi
if n == 0:
return None
if n % 2:
return -self.lo[0]
return (-self.lo[0] + self.hi[0]) / 2
复杂度:add/median 均摊 O(log k)。
三、第二轮:系统设计 / 项目深挖(60 min)
3.1 BBG 高频系统设计题
- 设计实时股票行情推送系统(million users / sub-second latency)
- 设计新闻终端 Top-K 标签
- 设计分布式消息总线(pub-sub 简化版)
- 设计全局速率限制器
3.2 BBG 风格 4 步法
- 澄清功能 vs 非功能需求(QPS、延迟、数据规模);
- 从 single-box 起步,再讲水平扩展;
- 明确 CAP 取舍——Bloomberg 偏 latency over consistency;
- 闭环讲监控、降级、灰度——这是 BBG 加分项。
3.3 项目深挖 (Resume Deep Dive)
面试官会盯住简历上某一行 30 分钟,常见追问:
- 这个项目的 bottleneck 是什么?是怎么发现的?
- 如果 QPS 翻 10 倍,你会先扩什么?
- 如果让你重做一次,第一件事改什么?
建议:简历每个项目准备 3 段 STAR + 1 段技术取舍 + 1 段失败教训。
四、第三轮:行为面 + Manager Round(45 min)
4.1 BBG 文化关键词
- Curious(好奇心)
- Customer-obsessed(终端客户思维)
- Collaborative(跨团队协作)
- Pragmatic(务实,不堆轮子)
4.2 高频行为问题
- Tell me about a time you disagreed with a teammate.
- Describe a project that didn't go as planned.
- Why Bloomberg?(必问,不要把 BBG 说成 "another bank")
- What's a feature you'd add to the Bloomberg Terminal?
4.3 STAR 模板
- Situation:交代上下文,1 句话;
- Task:你的具体目标,1 句话;
- Action:你做了什么,2–3 个 bullet,强调技术 + 沟通;
- Result:量化结果(latency 降低 X%、用户量增长 Y%),1 句话。
注意:BBG 比其他银行类公司更看重好奇心——主动追问 terminal 功能、主动提技术替代方案,比"我做过 xxx"更加分。
五、整体备考时间表
| 周次 | 重点 |
|---|---|
| Week 1 | LC Bloomberg tag Top 100(先 Easy/Med) |
| Week 2 | 设计类专题:LRU / LFU / Hit Counter / Tweet |
| Week 3 | 系统设计 5 套:行情推送、Top-K、限流、CDC、消息总线 |
| Week 4 | 行为面 + Mock VO 3 场 |
六、常见问题 FAQ
Q1:Bloomberg VO 一共几轮?
A:通常 1 轮 phone + 3 轮 onsite/final,整体 4–5 轮,其中 onsite 1 天内完成。
Q2:Bloomberg 用 LeetCode 还是 HackerRank?
A:第一轮 coding 多用 CoderPad / HackerRank CodePair,onsite 多在白板或 Google Doc 写代码。
Q3:Bloomberg 系统设计要画图吗?
A:要。建议用 Excalidraw 提前练 5 张图(推送、限流、订阅、消息总线、缓存)。
Q4:Bloomberg 给 SDE I 的题难吗?
A:LC Medium 居多,少量 Hard。BBG 不强调难题,但讲清 trade-off 比写对代码更重要。
Q5:Bloomberg 挂了能再投吗?
A:可以,但建议等 6–12 个月,并最好换一个组(BBG 不同 team 招聘节奏差异较大)。
Q6:Bloomberg 给 H1B sponsor 吗?
A:给。BBG NYC 总部对国际员工友好,2026 春招继续 sponsor H1B。
Q7:BBG 面试可以全程 remote 吗?
A:phone + virtual onsite 都支持 remote;少数岗(trading floor)要求 onsite 现场。
Q8:Bloomberg vs Two Sigma / Citadel 哪个更难?
A:算法难度上 BBG 略低于 Citadel / TS,但 BBG 的项目深挖远比量化所深,对 SDE 的工程素养要求更高。
七、临场 Checklist
- 提前 15 分钟登入 Bloomberg Zoom,测网络
- 简历 PDF 打开备查
- 准备 5 个反问问题(一定要问 team 在做什么)
- STAR 模板默写 3 个项目
- 把 BBG 文化关键词写在屏幕旁
八、需要 Bloomberg VO 辅助?
我们提供 BBG 面试一对一辅助:
- 微信:Coding0201 · 立即联系
- Email:[email protected]
- Telegram:@OAVOProxy
服务内容:
- 当周 BBG 高频题与变体;
- 系统设计 mock + 反馈;
- VO 实时提示(行为/项目深挖)。
最后更新:2026-05-11 | 作者:oavoservice 面试组