做完 Ramp OA 那天刷了一圈论坛,发现几乎没有任何资料。
CodeSignal 90 分钟,四关递进,必须全过当前关才能解锁下一关。跟算法题完全不是一回事,考的是系统设计思路和代码组织能力。把四关完整过一遍。

题目背景
实现一个内存版云存储系统,把文件映射到对应的元数据。不操作真实文件系统,全部存内存里。
Level 1:基础文件操作
三个接口:添加文件、查询大小、删除文件。
规则很清楚------文件已存在不能重复添加,删除成功返回文件大小,不存在返回 None。
哈希表直接搞定,5 分钟以内写完。
class CloudStorage:
def __init__(self):
self.files = {}
def add_file(self, name, size):
if name in self.files:
return False
self.files[name] = size
return True
def get_file_size(self, name):
return self.files.get(name)
def delete_file(self, name):
return self.files.pop(name, None)
Level 2:Top N 最大文件
按前缀筛选文件,返回最大的 N 个,格式是 /path/file(size)。
排序规则:先按大小降序,大小相同按文件名字典序升序。
def get_n_largest(self, prefix, n):
matched = [
(name, size)
for name, size in self.files.items()
if name.startswith(prefix)
]
matched.sort(key=lambda x: (-x[1], x[0]))
return [f"{name}({size})" for name, size in matched[:n]]
踩坑点:双条件排序,size 取负才能降序,写反了直接挂测试。
Level 3:用户容量与合并
加入用户概念,每个用户有存储上限,支持两个用户合并。
合并规则:user_2 的文件并入 user_1,文件名冲突时 user_2 的直接丢弃,容量也合并,user_2 删除。
def merge_user(self, user_id_1, user_id_2):
if user_id_1 not in self.users or user_id_2 not in self.users:
return False
u1, u2 = self.users[user_id_1], self.users[user_id_2]
for name, size in u2["files"].items():
if name not in u1["files"]:
u1["files"][name] = size
u1["used"] += size
u1["capacity"] += u2["capacity"]
del self.users[user_id_2]
return True
踩坑点:容量计算要维护 used 字段,别每次遍历文件重新算。
Level 4:备份与恢复
支持对用户存储做快照,随时恢复到指定时间戳的状态。
import copy
def backup_user(self, user_id, timestamp):
if user_id not in self.users:
return False
if user_id not in self.backups:
self.backups[user_id] = {}
self.backups[user_id][timestamp] = copy.deepcopy(self.users[user_id])
return True
def restore_user(self, user_id, timestamp):
if user_id not in self.backups or timestamp not in self.backups[user_id]:
return False
for name in self.users[user_id]["files"]:
self.files.pop(name, None)
self.users[user_id] = copy.deepcopy(self.backups[user_id][timestamp])
for name, size in self.users[user_id]["files"].items():
self.files[name] = size
return True
踩坑点:备份必须用 deepcopy,浅拷贝的话后续修改会污染快照。恢复时要先把该用户的全局文件清掉,再把备份重新写进去。
整体规律
四关下来,核心考的是三份数据的同步------全局 files、用户 files、备份快照,任何一处没同步好都会挂测试。
建议动手之前先把数据结构画清楚,后面加功能的时候知道每个操作要同步哪几个地方。
关于 ProgramHelp
同样是没想到的追问然后大脑空白的问题。
这次 Ramp OA 前找了 ProgramHelp 团队做了专项辅导。他们整理了一套 CodeSignal OOD 的高频题型,提前把云存储这类系统设计题练了一遍。Level 3 的合并逻辑和 Level 4 的 deepcopy 坑,都是他们提前点出来的,做题的时候没有卡。
北美 CS 专家真人辅导,不是 AI,懂得考点在哪,效果比自己瞎练强很多。
OA 辅助、OA 代写、VO 助攻、简历包装都有: ProgramHelp · VO辅助