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

相关推荐
MediaTea10 小时前
DL:扩散模型的基本原理与 PyTorch 实现
人工智能·pytorch·python·深度学习·机器学习
Chasing__Dreams10 小时前
大模型应用开发--0--知识点
python
清风一徐10 小时前
Python文件处理
开发语言·python
nbsaas-boot11 小时前
Drools 规则引擎实战:原理、规则语法、数据库动态规则与企业级玩法
java·数据库·python
ZengLiangYi11 小时前
系统托盘 + 窗口状态持久化:Electron 细节
前端·electron
_Emma_11 小时前
【Linux网络】Linux网络协议栈问题汇集
linux·网络·网络协议
minji...11 小时前
Linux 网络基础之数据链路层(十三)认识以太网,认识MAC地址和MTU,局域网(以太网)通信原理
linux·网络·以太网·交换机·数据链路层·mac地址·局域网通信
minji...11 小时前
Linux 网络基础之数据链路层(十四)ARP协议及原理,ARP欺骗
linux·网络·智能路由器·ip·arp协议·arp欺骗
weixin_5500831511 小时前
基于Python的豆瓣电影数据爬取与可视化分析
开发语言·python