← 返回部落格列表
Ramp

Ramp OA / Ramp CodeSignal 2026 攻略|SDE 線上測評 4 題完整解析

2026-05-10

一句話摘要:Ramp OA 是 CodeSignal Industry 風格的 4 題遞增設計——一道貫穿全場的「銀行交易系統」,每題在前一題基礎上加新規則。關鍵不是會演算法,而是能不能乾淨地組織程式碼。

Ramp 是美國知名的 B2B 財務自動化(公司卡 + 報銷 + 帳單支付)獨角獸,工程文化非常推崇「reliability」,因此 OA 完全模仿真實業務——你做的每一道題都像在 build 一個 mini banking core。這篇文章按 2026 年最新真題給出完整解析。


一、Ramp OA 基本資訊

項目 詳情
平台 CodeSignal Industry Coding Framework
時長 70 分鐘
題數 4 道(遞增式:Level 1 → Level 4)
語言 Python / TypeScript / Go / Java
通過線 通常 3 道全 AC + 第 4 道部分通過
測試用例 每題 ~15 個 hidden tests

最大特點:4 道題共享同一個資料模型(帳戶、交易、退款),後題在前題程式碼上擴充。這意味著:


二、4 道題完整解析(Bank Transaction System)

Level 1:基礎帳戶操作

題目:實現 4 個 API:

思路:HashMap 存帳戶餘額 + HashMap 存累計支出。

class BankSystem:
    def __init__(self):
        self.balances = {}
        self.outgoing = {}

    def create(self, ts, acc):
        if acc in self.balances:
            return ""
        self.balances[acc] = 0
        self.outgoing[acc] = 0
        return "true"

    def deposit(self, ts, acc, amt):
        if acc not in self.balances:
            return ""
        self.balances[acc] += amt
        return str(self.balances[acc])

    def pay(self, ts, acc, amt):
        if acc not in self.balances or self.balances[acc] < amt:
            return ""
        self.balances[acc] -= amt
        self.outgoing[acc] += amt
        return str(self.balances[acc])

    def top_k(self, ts, k):
        ranked = sorted(self.outgoing.items(),
                        key=lambda x: (-x[1], x[0]))
        return ", ".join(f"{a}({v})" for a, v in ranked[:k])

Level 2:轉帳與時間排序

新增 API

注意:轉帳要保證原子性(任一帳戶失敗則全失敗)。

def transfer(self, ts, src, tgt, amt):
    if src == tgt or src not in self.balances or tgt not in self.balances:
        return ""
    if self.balances[src] < amt:
        return ""
    self.balances[src] -= amt
    self.balances[tgt] += amt
    self.outgoing[src] += amt
    return str(self.balances[src])

Level 3:定時退款(Refund Queue)

新增 API

思路:用最小堆維護待執行退款,每次 API 呼叫前 flush 到當前時間。

import heapq

class BankSystem:
    def __init__(self):
        self.balances = {}
        self.outgoing = {}
        self.pending = []

    def _flush(self, now):
        while self.pending and self.pending[0][0] <= now:
            ts, acc, amt = heapq.heappop(self.pending)
            if acc in self.balances:
                self.balances[acc] += amt

    def schedule_refund(self, ts, acc, amt, delay):
        self._flush(ts)
        if acc not in self.balances:
            return ""
        heapq.heappush(self.pending, (ts + delay, acc, amt))
        return "true"

關鍵易錯點:每個 API 入口都要先呼叫 _flush(ts),否則後續 query 會讀到過期資料。


Level 4:消費限額(Spending Limit)

新增 API

思路:每個帳戶維護一個雙端佇列記錄最近支出 (timestamp, amount),每次 PAY 前清理過期紀錄。

from collections import deque

class BankSystem:
    def __init__(self):
        self.balances = {}
        self.outgoing = {}
        self.pending = []
        self.limits = {}
        self.recent_pay = {}

    def set_limit(self, ts, acc, limit, window):
        if acc not in self.balances:
            return ""
        self.limits[acc] = (limit, window)
        self.recent_pay.setdefault(acc, deque())
        return "true"

    def pay(self, ts, acc, amt):
        self._flush(ts)
        if acc not in self.balances:
            return ""
        if acc in self.limits:
            limit, window = self.limits[acc]
            dq = self.recent_pay[acc]
            while dq and dq[0][0] < ts - window:
                dq.popleft()
            recent_total = sum(a for _, a in dq)
            if recent_total + amt > limit:
                return ""
        if self.balances[acc] < amt:
            return ""
        self.balances[acc] -= amt
        self.outgoing[acc] += amt
        if acc in self.limits:
            self.recent_pay[acc].append((ts, amt))
        return str(self.balances[acc])

複雜度:每次 PAY 均攤 O(1)(雙端佇列)。


三、4 題難度與時間分配

題號 難度 推薦用時 關鍵技巧
Level 1 8 min 乾淨的 HashMap + 排序
Level 2 ⭐⭐ 12 min 轉帳原子性
Level 3 ⭐⭐⭐ 20 min 優先佇列 + flush 機制
Level 4 ⭐⭐⭐⭐ 25 min 雙端佇列 + 限額檢查

時間預算:留 5 分鐘給 debug,不要追求 4 題全 AC,3 題 AC + 第 4 題部分通過 = 進面試


四、Ramp OA 備考策略

階段 週期 重點
基礎 1 週 LeetCode 設計題 30 題(LRU、Twitter、HashMap)
模擬 1 週 CodeSignal Industry Framework 官方 Bank/Inventory 模板
衝刺 3 天 Ramp 風格 4 題真題 + 時間分配

重要原則


五、FAQ:Ramp OA / Ramp CodeSignal 高頻問答

Q1:Ramp OA 多少分能進面?

通常 3 題全 AC + 第 4 題 50%+ 部分通過。CodeSignal 滿分 600,建議 ≥ 480。

Q2:Ramp OA 可以用 ChatGPT 輔助嗎?

官方禁止 AI 輔助。CodeSignal 部分版本會監控鍵盤行為與瀏覽器切換,作弊會被永久封禁。

Q3:Ramp OA 題庫會變嗎?

Bank System 模板半年內變化不大,但具體 API 名稱、欄位會換。所以重點是理解模式,不是背程式碼。

Q4:用 Python 還是 TypeScript?

Python 寫得最快。TypeScript 適合後端候選人,但 OA 階段不影響排名。

Q5:Ramp OA 之後流程是什麼?

OA 通過 → 1 輪 Recruiter Call → 1 輪 Phone Coding → Onsite(2 Coding + 1 SD + 1 BQ + 1 Hiring Manager)。

Q6:Ramp OA 看哪些 LeetCode 標籤?

Design + HashMap + Heap。重點:LC 146 (LRU), LC 355 (Twitter), LC 460 (LFU), LC 1396 (Subway Stat)。


六、外部連結資源


🚀 需要 Ramp OA / VO 輔助?

如果你正在準備 Ramp、Brex、Stripe、Mercury 等 Fintech 公司的 OA / VO,歡迎交流:可提供 CodeSignal Industry 風格題型拆解、設計題程式碼組織模板與 onsite SD 模擬。

👉 立即加微信:Coding0201取得真題與一對一備考方案


聯絡方式