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

相关推荐
Htr_2 分钟前
Vercel 使用指南:框架、工作流与基础设施一体化的现代 Web 部署平台
前端
xiebingsuccess7 分钟前
Ubuntu 22.04 在 VMware 上的安装与远程桌面配置 — 任务报告
linux·运维·ubuntu·ai+嵌入式开发
程序员AlbertTu8 分钟前
Linux 系统 Bug 调试操作手册
linux·postgresql·bug
weixin_4713830312 分钟前
17 Self-RAG —— 幻觉检测 + 答案质量评估
python·agent
一颗烂土豆15 分钟前
ECharts 太平面?试试这款 Vue 3D 图表库
前端·vue.js·echarts
juesdo17 分钟前
vulnos OS-00118靶场通关
linux·web安全·网络安全·docker
叠层归一研究院18 分钟前
如何用程序搭建一个 AGI 种子系统(三):生长如何对接物理与数学宇宙
人工智能·python·算法·机器学习·transformer·agi
anyup24 分钟前
迁移uni-app x,我是如何让 AI 把我一步步搞崩溃的...
前端·uni-app·trae
霸刀25 分钟前
nslookup 与 dig 使用指南:DNS 查询、区别对比及真实案例解读
linux·cdn·dns
郝亚军29 分钟前
asqlite-autoconf-3310100 的ubuntu 22.04 aarch64交叉编译
linux·运维·ubuntu