Coinbase 是合规上市的加密交易所,主营撮合引擎、托管钱包、Base L2 公链以及面向开发者的 API 平台。它的面试比绝大多数 Web2 公司多一个维度——Crypto-native 思维:你需要一边写算法,一边解释「为什么这条逻辑在分布式资产环境里是安全的」。这篇文章把 Coinbase SWE 面试拆成 4 个阶段,给出每一关的真题 + 应对模板。
四阶段总览
W0 Recruiter Screen (30 min):背景 / 远程 (Coinbase 是 remote-first) / time-to-start
W1 CodeSignal GCA (70 min):4 道题逐级递增(与 Meta GCA 类似)
W2 Tech Screen (60 min):CoderPad 一道 Medium-Hard,重点 follow-up
W3 Onsite VO (5 轮):
├─ Coding × 2(45 min each)
├─ System Design × 1(60 min,撮合 / L2 / 钱包)
├─ Behavioral × 1(Coinbase Tenets + STAR)
└─ Crypto-native × 1(30-45 min,区块链概念 + 安全边界)
W4 Hiring committee + offer
整个流程约 4-5 周。Coinbase 招聘节奏比 FAANG 略快,谈薪以现金 + RSU + sign-on 三件套为主,沿用 levels.fyi 上 IC2-IC5 的全球统一带。
阶段 1 — Recruiter Screen(30 min)
招聘者会问三件事:
- 简历高频项:分布式系统 / 高并发 / 加密支付 / 风险控制任一项是加分
- 岗位匹配:你想做 exchange backend、wallet、Base L2 还是 developer platform
- 远程偏好:Coinbase 全球 remote-first,但部分 senior 位需要北美时区
回答模板:
- 简历讲故事:先讲影响力数字(QPS / 资金体量 / 交易笔数),再讲技术决策
- 期望薪资:先抛 base + RSU 区间,Coinbase RSU 通常占 total comp 60-70%
- 时区:明确 PT / ET / 自由四选一
阶段 2 — CodeSignal GCA(70 min)
结构:Coinbase 用 CodeSignal General Coding Assessment,4 道题难度递增,最后一道是 Hard。通过线一般在 700+/850。
高频题:Order Book 撮合引擎雏形(Medium-Hard)
题面:实现一个简化撮合引擎:
submit(side, price, qty, user_id):side 是 buy / sell- 每次提交后,按 price-time priority 撮合所有可成交订单,输出成交记录
import heapq
from collections import deque
from itertools import count
class OrderBook:
def __init__(self):
self.buy: list[tuple[float, int, int, str, list[int]]] = [] # (-price, ts, oid, user, [qty])
self.sell: list[tuple[float, int, int, str, list[int]]] = [] # (price, ts, oid, user, [qty])
self._ts = count()
self._oid = count()
self.trades: list[dict] = []
def submit(self, side: str, price: float, qty: int, user: str):
ts = next(self._ts)
oid = next(self._oid)
if side == "buy":
heapq.heappush(self.buy, (-price, ts, oid, user, [qty]))
else:
heapq.heappush(self.sell, (price, ts, oid, user, [qty]))
self._match()
def _match(self):
while self.buy and self.sell:
bp, _, _, bu, bq = self.buy[0]
sp, _, _, su, sq = self.sell[0]
if -bp < sp:
return
fill = min(bq[0], sq[0])
self.trades.append({"price": sp, "qty": fill, "buyer": bu, "seller": su})
bq[0] -= fill
sq[0] -= fill
if bq[0] == 0:
heapq.heappop(self.buy)
if sq[0] == 0:
heapq.heappop(self.sell)
复杂度:每次撮合均摊 O(log n)。
踩坑:
-price是把 max-heap 借助 min-heap 实现的常用技巧- 浮点价格小心精度,可改
Decimal或乘以 10^8 整数化(链上常用 satoshi 单位)
阶段 3 — Tech Screen(60 min)
CoderPad 一道 Medium-Hard。常见考点:
- 设计 Rate Limiter(slide window vs token bucket)
- LRU + TTL(钱包 session)
- Merkle Tree 构造与 verify
例题:Merkle Tree Proof Verify
import hashlib
def hash_pair(a: str, b: str) -> str:
return hashlib.sha256((a + b).encode()).hexdigest()
def verify_merkle_proof(leaf: str, proof: list[tuple[str, str]], root: str) -> bool:
cur = leaf
for sibling, side in proof:
cur = hash_pair(cur, sibling) if side == "right" else hash_pair(sibling, cur)
return cur == root
Follow-up:
- 「如果 leaves 不是 2 的幂?」→ 复制最后一个 leaf 凑齐
- 「如何防止 second pre-image 攻击?」→ leaf hash 前加
0x00,internal hash 前加0x01(Bitcoin / Coinbase 常用 prefix)
阶段 4 — Onsite VO(5 轮)
Coding 轮 1:Withdrawal Queue 限速 + 优先级(Medium-Hard)
题面:用户提交提现请求,每个请求有 (user_id, amount, ts)。规则:
- 单用户 1 小时内最多 5 笔
- 大额(>10万 USDC)放优先队列,小额走 FIFO
- 输出按系统实际处理顺序的请求列表
from collections import defaultdict, deque
import heapq
def schedule_withdrawals(reqs: list[dict], threshold: int = 100_000):
user_window: dict[str, deque[int]] = defaultdict(deque)
big_pq: list[tuple[int, int, dict]] = [] # (-amount, ts, req)
small_q: deque[dict] = deque()
out: list[dict] = []
for i, r in enumerate(reqs):
uid, ts = r["user_id"], r["ts"]
win = user_window[uid]
while win and win[0] < ts - 3600:
win.popleft()
if len(win) >= 5:
continue
win.append(ts)
if r["amount"] > threshold:
heapq.heappush(big_pq, (-r["amount"], i, r))
else:
small_q.append(r)
if big_pq:
out.append(heapq.heappop(big_pq)[2])
elif small_q:
out.append(small_q.popleft())
while big_pq:
out.append(heapq.heappop(big_pq)[2])
while small_q:
out.append(small_q.popleft())
return out
复杂度:O(n log n)。
Coding 轮 2:Crypto Address Validate(Medium)
题面:实现一个简化的地址校验:
- BTC:以
1/3/bc1开头,长度 26-42 - ETH:以
0x开头,长度 42(含前缀) - 输入一组地址 + 转账金额,过滤合法地址 + 聚合每个网络的总额
def classify_addr(addr: str) -> str | None:
if addr.startswith("0x") and len(addr) == 42:
return "ETH"
if (addr[0] in "13" and 26 <= len(addr) <= 35) or addr.startswith("bc1"):
return "BTC"
return None
def aggregate(transfers: list[dict]) -> dict[str, float]:
out: dict[str, float] = {}
for t in transfers:
net = classify_addr(t["addr"])
if not net:
continue
out[net] = out.get(net, 0) + t["amount"]
return out
Follow-up:
- 「加上 EIP-55 校验?」→ 要求大小写按 keccak256 hash 决定
- 「想支持 Solana / Cosmos?」→ 改成 dispatch table
System Design 轮(60 min):设计撮合引擎 + L2 提币流
60 min 框架:
05 min Clarify: QPS / 单符号 vs 多符号 / 撮合延迟 SLA / 链上确认数
05 min API: order placement / cancel / market data feed
10 min Matching engine: in-memory order book + WAL persist
10 min Risk: position limit / circuit breaker / KYC gate
10 min Settlement: 链下记账 + 链上 batched withdrawal
10 min Replication: leader-follower + consensus (Raft) for matching state
05 min Failure: leader crash / DB lag / reorg on L1
05 min Follow-up: Base L2 rollup state commitment / fraud proof
关键设计点:
- 撮合内存优先:order book 全内存,写 WAL 到 NVMe SSD,崩溃后重放
- 风控旁路:风控同步检查头寸,超限直接 reject
- L2 提币:先链下扣款 + 入 batch queue,每 N 笔或 T 分钟批量提交链上
Behavioral 轮:Coinbase Tenets
Coinbase 有 9 条 cultural tenets,最常考的三条:
- Mission first — "你为什么相信 crypto 能改变金融?"
- Top talent — "你淘汰过低绩效成员吗?怎么做的"
- Repeatable innovation — "举一个你做了 0→1 后能 1→100 复制的项目"
每条配 1 个 STAR 故事,Mission first 是 culture screen 的核心——如果你只把 Coinbase 当 Web2 公司投,会被识破。
Crypto-native 轮(30-45 min)
不是写代码,是聊「概念 + 安全边界」。常考题:
- "解释 ECDSA 签名为什么不能复用 nonce"
- "如果 ETH 主网发生 reorg,Coinbase 应该如何回滚用户余额?"
- "为什么 Coinbase 用 multi-sig + HSM 而不是单 key"
应对:把每条都包装成「攻击向量 + Coinbase 的对策」结构,不要只背概念。
三条岗位线差异
| 岗位线 | Coding 题型 | System Design |
|---|---|---|
| Exchange Backend | 撮合 + 风控 | Order Book / Settlement |
| Wallet | 加密 + 状态机 | Key Management / Recovery |
| Base / L2 | Merkle / Rollup | L1 桥 / Fraud Proof |
| Developer Platform | API 设计 | Multi-tenant Gateway |
OA 辅助 / VO 代面 怎么对接 Coinbase
Coinbase 比通用 SWE 流程多一层「Crypto-native 概念」,OA 辅助 / VO 代面 节奏:
- 岗位线判定:JD + recruiter 摘要 5 分钟内判定 Exchange / Wallet / Base / Platform
- GCA 模拟:4 道题 70 min 全场跟练,重点 Q4 撮合 / 调度类
- CoderPad 实战:Merkle / Rate Limiter / 撮合三类轮换打
- System Design mock:撮合 / 提币 / Base L2 三套各 60 min
- Crypto-native 模板:9 条 Coinbase Tenets + 5 条加密概念问答(reorg / nonce / multi-sig)现场 cue
FAQ
Q1:Coinbase 的 GCA 通过分线是多少? A:没有官方公开线,社区反馈 ≥700/850 是面 Tech Screen 的安全分。
Q2:不熟悉区块链能过 Crypto-native 轮吗? A:能,但需要面试前 1-2 周突击。重点掌握:UTXO vs Account Model、Merkle Tree、ECDSA 签名、Rollup 概念。背完这 4 块就能聊 80%。
Q3:Coinbase 是 remote-first 吗?base 还会按地区调整? A:Coinbase 全球 remote-first,但 base 按市区分级(SF/NYC = T1,T2/T3 城市递减约 5-15%)。
Q4:撮合引擎题一定考吗? A:Exchange Backend 岗几乎必考,Wallet / Base 岗大约 30% 概率。即使 Wallet 岗也建议练一遍。
Q5:Coinbase IC4 包大概多少? A:IC4 base $220-260K + RSU $200-300K + sign-on,total 第一年常见 $450-550K。
写在最后
Coinbase 面试在通用 SWE 面试上叠了一层「资金 + 加密 + 合规」的厚度。每道题不只是「能不能跑」,还要回答「在用户钱安全的前提下能不能跑」。如果你正在准备 Coinbase 的 GCA 或 onsite,可以微信 Coding0201 联系,发岗位 JD + 当前流程节点截图,先做岗位线判定,再排 OA 辅助 / VO 代面 节奏。
需要面试真题? 立刻联系微信 Coding0201,获取真题。
联系方式
- 微信:Coding0201
- Email: [email protected]
- Telegram: @OAVOProxy