昨天剛做完 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,面試順利!