最近帶同學刷了一套 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,可以来聊聊,针对你目前的水平给你一套更有针对性的准备方案。