Optiver 阿姆斯特丹 / 芝加哥 / 雪梨三地的 SWE 職位在 2026 春招繼續開放,OA 仍由 HackerRank / 自研平台二選一發放。我們結合一畝三分地最近 90 天發帖整理:題型基本固定在 Order Book 撮合、Trading Sequences 數列模擬、Allocation 分配 三條主線,每條都對應一道核心演算法 + 一段業務封裝。下面按真題密度排序拆解,並補充 OA輔助 的具體接入方式。
Optiver SWE OA 概覽
| 維度 | 詳情 |
|---|---|
| 平台 | HackerRank / 自研線上 IDE |
| 時長 | 70–90 分鐘 |
| 題量 | 2–3 道(含 1 道偏 simulation) |
| 難度 | LC Medium 為主,1 道帶 Hard 收尾 |
| 評分 | 全自動判題 + 隱藏 corner case |
| 反饋 | 一畝三分地 2026 帖子約 65% 反饋三題全過即進下一輪 |
題型一:Order Book 撮合
題目描述
實作一個最小可行的 Limit Order Book,支援 add(side, price, qty) 與 match() 兩個操作。每次呼叫 match() 撮合所有可成交對,回傳成交序列 [(buy_id, sell_id, price, qty), ...]。
Python 解法
import heapq
from collections import defaultdict
class OrderBook:
def __init__(self):
self.buys = []
self.sells = []
self.qty = defaultdict(int)
self.ts = 0
def add(self, side, price, qty, oid):
self.ts += 1
self.qty[oid] = qty
if side == 'B':
heapq.heappush(self.buys, (-price, self.ts, oid))
else:
heapq.heappush(self.sells, (price, self.ts, oid))
def match(self):
fills = []
while self.buys and self.sells and -self.buys[0][0] >= self.sells[0][0]:
bp, _, bid = self.buys[0]
sp, _, sid = self.sells[0]
q = min(self.qty[bid], self.qty[sid])
fills.append((bid, sid, sp, q))
self.qty[bid] -= q
self.qty[sid] -= q
if self.qty[bid] == 0:
heapq.heappop(self.buys)
if self.qty[sid] == 0:
heapq.heappop(self.sells)
return fills
時間複雜度:每次 match 平均 O(k log n),k 為本輪成交單數。
題型二:Trading Sequences
題目描述
給定每秒成交價陣列 prices[],找出最長非遞減子段且子段平均價 ≥ 全域均價。
Python 解法
def longest_strong_run(prices):
if not prices:
return 0
avg = sum(prices) / len(prices)
best = cur_len = 0
cur_sum = 0
start = 0
for i, p in enumerate(prices):
if i > 0 and prices[i] < prices[i - 1]:
start = i
cur_sum = 0
cur_sum += p
cur_len = i - start + 1
if cur_sum / cur_len >= avg and cur_len > best:
best = cur_len
return best
時間複雜度:O(n)。這道題在一畝三分地反覆出現,注意 >= 而非 >。
題型三:Allocation
題目描述
n 個客戶對一籃子標的下達申購量 demand[i],可用總量 S < sum(demand)。按「比例 + 整手取整 + 餘量按時間戳分配」規則給每個客戶分配最終成交量。
Python 解法
def pro_rata_allocate(demands, ts, S, lot=1):
n = len(demands)
total = sum(demands)
base = [(d * S) // total // lot * lot for d in demands]
used = sum(base)
leftover = S - used
order = sorted(range(n), key=lambda i: ts[i])
i = 0
while leftover >= lot and i < n:
idx = order[i]
if base[idx] < demands[idx]:
base[idx] += lot
leftover -= lot
i = (i + 1) % n if leftover >= lot else i + 1
return base
時間複雜度:O(n log n),瓶頸在排序。
一畝三分地高頻題速查
| 題型 | 90 天頻率 | 核心模板 |
|---|---|---|
| Order Book 撮合 | ★★★★★ | 雙堆 + 數量字典 |
| Trading Sequences | ★★★★ | 單調段 + 均價滑動 |
| Pro-rata Allocation | ★★★★ | 取整 + 餘量輪詢 |
| 價差最大化 | ★★★ | 單調棧 / 雙指標 |
| 字串行情解析 | ★★ | 正規 + 狀態機 |
OA輔助 實戰路徑
oavoservice 的 OA輔助 服務
針對 Optiver SWE OA 這種「全自動判題 + 隱藏 corner case」的特點,oavoservice 的 OA輔助 提供:
- 題型分桶:把一畝三分地 30 天內的 Optiver 帖按主線分為 Order Book / Trading / Allocation 三桶,每桶配 5 道變體
- 限時模擬:mentor 出題,按真實 70 分鐘節奏跑,結束後即時複盤 corner case
- OA 當天即時輔助:針對自研平台 OA 提供低延遲思路核對,特別針對 Allocation 這種規則細節多的題
- VO 銜接:進 onsite 後可直接切換 VO 輔助 套餐,mentor 不變
具體方案與報價,加微信 Coding0201 溝通。
從盲刷到順利通過 Optiver OA
這次很高興能幫助這批同學順利通過 Optiver SWE OA。我們發現很多同學準備 OA 時,光靠自己刷一畝三分地的帖子效率其實不高——一是題面會換,二是 Optiver 特別看 corner case 邊界,單靠 LC Medium 刷題量很難覆蓋。
如果你也在準備 Optiver、Citadel、Jane Street、IMC 這類量化 SWE 的 HackerRank / 自研平台 OA,感覺一個人複習方向模糊、節奏不穩,歡迎聯絡 oavoservice。我們會根據你的具體水平和弱點,提供專業的 OA 實戰輔助服務和一對一指導,把題型分桶、限時模擬、當天思路核對全部打通。
FAQ
Optiver SWE OA 難度和 LeetCode 比是什麼水平?
主體 LC Medium,但每場至少有一道帶 Hard 級 corner case 收尾的 simulation 題,需要你在 70–90 分鐘內同時處理演算法 + 業務規則。
Optiver 哪幾個城市的 OA 題庫一致?
阿姆斯特丹、芝加哥、雪梨三地題庫 80% 共享,少量本地化變體。一畝三分地反饋過最近批次三地 Order Book 題完全相同。
自研平台和 HackerRank 平台有什麼區別?
自研平台允許你自己寫測試用例,但隱藏 case 更嚴;HackerRank 給出 sample case 但不允許自訂執行環境。建議兩套都練。
OA 沒過冷卻期多久?
通常 6 個月,跨地區辦公室單獨計數。換職位(如 SWE → Trading)一般另算池子,可以更早再投。
正在準備 Optiver SWE OA / VO?
oavoservice 長期追蹤 Optiver / Citadel / Jane Street / IMC 等量化機構的 OA + VO 真題。我們的 mentor 來自一線做市 / 自營團隊,可以提供 題型分桶、限時模擬、自研平台即時輔助、行為面劇本 等 OA輔助 服務。
👉 立即加微信:Coding0201,獲取 Optiver 高頻題與 OA輔助 方案。
聯絡方式
Email: [email protected]
Telegram: @OAVOProxy