Ramp Backend OA 面经|Cloud Storage 缩容后,先删哪个文件

Ramp OA 云存储用户容量与文件删除顺序题解封面

文件能新增、能查询,用户容量却算错了,后面的测试就会连续失败。Ramp 的一份 2025 年 New Grad Backend OA 题目要求多个用户共用文件命名空间,同时各自遵守存储上限;容量调小后,还要按指定顺序删除文件。这个分支最值得单独练的是删完以后,各处状态是否仍然一致。

Ramp 的 CodeSignal 分阶段测评记录描述过逐级通过测试、解锁后续要求的形式。以下聚焦云存储这一道题的用户容量阶段,演算数据为练习自拟。

第一题:云存储里的用户配额

题目描述

所有文件放在同一个命名空间,文件记录包含名称、大小和所属用户。新增用户时指定容量;重复用户创建失败。用户添加文件时,既要检查同名文件,也要检查自己的剩余空间,成功后返回剩余容量,失败返回空值。

复制文件保留原文件的所属用户,因此复制产生的空间消耗也记在原用户名下。已有的基础新增接口由容量不受限的 admin 使用;普通用户的配额不能因为文件路径里出现 admin 字样而绕过。

调整用户容量时,如果已有文件总大小超过新上限,就按文件大小从大到小删除;大小相同时按文件名字典序决定先后。删到总大小不超过上限为止,返回删除数量。用户不存在则返回空值。这份 Backend OA 题面给出了这一组接口及容量缩减规则。

解题思路

先把所属用户和文件名分开存。可以用一张哈希表保存全局文件名到文件记录的映射,再用另一张表保存用户的容量、已用空间和文件名集合。检查同名冲突查全局表,收集待删除文件查用户集合,路径前缀不参与用户身份判断。

写新增操作时,先检查用户存在、文件名未占用、剩余容量足够,全部通过后再更新两张表和已用空间。不要先扣空间再检查同名,否则失败分支还得恢复状态。返回值也要分清:剩余空间为 0 表示成功且刚好用满,不能用真假判断把它当成失败。

用一个自拟例子走删除过程。用户 mila 的容量原来是 20,文件 /a.log 为 7,/b.log 为 7,/c.log 为 4,已用空间合计 18。把容量改成 10 后,先删 /a.log,空间降到 11,仍然超限;再删 /b.log,剩下 4,返回 2。大小相同的文件排序不可依赖哈希表的遍历顺序。

实现时,为该用户的文件建立快照列表,排序键设为大小降序、文件名升序,例如 Python 的 (-size, name)。逐个删除全局记录,同时移除用户文件集合中的名称、扣减已用空间。每删一次检查是否达标,达标立刻停止。遍历快照能避开直接修改正在迭代的集合带来的错误。

如果 mila 此时只剩 /c.log,再复制到 /d.log,新文件仍归 mila,空间从 4 变成 8;再次复制同一个目标名则失败,空间仍为 8。下一次新增大小为 3 的文件也失败,因为 8 + 3 超过容量 10。把这些操作接在同一个测试里,能查出比单独测新增更深的状态错误。

容量增大时只更新上限,不必重新排序。容量缩减后已用空间小于等于上限,也直接返回 0。为不受限的 admin 单独处理容量检查,比塞入一个随手选的巨大整数更清楚。

复杂度:维护已用空间和文件集合后,哈希表新增、查询与单次删除的平均时间为 O(1)。容量缩减涉及该用户的 m 个文件,排序需要 O(m log m) 时间和 O(m) 临时空间。文件名比较的字符开销随名称长度增加。

Ramp OA 练习时,先检查失败操作

有读者在 90 分钟的 Ramp OA 讨论里提到,接口实现和逐段解锁占满了大部分时间。模拟时可以给容量管理阶段单独留一段时间,要求每次补接口都跑回已有测试。

保留四组连续操作:重复文件名后再读剩余容量;复制成功后再缩容;容量恰好等于已用空间;缩容删除后,用同名路径重新新增。每组都核对文件表、用户文件集合和空间总数。只核对返回值,漏掉的状态会在下一段才暴露。

题目主要做插入、偶尔缩容时,一次排序便于写对。频繁缩容再考虑为每个用户维护有序结构,同时计算更新和删除的维护成本。

FAQ

容量降到 0 就要清空整个系统吗?

只处理该用户的文件,其他用户的文件和容量保持各自的状态。是否允许零字节文件,要以接口约束为准;不能仅凭容量为 0 推断文件数量必须为 0。

复制到别人的目录,所属用户会改变吗?

题目规定复制保留原所属用户。目录名和用户身份是两回事,复制的容量也应计入原用户。

为什么不能每次都重新计算已用空间?

可以作为最初的正确性版本,但会让多次新增反复扫描用户文件。维护一个已用空间字段能减少扫描,代价是每个成功的增删操作都必须同步更新它。

参考来源

关于 CSINTERVIEWHELP

准备 Ramp OA 时,可以找 CSINTERVIEWHELP 做限时模拟和代码讲评,重点检查状态更新、测试覆盖与实现速度。无论是 OA 题型解析、OA 辅导、VO 模拟面试、项目深挖还是系统设计训练,都可以围绕目标岗位安排练习:CSINTERVIEWHELP · 服务详情