← 返回博客列表
Stripe

Stripe 面試真題解析:Authorization Requests & Fraud Rules

2026-01-04

這是一道非常經典的 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

規則含義:

規則特性:

任務: 實作一個系統,同時接收「交易流」和「規則流」,對每筆交易進行判定。如果交易時間點匹配任何一條已生效的欺詐規則,則輸出 REJECT,否則 APPROVE

oavoservice 解題思路分析

這道題的難點在於雙流合併狀態查詢

1. 資料結構選擇

由於規則是基於特定欄位(如 merchantcard_number)的,我們需要高效地查詢某個欄位是否被 ban。

2. 判定邏輯

對於每一筆交易(假設時間為 T_trans):

  1. 檢查交易的 merchant 是否在規則表中。如果在,且 Rule_StartTime <= T_trans,則 REJECT。
  2. 檢查交易的 card_number 是否在規則表中。如果在,且 Rule_StartTime <= T_trans,則 REJECT。
  3. 否則 APPROVE。

3. 處理雙流順序

在實際面試中,輸入可能是兩個分開的 List,或者是一個混合的 Stream。

程式碼實作片段 (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 輔助服務不僅提供答案,更教你如何向面試官展示你的系統設計思維。

立即諮詢 助你拿下 Stripe Offer。