天天看點

2020年春招過半,iOS開發面試題清單,帶你高效刷題!簡述runtime相關問題NSNotification相關Runloop & KVOBlock多線程視圖&圖像相關性能優化開發證書架構設計其他問題系統基礎知識資料結構與算法總結推薦👇:

簡述

最近收集梳理了一些iOS相關的問題,其中大部分都是大廠面試或者面試其他人用到的,能命中大部分的面試和日常工作,更希望你可以用它來檢驗自己

由于問題量太大,本文隻是給了問題,希望發揮圈友的動手能力,自己去探索下,也可以在下方進行評論回複你的答案或者提出更高品質的問題!!!

runtime相關問題

runtime

是iOS開發最核心的知識了,如果下面的問題都解決了,那麼對

runtime

的了解已經很深了。

runtime

已經開源了,這有一份别人調試好可運作的源碼

objc-runtime

,也可以去官網找

objc4

結構模型

  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. 說說消息轉發機制的優劣

記憶體管理

  1. weak

    的實作原理?

    SideTable

    的結構是什麼樣的
  2. 關聯對象的應用?系統如何實作關聯對象的
  3. 關聯對象的如何進行記憶體管理的?關聯對象如何實作weak屬性
  4. Autoreleasepool

    的原理?所使用的的資料結構是什麼
  5. ARC

    ARC

    下對

    retain & release

    做了哪些優化
  6. ARC

    下哪些情況會造成記憶體洩漏

其他

  1. Method Swizzle

    注意事項
  2. 屬性修飾符

    atomic

    的内部實作是怎麼樣的?能保證線程安全嗎
  3. iOS 中内省的幾個方法有哪些?内部實作原理是什麼
  4. class、objc_getClass、object_getclass

    方法有什麼差別?

NSNotification相關

蘋果并沒有開源相關代碼,但是可以讀下

GNUStep

的源碼,基本上實作方式很具有參考性

  1. 實作原理(結構設計、通知如何存儲的、

    name&observer&SEL

    之間的關系等)
  2. 通知的發送時同步的,還是異步的
  3. NSNotificationCenter

    接受消息和發送消息是在一個線程裡嗎?如何異步發送消息
  4. NSNotificationQueue

    是異步還是同步發送?在哪個線程響應
  5. NSNotificationQueue

    runloop

    的關系
  6. 如何保證通知接收的線程在主線程
  7. 頁面銷毀時不移除通知會崩潰嗎
  8. 多次添加同一個通知會是什麼結果?多次移除通知呢
  9. 下面的方式能接收到通知嗎?為什麼
// 發送通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleNotification:) name:@"TestNotification" object:@1];
// 接收通知
[NSNotificationCenter.defaultCenter postNotificationName:@"TestNotification" object:nil];
           
作為一個開發者,有一個學習的氛圍跟一個交流圈子特别重要,這是一個我的點選加入群聊 iOS交流群 :763164022,不管你是小白還是大牛歡迎入駐 ,分享BAT,阿裡面試題、面試經驗,讨論技術, 大家一起交流學習成長!

Runloop & KVO

runloop

runloop

對于一個标準的iOS開發來說都不陌生,應該說熟悉

runloop

是标配,下面就随便列幾個典型問題吧

  1. app如何接收到觸摸事件的
  2. 為什麼隻有主線程的

    runloop

    是開啟的
  3. 為什麼隻在主線程重新整理UI
  4. PerformSelector

    runloop

  5. 如何使線程保活

KVO

runloop

一樣,這也是标配的知識點了,同樣列出幾個典型問題

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

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. AutoLayout

    的原理,性能如何
  2. UIView & CALayer

  3. 事件響應鍊
  4. drawrect & layoutsubviews

    調用時機
  5. UI的重新整理原理
  6. 隐式動畫 & 顯示動畫差別
  7. 什麼是離屏渲染
  8. imageName & imageWithContentsOfFile差別
  9. 多個相同的圖檔,會重複加載嗎
  10. 圖檔是什麼時候解碼的,如何優化
  11. 圖檔渲染怎麼優化
  12. 如果GPU的重新整理率超過了iOS螢幕60Hz重新整理率是什麼現象,怎麼解決

性能優化

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

開發證書

  1. 蘋果使用證書的目的是什麼
  2. AppStore安裝app時的認證流程
  3. 開發者怎麼在debug模式下把app安裝到裝置呢

架構設計

典型源碼的學習

隻是列出一些iOS比較核心的開源庫,這些庫包含了很多高品質的思想,源碼學習的時候一定要關注每個架構解決的核心問題是什麼,還有它們的優缺點,這樣才能算真正了解和吸收

  1. AFN
  2. SDWebImage
  3. JSPatch、Aspects(雖然一個不可用、另一個不維護,但是這兩個庫都很精煉巧妙,很适合學習)
  4. Weex/RN, 筆者認為這種前端和用戶端緊密聯系的庫是必須要知道其原理的
  5. CTMediator、其他router庫,這些都是常見的路由庫,開發中基本上都會用到
  6. 圈友

    們在評論下面補充吧

  1. 手動埋點、自動化埋點、可視化埋點
  2. MVC、MVP、MVVM

    設計模式
  3. 常見的設計模式
  4. 單例的弊端
  5. 常見的路由方案,以及優缺點對比
  6. 如果保證項目的穩定性
  7. 設計一個圖檔緩存架構(LRU)
  8. 如何設計一個

    git diff

  9. 設計一個線程池?畫出你的架構圖
  10. 你的app架構是什麼,有什麼優缺點、為什麼這麼做、怎麼改進

其他問題

  1. PerformSelector & NSInvocation

    優劣對比
  2. oc

    怎麼實作多繼承?怎麼面向切面(可以參考 Aspects深度解析-iOS面向切面程式設計
  3. 哪些

    bug

    會導緻崩潰,如何防護崩潰
  4. 怎麼監控崩潰
  5. app

    的啟動過程(考察LLVM編譯過程、靜态連結、動态連結、runtime初始化)
  6. 沙盒目錄的每個檔案夾劃分的作用
  7. 簡述下

    match-o

    檔案結構

系統基礎知識

  1. 程序和線程的差別
  2. HTTPS

    的握手過程
  3. 什麼是

    中間人攻擊

    ?怎麼預防
  4. TCP

    的握手過程?為什麼進行三次握手,四次揮手
  5. 堆和棧

    區的差別?誰的占用記憶體空間大
  6. 加密算法:

    對稱加密算法和非對稱加密算法

  7. 常見的

    對稱加密和非對稱加密

    算法有哪些
  8. MD5、Sha1、Sha256

  9. charles

    抓包過程?不使用

    charles

    4G

    網絡如何抓包

資料結構與算法

對于移動開發者來說,一般不會遇到非常難的算法,大多以資料結構為主,筆者列出一些必會的算法,當然有時間了可以去

LeetCode

上刷刷題

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

總結

這些都是作者收集的加上自身面試的一些經驗總結,後期會持續收集補充,歡迎圈内的高手在評論區或者公衆号貼上你的答案或者高品質問題

準備面試是一方面,對于非面試的iOS開發者來說更适用于檢驗自己,發起進階之路。另外知識點是瑣碎的,但是真的能全部弄懂并把瑣碎的知識點融會貫通,建構起自己的知識體系,你就更新了。

推薦👇:

申請即送:

  • BAT大廠面試題、獨家面試工具包,
  • 資料免費領取,包括 資料結構、底層進階、圖形視覺、音視訊、架構設計、逆向安防、RxSwift、flutter,

繼續閱讀