最近刚结束 Apple Frontend Engineer 的一轮技术面,这一轮主要围绕 Coding + Behavioral 展开,没有出现 System Design,但不代表 Apple 不考——很多候选人是在后续轮次才遇到,所以准备时千万别放松。下面直接复盘核心内容,给正在准备 Apple 面试的同学一点参考。
Coding 面试题回顾
这一轮只有一道核心算法题,但限制条件非常关键。
题目大意是:给定一个大约 75 个元素的整数数组,需要对数组进行去重,并对结果进行排序。其中去重的要求是,如果某个元素在数组中重复出现,需要将重复值进行 zero out 处理(比如置为 0 或标记移除)。同时明确规定,不能使用任何原生排序函数,包括 sort、quicksort 等。
乍一看 N 很小,随便写个冒泡排序也能过,但面试官一开始就强调,这道题不能只考虑“能不能跑”,而是要从复杂度角度给出合理解法。
解题整体思路
我在面试中是把问题拆成两个阶段来思考:先处理去重,再处理排序。面试官对这种拆解方式是认可的,也会顺着你的思路继续追问。
在去重阶段,比较直接的做法是使用一个 Hash Set 来记录已经出现过的元素。遍历数组时,如果当前元素已经在 Set 中出现过,就对该位置进行 zero out 处理;如果没有出现过,就把该元素加入 Set。这样一遍扫描就能完成去重,时间复杂度是 O(N),逻辑也非常清晰。
面试官在这一阶段会比较在意两个点:第一,zero out 的定义是否会影响后续排序;第二,0 本身是否可能是合法数据。如果你能主动提到这些边界情况,并说明你的处理方式,会明显加分。完成去重之后,接下来就是排序问题。由于禁止使用原生排序函数,本质上是在考你是否真正理解排序算法,而不是只会调库。
我当时选择的是手写归并排序。原因也很简单:时间复杂度稳定在 O(N log N),实现逻辑清楚,在面试场景下不容易出边界 bug。面试官也会比较容易跟着你的递归逻辑走,而不是在细节上反复打断。
隐藏加分点
在排序阶段,面试官有追问一句:“如果我告诉你,数组里的数字范围很小,比如 0 到 100,你会怎么优化?”
这是一个非常典型的 Apple 风格追问。
在这种前提下,其实可以直接使用计数排序。通过一个固定大小的计数数组统计每个数出现的次数,再按顺序回填结果,整体时间复杂度可以做到 O(N)。如果你能意识到这是一个可以利用数据分布特征进行优化的场景,面试官一般会给出非常正面的反馈。
这一点本质上考的不是你背了多少算法,而是你有没有根据“输入特征”调整解法的能力。
Behavioral 面试回顾
这一轮的 BQ 属于 Apple 非常常见、但并不容易答好的类型。重点问题是 Most Proud Project,也就是让你讲一个自己最自豪的项目经历。
面试官真正想考察的并不是项目本身有多复杂,而是你是否对自己做过的事情有清晰认知,是否真正理解这个项目的价值。回答时一定要注意,不要一直用“我们团队做了什么”,而是要突出“我具体做了什么”。尤其是在技术选型、关键决策、性能优化或问题解决上的个人贡献。
我个人非常推荐用 STAR 原则来组织语言,但不要生硬套模板。重点是把 Result 讲清楚,最好能用数据量化结果,比如性能提升比例、错误率下降幅度、用户体验改进效果等。
一点补充说明
我们这边平时整理了不少真实 Apple、Meta、Google 等一线大厂的面试题和追问套路,包括类似这种看起来简单但很吃基本功的 coding 题。想提前掌握高频题型、梳理答题框架,或者在实战中需要 面试辅助 都可以来联系我们。如果你是那种题型大致会、但容易在面试压力下失误的情况,可以多给自己留一层保险。准备得越充分,现场发挥就越稳定,这一点在 Apple 面试里尤其明显。