這是一道非常經典的 Stripe "Stateful Stream Processing"(有狀態流處理)類型的題目。它考察候選人如何處理時間序列資料、如何設計高效的資料結構來查詢狀態,以及如何將業務規則轉化為程式碼邏輯。
題目描述
Part 1: 授權請求處理 (Authorization Requests)
Stripe 代表商戶接收付款請求。由於初期策略寬鬆,所有請求一律 APPROVE(批准)。 你需要處理一系列按時間順序到達的請求,並輸出格式化的日誌。
輸入格式:
timestamp, unique_id, amount, card_number, merchant
範例輸入:
5,R1,5.60,4242424242424242,bobs_burgers
10,R2,500.00,4242111111111111,a_corp
輸出格式:
<timestamp> <id> <amount> APPROVE
Part 2: 欺詐規則流 (Fraud Rules Stream)
為了降低風險,風控部門引入了「欺詐規則」。規則也是以流的形式即時更新的。
規則格式:
time, field, value
規則含義:
1, merchant, bobs_burgers: 從第 1 秒起,所有來自bobs_burgers的交易視為欺詐。20, card_number, 4242...: 從第 20 秒起,該卡號的交易視為欺詐。
規則特性:
- 規則生效後 永久有效。
- 規則 不溯及既往(只影響生效時間點及之後的交易)。
任務: 實作一個系統,同時接收「交易流」和「規則流」,對每筆交易進行判定。如果交易時間點匹配任何一條已生效的欺詐規則,則輸出 REJECT,否則 APPROVE。
oavoservice 解題思路分析
這道題的難點在於雙流合併與狀態查詢。
1. 資料結構選擇
由於規則是基於特定欄位(如 merchant 或 card_number)的,我們需要高效地查詢某個欄位是否被 ban。
- 推薦使用
HashMap<Field, HashMap<Value, ActiveTime>>。 - 例如:
rules["merchant"]["bobs_burgers"] = 1。這表示bobs_burgers從第 1 秒開始被 ban。
2. 判定邏輯
對於每一筆交易(假設時間為 T_trans):
- 檢查交易的
merchant是否在規則表中。如果在,且Rule_StartTime <= T_trans,則 REJECT。 - 檢查交易的
card_number是否在規則表中。如果在,且Rule_StartTime <= T_trans,則 REJECT。 - 否則 APPROVE。
3. 處理雙流順序
在實際面試中,輸入可能是兩個分開的 List,或者是一個混合的 Stream。
- 如果是兩個 List,需要先按時間戳歸並排序,或者在遍歷交易時,指標同步移動規則列表。
- 既然題目保證了時間有序,直接維護一個全域的 Rule Set 即可。
程式碼實作片段 (Python)
class FraudDetector:
def __init__(self):
# 記錄每種規則的生效時間
# key: field_name, value: { field_value: start_time }
self.rules = {
"merchant": {},
"card_number": {}
}
def add_rule(self, time, field, value):
# 如果同一實體有多次規則,保留最早的還是最新的?通常保留最早的生效時間
if value not in self.rules[field]:
self.rules[field][value] = int(time)
def check_transaction(self, time, merchant, card_num):
# 檢查 Merchant
if merchant in self.rules["merchant"]:
if self.rules["merchant"][merchant] <= time:
return "REJECT"
# 檢查 Card Number
if card_num in self.rules["card_number"]:
if self.rules["card_number"][card_num] <= time:
return "REJECT"
return "APPROVE"
想獲取本題完整程式碼與測試用例?
oavoservice 擁有最全的 Stripe 面試真題庫與通過驗證的 Standard Solution。我們的 VO 輔助服務不僅提供答案,更教你如何向面試官展示你的系統設計思維。
- 演算法優化:從 O(N) 到 O(1) 的效能提升技巧。
- 程式碼規範:符合工業級標準的變數命名與模組劃分。
立即諮詢 助你拿下 Stripe Offer。