← 返回博客列表
Stripe

Stripe 面試真題解析:Brazil Receivables & Contracts

2025-12-30

這是一道極具 Stripe 業務特色的題目,背景設定在巴西的支付監管環境。它考察的是候選人對狀態管理時間線重疊處理以及複雜業務邏輯建模的能力。

題目描述

在巴西,當商戶透過信用卡收款時,這筆未來的收入(Receivable)可以作為資產進行註冊或交易。Stripe 需要根據監管要求,向中央註冊機構(Registry)匯報這些應收帳款。

Part 1: 註冊應收帳款 (Register Receivables)

給定一筆交易,你需要將其轉化為「應收帳款單元」。 通常一筆交易(Charge)包含:

你需要實作一個函數,將 Charge 註冊到 Registry。如果註冊成功,Registry 會返回一個唯一的 receivable_id

Part 2: 合約與更新 (Contracts & Updates)

商戶可能會與銀行簽署「預支合約」(Prepayment Contract),將未來的應收帳款抵押給銀行以換取現金。 這就引入了**「鎖」**的概念:一旦某筆 Receivable 被合約鎖定,Stripe 就不能隨意修改它(例如不能更改撥款日期或金額),除非先更新或取消合約。

輸入流:

挑戰: 當收到一個 Charge Update 時,你需要檢查該 Charge 對應的 Receivable 是否被任何 Active Contract 覆蓋。

oavoservice 解題思路分析

這道題的難點在於資料一致性狀態檢查

1. 實體關係建模

建議定義清晰的類別結構:

class Charge:
    id: str
    amount: int
    payout_date: str

class Receivable:
    id: str  # Registry 返回的 ID
    charge_id: str
    amount: int
    status: str

class Contract:
    id: str
    target_charge_ids: List[str]
    status: str # ACTIVE, CANCELLED

2. 衝突檢測邏輯

處理 Charge Update 時,必須進行「前置檢查」(Pre-check):

  1. 根據 charge_id 找到關聯的 receivable_id
  2. 查詢 ContractRepository,看是否存在 status == ACTIVE 且包含該 receivable_id 的合約。
  3. 關鍵點:注意合約的時間範圍。有些題目變種是合約只鎖定特定時間段內的應收帳款。

3. 冪等性與重試

與 Registry 的通信可能會失敗。面試官可能會問:如果調用 Registry 超時了怎麼辦?


覺得業務邏輯太複雜?

Stripe 的面試題往往充滿「業務細節陷阱」。oavoservice 的導師團隊均來自一線大廠,我們深知如何將這些複雜的業務需求拆解為簡單的 CRUD + 狀態檢查程式碼。

點擊獲取面試輔導