← 返回博客列表 Coinbase 软件工程师面试综合指南:CodeSignal OA + 撮合引擎设计 + Crypto-native VO
Coinbase

Coinbase 软件工程师面试综合指南:CodeSignal OA + 撮合引擎设计 + Crypto-native VO

2026-06-01

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)

招聘者会问三件事:

  1. 简历高频项:分布式系统 / 高并发 / 加密支付 / 风险控制任一项是加分
  2. 岗位匹配:你想做 exchange backend、wallet、Base L2 还是 developer platform
  3. 远程偏好:Coinbase 全球 remote-first,但部分 senior 位需要北美时区

回答模板:

阶段 2 — CodeSignal GCA(70 min)

结构:Coinbase 用 CodeSignal General Coding Assessment,4 道题难度递增,最后一道是 Hard。通过线一般在 700+/850

高频题:Order Book 撮合引擎雏形(Medium-Hard)

题面:实现一个简化撮合引擎:

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)。

踩坑

阶段 3 — Tech Screen(60 min)

CoderPad 一道 Medium-Hard。常见考点:

例题: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

  1. 「如果 leaves 不是 2 的幂?」→ 复制最后一个 leaf 凑齐
  2. 「如何防止 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)。规则:

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)

题面:实现一个简化的地址校验:

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

  1. 「加上 EIP-55 校验?」→ 要求大小写按 keccak256 hash 决定
  2. 「想支持 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

关键设计点

Behavioral 轮:Coinbase Tenets

Coinbase 有 9 条 cultural tenets,最常考的三条:

  1. Mission first — "你为什么相信 crypto 能改变金融?"
  2. Top talent — "你淘汰过低绩效成员吗?怎么做的"
  3. Repeatable innovation — "举一个你做了 0→1 后能 1→100 复制的项目"

每条配 1 个 STAR 故事,Mission first 是 culture screen 的核心——如果你只把 Coinbase 当 Web2 公司投,会被识破。

Crypto-native 轮(30-45 min)

不是写代码,是聊「概念 + 安全边界」。常考题:

应对:把每条都包装成「攻击向量 + 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 代面 节奏:

  1. 岗位线判定:JD + recruiter 摘要 5 分钟内判定 Exchange / Wallet / Base / Platform
  2. GCA 模拟:4 道题 70 min 全场跟练,重点 Q4 撮合 / 调度类
  3. CoderPad 实战:Merkle / Rate Limiter / 撮合三类轮换打
  4. System Design mock:撮合 / 提币 / Base L2 三套各 60 min
  5. 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获取真题


联系方式