最近做了一套 Coinbase OA ,平台是 CodeSignal,90 分钟四个 Level。和传统 Coinbase OA LeetCode 刷题不一样,这套更偏逐步加功能的 OOD:当前 Level 全部通过才能解锁下一关,前面写的接口后面会继续用。
先说明一点:CodeSignal 上这种 90 分钟四 Level 题,往往不绑定单一公司。Coinbase OA、Meta、Persona、Zip 等都会出类似背景,题库是共享的。如果你平时只刷 LeetCode 模板,临场容易觉得「题不难但状态很多」。做过完整题库、手里有全对代码,会轻松很多。

Level 1:Coinbase OA 基础读写(类 LeetCode 哈希)
内存库里每条记录用字符串 key 标识,里面是若干 field → value 对。
需要实现:
- set(key, field, value):写入或覆盖;记录不存在就新建
- get(key, field):取值,不存在返回 None
- delete(key, field):删字段,成功 True,否则 False

用嵌套字典 dict[key][field] = value 即可。set 时若 key 不存在先建空字典再写字段;get / delete 前都要先判断 key 和 field 是否存在,避免 KeyError。本质很像 LeetCode 里的哈希表模拟,边界处理好就能过。
Level 2:按前缀扫描
新增:
- scan(key):返回该记录所有字段,格式 “field(value)”,按字段名字典序
- scan_by_prefix(key, prefix):只返回前缀匹配的字段,同样排序

在 Level 1 的字典上遍历该 key 下所有 field,按需过滤后再排序。格式拼接成 f”{field}({value})”,排序只看 field 名。记录不存在直接返回空列表。和部分 LeetCode 字符串前缀题思路接近,但这里要保持接口兼容,别改坏 Level 1 的行为。
Level 3:Coinbase OA TTL 与时间戳
操作全部带 timestamp,字段可设 TTL,过期视为不存在。时间只向前,同一测试里不会混用带/不带 timestamp 的旧接口。
核心接口:
- set_at / set_at_with_ttl
- get_at / delete_at / scan_at / scan_by_prefix_at

每个 field 额外记下「写入时间」和「过期时间」(timestamp + ttl)。任何读、扫、删之前,先判断当前 timestamp 是否仍落在有效区间 [写入, 过期) 内;过期就当不存在。没有 TTL 的字段可视为永不过期。旧接口保持原行为,相当于用「无限大时间」去查。这一关开始明显超出普通 LeetCode 题,状态和时效要一起维护。
Level 4:备份与恢复
- backup(timestamp):保存当前所有未过期记录的状态(含剩余 TTL),返回当时非空记录数
- restore(timestamp, timestamp_to_restore):用不超过 timestamp_to_restore 的最近一次备份恢复,并按当前时间重算过期点

备份时建议存:字段值 + 剩余寿命(原过期时间 – 当前 backup 时间)。恢复时用「当前 restore 时间 + 剩余寿命」作为新过期点,这样时间线仍然只向前,不会出现「恢复后立刻过期」的错乱。保证存在不晚于 timestamp_to_restore 的备份,取最近一次即可。
Coinbase OA 和纯 LeetCode 的差别
算法难度不高,难在状态设计:字段何时过期、备份存什么、恢复后 TTL 怎么接。建议一上来就把 field 元数据(value、写入时间、过期时间)设计清楚,后面三个 Level 会顺很多。很多人只练算法模板,遇到这种四 Level OOD 容易在 TTL 和 backup 上翻车。CodeSignal 同类题库其实就几套大背景(内存库、云存储、文件系统),提前练过会稳很多。
最近北美各大厂 OA 都接触得比较多,北美面试真题和全对代码都有收录。准备 Coinbase OA 或同类 CodeSignal 题的同学,有需要可以私聊。
祝大家顺利 AC,拿到心仪 offer。
FAQ
Coinbase OA 四个 Level 分别考什么?
四个 Level 围绕内存数据库逐步增加功能:Level 1 实现基础读写和删除,Level 2 增加字段扫描与前缀筛选,Level 3 处理 Timestamp 和 TTL 过期机制,Level 4 实现数据备份与恢复。
Coinbase OA 难吗?
这套题的基础操作不算复杂,主要难点在于状态管理和功能之间的兼容性。尤其是 Level 3 的 TTL 过期判断,以及 Level 4 备份时保存剩余有效时间、恢复时重新计算过期时间,需要仔细处理边界条件。
Coinbase OA 和 LeetCode 有什么区别?
LeetCode 通常侧重独立的算法问题,而这套 CodeSignal OA 更接近渐进式 OOD(Object-Oriented Design)与数据结构实现。后续 Level 会在前面代码的基础上增加功能,因此除了实现当前要求,还需要保证已有接口能够正常工作。
Coinbase OA 应该如何准备?
建议先熟悉 Python Dictionary 等基础数据结构,再练习逐步扩展的内存数据库题型,重点掌握字段排序、前缀过滤、TTL、Timestamp、Backup 和 Restore。提前规划数据结构和过期判断逻辑,有助于减少后续 Level 的重复修改。