Ramp OA 四关全过,CodeSignal OOD 完整复盘

做完 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辅助

相关推荐
爱勇宝6 分钟前
CEO通知5100名员工:今年不涨薪了,钱要投给AI!
前端·后端·程序员
赋缘汇(fableshare)-黄从庆11 分钟前
Ubuntu重启后进入initramfs导致无法开机
linux·运维·ubuntu
AC赳赳老秦14 分钟前
OpenClaw + 飞书多维表格:自动同步数据、生成统计图表、触发自动化任务
java·大数据·python·缓存·自动化·deepseek·openclaw
乘风gg15 分钟前
前端死到第几轮了?得物前端部门解散有感!
前端·ai编程·claude
WangN218 分钟前
【通识】RSL-RL快速上手
人工智能·python·机器学习·机器人
艾伦野鸽ggg19 分钟前
web 组大一下第二次考核
前端·css·html
geovindu20 分钟前
python: Reactor Pattern
开发语言·python·设计模式·反应器模式
1024+20 分钟前
在 ‌Ubuntu 24.04‌ 上安装 ‌Python 3.8‌
linux·python·ubuntu
财经资讯数据_灵砚智能21 分钟前
基于全球经济类多源新闻的NLP情感分析与数据可视化(日间)2026年6月15日
大数据·人工智能·python·信息可视化·自然语言处理