最近带同学刷了一套 Two Sigma OA ,题目不难,但非常考思维建模。和普通大厂 OA 不一样,它更偏真实场景(比如流量统计、资源优化),关键不在写代码,而在于能不能快速把问题抽象成正确模型。很多同学不是卡在实现,而是卡在“怎么想”。这套 OA 区分度挺高:会建模的很快 AC,不会的容易直接卡住。
下面整理一下这次的真题和核心思路,给大家一个参考。

Two Sigma OA 基本信息
- 平台:通常是 HackerRank / CodeSignal
- 时长:75分钟
- 题量:2题
- 难度:Medium → Medium+(偏思维)
题目 1:服务器流量监控
題目描述
在一个客户端 – 服务器架构中,有 n 个客户端和 1 台服务器。每个客户端与服务器的交互从时间 start[i] 开始,到时间 end[i] 结束(端点时间也计入交互时长)。
最大流量的定义是:服务器同时处理的最大并发交互数。
请找到最早出现最大并发客户端数的时间点。
示例
給定 start = [1, 6, 2, 9],end = [8, 7, 6, 10]
表格
| 時間 | 连接状态 | 活跃客户端数 |
|---|---|---|
| 1 | 客户端 1 接入 | 1 |
| 2 | 客户端 3 接入 | 1,3 → 2 |
| 3 | – | 1,3 → 2 |
| 4 | – | 1,3 → 2 |
| 5 | – | 1,3 → 2 |
| 6 | 客户端 2 接入 | 1,2,3 → 3 |
| 7 | 客户端 3 断开 | 1,2 → 2 |
| 8 | 客户端 2 断开 | 1 → 1 |
| 9 | 客户端 1 断开、客户端 4 接入 | 4 → 1 |
| 10 | – | 4 → 1 |
| 11 | 客户端 4 断开 | 0 |
最大并发数为 3,最早出现在第 6 秒,因此返回 6。
解題思路
事件拆分:将每个客户端的开始时间转为(时间, +1)连接事件,结束时间转为(时间, -1)断开事件。
事件排序:优先按时间升序排列;时间相同时,连接事件(+1)排在断开事件(-1)前面,保证端点时间计算准确。
遍历计算:顺序处理排序后的事件,动态维护当前并发连接数。每当并发数刷新最大值时,记录当前时间,该时间即为答案。
题目 2:最大吞吐量
題目描述
我们的系统中有一条由多个数据处理单元组成的流水线,每个单元的吞吐量由 throughput[i] 表示。这些单元按顺序串联,数据必须依次经过每个单元。因此,流水线的总吞吐量由吞吐量最小的单元决定,这个单元就是限制整体处理速度的瓶颈。
每个服务都可以独立扩容:
- 第
i个服务扩容 1 次的成本为scaling_cost[i] - 对服务扩容
x次后,它的吞吐量变为throughput[i] * (1 + x)条消息 / 分钟
给定两个长度为 n 的数组 throughput(各服务初始吞吐量)、scaling_cost(各服务单次扩容成本),以及一个整数 budget(总预算),请找到最优的扩容方案,使得最终服务的吞吐量(即流水线的总吞吐量)最大化。
示例
給定 throughput = [4, 2, 7],scaling_cost = [3, 5, 6],budget = 32
最优扩容方案如下:
表格
| 服务索引 | 扩容前吞吐量 | 扩容后吞吐量 | 扩容次数 | 单次扩容成本 | 总花费 |
|---|---|---|---|---|---|
| 0 | 4 | 12 | 2 | 3 | 6 |
| 1 | 2 | 10 | 4 | 5 | 20 |
| 2 | 7 | 14 | 1 | 6 | 6 |
扩容后,三个单元的吞吐量分别为 12、10、14,流水线的总吞吐量由最小值 10 决定,这是该预算下能达到的最大值,因此答案为 10。
函数要求
完成函数 getMaximumThroughput,参数如下:
int throughput[n]:每个服务的初始吞吐量int scaling_cost[n]:每个服务单次扩容的成本int budget:可用总预算
解題思路
用二分答案法,核心是猜测最终流水线的吞吐量T,寻找最大的可行值。具体而言,先确定T的合理范围,再对每个候选T进行可行性验证,计算每个服务至少需要扩容多少次才能使吞吐量不低于T,汇总所有服务的扩容总花费,若总花费不超过预算,则该T可行。之后根据可行性调整二分方向,可行则尝试更大的T,不可行则尝试更小的T,二分结束后,最大的可行T即为流水线能达到的最大吞吐量。
Two Sigma OA 2026 FAQ
Two Sigma OA 做完之后下一步是什么?
我这边后面接的是 Tech Screen。这一轮主要考察基础数据结构实现,面试官要求手写一个 hashmap,不能使用任何现成的 hashtable 库,需要自己实现 get 和 put 两个核心操作。整体思路是基于 bucket array配合 linked list 来解决 hash 冲突问题,同时还需要考虑设计的合理性,比如冲突处理方式、时间复杂度,以及是否支持扩容。难度不算特别高,但对基础掌握和代码细节要求比较扎实。
Two Sigma OA 支持哪些编程语言?有版本限制吗?
Two Sigma 的 OA 一般支持主流编程语言,比如 Python、Java、C++ 等,具体可选语言会在 OA 邀请邮件中明确说明。版本方面也不用太担心,常见的 Python 3.x、Java 8 及以上版本都是默认支持的。不同版本之间差异非常小,基本不会影响做题过程,也不需要做额外的兼容性处理,按照平时习惯使用即可。
关于 Two Sigma OA 的准备建议
如果你在准备 Two Sigma 这种偏建模、偏思维的 OA,很多时候卡的不是代码,而是思路怎么转化。这也是为什么不少同学刷了很多题,到了真正 OA 还是会卡住。我们这边长期在陪跑量化 / 大厂 OA,已经整理了一套比较成熟的题型框架和 OA輔助 经验。如果你时间比较紧,或者想更稳一点通过 OA,可以来聊聊,针对你目前的水平给你一套更有针对性的准备方案。