筆者最近收集梳理了一些iOS相關的問題,其中大部分都是大廠面試或者面試其餘人用到的,能命中大部分的面試和平常工做,更但願你能夠用它來檢驗本身前端
因爲問題量太大,本文只是給了問題,但願發揮圈友的動手能力,本身去探索下,也能夠在下方進行評論回覆你的答案或者提出更高質量的問題!!!git
runtime
是iOS開發最核心的知識了,若是下面的問題都解決了,那麼對runtime
的理解已經很深了。 runtime
已經開源了,這有一份別人調試好可運行的源碼objc-runtime,也能夠去官網找objc4github
class_copyIvarList
& class_copyPropertyList
區別class_rw_t
和 class_ro_t
的區別category
如何被加載的,兩個category的load
方法的加載順序,兩個category的同名方法的加載順序category
& extension
區別,能給NSObject添加Extension嗎,結果如何方法查詢-> 動態解析-> 消息轉發
以前作了什麼IMP
、SEL
、Method
的區別和使用場景load
、initialize
方法的區別什麼?在繼承關係中他們有什麼區別weak
的實現原理?SideTable
的結構是什麼樣的Autoreleasepool
的原理?所使用的的數據結構是什麼ARC
的實現原理?ARC
下對retain & release
作了哪些優化ARC
下哪些狀況會形成內存泄漏Method Swizzle
注意事項atomic
的內部實現是怎麼樣的?能保證線程安全嗎class、objc_getClass、object_getclass
方法有什麼區別?蘋果並無開源相關代碼,可是能夠讀下GNUStep的源碼,基本上實現方式很具備參考性面試
name&observer&SEL
之間的關係等)NSNotificationCenter
接受消息和發送消息是在一個線程裏嗎?如何異步發送消息NSNotificationQueue
是異步仍是同步發送?在哪一個線程響應NSNotificationQueue
和runloop
的關係// 發送通知
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleNotification:) name:@"TestNotification" object:@1];
// 接收通知
[NSNotificationCenter.defaultCenter postNotificationName:@"TestNotification" object:nil];
複製代碼
runloop
對於一個標準的iOS開發來講都不陌生,應該說熟悉runloop
是標配,下面就隨便列幾個典型問題吧算法
runloop
是開啓的PerformSelector
和runloop
的關係同runloop
同樣,這也是標配的知識點了,一樣列出幾個典型問題編程
block
的內部實現,結構體是什麼樣的int
變量被 __block
修飾與否的區別?block的變量截獲block
在修改NSMutableArray
,需不須要添加__block
block
能夠用strong
修飾嗎__strong、__weak
修飾block
發生copy
時機Block
訪問對象類型的auto變量
時,在ARC和MRC
下有什麼區別主要以GCD爲主設計模式
iOS
開發中有多少類型的線程?分別對比GCD
有哪些隊列,默認提供哪些隊列GCD
有哪些方法apiGCD
主線程 & 主隊列的關係dispatch_once
實現原理NSOperationQueue
中的maxConcurrentOperationCount
默認值NSTimer、CADisplayLink、dispatch_source_t
的優劣AutoLayout
的原理,性能如何UIView & CALayer
的區別drawrect & layoutsubviews
調用時機只是列出一些iOS比較核心的開源庫,這些庫包含了不少高質量的思想,源碼學習的時候必定要關注每一個框架解決的核心問題是什麼,還有它們的優缺點,這樣才能算真正理解和吸取api
圈友
們在評論下面補充吧MVC、MVP、MVVM
設計模式git diff
PerformSelector & NSInvocation
優劣對比oc
怎麼實現多繼承?怎麼面向切面(能夠參考Aspects深度解析-iOS面向切面編程)bug
會致使崩潰,如何防禦崩潰app
的啓動過程(考察LLVM編譯過程、靜態連接、動態連接、runtime初始化)match-o
文件結構HTTPS
的握手過程中間人攻擊
?怎麼預防TCP
的握手過程?爲何進行三次握手,四次揮手堆和棧
區的區別?誰的佔用內存空間大對稱加密算法和非對稱加密算法
區別對稱加密和非對稱加密
算法有哪些MD五、Sha一、Sha256
區別charles
抓包過程?不使用charles
,4G
網絡如何抓包對於移動開發者來講,通常不會遇到很是難的算法,大多以數據結構爲主,筆者列出一些必會的算法,固然有時間了能夠去LeetCode上刷刷題緩存
這些都是筆者收集的加上自身面試的一些經驗總結,後期會持續收集補充,歡迎圈內的高手在評論區或者公衆號貼上你的答案或者高質量問題安全
準備面試是一方面,對於非面試的iOS開發者來講更適用於檢驗本身,發起進階之路。另外知識點是瑣碎的,可是真的能所有弄懂並把瑣碎的知識點融會貫通,構建起本身的知識體系,你就升級了。
若是以爲受益了,能夠關注筆者的公衆號,會按期推一些有趣優質的文章🤝