最近不少同學都在問 apple 的面試題到底是什麼風格。這段時間 apple 的面經在各個論壇也出現得比較多,很多人私信問真實技術面會問什麼型別的問題。正好最近覆盤了一場比較典型的 apple software engineer 技術面試,題型其實挺有代表性。這篇就把這場三輪技術面試的過程整理出來,給準備 apple 面試的同學做個參考。

Timeline
11.28 第一輪技術面
12.12 第二輪 + 第三輪(同一天完成)
整體節奏不算特別快,但後兩輪是背靠背完成的,中間基本沒有緩衝時間。第一輪結束之後隔了一段時間才安排後面的面試,不過第二天連續兩輪強度還是挺大的。
Round 1:Event Log 壓縮儲存系統
第一題給了一個持續接收 event log 的系統。日誌按 timestamp 遞增,每條包含 timestamp 和 eventType。同一個 eventType 可能在短時間內連續出現很多次,如果全部原樣儲存,會浪費大量記憶體。
要求在實時 append 的同時完成壓縮儲存,並支援後續查詢。
語音提示學員:想想連續重複事件,有沒有必要存一萬條?
學員回答用 segment:eventType、startTime、endTime、count。
面試官追問:“查詢某時間區間怎麼辦?”
語音提示:二分查詢。
面試官繼續問:
“如果 timestamp 不遞增呢?插入複雜度是多少?”
Round 2:多版本配置系統
第二題是一個多版本配置系統。系統有多個配置源,每個都是 key-value map。每次更新都會生成新的版本號。現在需要支援在任意歷史版本下查詢某個 key 的最終生效值,並且配置源之間有優先順序覆蓋關係。
語音提示學員:別存完整快照,只存 delta。
學員回答:每次只記錄修改過的 key,查詢沿 version chain 向上查詢。
面試官追問:“version chain 很長怎麼辦?”
語音提示:可以加索引或跳躍查詢。
Round 3:帶 Group 約束的任務排程
給定一組任務,它們之間存在依賴關係形成 DAG。同時每個任務屬於某個 group,同一個 group 內的任務必須嚴格按照提交順序序列執行,不同 group 之間可以並行。
要求輸出一個合法執行順序,並且在合法的前提下儘量讓任務更早開始執行。
語音提示學員:group 順序也可以轉成依賴邊。
學員回答:同 group 相鄰任務加依賴邊,再做拓撲排序。
面試官追問:“這樣建圖會產生環嗎?”
瞭解更多
整場面試下來可以發現,Apple 的題更多考的是抽象能力和建模思路,不是單純刷演算法題。像日誌壓縮、版本化儲存、DAG 任務排程這種題,如果第一次碰到,很容易卡在思路上。如果你也擔心在 Apple 或其他大廠面試中遇到類似情況,不如瞭解一下我們的 VO遠端助攻服務 ,目前已經幫助數百名學員順利拿下 offer,讓面試不再慌亂,思路清晰,成功率大大提升。