Ramp 自 2024 年起把所有 SWE 岗位(NG / Backend / FullStack / Platform)都收口到同一份 CodeSignal Industry Coding 测评——题目复用率 ~60%,但评分门槛和岗位 mapping 一直在调整。本文不是题解清单,而是从工程师视角回答:"拿到 Ramp OA 邀请之后,我应该如何系统性准备?"
一、Ramp 招聘大局观(2026 H1)
| 维度 | 现状 |
|---|---|
| 总部 | NYC(80% HC) + 旧金山 + 远程少量 |
| 在招岗位 | SDE NG、Backend、FullStack、Platform、Data |
| 招聘平台 | Ashby + CodeSignal |
| OA 形式 | CodeSignal Industry Coding(4 题 70 分钟) |
| onsite 邀请 cutoff | 学员观察 ≥ 720 / 850 |
| 薪资中位 | NG total comp $190k–$240k |
关键变化:2026-Q1 起 Ramp 把"OA 通过率"从 35% 降到 ~25%,主要靠提高 cutoff 而不是换题——所以题库本身仍可参考。
二、CodeSignal 平台机制(必须知道)
| 项目 | 详情 |
|---|---|
| 题量 | 4 题,难度递增 |
| 时长 | 70 分钟(1 次性) |
| 评分 | 单题部分用例计分;总分 850 |
| 重做 | 不能,一次决定 |
| 反作弊 | 切屏记录、剪贴板监控、摄像头部分启用 |
| IDE | 浏览器内编辑器,Python / Java / JS / Go 等 12 种 |
| 调试 | 有 console,但不能逐步调试 |
三、4 题分布与时间预算
Q1 (200 分) ≈ 数据结构基本操作 → 10 分钟
Q2 (250 分) ≈ 字符串 / 状态机 → 15 分钟
Q3 (300 分) ≈ 业务建模(bank/refund 类)→ 20 分钟
Q4 (300 分) ≈ 综合实现 + 优化 → 25 分钟
--------
70 分钟
学员观察:80% 拿到 720+ 的学员都是 Q1-Q3 全 AC + Q4 拿到 60-70%。把所有时间堆在 Q4 上、放弃 Q1 优化的策略几乎都失败。
四、Q3 业务建模:Bank Transaction System(必考)
题面:实现一个 Bank 系统,支持:
create_account(t, id)deposit(t, id, amount)withdraw(t, id, amount)(余额不足返回 None)transfer(t, src, dst, amount)top_spenders(t, n)(按累计支出降序返回前 n 个账户)
class BankSystem:
def __init__(self):
self.accounts = {} # id -> balance
self.spending = {} # id -> 累计支出(用于 top_spenders)
def create_account(self, t, account_id):
if account_id in self.accounts:
return False
self.accounts[account_id] = 0
self.spending[account_id] = 0
return True
def deposit(self, t, account_id, amount):
if account_id not in self.accounts:
return None
self.accounts[account_id] += amount
return self.accounts[account_id]
def withdraw(self, t, account_id, amount):
if account_id not in self.accounts:
return None
if self.accounts[account_id] < amount:
return None
self.accounts[account_id] -= amount
self.spending[account_id] += amount
return self.accounts[account_id]
def transfer(self, t, src, dst, amount):
if src not in self.accounts or dst not in self.accounts:
return None
if src == dst or self.accounts[src] < amount:
return None
self.accounts[src] -= amount
self.accounts[dst] += amount
self.spending[src] += amount
return self.accounts[src]
def top_spenders(self, t, n):
ranked = sorted(self.spending.items(), key=lambda kv: (-kv[1], kv[0]))
return [f"{aid}({amt})" for aid, amt in ranked[:n]]
时间复杂度:操作 O(1),top_spenders O(k log k) 空间:O(n)
得分关键:很多学员跌在
top_spenders的"同分时按 id 字典序"——主动列出排序键 tuple 是高分动作。
五、Q4 综合实现:Refund + Spending Limit 状态机
Q4 在 Q3 基础上扩展:
- 客户可申请 Refund:扣回已支出的金额(影响 spending 累计)
- 加入 Spending Limit:每月超过 limit 的支出被拒绝
- 加入 Cashback:每笔支出 1% 返现到余额
from collections import defaultdict
import heapq
class RampSystem(BankSystem):
def __init__(self):
super().__init__()
self.limits = {} # id -> monthly_limit
self.month_spend = defaultdict(int) # (id, ym) -> spent
self.refund_queue = [] # 等待审批的 refund,按 t 排序
@staticmethod
def _ym(t):
return t // (30 * 24 * 60 * 60 * 1000) # 简化:以毫秒粗算月份桶
def set_limit(self, t, account_id, limit):
self.limits[account_id] = limit
return True
def pay(self, t, account_id, amount):
if account_id not in self.accounts:
return None
ym = self._ym(t)
used = self.month_spend[(account_id, ym)]
limit = self.limits.get(account_id, float("inf"))
if used + amount > limit or self.accounts[account_id] < amount:
return None
self.accounts[account_id] -= amount
self.spending[account_id] += amount
self.month_spend[(account_id, ym)] += amount
cashback = amount // 100
self.accounts[account_id] += cashback
return self.accounts[account_id]
def request_refund(self, t, account_id, amount):
heapq.heappush(self.refund_queue, (t + 24 * 3600 * 1000, account_id, amount))
return True
def process_refunds(self, t):
processed = []
while self.refund_queue and self.refund_queue[0][0] <= t:
due, aid, amt = heapq.heappop(self.refund_queue)
self.accounts[aid] += amt
self.spending[aid] = max(0, self.spending[aid] - amt)
processed.append((aid, amt))
return processed
时间复杂度:pay O(1), refund O(log r) 空间:O(n + r)
Q4 评分关键:24 小时延迟和超 limit 拒绝 是 2026 年新引入的两个 hidden case,单纯抄 2025 题解会丢 30 分。
六、岗位差异(拿到同样分数后)
| 岗位 | onsite 数量 | 重点考察 | 同分情况下的 mapping 优势 |
|---|---|---|---|
| SDE NG | 4 轮 | 算法 + System Design + BQ | 通用 |
| Backend | 4–5 轮 | 系统设计 + Postgres / Redis | 强后端项目 |
| FullStack | 4 轮 | React + REST API 设计 | 前端 portfolio |
| Platform | 5 轮 | infra / Kubernetes / CI | DevOps 项目 |
| Data | 4 轮 | SQL + Python ETL | 数据 pipeline 项目 |
学员观察:同样 OA 750 分,FullStack 收到邀请最快(平均 3 天),Platform 最慢(10+ 天,因为 HC 紧)。
七、备考路线(4 周计划)
Week 1: Bank System Q3 全套真题 + 设计模式回顾
Week 2: 字符串 / 滑窗 / 队列 (Q1 + Q2)
Week 3: Refund + Limit + Cashback 综合 (Q4)
Week 4: 限时模拟 3 次 + 错点复盘
每周固定 2 次 70 分钟限时模拟——很多学员挂在节奏不在题目。
八、常见 Pitfalls
- 没读完题就开写:Ramp 题面长 (~600 字),前 5 分钟读题不亏
- 忽视边界:余额刚好为 0、转账给自己、refund 超过原支出
- Q4 不写 helper:所有逻辑挤在一个函数 → 难调试 + 易错
- Python 用 list.pop(0):Q4 流式处理 TLE 主因,改用 deque
- 不读 expected output:CodeSignal 的输出格式严格,多空格少换行都扣分
九、常见问题 FAQ
Q1:Ramp OA 多少分能进 onsite?
A:学员观察 720 分 是隐形 cutoff;NG 760+ 邀请稳,Lateral 可能 700 也能进。
Q2:Ramp OA 重复题率有多高?
A:Q3 的 bank system 几乎100% 复用(题面微调);Q4 每季度换 1 个 twist。
Q3:Ramp 给 H1B sponsor 吗?
A:给。NYC HC 大头,对 H1B 友好度 ≈ Stripe / Plaid。
Q4:onsite 难度怎么样?
A:4 轮——1 算法、1 系统设计、1 项目深挖、1 BQ。算法难度 LC Med,系统设计偏支付 / 账本类。
Q5:用 Python 还是 Java?
A:Python 推荐——80% 学员选 Python,Q3/Q4 业务建模 Python class 更短。Java 在 Q4 容易 TLE。
十、需要 Ramp OA / VO 辅助?
Ramp 的 bank-system 题考察的是业务建模 + 状态机思维,不是 LeetCode 难度。如果你正在准备:
- 微信:Coding0201 · 立即联系
- Email:[email protected]
- Telegram:@OAVOProxy
我们提供:Ramp 当周 CodeSignal 真题、Bank System 多变体训练、onsite 系统设计 mock、Stripe / Plaid 等同类公司题库串练。
联系方式
Email: [email protected]
Telegram: @OAVOProxy
微信: Coding0201
最后更新:2026-05-18 | 作者:oavoservice 面试组