2020年,BAT常問iOS面試題彙總

Runloop & KVO

runloop

  1. app如何接收到觸摸事件的
  2. 為什麼只有主線程的runloop是開啟的
  3. 為什麼只在主線程刷新UI
  4. PerformSelector和runloop的關係
  5. 如何使線程保活

KVO

  1. 實現原理
  2. 如何手動關閉kvo
  3. 通過KVC修改屬性會觸發KVO麼
  4. 哪些情況下使用kvo會崩潰,怎麼防護崩潰
  5. kvo的優缺點

runtime相關問題

結構模型

  1. 介紹下runtime的內存模型(isa、對象、類、metaclass、結構體的存儲信息等)
  2. 為什麼要設計metaclass
  3. class_copyIvarList & class_copyPropertyList區別
  4. class_rw_t 和 class_ro_t 的區別
  5. category如何被加載的,兩個category的load方法的加載順序,兩個category的同名方法的加載順序
  6. category & extension區別,能給NSObject添加Extension嗎,結果如何
  7. 消息轉發機制,消息轉發機制和其他語言的消息機制優劣對比
  8. 在方法調用的時候,方法查詢-> 動態解析-> 消息轉發 之前做了什麼
  9. IMP、SEL、Method的區別和使用場景
  10. load、initialize方法的區別什麼?在繼承關係中他們有什麼區別
  11. 說說消息轉發機制的優劣

Block

  1. block的內部實現,結構體是什麼樣的
  2. block是類嗎,有哪些類型
  3. 一個int變量被 __block 修飾與否的區別?block的變量截獲
  4. block在修改NSMutableArray,需不需要添加__block
  5. 怎麼進行內存管理的
  6. block可以用strong修飾嗎
  7. 解決循環引用時為什麼要用__strong、__weak修飾
  8. block發生copy時機
  9. Block訪問對象類型的auto變量時,在ARC和MRC下有什麼區別

多線程

主要以GCD為主

  1. iOS開發中有多少類型的線程?分別對比
  2. GCD有哪些隊列,默認提供哪些隊列
  3. GCD有哪些方法api
  4. GCD主線程 & 主隊列的關係
  5. 如何實現同步,有多少方式就說多少
  6. dispatch_once實現原理
  7. 什麼情況下會死鎖
  8. 有哪些類型的線程鎖,分別介紹下作用和使用場景
  9. NSOperationQueue中的maxConcurrentOperationCount默認值
  10. NSTimer、CADisplayLink、dispatch_source_t 的優劣

性能優化

  1. 如何做啟動優化,如何監控
  2. 如何做卡頓優化,如何監控
  3. 如何做耗電優化,如何監控
  4. 如何做網絡優化,如何監控

架構設計

  1. 手動埋點、自動化埋點、可視化埋點
  2. MVC、MVP、MVVM設計模式
  3. 常見的設計模式
  4. 單例的弊端
  5. 常見的路由方案,以及優缺點對比
  6. 如果保證項目的穩定性
  7. 設計一個圖片緩存框架(LRU)
  8. 如何設計一個git diff
  9. 設計一個線程池?畫出你的架構圖
  10. 你的app架構是什麼,有什麼優缺點、為什麼這麼做、怎麼改進

數據結構與算法

  1. 八大排序算法
  2. 棧&隊列
  3. 字符串處理
  4. 鏈表
  5. 二叉樹相關操作
  6. 深搜廣搜
  7. 基本的動態規劃題、貪心算法、二分查找

總結

這些都是收集於最近面試中一些常見問題,歡迎各位業界高手留下更多的題目與答案!需要更多iOS面試題,書籍資料,不如加入小編交流圈;與2000+iOS夥伴一起學習進步!私信回覆"1";即可進入;


分享到:


相關文章: