Citadel interview questions | 2026 US 三轮技术面经(OA + Onsite)

1,559Times read

Citadel 跟大厂区别很大。不问LeetCode原题,不考八股。全程场景驱动,围绕交易系统聊。面试官是写交易系统的工程师,追问很深,会一直问到你不会为止。我顺利通过 OA 与三轮 Onsite,以下是详尽面经,包含 Citadel interview questions 、我的解答思路、面试官反馈以及备战建议。

Citadel interview questions | 2026 US 三轮技术面经(OA + Onsite)

第一轮:OA + Tech Screen

OA(90分钟) 两道算法 + 一道系统设计,时间很紧。

算法1:滑动窗口极值

实时价格流,固定窗口大小,每次滑动一格,要求 O(n) 返回窗口内 max 和 min。

解法:两个单调队列(双端队列)分别维护最大值和最小值候选。

  • 入队时弹出不满足单调性的元素;
  • 出队时判断队首是否滑出窗口。 重点处理窗口初始化和队列为空的边界。 写完代码后补充了时间/空间复杂度说明(为什么是 O(n) 而非 O(nk)),面试官很关注代码风格和注释习惯。

算法2:并发安全的订单簿

支持多线程插入/删除订单、价格查询、撮合。读写比约 7:3,高吞吐下保证一致性。

方案

  • 按价格档位分段加读写锁(std::shared_mutex),降低锁竞争;
  • 撮合跨价格层级时按固定顺序加锁防死锁;
  • 用无锁队列做写入缓冲,后台线程批量消费平滑延迟。 解释了不用全局锁(会成为瓶颈)和完全无锁(复杂度高易出错)的原因。用了原子操作 + memory order(release/acquire)。

系统设计:低延迟日志系统

交易系统产生海量日志,不能阻塞主路径,还需支持时间范围/关键词快速查询。

分层存储方案

  • 热数据:内存 Ring Buffer + 预分配内存池,写入 O(1);
  • 温数据:mmap 文件,利用 OS 页缓存,异步批量刷盘,零拷贝;
  • 冷数据:LSM-tree 压缩存储,适合查询; 额外提到 sendfile 零拷贝。 说明不用传统关系型数据库的原因(B+树随机 IO 延迟高)。

Tech Screen(45分钟)

自我介绍项目:学校做的分布式消息队列(Go)。 核心点:Topic 分片 + Raft 共识、sendfile 零拷贝、令牌桶背压、WAL 持久化。

追问

  • 吞吐翻倍如何水平扩展?→ 一致性哈希 + 动态再平衡,过渡期双写 + 幂等去重。
  • 节点宕机如何不丢不重?→ WAL 保证不丢,消息唯一 ID + 布隆过滤器 + Redis 消费者去重,实现 Exactly-Once 效果。

特别环节:用非技术语言解释分布式锁。

比喻:就像机场共享充电宝柜子,每人扫码拿唯一柜门号,防止冲突。面试官认可,认为和 Trader/Quant 沟通时这种表达很重要。

小概率题:策略胜率 55%,盈亏比 1:1,交易 100 次,至少盈利 60 次的概率? 用二项分布 + 正态近似(μ=55,σ≈4.97),得出约 15%-18%。强调真实交易更看重风控和生存能力。

第二轮:Onsite(60分钟)—— 全市场场景题

做市商场景 股票现价 100 美元,突然大额卖单砸盘,如何调整报价?

回答框架

  1. 正常报价:理论中间价挂单,动态 spread + 量,库存中性化;
  2. 订单流监控:买/卖单到达率失衡时拉宽 spread、减量;
  3. 极端应对:立即撤买单、触发熔断、限仓,波动率上升后进一步保守。

Fermi 估算:曼哈顿每天消耗多少杯咖啡? 假设白天总人口 300 万,分人群(白领、服务业、游客)估算日均消费,最终得出约 420 万杯。强调假设透明和逻辑链条。

底层实现:低延迟订单簿

  • 数据结构:std::map(红黑树)维护价格层级,每个价格对应 FIFO 订单队列;
  • 优化:无锁跳表、内存池、CPU 亲和性、缓存行对齐(alignas(64) 防伪共享)。

手撕:时间轮定时器(订单超时撤单) 分层时间轮(毫秒→秒→分钟),添加/删除 O(1),槽位级自旋锁 + 对象池。

第三轮:终面(60分钟)—— Tech Lead

Tech Lead面,一半技术一半行为面。

Why Citadel

Citadel Securities工程团队规模小但人均产出高,工程师代码直接影响当日盈亏。大厂写的模块可能只是大系统一环,离最终结果远。这里离问题域近,做什么为什么做都清楚。

Behavioral

实习时做回测框架,量化研究员认为功能正确就行不用管性能。我跑profiling定位热点函数,用数据沟通:优化后回测时间大幅缩短,策略迭代更快。对方同意后,用SIMD指令重写核心计算模块,回测速度提升40%且数值结果一致。后续其他研究员也用了这套代码。讲的时候结构:背景、冲突、行动、结果,突出数据驱动的沟通方式。

分布式交易系统设计

需求:全球跨时区交易,订单从纽约、伦敦、东京接入,路由到对应交易所。延迟毫秒级,可用性99.999%。

架构:

  • 多活数据中心:纽约、伦敦、东京、新加坡各部署完整服务,就近接入
  • DNS智能解析加Anycast路由,自动导向最近机房
  • 跨区域走专线或最优网络路径,避免公网延迟
  • 每中心内部:接入层做前置风控,撮合引擎在内存完成,交易网关连交易所

一致性:

  • 账户余额、持仓等全局数据用多主复制
  • 跨区域冲突用版本向量解决,写入带版本号,冲突按规则合并
  • 大部分场景接受最终一致性,延迟低于阈值内允许短暂不一致
  • 交易执行路径追求强一致性,用分布式事务或Saga模式

可用性:

  • 每层冗余,单机故障自动切备机
  • 心跳检测,秒级发现故障
  • 关键路径无状态或状态可快速重建
  • 熔断降级:某交易所连不上时缓存订单稍后重试,不影响其他交易所

追问跨区域延迟与一致性tradeoff:交易系统优先低延迟和可用性,一致性极端情况可短暂牺牲但最终收敛。同一用户多订单路由到不同区域,短期可能看到不一致,但执行结果以交易所确认为准,最终同步到全局状态。

反问环节

问应届生成长建议。面试官说少花时间学框架,框架会过时。把操作系统、网络、编译原理打扎实,理解计算机怎么工作。交易系统核心能力是在不确定条件下快速决策和权衡风险,不是看书能学会的,在真问题里练出来的。

从方向模糊到拿下Citadel Offer

这次 Citadel 面试能顺利通过,我最想说的是:一个人硬扛真的太难了。后来我找到了 Programhelp,他们的学长为我提供了全程 OA 实战辅助和面试深度辅导,包括真题预测、代码优化、系统设计推演和高强度模拟面试,让我在真实面试中明显更有底气和条理。

如果你也在准备 Citadel、Jane Street、NVIDIA、Point72 等高强度面试,感觉一个人复习效率低,强烈建议了解一下 Programhelp。他们专注提供 OA 实战辅助和面试指导,学长会直接跟你沟通,根据你的情况制定针对性方案。

有需要的同学可以直接联系 Programhelp 详谈。

author avatar
Jory Wang Amazon资深软件开发工程师
Amazon 资深工程师,专注 基础设施核心系统研发,在系统可扩展性、可靠性及成本优化方面具备丰富实战经验。 目前聚焦 FAANG SDE 面试辅导,一年内助力 30+ 位候选人成功斩获 L5 / L6 Offer。
End of text
 0