这次分享一场北美 Optiver NG SDE 的完整面试流程。整体节奏可以用一个词形容:快。OA 通过后第二天就收到 HR Call,几乎不给你太多缓冲时间。整个流程非常偏工程底层能力,不走花哨路线,考察点也很贴合实盘交易系统的真实需求。
如果你之前准备的是偏产品型互联网公司,这场面试的风格会明显不一样,更强调 latency、memory、network、底层控制能力。

OA 阶段
OA 是常规 coding 形式,难度不算离谱,但非常看重实现质量和稳定性。边界条件、复杂度控制必须干净。Optiver 整体风格偏务实,不会故意出特别绕的题,但你必须写得足够扎实。
通过后很快进入 HR Call。
HR Call
HR 这一轮极其精简,只问两个问题:
- tight deadline 的项目怎么安排?
- why Optiver?
时间不长,但回答必须干脆。尤其是 why Optiver,如果只说“想做交易”“高频很酷”这种泛泛回答,会显得准备不足。最好结合做市商背景、工程驱动文化来讲。
第一轮技术面:基础能力 + 简单系统设计
第一轮偏基础,但问题都很实在,不会给你太多思考铺垫。
一开始是内存计算题。题目给出一个包含 1000 个节点的链表,每个节点包含一个 int 和一个指针,int 范围是 0 到 16 million,问整个链表占用多少空间。这里考察的不只是 int 需要多少 bit,还包括指针大小、64 位机器环境、结构体对齐等问题。如果只算 4 字节 int + 8 字节指针,很可能会漏掉 alignment 细节。
接着是语言对比,重点围绕 C++ 和 Java。核心在垃圾回收机制差异、内存管理方式、RAII、确定性析构等。需要解释为什么低延迟场景更偏向 C++,GC 带来的 pause、不可控延迟都是关键点。
最后是一个基础 System Design,类似设计 Ticketmaster 票务系统。主要讨论高并发抢票、防止超卖、锁机制以及数据一致性问题。这部分难度不算高,但面试官会看你是否能结构化地讲清楚系统模块。
整体来说第一轮是在确认你的基础是否扎实。
第二轮技术面:底层交易系统设计
这一轮是整场面试的核心,明显贴近 Optiver 的业务场景。
题目是:假设你作为初创交易公司 CTO,在阿姆斯特丹交易法兰克福交易所 BMW 股票,只实现 buy/sell 功能,设计完整交易系统。
讨论从服务器部署开始。是否 colocate 在交易所机房?网络距离对延迟的影响如何衡量?是否需要主备架构?这些问题都围绕 latency 展开。
随后进入网络设计。行情链路和下单链路是否分开?TCP 还是 UDP?一般行情用 UDP 追求低延迟,下单用 TCP 保证可靠性。是否需要自定义协议,如何处理丢包、重传、顺序问题,这些都会被追问。
然后是系统模块划分。通常会拆成 Market Data Handler、Strategy Engine、Order Manager、Risk Control、Gateway 等模块。模块之间通信如何实现,是用共享内存、消息队列,还是 lock-free queue?是否需要单线程 event loop?线程模型怎么设计?
最后会问容错和风控,比如断线重连机制、订单重发策略、Kill Switch 设计等。这一轮基本全程偏底层架构思考,如果没有交易系统相关知识储备,会比较吃力。
第三轮技术面:Coding + OOD
第三轮转为 coding 加面向对象设计,场景是电商,但本质还是考系统抽象能力。
题目给定库存流和订单流两个接口,实时传输数据,需要实现一个 leaderboard service。当出现有利可图的新订单时,通过 display 接口推送给交易员,并按利润从大到小排序。
算法难度不算特别高,但题目篇幅很长,细节很多。你需要考虑如何设计类结构,如何维护利润排序结构,是否使用优先队列或有序容器,如何避免重复计算,以及是否涉及多线程安全。
面试官更看重的是代码结构是否清晰、接口是否合理、数据更新是否高效,而不是让你写复杂算法。
了解更多
我们长期跟进北美 NG / Intern / Experienced SDE 面试流程,对高频题型、追问方向、工程细节深挖点都非常熟悉。无论是 OA 阶段的节奏把控,还是 VO 中的高强度 coding + system 深挖,我们都有成熟的模拟体系和实战 面试辅助 支持。