今年 Apple Intern 發麵試真的很多,但我還是看到一部分同學連 OA 都沒有。 我個人判斷很大概率是簡歷問題。眾所周知每家大廠簡歷偏好都不一樣,沒被撈先看看你項目是不是不符合谷歌風格。 這篇 Apple Intern面經 依然是原創真實面經,不是那種地裡拿出來再改編的。
Apple Intern面經
OOD
我們要用面向對象的方式來設計一個停車場系統。 這個停車場呢,不是只有一層,而是有好幾層。每一層裡面,又分成一排一排的停車位。停車場要能停不同類型的車,比如:摩托車,小汽車,公交車。然後這個系統要具備兩個核心功能:能查到一輛車停在哪一層、哪一個位置,車開走的時候,能自動算出該交多少錢停車費。
思路:停車場系統包含以下核心類:
- Vehicle(車輛基類):定義通用車輛屬性
- Motorcycle, Car, Bus(具體車輛類):繼承自Vehicle
- ParkingSpot(停車位):記錄車位信息
- Level(樓層):管理每層的車位
- ParkingGarage(停車場):整個停車場的總管理
Code
題目:給 a[0]…a[N-1],找 i<=j 且 a[i]=a[j],使得子數組和 a[i]+…+a[j] 最大。
這題看著像“找相同值的兩端”,但核心其實是:固定右端 j 時,想讓 sum(i..j) 最大,就要讓 prefix[i] 盡量小(因為 sum = prefix[j+1] – prefix[i]),並且 a[i] 必須等於 a[j]。所以我會做兩件事,先用前綴和 pref[k] = a[0]+…+a[k-1],對每個值 v,維護一個“目前為止出現過 v 的位置裡,最小的 pref[i](以及對應下標 i),
當我掃到某個 j(值是 v):先把當前的 pref[j] 拿去更新 v 的最小前綴(這一步也覆蓋 i=j 的情況),然後算候選答案:pref[j+1] - minPref[v],更新全局最大值,同時記錄 i、j。
解法
數據結構:HashMap(value -> (minPrefix, minIndex)),minPrefix:該 value 作為左端點時,能拿到的最小 pref[i],minIndex:對應的 i,用來最後返回區間。
時間複雜度: O(N)(掃一遍,每步 hashmap 操作),空間複雜度: O(U)(U 是不同數字的數量)
Follow-up 1:如果要求 i < j(不允許單個元素)怎麼辦?
很簡單:更新答案時加個判斷 i < j,或者初始化 min_pref 的時機改成“先算候選,再把 j 放進去”,保證左端一定在右端之前。
Follow-up 2:如果要返回“最大和對應的所有區間”,或者 tie-break(比如和相同取最短 / 最早)?
tie-break 規則寫進更新邏輯:和相同:比較長度 (j – i),還相同:比較 i 更小,如果要返回所有區間:需要在 map 裡保留“同樣最小 pref 的多個 i”(但一般面試不會真讓你返回全部,更多是考你怎麼定義 tie-break)。
Code + 八股
Apple intern除了考Code,有時候還會八股+Code一起考試,八股主要圍繞著操作系統,問了 C 裡面的 volatile 關鍵字,virtual memory的原理,死鎖的原理。
Code: 實現一個 hash table。支持插入查找刪除。這種面試官有一個特點,喜歡 micro management,比如敲到一半兒給你個 hint,說不要你這麼敲要你那麼敲。我們只能順著面試官,否則面試官很可能開始跟你 battle,用一個衝突的視角看到你的方法,算是人之常情,但我們要避免這個麻煩。
BQ:Out of your comfort zone, tight ddl, can not meet your commitment, 如何和 customer 交流。
準備小結
如果你也在準備 Apple Intern 或其他大廠的 OA/VO,可以直接聯繫 programhelp 了解對應的面試輔助和陪跑支持。如果你想找我輔助面試,或者用 Apple intern面經 中的原題 mock,感受最真實的 feedback,歡迎戳我。
全網唯一一家支持 L6 以上 system design mock,只放真實面經。
求職輔助服務,是關於時間和品質的較量。諮詢Programhelp,獲取最專業的Tech求職輔助。