我最近刚刚刷完 Two Sigma 的 Online Assessment,顺利通过 OA 进入下一轮。Two Sigma Code Test 是申请 jobs at Two Sigma 时最关键的第一关,难度和风格都非常有特色。不同于传统大厂偏 LeetCode 高频题的 OA,Two Sigma 的题目更注重概率思维、数据结构设计和工程实现能力,时间压力也比较大。下面我把这次遇到的真实高频题型、详细解题思路和备战心得分享给大家。

Two Sigma Code Test 整体情况
- 平台:HackerRank(主流) / CodeSignal(部分岗位)
- 题量:通常 3 道 Coding 题
- 时长:90~120 分钟
- 难度:1 Easy-Medium + 1 Medium + 1 Medium-Hard
- 特点:概率与模拟题占比高,边界条件多,注重代码质量和优化意识
Two Sigma Code Test 越来越考察实际工程场景下的思考能力,单纯刷题已经不够,必须多练 simulation 和概率建模类题目。
高频真题详解
1. Efficient Regression V5
题目描述: 实现线性回归(Ordinary Least Squares),计算 N 个资产 x0~xN 与 N 个资产 y0~yN 之间的 univariate OLS regression coefficients(betas)。 不包含截距项(no intercept)。输入为两个 pandas DataFrame:dfx 和 dfy,每一行对应同一时间点的资产回报率。
解题思路:
- 对每一对 (xi, yi) 单独计算 beta = cov(x,y) / var(x)
- 注意处理 NaN 值和数据对齐
- 输出为 beta 列表
核心代码框架(Python):
import pandas as pd
import numpy as np
def compute_betas(dfx: pd.DataFrame, dfy: pd.DataFrame):
betas = []
for col in dfx.columns:
x = dfx[col].dropna()
y = dfy[col].dropna()
if len(x) == 0:
betas.append(0.0)
continue
beta = np.cov(x, y)[0,1] / np.var(x) if np.var(x) != 0 else 0.0
betas.append(beta)
return betas
2. Linear Interpolator
题目描述: 给定 n 个 knot points(x_knots, y_knots),实现线性插值函数。对于输入 x_input,返回对应的插值值。如果 x_input 在 knot points 范围外,进行外推(extrapolation)。
解题思路:
- 先对 knot points 按 x 坐标排序
- 使用二分查找找到 x_input 所在区间
- 计算线性插值(或外推)
3. Daily Temperature By Town
题目描述: 给定 P 个城镇和纽约市(NYC)多天的每日温度数据,回答以下 6 个问题:
- Q1:温度变化最大的城镇名称
- Q2:当 Town2 温度在 90~100 度时,NYC 的中位数温度
- Q3:用简单线性模型预测 NYC 温度,计算所有模型系数的绝对值之和(不含截距)
- Q4/Q5:找出对 NYC 温度预测最准确的单个或两个城镇(基于 MSE)
- Q6:找出联合预测效果最好的五个城镇
解题思路:使用 pandas 进行数据分组、相关性计算和线性回归拟合。
量化公司的 OA,已经不是传统互联网刷题逻辑了
做完 Two Sigma OA 后,我最大的感受其实不是题有多难,而是量化公司的信息差真的很明显。
网上很多旧面经现在参考价值已经没那么高了,尤其是近两年的 Code Test,考察方向变化挺快。很多人还在按传统 LeetCode 思路准备,但真实考试里已经越来越偏 simulation、order book、implementation stability 这种更接近实际交易场景的内容。
后来我接触到 Programhelp 后,才发现他们内部整理的高频题型和真实考试重合度确实挺高,包括订单簿、概率模拟、低延迟实现这些方向,很多内容都会提前覆盖到。相比自己盲目刷题,这种针对性的准备效率会高很多。
另外他们也会提供 OA 实战辅助 、模拟训练和节奏指导,对量化 OA 这种时间压力特别强的考试帮助还是挺明显的。如果最近也在准备 Two Sigma、Jane Street、Citadel 这些量化公司的同学,可以去了解看看。