Akuna Capital 是芝加哥本土起家、專注選擇權做市的 prop trading 公司,在華人留學生圈知名度不如 Citadel / Optiver,但實習生招聘量卻是同體量公司裡最大的之一(2026 全球 ~90 個實習 offer,其中 SDE ~40 + Trader ~30 + Quant Research ~20)。
它的 OA 走 HackerRank,70 分鐘 4-5 題,特點是程式設計 + 機率 + 業務知識混合——只刷 LeetCode 的同學經常 OA 通過但 onsite 掛掉。本文按 2026 春季最新候選人回饋,把 OA 題型、三個 track 差異、備考路徑講一遍。
Akuna Intern OA 概覽
| 維度 | 細節 |
|---|---|
| 平台 | HackerRank |
| 時長 | 70 分鐘 |
| 題量 | 4-5 題(含 MCQ + 程式題) |
| 難度 | LC Easy/Medium 演算法 + 2 道機率/數學 MCQ + 1 道情境題 |
| 通過線 | 程式題 90%+ AC 且 MCQ 全對 |
| 回饋週期 | 7-10 天 |
| Next Step | Super Day(3-4 輪 onsite,含 trading game) |
重要變化:2026 cycle 起 Akuna 把 SDE / Trader / Quant Research 三個 track 的 OA 題庫部分分開——SDE 偏演算法 + 系統題,Trader / Quant 偏機率 + 心算。一份 OA 通常包含 2 道公共程式題 + 2-3 道 track-specific MCQ。
真題一:Order Book Simulator(SDE / Trader 共有)
題目描述
實作一個簡化的 limit order book,支援以下指令:
ADD <order_id> <BUY|SELL> <price> <qty>
CANCEL <order_id>
PRINT
ADD 後必須立即做 matching:buy 與 sell 價格交叉則成交(按價格優先 + 時間優先),輸出每筆成交 MATCH <buy_id> <sell_id> <price> <qty>。
PRINT 輸出 best bid / best ask 與各自掛單總量。
解題思路
經典 limit order book,用兩個heap維護:
- buy_book:最大堆(取 best bid 最高價)
- sell_book:最小堆(取 best ask 最低價)
注意:HackerRank 上 70 分鐘拿不完所有點,但只做 ADD + matching 部分通常夠 80% AC。CANCEL 用 lazy deletion(id → cancelled set)即可,不要真的從 heap 裡刪。
Python 解法
import heapq
from collections import defaultdict
class OrderBook:
def __init__(self):
self.buy = [] # max heap: (-price, ts, id, qty)
self.sell = [] # min heap: (price, ts, id, qty)
self.qty = {} # id -> remaining qty
self.cancelled = set()
self.ts = 0
def _alive_top(self, heap):
while heap and (heap[0][2] in self.cancelled or self.qty.get(heap[0][2], 0) == 0):
heapq.heappop(heap)
return heap[0] if heap else None
def add(self, oid, side, price, qty):
self.ts += 1
self.qty[oid] = qty
matches = []
if side == "BUY":
while qty > 0:
top = self._alive_top(self.sell)
if not top or top[0] > price:
break
sp, sts, sid, sqty = top
trade = min(qty, self.qty[sid])
matches.append(("MATCH", oid, sid, sp, trade))
qty -= trade
self.qty[sid] -= trade
self.qty[oid] -= trade
if self.qty[sid] == 0:
heapq.heappop(self.sell)
if qty > 0:
heapq.heappush(self.buy, (-price, self.ts, oid, qty))
else: # SELL
while qty > 0:
top = self._alive_top(self.buy)
if not top or -top[0] < price:
break
bp, bts, bid, bqty = top
trade = min(qty, self.qty[bid])
matches.append(("MATCH", bid, oid, -bp, trade))
qty -= trade
self.qty[bid] -= trade
self.qty[oid] -= trade
if self.qty[bid] == 0:
heapq.heappop(self.buy)
if qty > 0:
heapq.heappush(self.sell, (price, self.ts, oid, qty))
return matches
def cancel(self, oid):
self.cancelled.add(oid)
self.qty.pop(oid, None)
時間複雜度:amortized O(log n) per ADD
坑:matching 時一定要先看 _alive_top——否則 heap 頂可能是已取消訂單,會輸出錯誤的 match。
真題二:Coin Flip Expected Value(Trader / Quant Research 共有)
題目描述(MCQ 風格)
一枚均勻硬幣最多拋 10 次,但出現連續兩次正面(HH)就停止。設 X = 拋擲總次數。求 E[X]。
解題思路
經典狀態期望——設 $E_0$ = 當前沒有連續 H 時還需要的期望次數,$E_1$ = 當前已經一次 H 時還需要的期望次數。
不帶上限時:
$$E_0 = 1 + 0.5 E_1 + 0.5 E_0 \implies E_0 = 6$$
但題目有「10 次封頂」約束,要 倒推 DP:
def expected_flips(N=10):
# E[k][s]: 還剩 k 次時、當前狀態 s (0 或 1 = 已 H) 的期望拋擲次數
# 狀態 2 = HH 已出現(吸收態,貢獻 0)
dp = [[0, 0] for _ in range(N + 1)]
for k in range(1, N + 1):
# 狀態 0:本次拋一次
dp[k][0] = 1 + 0.5 * dp[k - 1][1] + 0.5 * dp[k - 1][0]
# 狀態 1:本次拋一次;若 H 則結束,T 則回到 0
dp[k][1] = 1 + 0.5 * 0 + 0.5 * dp[k - 1][0]
return dp[N][0]
print(expected_flips(10)) # ≈ 5.97
答案:約 5.97 次,逼近無上限的 6。 為什麼這道題反覆出現:Akuna 想確認你懂得把「最多 10 次」這一類有限邊界用 backward DP 處理——不是簡單套公式。
真題三:Pricing Permutations(SDE 偏 algo 題)
題目描述
給定一個長度 n 的浮點數陣列 prices,對每個位置 i,求「以 i 為起點、嚴格遞增子序列」的乘積之和 mod 1e9+7(每條子序列貢獻 ∏ prices[k])。約束:n ≤ 1000,prices ∈ (0, 1e6)。
解題思路
類似 LC 300 LIS 的 sum-of-product 變種:
- $f[i]$ = 以 i 為起點的所有「嚴格遞增子序列乘積之和」
- 轉移:$f[i] = prices[i] \cdot (1 + \sum_{j > i, prices[j] > prices[i]} f[j])$
- 順序從右到左
Python 解法
MOD = 10 ** 9 + 7
def pricing_sum(prices):
n = len(prices)
f = [0] * n
for i in range(n - 1, -1, -1):
s = 1 # 子序列只含 i 自己
for j in range(i + 1, n):
if prices[j] > prices[i]:
s = (s + f[j]) % MOD
f[i] = int(prices[i] * s) % MOD
return sum(f) % MOD
時間複雜度:O(n²),n=1000 完全 OK 坑:浮點 × 整數模運算——題目通常承諾 prices 是整數;如果是浮點,最後取整再 mod。
三個 Track 的 OA 差異
| Track | 程式題 | MCQ 重點 | 推薦準備 |
|---|---|---|---|
| SDE | 資料結構 + 系統題(order book、cache、graph) | 時間複雜度、記憶體模型、並行基礎 | LC + CTCI System Design 章節 |
| Trader | 簡化版程式題 + 模擬 | 心算、機率、博弈論、做市基礎 | Heard on the Street + 100 Brainteasers |
| Quant Research | numpy / pandas + 簡單 stats | 期望值、變異數、布朗運動、option 定價直覺 | Hull《Options》+ Cornell ORIE 課件 |
強烈建議:投遞時只選一個 track——Akuna 的 ATS 會把「投三個 track」標記為「focus unclear」,影響 recruiter screen。
備考時間表(4 週)
| 週 | 重點 | 資源 |
|---|---|---|
| W1 | LC Medium 50 題(heap / DP / graph) | LeetCode 高頻面經 |
| W2 | 機率 100 題 + 心算 | Heard on the Street + Akuna 歷年 brainteaser |
| W3 | Order Book / Trading 業務基礎 | Hull《Options》+ Akuna 官方部落格 trading article |
| W4 | Mock OA 2-3 次 + onsite trading game 模擬 | 一畝三分地 Akuna 真題貼 |
FAQ
Q1:Akuna Capital Intern OA 難度怎麼樣?
程式難度 LC Easy-Medium,但整體難在「通過線高 + 時間緊」。70 分鐘 4-5 題,意味著平均每題 12-15 分鐘必須做完。SDE candidate 通常報告程式題全做 + MCQ 錯 1 個是過關閾值。
Q2:Akuna OA 可以用什麼語言?
HackerRank 預設提供 Python / C++ / Java。Trader / Quant Research candidate 多用 Python(寫得快),SDE 多用 C++(Akuna 工程團隊偏 C++ 文化)。建議:選你能 70 分鐘內 debug 完的語言,不要為了 culture fit 選不熟悉的。
Q3:Akuna OA 不過還能再投嗎?
12 個月內同一 track 不能重投,但換 track 可以(例如 SDE 掛了之後投 Quant Research)。Akuna 內部會保留之前 OA 成績,所以第一次 OA 寫得差,第二次門檻會變高——慎選 track。
Q4:Akuna OA 通過後多久 Onsite?
通常 1-2 週 進入 Recruiter Call → Super Day(一天連續 3-4 輪)。Super Day 包含一個 Trading Game:5-6 人組隊,30 分鐘內做市 + 套利。這是 Akuna 招牌環節——OA 拿滿分但 Trading Game 表現差的 candidate 70% 被拒。
Q5:Akuna Trading Game 怎麼準備?
模擬做市,常見情境:(1)給定某 asset 的真實價格分布,你定一個 bid-ask spread;(2)市場會向你 hit 或 lift,你要動態調整 inventory。核心技巧:永遠算 expected value、控制單筆損失上限、不要 chase prices。**油管搜「Akuna Trading Game」**有玩家復盤影片。
Q6:Akuna 實習生薪資如何?
2026 cycle 美國實習:
- SDE / Trader / Quant Research 三個 track起薪相同:$10-12K/月(按 10-12 週計算)
- Sign-on:$5K(首次投遞有)
- Return offer 率:~60%,全職 base $135-160K + $50-150K bonus(按業績)
聯絡方式
如果你正在準備 Akuna Capital、Optiver、IMC、Belvedere 這類選擇權做市 + prop trading 公司的實習 / 全職,OA 只是入門門檻——onsite 的 trading game + brainteaser 才是淘汰主力。我們整理了 2025-2026 cycle Akuna 真題 + Trading Game 復盤 + brainteaser 題庫,歡迎聯絡交流。
立即加入微信 Coding0201,獲取 Akuna OA 真題與 Trading Game 模擬。
- Email:[email protected]
- Telegram:@OAVOProxy