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

相关推荐
LucianaiB21 小时前
【元宝搜索开发者征文大赛】AI时代,学得慢就不用学?用元宝搜索打造一个教程保质期,确保每一个教程符合你的现状
前端·人工智能·ai编程
excel21 小时前
JavaScript 对象池:减少高频对象创建与 GC 压力
前端
陈随易1 天前
纯 Go 写的 JS 引擎,跑分超过了 C 语言的 QuickJS
前端·后端·程序员
LongRunning1 天前
【Linux】RK3568-OpenCV+YOLO(八)
linux·opencv·yolo
卷无止境1 天前
RAGFlow 项目全景报告:从文档解析引擎到 Agent 原生数据库
后端·python
子兮曰1 天前
Chrome 权限元素实战:144 与 151 的渐进增强写法
前端·javascript·chrome
IT_陈寒1 天前
Redis连接池泄漏那次,我差点把生产环境搞崩了
前端·人工智能·后端
强尼银手1 天前
我花一天做了个格斗游戏原型,判定全对,然后被「美术」劝退了
前端·javascript
灿飞屋1 天前
Kotlin与Java虚拟机三:控制流
android·java·开发语言·后端·python·kotlin·安卓
benchmark_cc1 天前
单只股票五档盘口接入个人研究仓库:QuantDash 读取、校验与易错点
python·数据分析·pandas·量化交易·股票数据·quantdash