Citadel 面试题型总结整理:SWE Intern、OA、Phone Screen、QT/QR 和 Leadership 怎么准备
Citadel 面试题型总结整理:SWE Intern、OA、Phone Screen、QT/QR 和 Leadership 怎么准备
Citadel/Citadel Securities 的面试节奏通常偏快,技术轮对正确性、复杂度和实现速度要求高。近期面经里,SWE Intern/New Grad OA、phone screen、optimization、QT/QR、final leadership call 都有出现。准备时要把算法速度和工程表达一起练。
本文基于近期公开面经标题和本地整理信号,不代表官方流程。
近期面经信号
- SWE Intern/NG 常见 OA、phone screen、一轮游或多轮。
- QT/QR 方向有数学、概率、统计、研究面试信号。
- OA 里出现优化题、90 min assessment。
- 部分流程后期有 final leadership call。
面试真题题目合集
下面是 Citadel 相关面经里出现过的题目和题型摘要:
- Employee office intervals:找最大 team。
- Office intervals:至少一个 core employee 与所有人 overlap。
- Wildcard
*string matching。 - Round-robin task scheduler。
- Job scheduler design。
- Simulate stock trading system。
- Order book:buy/sell order。
- Order book:fill/cancel/get_status。
- Partial fill 和 order state。
- Cloud design / project deep dive。
- OA:Grace Hopper text / string 类题。
- QR:future data leakage。
- QR:IC / ICIR factor selection。
- QR:training objective。
- QR:overfitting。
- QR:LLM sentiment signal validation。
- QR:相关性和稳定性。
- Leadership / high-pressure discussion。
真题整理与分析
Citadel 的题节奏快、追问硬,SWE/QR/QT 方向差异很大。准备时要把算法、系统和金融数据思维分开。
真题 1:Employee office intervals / max team
题目大意:每个员工有在办公室的时间区间,要找最大 team,使得至少有一个 core employee 与所有其他人都有重叠。
考点分析: 可以把问题转成“选择一个 core interval,统计与它相交的 interval 数量”。如果要最大 team,枚举 core 或用 sweep line 优化。关键是区间闭开边界和重叠定义。
真题 2:Wildcard * string matching
题目大意:实现带 * 的字符串匹配,* 可匹配任意长度字符,常见要求递归或 DP。
考点分析: 递归写法容易指数爆炸。准备 memoization 或二维 DP,明确 * 匹配空串和消费一个字符两种转移。要测试空 pattern、连续 *、完全不匹配。
真题 3:Round-robin task scheduler
题目大意:实现 round-robin scheduler,按顺序调度任务,可能有任务加入、完成、不同优先级或时间片。
考点分析: 这题看数据结构和状态更新。基础用 queue;follow-up 会变成 priority + fairness,或多用户任务调度。要能说明 starvation 和复杂度。
真题 4:Simulate stock trading system
题目大意:模拟股票交易系统,支持 buy/sell order、撮合、取消、订单状态查询。
考点分析: 这是 order book。买单按价格高优先、时间早优先;卖单按价格低优先、时间早优先。要处理 partial fill、market/limit、cancel、trade log。Citadel 会追性能和边界。
真题 5:QR factor discussion
题目大意:量化研究方向会问 future data leakage、IC/ICIR、factor selection、overfitting,以及 LLM sentiment 信号如何验证。
考点分析: 要能讲时间序列切分、out-of-sample、walk-forward validation、交易成本、lookahead bias、multiple testing。LLM sentiment 不能只说“相关”,要讲标签构造和稳定性。
高频题最优解速查
Employee office intervals / max team
最优解思路: 对每个 core interval,team size 是与它有交集的 interval 数量。预排序 starts 和 ends:overlap count = starts <= core.end 的数量 - ends < core.start 的数量。
复杂度: 排序 O(n log n),每个 core 二分 O(log n),总 O(n log n)。
面试要讲的边界: 区间开闭;core employee 是否必须属于 team;多个 core tie;时间相等是否算 overlap。
Wildcard * string matching
最优解思路: DP。dp[i][j] 表示 s 前 i 个字符和 pattern 前 j 个字符是否匹配。普通字符按相等转移;* 可以匹配空串 dp[i][j-1],也可以匹配一个字符 dp[i-1][j]。
复杂度: O(nm),空间可滚动到 O(m)。
面试要讲的边界: 连续 *;空字符串;pattern 全是 *;递归不加 memo 会指数爆炸。
Order book / stock trading system
最优解思路: 买单用 max-heap,卖单用 min-heap;同价按 timestamp。新买单与最低卖单撮合,新卖单与最高买单撮合。订单状态记录 remaining quantity。
复杂度: 每次撮合 O(k log n),k 是被撮合订单数。
面试要讲的边界: partial fill、cancel、market order、同价时间优先、订单状态幂等、trade log。
QR factor validation
最优解思路: 用严格时间切分,特征只能使用预测时点之前的数据。评估用 out-of-sample / walk-forward,指标看 IC、ICIR、turnover、交易成本后收益。
复杂度: 不是 coding 题,重点是实验设计和泄漏防护。
面试要讲的边界: lookahead bias、survivorship bias、multiple testing、过拟合、调参污染验证集。
可直接练习的答案骨架
Coding sample:Wildcard matching
def is_match(s, p):
n, m = len(s), len(p)
dp = [[False] * (m + 1) for _ in range(n + 1)]
dp[0][0] = True
for j in range(1, m + 1):
if p[j - 1] == "*":
dp[0][j] = dp[0][j - 1]
for i in range(1, n + 1):
for j in range(1, m + 1):
if p[j - 1] == "*":
dp[i][j] = dp[i][j - 1] or dp[i - 1][j]
elif p[j - 1] == s[i - 1]:
dp[i][j] = dp[i - 1][j - 1]
return dp[n][m]
OOD class definition:Order book
from dataclasses import dataclass
from enum import Enum
class Side(Enum):
BUY = "buy"
SELL = "sell"
@dataclass
class Order:
order_id: str
side: Side
price: int
quantity: int
timestamp: int
class OrderBook:
def add_order(self, order: Order):
raise NotImplementedError
def cancel_order(self, order_id: str):
raise NotImplementedError
def match(self):
raise NotImplementedError
System design:Trading system
flowchart LR
Client --> Gateway["Order Gateway"]
Gateway --> Risk["Risk Check"]
Risk --> Matching["Matching Engine"]
Matching --> Book[("Order Book")]
Matching --> Trades[("Trade Log")]
Trades --> Notify["Execution Reports"]
Trades --> MarketData["Market Data Feed"]
API design
POST /orders
DELETE /orders/{id}
GET /orders/{id}
GET /trades?symbol=...
Data model
orders(id, user_id, symbol, side, price, quantity, remaining_qty, status, created_at)
trades(id, buy_order_id, sell_order_id, symbol, price, quantity, created_at)
order_events(id, order_id, event_type, payload, created_at)
Citadel 面试里要讲价格优先、时间优先、partial fill、cancel 幂等和 append-only trade log。
题目逐题答案速查
Coding:employee office intervals max team
Sample code
import bisect
def max_team(intervals):
starts = sorted(s for s, e in intervals)
ends = sorted(e for s, e in intervals)
best = 0
for s, e in intervals:
started = bisect.bisect_right(starts, e)
ended_before = bisect.bisect_left(ends, s)
best = max(best, started - ended_before)
return best
Coding:round-robin scheduler
Sample code
from collections import deque
def round_robin(tasks, quantum):
q = deque(tasks)
order = []
while q:
task, remaining = q.popleft()
run = min(quantum, remaining)
order.append((task, run))
remaining -= run
if remaining > 0:
q.append((task, remaining))
return order
Coding:order book matching core
Sample code
def match_buy_order(buy, sell_heap, trades):
while buy.quantity > 0 and sell_heap and sell_heap[0].price <= buy.price:
sell = heap_pop_best_sell(sell_heap)
qty = min(buy.quantity, sell.quantity)
trades.append((buy.order_id, sell.order_id, sell.price, qty))
buy.quantity -= qty
sell.quantity -= qty
if sell.quantity > 0:
heap_push_sell(sell_heap, sell)
return buy
QR:factor validation checklist
答案骨架:
- 用 time split,不随机打乱时间序列。
- 特征生成只能用预测时点之前的数据。
- 报 IC、ICIR、turnover、交易成本后收益。
- walk-forward validation,防止调参污染。
- 对 LLM sentiment 特征要看稳定性、覆盖率和延迟。
System design:job scheduler
答案骨架: API:POST /jobs、GET /jobs/{id}、POST /jobs/{id}/cancel。Data model:jobs、job_attempts、workers。核心点:priority queue、lease、heartbeat、retry、dead letter queue。
准备重点
SWE Coding:准备高强度算法训练,覆盖数组、图、树、DP、heap、interval、binary search、optimization。要能快速写 bug-free 代码。
Complexity:Citadel 相关题常看复杂度和优化。每题都要能说清瓶颈和改进。
QT/QR:准备概率、期望、统计、市场直觉和研究表达。不要用 SWE 方式准备 QR。
Leadership:后期 leadership call 要准备动机、抗压、项目影响和团队合作。
7 天冲刺计划
- Day 1-3:高强度限时 coding。
- Day 4:专项练优化题。
- Day 5:如果是 QT/QR,补概率统计。
- Day 6:做一轮 phone screen mock。
- Day 7:准备 leadership 和 why Citadel。
常见失分点
- 代码速度不够,debug 时间过长。
- 只给 brute force,没有主动优化。
- QT/QR 候选人没有准备概率/统计表达。
- Leadership 轮动机太泛。
CTA
如果你已经拿到 Citadel 面试,建议做限时高强度 mock。你可以在服务和价格页面查看 coding 或 quant-style mock;也可以通过联系我们页面发送岗位和轮次。