最近不少同学都在问 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,让面试不再慌乱,思路清晰,成功率大大提升。