Point72 OA 的风格一直非常鲜明:它不像科技大厂那样痴迷于复杂的动态规划(DP)或图论难题,而是更偏向 “业务逻辑实现” 和 “数据处理基础”。
这次遇到的三道题,乍一看都是基础题,但如果平时代码写得不够“油”,很容易在边界条件或者自定义排序的细节上卡壳。整体体验就是:题目读起来很顺,但要写出 Bug-free 的代码,需要非常扎实的基本功。
面试概览|Point72 OA 整体流程与难度总结
这次 Point72 的 OA 整体难度适中,但对代码的鲁棒性要求很高。
测试流程
- 平台:HackerRank / CodeSignal(视批次而定)
- 时长:约 70-90 分钟(三题)
- 语言限制:建议 Python / C++ / Java
- 难度:中等(偏向模拟与数据统计)
核心考察点:
- 模拟能力:能否将文字描述的逻辑(如状态机)快速转化为代码;
- 自定义排序:多条件排序是高频考点;
- 统计思维:处理带有权重的金融数据(价格 x 成交量)。
第一题:DFA String Validator
Problem:
You are given the definition of a Deterministic Finite Automaton (DFA), which includes:
- A set of states (integers).
- A set of transition rules (e.g., from state
Awith inputchargo to stateB). - A start state.
- A set of accept states.
Your task is to implement a function that takes a string as input and simulates the DFA. Return True if the simulation ends in an “accept state”, and False otherwise. If a transition is not defined for the current state and character, the string is rejected immediately.
思路
这题是计算机科学的基础,考察的是图的遍历/模拟。不要被“DFA”这个专业名词吓到,本质就是“查表走路”。
我当时的做法是:
- 预处理:把给定的转移规则整理成一个
HashMap或二维数组(查表结构),Key 是(Current State, Input Char),Value 是(Next State)。 - 模拟:设立
current_state = start_node。 - 迭代:遍历输入字符串的每一个字符,去查表更新
current_state。- 坑点:如果遇到表中不存在的转移(没路了),说明输入不合法,直接返回
False。
- 坑点:如果遇到表中不存在的转移(没路了),说明输入不合法,直接返回
- 判定:遍历结束后,检查
current_state是否在accept_states集合中。
总结:逻辑非常直白,重点是数据结构要选对,用 Hash Map 存图可以做到 $O(1)$ 的转移查询。
第二题:Custom Sort Analysis
Problem:
Given an array of integers, sort the array based on the following custom criteria:
- Primary Sort Key: Frequency of the integer (Ascending). The numbers that appear fewer times come first.
- Secondary Sort Key: The integer value itself (Ascending). If two numbers have the same frequency, the smaller number comes first.
思路
这道题是典型的**自定义排序(Custom Comparator)**问题,在 Python 中写起来非常丝滑,但如果用 C++ 或 Java 需要写好 Comparator。
我的解法:
- 统计频率:先过一遍数组,用 Hash Map (或 Python 的
Counter) 记录每个数的出现次数。 - 重写排序规则:
- 排序的 Key 变成一个 Tuple:
(frequency, value)。 - 直接调用语言内置的 Sort 函数。
- 排序的 Key 变成一个 Tuple:
代码实现上的小技巧:
在 Python 中一句 nums.sort(key=lambda x: (count[x], x)) 就能解决。这题主要考察你对标准库和 Lambda 表达式的熟练度,属于送分题,但一定要快准狠。
第三题:Transaction Percentile
Problem:
You are given a list of transaction records, where each record contains a Price and a Volume (number of shares traded at that price). You are also given a target Percentile (e.g., 50th percentile for median).
Find the price at which the cumulative volume exceeds or meets the target percentile of the total transaction volume.
思路
这是非常有 Hedge Fund 特色的一道题。
这题不能简单地把价格放入数组取下标,因为每个价格有不同的“权重”(成交量)。
核心逻辑:
- 排序:首先必须将记录按 Price 从小到大排序。
- 计算总量:遍历所有记录,算出总成交量
Total_Volume。 - 定位目标:计算目标排名的位置
Target_Rank = Total_Volume * (Percentile / 100)。 - 前缀和扫描:
- 再次遍历排序后的记录,维护一个
Current_Volume_Sum。 - 一旦
Current_Volume_Sum >= Target_Rank,当前这条记录的价格就是答案。
- 再次遍历排序后的记录,维护一个
这题的难点在于理解“加权中位数/百分位”的概念。它考察的不是复杂的算法,而是对业务数据的处理逻辑。
Point72 OA 常见问题 FAQ
💬 Q1:Python 会不会因为 sort 变慢而超时?
一般不会。HackerRank 对 Python 的时间限制比较宽容。只要你使用的是内置的 .sort() (Timsort, $O(N \log N)$) 而不是自己手写冒泡排序,性能是完全够用的。
💬 Q2:第三题需要处理浮点数精度吗?
通常需要。在计算 Target_Rank 时,要注意百分比乘法后的取整方式(Ceil 还是 Floor),题目描述里通常会给具体定义(例如“向上取整”),一定要仔细读题,差之毫厘谬以千里。
💬 Q3:OA 只有这几道题吗?
Point72 的题库相对固定,除了这几道,还有涉及字符串处理、矩阵操作的题目。建议多刷 Array 和 Hash Map 相关的 Medium 题目。
💬 Q4:部分 Test Case 没过怎么排查?
- 第一题:检查是否处理了“非法转移”(输入字符不在当前状态的边上)。
- 第二题:检查频率相同时,数值排序是否正确(是否是从小到大)。
- 第三题:检查百分位计算时的
Long类型溢出(如果成交量极大)以及Target_Rank的边界(比如正好压线的情况)。
想拿下 Point72 / Citadel / Two Sigma 等量化厂 OA?
量化基金的 OA 与传统科技公司不同,它们更看重数学直觉与数据处理的结合。
我们在 Programhelp 整理了各大 Hedge Fund 的最新真题题库。针对 Point72 这种偏重逻辑实现的 OA,我们提供:
- OA 全程辅助:覆盖 HackerRank / CodeSignal 平台,隐蔽安全。
- 语音实时提醒系统:在关键的排序逻辑和边界计算上给你实时提示,防范 Hidden Case 坑点。
- 真题复盘:带你刷通量化厂的高频题库。
如果你正在准备 Point72 或其他 Buy-side 公司的面试,欢迎联系我们,稳稳拿下 OA,直通面试!