Apple Software Engineer 技术面试 |Apple 三轮技术面试复盘

37Times read
No Comments

最近不少同学都在问 apple 的面试题到底是什么风格。这段时间 apple 的面经在各个论坛也出现得比较多,很多人私信问真实技术面会问什么类型的问题。正好最近复盘了一场比较典型的 apple software engineer 技术面试,题型其实挺有代表性。这篇就把这场三轮技术面试的过程整理出来,给准备 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,让面试不再慌乱,思路清晰,成功率大大提升。

author avatar
Jory Wang Amazon资深软件开发工程师
Amazon 资深工程师,专注 基础设施核心系统研发,在系统可扩展性、可靠性及成本优化方面具备丰富实战经验。 目前聚焦 FAANG SDE 面试辅导,一年内助力 30+ 位候选人成功斩获 L5 / L6 Offer。
End of text
 0