1. 程式人生 > 實用技巧 >iOS 2020社招面試經驗

iOS 2020社招面試經驗

一年的 iOS 工作經驗,在此分享一下此次面試 位元組、阿里、騰訊、快手、美團、小米、猿輔導的經驗

一、二、三面的面試題個大廠側重點不一樣,所以把所有被面的題彙總在一起可以系統的進行學習

先推薦一個國內網際網路大廠(百度、騰訊、阿里、位元組、美團、滴滴、快手等)的內推群,任何職位皆可,內推會比自己海投要靠譜,成功率偏高,掃碼進群

在這裡插入圖片描述

所有面試題及答案彙總

複習材料

一面

知識點:

一面的知識點主要考基礎知識,由淺到深的問

網路相關:

  1. HTTP 與 HTTPS 的區別
  2. 三次握手,為什麼需要三次,四次揮手,為什麼需要四次
  3. DNS 協議
  4. 中間人攻擊模式的流程
  5. 對稱加密與非對稱加密,具體如何體現

設計模式:

  1. 知道哪些設計模式,說出的越多越好
  2. 挑一個自己最熟悉的設計模式講講如何實現(最好不要講觀察者模式)

專業相關:

  1. 動/靜態庫的區別,該如何選擇
  2. OC 中的屬性修飾符的區別(weak 與 assign,copy 與 strong 以及 mutableCopy, atomic 與 nonatmoicd 以及執行緒安全問題)
  3. static 與 class 關鍵字 的區別
  4. 對 RunLoop 的理解,基本作用,與執行緒的關係,有哪些事件,其中包含哪些 Mode,各個 Mode 都有什麼作用,在滑動螢幕的時候 Mode 是如何切換的
  5. Runtime 機制的理解,在 iOS 中有哪些具體的應用
  6. 訊息轉發的具體流程,物件(object)、類(class)、方法(method)這幾個的結構體的具體組成,以及元類的特性
  7. KVO 與 KVC 的理解, KVC 中搜索成員名的順序
  8. 關聯物件的使用及原理
  9. 程序和執行緒的區別
  10. block 的實現原理,block 是不是一個物件,會結合具體程式碼考察 block 捕獲變數、__block 的作用、儲存等知識點
  11. OC 中 Category 的實現原理,以及重名方法的呼叫順序及原因
  12. 類載入流程,父/子/分類中 load 方法的執行順序,init 方法的執行順序
  13. 檢視圓角的實現,是否會造成離屏渲染,離屏渲染產生的原因,離屏渲染代價高的原因,還有哪些情況會造成離屏渲染,圓角實現的其他方法可以
  14. 如何實現一個三角形的 button
  15. 事件響應和手勢識別,事件傳遞的順序,優先順序,響應者鏈的實現,hitTest方法理解及使用
  16. UIView 和 CALayer 的關係,各自的作用與區別
  17. 定時器有哪幾種實現方式,各自的優缺點和使用場景
  18. JSON 序列化和反序列化

二面

  1. APP 的啟動流程
  2. 非同步繪製的實現遠離
  3. Hook 與 Method Swizzling(方法交換)是否使用過,具體原理與過程
  4. 描述 ARC 的工作原理,使用的資料結構,做了哪些優化
  5. weak 的實現原理,為什麼不會引用計數+1
  6. AutoreleasePool 的實現原理,需要結合具體的原始碼的方法解釋,整個執行過程、資料結構等
  7. RunLoop 中哪些狀態型別,各個型別如何切換及作用
  8. 對 iOS 中的多執行緒是否瞭解,具體有哪些多執行緒方案,GCD 與 Operation 對比以及優缺點,GCD 串/並行、同/非同步 的執行順序(會結合具體的程式碼考察),GCD 中的 barrier 的特性
  9. iOS 中的執行緒鎖有哪些,對 DispatchSemaphore 的使用與理解
  10. 是否看過一些開源專案的原始碼,例如:AFNetWorking、Masonry、SDWebImage等,SDWebImage 會考察載入圖片的流程,Masonry 會考察其中鏈式呼叫、不會造成記憶體洩漏的原因等,AFNetWorking 會考察各個版本之間的差異和優化點

三面

  1. iOS 中的卡頓檢測,如何檢測,檢測到如何上報,各大廠都有哪些成熟的框架,以及實現原理
  2. 平時開發中是否有遇到過讓自己影響特別深的問題,簡單講講,最後是怎麼解決的,對自己有什麼啟發
  3. 最近在看什麼新技術麼,進展如何
  4. 工作有沒有遇到讓自己覺得特別厲害的同事,讓自己特別崇拜,覺得自己跟他的差距在哪兒,覺得他身上有哪些有點值得自己去學習
  5. 工作中、業餘時間是怎麼學習的,學習方式及時間分配

演算法:

整個面試經歷中,遇到的演算法以及自己沒有遇到的但是覺得很重要易考的演算法都有整理出來,具體見文件:

演算法整理

Swift 相關的面試問題(重要)

如果自己簡歷有提到過會使用 Swift 語言進行開發,那麼下面的知識點都很重要

  1. Swift 中的 Runtime 機制,與 OC 中的 Runtime機制的對比
  2. Class 和 Struct 的區別
  3. 理解 Swift 值型別的寫時複製
  4. defer 的用法
  5. inout 輸入輸出引數
  6. 什麼是高階函式
  7. static 和 class 的區別
  8. 自定義模式匹配模式
  9. Swift 與 Objective-C 的聯絡與區別?
  10. Swift 比 Objective-C 有什麼優勢?
  11. Swift 是面向物件還是函式式的程式語言?
  12. 請說明並比較以下關鍵詞:Open, Public, Internal, File-private, Private
  13. 請說明並比較以下關鍵詞:strong, weak, unowned
  14. 說說 Swift 為什麼將 String,Array,Dictionary 設計成值型別?
  15. Swift mutating 關鍵字的使用?
  16. OC 和 Swift 中的 enum 的區別