← 返回部落格列表 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 優勢在常數,但寫起來慢,CP 值未必更高。


十、需要 Citadel OA 當週高頻題 / 真題覆盤?

Citadel OA 一旦掛掉冷凍期半年起,第一次機會非常寶貴。我們持續追蹤每週新出現的變體題,提供:

聯絡方式:


聯絡方式

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


最後更新:2026-05-18 | 作者:oavoservice 面試組 | 樣本:33 位 2026 春招 Citadel SDE Intern 學員