← 返回博客列表 Citadel OA 面经 2026|30+ 学员实测题型、考点分布与平台体验
Citadel

Citadel OA 面经 2026|30+ 学员实测题型、考点分布与平台体验

2026-05-18

这不是一篇"刷题清单",而是 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 的学员,岗位覆盖:

核心结论:题型不再像 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 条,按出现频率排序)

  1. 没读完题就开写 — 5 人栽在此,题面"至少经过一个 keypoint"被忽略,写成普通最短路 0 分。
  2. 样例过了就提交 — 隐藏用例覆盖 n=1、空输入、全相同元素,至少 9 人因此从 100 掉到 60。
  3. 暴力解超时 — 数组类用 O(n²) 在 n=10^5 必 TLE,单调队列 / 双指针是底线。
  4. Python list pop(0) — O(n) 复杂度,应换 collections.deque
  5. 图论忘记建无向边 — 单向 append 漏掉反向,连通分量算错。
  6. 切屏触发 flag — Mac 学员尤其多,Cmd+Tab 看时间也算。建议提前关闭所有通知。
  7. 最后一分钟没提交 — HackerRank 不会自动提交未点 Submit 的题,至少 3 人因此 0 分。

八、提分技巧(学员真实总结)

8.1 边界值清单(开题先列)

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 调试技巧


九、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 一旦挂掉冷冻期半年起,第一次机会非常宝贵。我们持续追踪每周新出现的变体题,提供:

联系方式:


联系方式

Email: [email protected]
Telegram: @OAVOProxy
微信: Coding0201


最后更新:2026-05-18 | 作者:oavoservice 面试组 | 样本:33 位 2026 春招 Citadel SDE Intern 学员