昨天刚做完 Meta Online Assessment ,四道题一整套,算是一个带关卡解锁的内存云存储模拟系统。我大概花了 40 分钟左右 AC,整体感觉不算特别难,但数据结构设计一定要想清楚,不然写到 Level 3、Level 4 会乱。分享一下我的思路和踩坑点。

Meta OA 整体情况
- 时长:90 分钟
- 题型:一个大型内存云存储系统模拟题,分 4 个 Level 逐步解锁
- 语言:支持 Python、Java、C++(我使用 Python)
- 特点:前置 Level 的代码会直接影响后续 Level,必须把数据结构设计好,否则后面会非常痛苦。Meta 越来越喜欢这种状态持久 + 逐步增强的题目,考察代码组织能力和系统思维。
题目要求实现一个简易内存云存储系统,只需维护文件的元信息(名称、大小、所有者等),无需真正操作文件系统。
各 Level 详细解析
Level 1:基础文件操作
支持以下三个核心操作:
- AddFile(string name, int size) —— 新增文件
- CopyFile(string nameFrom, string nameTo) —— 复制文件
- GetFileSize(string name) —— 查询文件大小
我的实现思路: 用两个核心字典维护状态:
- files: path → size
- owner: path → user_id(初始所有文件属于 “admin”)
这一关重点是处理同名冲突和复制时的状态同步。
Level 2:按前缀 / 后缀查找文件
新增方法: find_file(self, prefix: str, suffix: str) -> list[str]
返回格式示例:[“notes.txt(1024)”, “report.pdf(2048)”, …]
排序规则:
- 按文件大小降序
- 大小相同则按文件名字典序升序
思路:遍历 files 字典做前后缀匹配,收集结果后进行双关键字排序(Python 中可以用 sorted + key 轻松实现)。
Level 3:多用户与容量限制
引入用户系统:
- add_user(user_id: str, capacity: int)
- add_file_by(user_id: str, name: str, size: int)
核心变化:
- 每个用户有独立容量上限
- AddFile 默认由 admin 执行(无容量限制)
- CopyFile 继承原文件所有者
- 新增文件需检查用户剩余容量
思路:新增 users = {user_id: remaining_capacity} 字典,在新增/复制文件时进行容量校验,超限返回 None。
Level 4:文件压缩
新增 compress_file(user_id: str, name: str)
压缩规则:
- 新文件名 = name + “.COMPRESSED”
- 新大小 = 原大小 // 2(题目保证偶数)
- 所有者不变
- 更新用户剩余容量
思路:
- 检查文件是否存在且属于该用户
- 删除原文件记录
- 添加压缩后的新文件
- 更新用户容量
这一关需要特别注意状态同步,不能遗漏任何字典的更新。
我的核心数据结构(推荐)
self.files = {} # path -> size
self.owner = {} # path -> user_id
self.users = {} # user_id -> remaining_capacity
整个系统状态高度统一,随着 Level 解锁逐步增加逻辑,避免了重复代码和状态不一致的问题。
AC 关键经验:
- 提前设计清晰、可扩展的数据结构是最重要的
- 每个操作都要同步更新所有相关字典
- 特别注意 CopyFile 的所有权继承和容量检查
- 压缩文件不能重复压缩(题目已保证,但代码仍需健壮)
关于 Meta 面试 & AI Coding
很多人可能只刷了 LC,没怎么练这种场景化多关卡 OA。
我这次能快速 AC,主要是因为提前熟悉了这类 状态维护 + 业务规则叠加 的题。另外,现在 Meta 面试会考 AI Coding,面试官会跟你一起写代码,边写边聊思路、测试用例、边界条件。
很多人没面过这种形式,容易慌。
如果你也在准备 Meta 或者其他大厂的 OA / 面试,想练这种带用户、容量、压缩、权限的多关卡通识题,或者想提前适应 AI Coding 的节奏,可以 联系我们 。我自己把这一整套题都整理成了练习环境,也可以约 mock 面试。需要的朋友私信我即可。祝大家 OA 都 AC,面试顺利!