Optiver SWE VO 面经|两轮技术面后,C++ 设计和交易系统怎么答

Optiver VO 面经:C++ 设计与交易系统

Optiver 的技术面不只看代码能不能跑。C++ 结构写对以后,面试官会继续追问内存布局、边界行为和延迟代价;系统设计也要把数据从进来到落地的路径讲得很具体。

第一面:手写订单队列

题目:实现一个价格优先、时间优先的订单队列,支持新增、撤单、查询某一价格档的最佳订单,并说明在大量撤单后如何避免线性扫描。

解答思路:价格档用有序映射,档内订单用双向链表,订单 ID 指向链表节点和价格档。撤单时通过索引 O(1) 定位节点,再把空价格档删除。面试时要先确定买卖盘的排序方向,再说明节点回收策略;若改用数组搬移,撤单成本会在高频更新下放大。这份 New Grad 流程复盘 也提到,C++ 的 OOP 题会从补全函数一路追到优化。

第二面:定位行情程序的时间错位

题目:给出一段读取行情事件、聚合价格和输出快照的 C++ 代码。偶发情况下快照回退到旧价格,要求找出根因并补上回归测试。

解答思路:先把事件时间、接收时间和序列号分开打印,确认错位发生在排序前还是聚合后。聚合器只接受比当前序列号新的事件;同一序列号的重复包直接丢弃。测试至少覆盖乱序到达、重复包和某个交易标的短暂停牌后恢复三种路径。Optiver 的候选记录里出现过长段 Python 代码的错误定位和扩展性追问,相关面试条目 值得拿来做 Code Review 练习。

第三面:设计行情快照服务

题目:设计一个向多个内部策略进程提供最新盘口快照的服务。策略既要订阅实时变化,也要能在重连后拿到一致的初始状态。

解答思路:入口按交易标的分区写入 append-only event log;快照服务维护每个分区的最新版本,并把“快照版本 + 后续增量”作为重连协议。订阅端先确认快照版本,再消费同一分区中版本更大的事件。需要说明背压:慢消费者只保留最新快照和有限增量,超过阈值就要求重新同步。这样不会让一个落后的订阅者拖住主写入链路。候选经历中也出现过与交易和价格处理相连的技术、设计讨论,美国 SWE 面试流程记录 可作为复习清单。

面完后怎么复盘

把每轮答案收敛成三件事:数据怎样定位、更新怎样保证顺序、负载上来时怎样降级。若某个设计没有说明版本号或背压,下一次就从那里补起。项目追问则准备一个自己明确做过取舍的例子,讲清限制条件和最终指标即可。

FAQ

Optiver VO 更看重算法还是系统?

两边都要能落到实现。算法题写完后会看优化依据,系统题则会看数据结构、顺序保证和性能代价是否自洽。

C++ 必须写得多花哨吗?

不需要。资源归属明确、接口边界干净、测试能覆盖异常路径,比炫技的模板更有说服力。

参考来源

关于 CSINTERVIEWHELP

进 VO 之前,可以找 CSINTERVIEWHELP 做实时面试助攻和备考辅导。CSINTERVIEWHELP 深耕北美 IT 行业多年,已帮助万余名学生进入全球 500 强企业。导师来自一线大厂资深工程师和面试官,对 Optiver 这类注重工程文化的公司的面试套路很熟悉。无论是 OA 题型解析、OA 辅导、VO 辅助、VO 模拟面试、VO 面试陪练还是系统设计辅助,都可以获得更有针对性的准备方案:CSINTERVIEWHELP · 服务详情