Coinbase 是北美头部加密货币交易所,工程岗面试既看扎实的算法和数据结构,也很看重高并发、强一致的交易系统设计。这篇按 oavoservice 学员的 Coinbase 面经整理,把 CodeSignal OA、技术电面到 Onsite 系统设计的完整流程、高频编码题和系统设计要点讲清楚,给求职刷题、准备面试一份实战参考。需要 OA辅助 / VO辅助 的同学也能直接照着这条线复盘。
一、Coinbase 面试流程
| 阶段 | 形式 | 时长 | 重点 |
|---|---|---|---|
| 在线测评 OA | CodeSignal | 70–90 min | 3–4 道算法题,整体评分 |
| 技术电面 | 编码 | 45–60 min | LeetCode 中等,重沟通与边界 |
| Onsite VO | 4–5 轮 | 半天 | 编码 ×2 + 系统设计 + 行为题 + 经理轮 |
Coinbase 走 CodeSignal 通用框架,OA 难度中等-中上,题目常包装成交易、钱包、账本场景。Onsite 的系统设计轮分量很重,几乎决定能否拿 offer。
二、OA 高频题一:投资组合估值(哈希聚合)
题目
给一组持仓记录 (symbol, amount) 和一张实时价格表 prices[symbol],计算账户总市值;同一 symbol 可能出现多次,需要先合并。
思路
用哈希表按 symbol 累加持仓,再乘以价格求和。一次遍历搞定,注意价格表里没有的币种要跳过或按 0 处理。
from collections import defaultdict
def portfolio_value(holdings, prices):
totals = defaultdict(float)
for symbol, amount in holdings:
totals[symbol] += amount # 合并同一币种持仓
value = 0.0
for symbol, amount in totals.items():
value += amount * prices.get(symbol, 0.0)
return value
时间复杂度:O(n)。空间复杂度:O(k),k 为不同币种数。考点是哈希聚合和缺失键的健壮处理。
三、OA 高频题二:简化订单撮合(双堆)
题目
维护一个迷你订单簿:买单按价格从高到低、卖单按价格从低到高排队。每来一笔订单,若能与对手方成交(买价 ≥ 卖价)就撮合,返回成交笔数。
思路
经典双堆:买单用最大堆,卖单用最小堆。新订单进来时不断检查堆顶能否成交,能成交就弹出并计数,否则入堆。
import heapq
def match_orders(orders):
buys, sells = [], [] # buys: 最大堆(取负); sells: 最小堆
trades = 0
for side, price in orders:
if side == "buy":
heapq.heappush(buys, -price)
else:
heapq.heappush(sells, price)
# 堆顶买价 >= 堆顶卖价 即可成交
while buys and sells and -buys[0] >= sells[0]:
heapq.heappop(buys)
heapq.heappop(sells)
trades += 1
return trades
时间复杂度:O(n log n)。空间复杂度:O(n)。难点在于想到用两个方向相反的堆,以及循环撮合直到堆顶不再匹配。
四、OA 高频题三:API 限流(滑动窗口)
题目
给一串带时间戳的请求和每用户每窗口的上限,判断每笔请求是被接受还是被限流。Coinbase 公有 API 很看重限流,这题几乎是常驻。
思路
每个用户维护一个时间戳队列,新请求到来时先把窗口外的旧时间戳弹掉,再看队列长度是否超限。
from collections import defaultdict, deque
def rate_limit(requests, window, limit):
seen = defaultdict(deque)
result = []
for user, ts in requests:
q = seen[user]
while q and q[0] <= ts - window: # 移除窗口外请求
q.popleft()
if len(q) < limit:
q.append(ts)
result.append(True) # 接受
else:
result.append(False) # 限流
return result
时间复杂度:O(n),每个时间戳最多进出队列一次。空间复杂度:O(用户数 × limit)。
五、Onsite 系统设计:设计一个加密钱包 / 交易服务
系统设计轮是 Coinbase 的重头戏,常见题是「设计一个支持充提币和下单的钱包服务」。答题主线:
- 一致性优先:账户余额变动必须强一致,用数据库事务 + 乐观锁 / 行锁,避免双花。
- 幂等性:充值回调、下单接口都要支持幂等键,防止网络重试导致重复记账。
- 账本设计:用 append-only 的双分录账本(debit/credit)记录每笔流水,余额由流水推导,便于审计对账。
- 异步与对账:链上确认走异步队列;定时对账任务比对内部账本与链上状态。
- 扩展:读多写少的余额查询走缓存,热点账户做分片。
面试官会顺着「如果回调重复怎么办」「如何防止超卖」往下追,把幂等和一致性讲透是关键。
六、备考建议
- 算法:哈希、堆、滑动窗口、图论是高频,按 CodeSignal 中上节奏限时练。
- 系统设计:重点准备幂等、一致性、账本、对账这套交易系统母题。
- 沟通:边写边讲,主动报复杂度和边界条件。
FAQ
Q1:Coinbase OA 用什么平台、几道题?
CodeSignal,70–90 分钟 3–4 道算法题,按整体分评估。难度中等-中上,常包装成交易 / 钱包 / 账本场景,考哈希、堆、滑动窗口、图论。
Q2:Coinbase 面试系统设计重要吗?
非常重要。Onsite 一般有完整系统设计轮,常考钱包 / 交易 / 账本系统,重点考一致性、幂等、对账,几乎决定 offer。
Q3:要懂区块链才能面 Coinbase 吗?
不需要深入懂底层链。了解充提币流程、链上确认是异步的、幂等回调这些工程概念即可,核心还是算法和系统设计功底。
Q4:怎么高效准备 Coinbase OA?
按哈希 / 堆 / 滑窗 / 图论分块限时刷,系统设计专攻交易母题。需要限时 mock、现场讲思路陪练或 OA辅助 / VO辅助,可联系 oavoservice 定制 Coinbase 专项。
正在准备 Coinbase 面试?
Coinbase 走 CodeSignal OA + 重系统设计的路线,看重一致性和工程严谨度。oavoservice 提供 Coinbase 全流程陪练:CodeSignal 高频题限时模拟,交易 / 钱包 / 账本系统设计专项,幂等与一致性打磨,按岗位做题型预测,含 OA辅助 / VO辅助 与现场讲思路陪练。教练含交易所与大厂背景资深工程师,帮你把代码和表达同时练稳。
立即添加微信 Coding0201,获取 Coinbase 真题与陪练。
联系方式
- 微信:Coding0201
- Email:[email protected]
- Telegram:@OAVOProxy