Coinbase 面试题型总结整理:OA、Onsite、Coding、Cultural Alignment 和 MLE 怎么准备

Coinbase 面试题型总结整理:OA、Onsite、Coding、Cultural Alignment 和 MLE 怎么准备

Coinbase 近期面经里,OA、onsite、CodeSignal、frontend OA、MLE CodeSignal、cognitive assessment、cultural alignment assessment 等关键词出现较多。准备 Coinbase 不能只做 coding,也要重视文化匹配和清晰的产品/风险意识。

本文基于近期公开面经标题和本地整理信号,不代表官方流程。

近期面经信号

  • OA/CodeSignal 出现频繁,包含 SWE、Frontend、MLE。
  • Onsite/VO 常见 coding、system/design、behavioral。
  • Cognitive assessment 和 cultural alignment 被多次提到。
  • Frontend 和 MLE 有单独题型信号。

面试真题题目合集

下面是 Coinbase 相关面经里出现过的题目和题型摘要:

  • CodeSignal file system:addFile(file, size)
  • File system:copyFile(from, to)
  • File system follow-up:users / owners。
  • File system follow-up:capacity / quota。
  • File system follow-up:sorting map mixed order。
  • In-memory database:store/read data。
  • In-memory database follow-up:scan。
  • In-memory database follow-up:expiry TTL。
  • In-memory database follow-up:backup。
  • Recipe management:add/update/get/delete。
  • Recipe search:case-insensitive。
  • Recipe list:按 size/name 排序。
  • Recipe follow-up:addUser。
  • Trading order class。
  • Trading:buy/sell entries。
  • Trading:parse input。
  • Trading:fill/cancel/get_status。
  • Pagination:offset vs cursor。
  • Crypto trading system:pause/resume/cancel order。
  • Coinbase Explore system design。
  • Latest asset prices page。
  • Mine block:independent transactions。
  • Mine block follow-up:parent transactions。
  • Random NFT attribute combinations。
  • NFT follow-up:dedupe。
  • NFT follow-up:weighted attributes。
  • MLE OA:longest consecutive char,tie 取 rightmost。
  • MLE OA:bootstrap resampling fit/predict。
  • MLE OA:decision tree purity / information gain / predict。
  • MLE VO:messy classification model。
  • SQL:window / subquery medium。

真题整理与分析

Coinbase 的题集中在状态系统、文件/数据库模拟、交易、分页和 crypto 产品。面试官会看你是否能写出可靠的状态机。

真题 1:CodeSignal file system 四层题

题目大意:实现 addFile(file, size)copyFile(from, to);后续加入 user/owner、capacity quota、按规则排序输出。

考点分析: 这是典型 incremental API 题。每一层都要保持已有行为不坏。重点是路径唯一性、copy 后 owner/size 如何继承、quota 检查顺序、排序 tie-breaker。

真题 2:In-memory database with TTL and backup

题目大意:实现数据库,支持 store/read/scan;后续加 expiry TTL 和 backup/restore。

考点分析: 要把 value、timestamp、expiry 分开存。scan 时要过滤过期 key;backup 要定义备份的是当前有效数据还是原始数据,restore 后 TTL 如何重新计算。很多人会漏掉时间语义。

真题 3:Recipe management API

题目大意:实现 recipe add/update/get/delete/search,搜索大小写不敏感,list 要按 size/name 排序,后续加 user。

考点分析: 这题考 API 设计和索引意识。搜索可以先线性扫,但要说明规模大时用 inverted index。排序规则要稳定,update/delete 要保持索引一致。

真题 4:Trading order class

题目大意:实现 buy/sell order 输入解析,支持 fill、cancel、get_status,可能追问 production concerns。

考点分析: 订单状态机要写清楚:OPEN、PARTIALLY_FILLED、FILLED、CANCELLED。要处理不能取消已成交订单、partial fill 后 remaining quantity、重复 fill/cancel 幂等。

真题 5:Coinbase Explore / latest asset prices

题目大意:系统设计 Coinbase Explore 页面,展示最新资产价格、搜索、资产详情和实时更新。

考点分析: 要讲 price ingestion、exchange feeds、normalization、time-series storage、cache、WebSocket/SSE 推送、降级策略和异常价格过滤。crypto 场景里实时性和可靠性都很重要。

高频题最优解速查

CodeSignal file system

最优解思路: 用 hashmap 存 path -> file metadata。copy 时检查 source 存在、target 不存在、quota 足够,再复制 metadata。加 user/owner 后,每个 user 维护 used_capacity。

复杂度: add/copy/delete O(1);list/search 取决于排序和过滤。

面试要讲的边界: 路径规范化;copy 后 owner 是谁;quota 先检查再写入;排序 tie-breaker;删除后 capacity 释放。

In-memory DB with TTL / backup

最优解思路: 每个 record 存 value 和 expire_at。scan 时过滤过期。backup 保存有效数据和剩余 TTL;restore 时基于 restore timestamp 重新计算 expire_at。

复杂度: get O(1),scan O(k log k),backup/restore O(n)。

面试要讲的边界: TTL 为 0;backup 过期数据;restore 到不存在 backup;scan 排序;同 timestamp 操作顺序。

Trading order class

最优解思路: 先写状态机。订单有 total_qty、filled_qty、remaining_qty、status。fill(qty) 只能作用于 OPEN/PARTIALLY_FILLED,cancel() 只能取消未完全成交订单。

复杂度: 单订单状态更新 O(1)。

面试要讲的边界: fill 超过 remaining;cancel 后再 fill;重复 cancel;解析输入非法;状态查询一致性。

Random NFT attributes

最优解思路: 如果每个 attribute category 独立,组合生成用 backtracking。去重用 set 存已经生成的 tuple。weighted attributes 用 prefix sum 在每个 category 内按权重采样。

复杂度: 生成全部组合 O(product of category sizes);随机生成单个组合 O(categories * log options)。

面试要讲的边界: 组合空间不足;重复生成重试上限;权重为 0;属性互斥约束。

可直接练习的答案骨架

Coding sample:In-memory DB with TTL

class InMemoryDB:
    def __init__(self):
        self.data = {}

    def set(self, key, field, value, timestamp, ttl=None):
        expire_at = None if ttl is None else timestamp + ttl
        self.data.setdefault(key, {})[field] = (value, expire_at)

    def get(self, key, field, timestamp):
        if key not in self.data or field not in self.data[key]:
            return None
        value, expire_at = self.data[key][field]
        if expire_at is not None and expire_at <= timestamp:
            del self.data[key][field]
            return None
        return value

    def scan(self, key, timestamp):
        ans = []
        for field in sorted(self.data.get(key, {})):
            value = self.get(key, field, timestamp)
            if value is not None:
                ans.append((field, value))
        return ans

OOD class definition:Trading order

from enum import Enum


class OrderStatus(Enum):
    OPEN = "open"
    PARTIALLY_FILLED = "partially_filled"
    FILLED = "filled"
    CANCELLED = "cancelled"


class Order:
    def __init__(self, order_id, side, quantity):
        self.order_id = order_id
        self.side = side
        self.quantity = quantity
        self.filled = 0
        self.status = OrderStatus.OPEN

    def fill(self, qty):
        if self.status in {OrderStatus.FILLED, OrderStatus.CANCELLED}:
            return
        qty = min(qty, self.quantity - self.filled)
        self.filled += qty
        self.status = OrderStatus.FILLED if self.filled == self.quantity else OrderStatus.PARTIALLY_FILLED

    def cancel(self):
        if self.status != OrderStatus.FILLED:
            self.status = OrderStatus.CANCELLED

System design:Coinbase Explore / latest prices

flowchart LR
    Exchanges["Exchange Feeds"] --> Ingest["Price Ingestion"]
    Ingest --> Normalize["Normalize / Validate"]
    Normalize --> Stream["Price Stream"]
    Stream --> Cache[("Latest Price Cache")]
    Stream --> TSDB[("Time-series Store")]
    Client --> API["Explore API"]
    API --> Cache
    API --> TSDB
    API --> Search[("Asset Search Index")]

API design

GET /assets?query=btc
GET /assets/{symbol}
GET /assets/{symbol}/price
GET /assets/{symbol}/history?range=1d

Data model

assets(symbol, name, status, metadata_json)
price_ticks(symbol, price, source, event_time, ingest_time)
latest_prices(symbol, price, source, updated_at)

Coinbase 场景要讲价格异常过滤、多源 feed、断流降级、WebSocket/SSE 推送和 cache TTL。

题目逐题答案速查

Coding:CodeSignal file system add/copy/quota

Sample code

class SimpleFileSystem:
    def __init__(self):
        self.files = {}
        self.owner = {}
        self.capacity = {}
        self.used = {}

    def add_user(self, user, capacity):
        self.capacity[user] = capacity
        self.used[user] = 0

    def add_file(self, user, path, size):
        if path in self.files:
            return False
        if self.used[user] + size > self.capacity[user]:
            return False
        self.files[path] = size
        self.owner[path] = user
        self.used[user] += size
        return True

    def copy_file(self, src, dst):
        if src not in self.files or dst in self.files:
            return False
        user = self.owner[src]
        return self.add_file(user, dst, self.files[src])

Coding:recipe management

Sample code

class RecipeStore:
    def __init__(self):
        self.recipes = {}

    def add(self, name, ingredients):
        key = name.lower()
        self.recipes[key] = {"name": name, "ingredients": list(ingredients)}

    def search(self, query):
        q = query.lower()
        return sorted(
            [r for k, r in self.recipes.items() if q in k],
            key=lambda r: (len(r["ingredients"]), r["name"].lower()),
        )

Coding:mine block transactions

答案骨架: 把 transaction 建成 DAG:parent transaction 必须先被 included。用 indegree/topological sort 选择可执行交易;block capacity 是约束时,用 priority queue 按 fee/size 选。

MLE:decision tree information gain

Sample code

import math
from collections import Counter


def entropy(labels):
    total = len(labels)
    counts = Counter(labels)
    return -sum((c / total) * math.log2(c / total) for c in counts.values())


def information_gain(parent, left, right):
    total = len(parent)
    return entropy(parent) - len(left) / total * entropy(left) - len(right) / total * entropy(right)

System design:pagination offset vs cursor

答案骨架: Offset 简单但大 offset 慢且数据变化会重复/漏。Cursor 用 (sort_key, id),API:GET /items?cursor=...&limit=...。Data model 要有稳定排序字段和唯一 id。

准备重点

OA/Coding:准备数组、字符串、哈希、图、DP、模拟题。CodeSignal 要练限时节奏和边界测试。

Crypto/Product Awareness:不需要成为链上专家,但要理解安全、交易、风控、合规、用户信任和高可靠性。

Cultural Alignment:准备 ownership、high agency、透明沟通、风险判断、如何在不确定环境中推进。

MLE/Frontend:MLE 准备模型评估和数据;Frontend 准备组件、状态、API、性能和用户交互。

7 天冲刺计划

  • Day 1-2:CodeSignal/OA 限时训练。
  • Day 3:准备 crypto product 和风险意识。
  • Day 4:练 system design 或 frontend architecture。
  • Day 5:准备 cultural alignment 故事。
  • Day 6:做一轮 onsite mock。
  • Day 7:复盘短板。

常见失分点

  • 只准备 OA,没有准备 cultural alignment。
  • Onsite 里忽略安全、幂等和合规风险。
  • MLE 只讲模型,不讲数据和线上指标。
  • Frontend 只写 UI,没有讲状态和错误处理。

CTA

如果你已经拿到 Coinbase 面试,建议同时练 coding 和 cultural alignment。你可以在服务和价格页面查看 mock 选项;也可以通过联系我们页面发送岗位和面试时间。

Previous
Previous

Databricks 面试题型总结整理:Tech Screen、Coding、System Design 和 VO 怎么准备

Next
Next

Citadel 面试题型总结整理:SWE Intern、OA、Phone Screen、QT/QR 和 Leadership 怎么准备