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 /jobsGET /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;也可以通过联系我们页面发送岗位和轮次。

Previous
Previous

Coinbase 面试题型总结整理:OA、Onsite、Coding、Cultural Alignment 和 MLE 怎么准备

Next
Next

Bloomberg 面试题型总结整理:NG、Phone Screen、VO、System Design 和 Behavioral 怎么准备