Point72 OA 面经复盘|DFA 状态机 + 交易百分位,量化厂的题到底难在哪?

Point72 OA 的風格一直非常鮮明:它不像科技大廠那樣痴迷於複雜的動態規劃(DP)或圖論難題,而是更偏向“業務邏輯實現” 和“數據處理基礎”

這次遇到的三題,乍一看都是基礎題,但如果平時代碼寫得不夠“油”,很容易在邊界條件或自訂排序的細節上卡殼。整體體驗就是:題目讀起來很順,但要寫出 Bug-free 的程式碼,需要非常紮實的基本功。

Point72 OA Interview Experience Review

面試概覽|Point72 OA 整體流程與難度總結

这次 Point72 的 OA 整体难度适中,但对代码的鲁棒性要求很高。

測試流程

  • 平臺:HackerRank / CodeSignal(视批次而定)
  • 時長:約 70-90 分鐘(三題)
  • 語言限制:建議 Python / C++ / Java
  • 難度:中等(偏向模擬與數據統計)

核心考察點

  1. 模擬能力:能否將文字描述的邏輯(如狀態機)快速轉換為程式碼;
  2. 自訂排序:多條件排序是高頻考點;
  3. 統計思維:處理帶有權重的金融資料(價格 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 A with input char go to state B).
  • 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」這個專業名詞嚇到,本質就是「查表走路」。

我當時的做法是:

  1. 預處理:把給定的轉移規則整理成一個 HashMap 或二維數組(查表結構),Key 是 (Current State, Input Char),Value 是 (Next State)
  2. 模拟:设立 current_state = start_node
  3. 迭代:遍歷輸入字串的每一個字符,去查表更新 current_state
    • 坑點:如果遇到表格中不存在的轉移(沒路了),表示輸入不合法,直接返回 False
  4. 判定:遍歷結束後,檢查 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:

  1. Primary Sort Key: Frequency of the integer (Ascending). The numbers that appear fewer times come first.
  2. 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。

我的解法:

  1. 統計頻率:先過一遍數組,用 Hash Map (或 Python 的 Counter) 记录每个数的出现次数。
  2. 重寫排序規則
    • 排序的 Key 變成一個 Tuple:(frequency, value)
    • 直接呼叫語言內建的 Sort 函數。

程式碼實作上的小技巧:

在 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 特色的一道题。

这题不能简单地把价格放入数组取下标,因为每个价格有不同的“权重”(成交量)。

核心邏輯

  1. 排序:首先必須將記錄按 Price 從小到大排序。
  2. 计算总量:遍歷所有紀錄,算出總成交量 Total_Volume
  3. 定位目标:計算目標排名的位置 Target_Rank = Total_Volume * (Percentile / 100)
  4. 前綴和掃描
    • 再次遍歷排序後的記錄,維護一個 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,直通面試!

author avatar
jor jor
END
 0