← 返回部落格列表 Stripe 2026 New Grad OA 全解析:狀態機 + API 設計 + 實戰編碼|一畝三分地
Stripe

Stripe 2026 New Grad OA 全解析:狀態機 + API 設計 + 實戰編碼|一畝三分地

2026-05-12

Stripe 是全球領先的支付基礎設施公司,其面試風格與傳統科技公司截然不同——不追求 LeetCode Hard 的演算法技巧,而是考察生產級程式碼品質系統建模能力邊界條件處理

Stripe OA 概覽

維度 詳情
平台 HackerRank
時長 120 分鐘
題量 2-3 道程式題
難度 Medium(但邊界條件多)
考察重點 狀態機、字串解析、API 模擬、邊界處理

題型一:狀態機建模

題目描述

實現一個支付狀態機,支援以下狀態轉換:

class PaymentStateMachine:
    VALID_TRANSITIONS = {
        'PENDING': ['AUTHORIZED', 'DECLINED'],
        'AUTHORIZED': ['CAPTURED', 'VOIDED'],
        'CAPTURED': ['SETTLED', 'REFUNDED'],
        'SETTLED': [],
        'DECLINED': [],
        'VOIDED': [],
        'REFUNDED': []
    }
    
    def __init__(self, payment_id, amount):
        self.payment_id = payment_id
        self.amount = amount
        self.state = 'PENDING'
        self.history = [('PENDING', None)]
    
    def transition(self, new_state, metadata=None):
        if new_state not in self.VALID_TRANSITIONS.get(self.state, []):
            return {'success': False, 'error': f'Invalid: {self.state} -> {new_state}'}
        self.state = new_state
        self.history.append((new_state, metadata))
        return {'success': True, 'state': self.state}

題型二:欺詐檢測系統

from collections import defaultdict

class FraudDetector:
    def __init__(self):
        self.user_transactions = defaultdict(list)
        self.user_amounts = defaultdict(list)
        self.card_locations = defaultdict(list)
    
    def check_transaction(self, transaction):
        user_id = transaction['user_id']
        amount = transaction['amount']
        timestamp = transaction['timestamp']
        country = transaction['country']
        card_id = transaction['card_id']
        flags = []
        
        recent = [t for t in self.user_transactions[user_id] if timestamp - t < 300]
        if len(recent) >= 3:
            flags.append('VELOCITY_EXCEEDED')
        
        if self.user_amounts[user_id]:
            avg = sum(self.user_amounts[user_id]) / len(self.user_amounts[user_id])
            if amount > avg * 5:
                flags.append('AMOUNT_ANOMALY')
        
        if self.card_locations[card_id]:
            last = self.card_locations[card_id][-1]
            if last[1] != country and timestamp - last[0] < 3600:
                flags.append('GEO_ANOMALY')
        
        self.user_transactions[user_id].append(timestamp)
        self.user_amounts[user_id].append(amount)
        self.card_locations[card_id].append((timestamp, country))
        
        return {'flagged': len(flags) > 0, 'flags': flags}

題型三:API 請求解析

def parse_stripe_params(query_string):
    result = {}
    if not query_string:
        return result
    for pair in query_string.split('&'):
        if '=' not in pair:
            continue
        key, value = pair.split('=', 1)
        keys = parse_key(key)
        set_nested(result, keys, value)
    return result

FAQ

Stripe OA 和其他公司有什麼不同?

Stripe OA 最大的特點是題目貼近真實業務場景,不追求演算法複雜度,而是考察程式碼的正確性、可讀性和邊界處理能力。

Stripe New Grad 面試流程是什麼?

典型流程:OA → Phone Screen → Onsite(5輪:Coding + Debugging + Integration + System Design + Behavioral)。

Stripe 面試需要了解支付系統嗎?

不需要深入的支付行業知識,但了解基本概念(授權、捕獲、退款、爭議)會幫助你更快理解題目背景。

Stripe 的 Debugging 面試是什麼?

會給你一個有 bug 的程式碼庫,你需要定位並修復 bug。考察的是閱讀陌生程式碼和定位問題的能力。

Stripe 看重什麼樣的候選人?

能寫出「production-quality code」的工程師——程式碼正確、可讀、可維護,能處理邊界條件。


正在準備 Stripe OA?

oavoservice 提供專業的 Stripe OA/VO 輔助服務。

👉 立即添加微信:Coding0201獲取真題與輔助方案


聯繫方式

Email: [email protected]
Telegram: @OAVOProxy