这不是一篇"刷题清单",而是 oavoservice 团队对 30+ 位 2026 春招 / 暑期 SDE Intern 学员的 Citadel OA 实测复盘。我们整理了他们在 HackerRank 上真正看到的题型、平台的小坑、最终得分分布,以及——所有人事后都会拍大腿的那 7 条踩坑。看完不一定能押到原题,但至少不会"白白送 70 分钟"。
一、写在前面:这 30+ 份复盘从哪来?
样本来自 2025-11 至 2026-05 期间,33 位通过 oavoservice 渠道做过 Citadel SDE Intern(含 Citadel Securities Software Engineer Intern)OA 的学员,岗位覆盖:
- Chicago / NYC SDE Intern(19 人)
- Citadel Securities Software Engineer Intern(9 人)
- Dallas Quant Tech Intern(5 人,OA 题与 SDE 一致)
核心结论:题型不再像 2024 年那样集中在"前缀和 + 滑窗",2026 年图论与实现题占比明显上升,HackerRank 还引入了全屏强制与剪贴板拦截两个新特性。
二、HackerRank 平台体验:真实候选人怎么说
| 维度 | 实测数据 | 学员吐槽点 |
|---|---|---|
| 入场流程 | 摄像头快照 + 身份证扫描(NYC 岗强制) | 部分学员摄像头权限弹窗卡住 5 分钟 |
| 全屏 | 强制全屏,切屏 3 次即弹警告 | Mac 上 Cmd+Tab 也算切屏 |
| 剪贴板 | 从外部粘贴会被屏蔽,但编辑器内可复制 | 想从 ChatGPT 粘贴的同学直接寄 |
| 编辑器 | 自带 Monaco,支持 Python 3.10 / C++17 / Java 17 | 没有自动补全,习惯 IDE 的人易抓瞎 |
| 时长 | 70 min(2 题)/ 90 min(3 题,少数) | 70 min 普遍认为偏紧 |
| 自测 | 允许 custom input,但只显示 stdout | 不能 print 隐藏用例 |
| 评测 | 提交即评,hidden cases 数量在 8–15 之间 | 通过率公开显示,会"看到自己挂掉" |
一位 CMU 学员的原话:"最大的惊喜不是题难,而是进考试前要交身份证扫描件,没准备好摄像头的同学多浪费 10 分钟。"
三、题型分布:30+ 份样本统计
我们把 33 份 OA 的所有题(合计 71 道,含部分 3 题套)按方向归类:
| 题型 | 占比 | 出现次数 | 难度(学员自评 1-5) |
|---|---|---|---|
| 数组 / 字符串 / 前缀和 | ~45% | 32 道 | 3.0 |
| 图论 BFS / 最短路径 | ~25% | 18 道 | 3.8 |
| DP / 区间 DP | ~20% | 14 道 | 4.0 |
| 实现题 / 模拟 / 设计 | ~10% | 7 道 | 3.5 |
得分分布(满分 100,每题平均权重):
[90-100] ███ 12%
[70-89] ██████ 37%
[50-69] ████████ 42%
[<50] ██ 9%
进入下一轮的及格线,根据 recruiter 反馈,通常在 70 分以上,但 Quant Tech 岗位有学员 62 分也进了 VO——岗位 headcount 紧的会放宽。
四、题型一:数组 / 前缀和(最高频)
学员还原题:水位平衡线
一条河上有 n 个传感器,给定数组
levels[i]表示第 i 个传感器读到的水位。要求选一段连续区间[l, r],使得区间内最大值与最小值之差不超过 D,问最长这样的区间长度。
10 份样本中 6 份遇到了它的变体(替换为"价格"、"温度"等语境)。
from collections import deque
def longest_balanced(levels, D):
n = len(levels)
max_q, min_q = deque(), deque() # 单调队列
l = 0
best = 0
for r in range(n):
# 维护最大值单调递减
while max_q and levels[max_q[-1]] <= levels[r]:
max_q.pop()
max_q.append(r)
# 维护最小值单调递增
while min_q and levels[min_q[-1]] >= levels[r]:
min_q.pop()
min_q.append(r)
# 收缩左端点直到合法
while levels[max_q[0]] - levels[min_q[0]] > D:
l += 1
if max_q[0] < l:
max_q.popleft()
if min_q[0] < l:
min_q.popleft()
best = max(best, r - l + 1)
return best
复杂度:O(n) 时间,O(n) 空间。踩坑提醒:用朴素 O(n²) 会在 n=10^5 时挂一半隐藏用例,必须上单调队列。
五、题型二:图论 BFS / 最短路径
学员还原题:服务器集群最短延迟
数据中心有 n 台服务器,给定无向带权图
edges[i] = [u, v, w]表示链路延迟。某个请求需要从服务器s出发,经过至少一个关键节点(集合 K),再到达t。求最短延迟。
样本中 4 位学员遇到此题或变体("必须经过加油站"、"必须过中转仓")。
import heapq
def shortest_via_keypoint(n, edges, s, t, keypoints):
graph = [[] for _ in range(n)]
for u, v, w in edges:
graph[u].append((v, w))
graph[v].append((u, w))
def dijkstra(src):
dist = [float('inf')] * n
dist[src] = 0
pq = [(0, src)]
while pq:
d, u = heapq.heappop(pq)
if d > dist[u]:
continue
for v, w in graph[u]:
if d + w < dist[v]:
dist[v] = d + w
heapq.heappush(pq, (dist[v], v))
return dist
dist_s = dijkstra(s)
dist_t = dijkstra(t)
best = float('inf')
for k in keypoints:
if dist_s[k] + dist_t[k] < best:
best = dist_s[k] + dist_t[k]
return -1 if best == float('inf') else best
复杂度:O((V + E) log V)。踩坑:很多人用 BFS 求最短路忘了边带权,直接 0 分;一定要确认权重再选算法。
六、题型三:实现题 / 模拟
学员还原题:订单簿事件回放
给定时间序列事件
events,每条为(timestamp, side, price, qty, type),其中type ∈ {ADD, CANCEL, MATCH}。回放完所有事件后,返回剩余订单簿中买一价、卖一价及对应总量。
5 份样本含此题(Citadel Securities 岗高发)。
from sortedcontainers import SortedDict
def replay_book(events):
bids = SortedDict() # price -> qty (买盘,按价格降序取顶)
asks = SortedDict() # price -> qty (卖盘,按价格升序取顶)
orders = {} # order_id -> (side, price, qty)
for ts, oid, side, price, qty, etype in events:
if etype == 'ADD':
book = bids if side == 'B' else asks
book[price] = book.get(price, 0) + qty
orders[oid] = (side, price, qty)
elif etype == 'CANCEL':
if oid in orders:
s, p, q = orders.pop(oid)
book = bids if s == 'B' else asks
book[p] -= q
if book[p] <= 0:
del book[p]
elif etype == 'MATCH':
# 撮合:从对手盘顶部吃掉 qty
book = asks if side == 'B' else bids
remaining = qty
while remaining > 0 and book:
top_price = book.keys()[0] if side == 'B' else book.keys()[-1]
fill = min(book[top_price], remaining)
book[top_price] -= fill
remaining -= fill
if book[top_price] == 0:
del book[top_price]
best_bid = (bids.keys()[-1], bids[bids.keys()[-1]]) if bids else None
best_ask = (asks.keys()[0], asks[asks.keys()[0]]) if asks else None
return best_bid, best_ask
复杂度:O(E log P),E 为事件数,P 为唯一价格数。踩坑:HackerRank 默认环境自带 sortedcontainers,但 C++ 学员要用 std::map 而非 unordered_map。
七、学员踩坑总结(7 条,按出现频率排序)
- 没读完题就开写 — 5 人栽在此,题面"至少经过一个 keypoint"被忽略,写成普通最短路 0 分。
- 样例过了就提交 — 隐藏用例覆盖 n=1、空输入、全相同元素,至少 9 人因此从 100 掉到 60。
- 暴力解超时 — 数组类用 O(n²) 在 n=10^5 必 TLE,单调队列 / 双指针是底线。
- Python list
pop(0)— O(n) 复杂度,应换collections.deque。 - 图论忘记建无向边 — 单向 append 漏掉反向,连通分量算错。
- 切屏触发 flag — Mac 学员尤其多,
Cmd+Tab看时间也算。建议提前关闭所有通知。 - 最后一分钟没提交 — HackerRank 不会自动提交未点 Submit 的题,至少 3 人因此 0 分。
八、提分技巧(学员真实总结)
8.1 边界值清单(开题先列)
- n = 0 / n = 1
- 全相同 / 全不同元素
- 极端规模(10^5 ~ 10^6)
- 负数与零
- 重复输入(图中重边、订单簿同价同量)
8.2 70 分钟时间分配(实测最优)
| 时段 | 任务 | 关键动作 |
|---|---|---|
| 0-5 min | 通读 2 题 | 标"稳"和"赌",先做稳的 |
| 5-25 min | 第 1 题 | brute force → 优化 → 自测 3 个边界 |
| 25-55 min | 第 2 题 | 写不完也要交一个 50% 解 |
| 55-65 min | 回头补隐藏用例 | 改边界检查,最容易加分 |
| 65-70 min | 双题确认提交 | 看到 "Submitted" 状态 |
8.3 调试技巧
- 不要 print 调试,改用 assert 在关键节点。
- 自测时手算 1 个 n=3 的小用例,比跑 sample 更能抓 bug。
- Python 用
if __name__ == '__main__':包住测试代码,提交前注释掉,避免误触发。
九、FAQ
Q1:Citadel OA 2026 多少分能进 VO?
A:根据 33 位学员反馈,SDE Intern 主流通过线在 70/100,Citadel Securities 偏严要 75+,Quant Tech 岗有学员 62 分进 VO(headcount 紧)。分数不是唯一标准,隐藏用例命中率、代码风格、提交时间都被参考。
Q2:HackerRank 这次的"全屏强制"严格吗?挂代理或开虚拟机会被发现吗?
A:全屏切屏 3 次会弹 warning,第 4 次直接终止。虚拟机本身不被检测,但摄像头快照若识别为黑屏 / 静态图,会被人工 review。强烈建议正常环境作答。
Q3:Citadel OA 和 Citadel Securities OA 题型一样吗?
A:核心算法重叠 ~70%,但 Citadel Securities 实现题占比更高(订单簿、撮合、做市模拟),且题面带交易语境。30+ 学员里,Citadel Securities 9 人中有 6 人遇到订单簿类。
Q4:挂掉之后多久能再投?
A:官方冷冻期 6 个月,但同年内换岗位(如 Intern → New Grad、Chicago → NYC)可再投。建议挂掉立即复盘,写 OA 后总结发给 recruiter,留个印象。
Q5:Python 写 Citadel OA 会因为速度被卡吗?
A:33 位学员里 22 人用 Python,只有 2 人遇到 TLE——且都是 O(n²) 算法。在 n ≤ 10^6 内,Python 只要复杂度对就够用。C++/Java 优势在常数,但写起来慢,性价比未必更高。
十、需要 Citadel OA 当周高频题 / 真题复盘?
Citadel OA 一旦挂掉冷冻期半年起,第一次机会非常宝贵。我们持续追踪每周新出现的变体题,提供:
- 当周高频题 + 学员复盘库(30+ 份持续更新)
- HackerRank 同款节奏的 70 min 限时模拟
- OA 代做(满分通过)/ VO 实时辅助
- 简历优化与 Citadel referral 渠道对接
联系方式:
- 微信:Coding0201 · 立即咨询
- Email:[email protected]
- Telegram:@OAVOProxy
联系方式
Email: [email protected]
Telegram: @OAVOProxy
微信: Coding0201
最后更新:2026-05-18 | 作者:oavoservice 面试组 | 样本:33 位 2026 春招 Citadel SDE Intern 学员