前言:
- 筆者最近收集梳理了一些iOS相關的問題涎劈,其中大部分都是大廠面試或者面試其他人用到的钧唐,能命中大部分的面試和日常工作生宛,更希望你可以用它來檢驗自己
- 此篇問題味咳,有一部分和之前的部分題目有很多重合,類似的擦俐,可以借鑒參考脊阴。
runtime相關問題
runtime是iOS開發(fā)最核心的知識了,如果下面的問題都解決了蚯瞧,那么對runtime的理解已經很深了嘿期。 runtime已經開源了,這有一份別人調試好可運行的源碼objc-runtime埋合,也可以去官網找objc4
結構模型
- 介紹下runtime的內存模型(isa备徐、對象、類甚颂、metaclass蜜猾、結構體的存儲信息等)
- 為什么要設計metaclass
- class_copyIvarList & class_copyPropertyList區(qū)別
- class_rw_t 和 class_ro_t 的區(qū)別
- category如何被加載的,兩個category的load方法的加載順序秀菱,兩個category的同名方法的加載順序
- category & extension區(qū)別,能給NSObject添加Extension嗎蹭睡,結果如何
- 消息轉發(fā)機制衍菱,消息轉發(fā)機制和其他語言的消息機制優(yōu)劣對比
- 在方法調用的時候,方法查詢-> 動態(tài)解析-> 消息轉發(fā) 之前做了什么
- IMP棠笑、SEL梦碗、Method的區(qū)別和使用場景
- load、initialize方法的區(qū)別什么蓖救?在繼承關系中他們有什么區(qū)別
- 說說消息轉發(fā)機制的優(yōu)劣
作為一個開發(fā)者洪规,有一個學習的氛圍跟一個交流圈子特別重要,這是一個我的iOS交流群:413038000循捺,不管你是大牛還是小白都歡迎入駐 斩例,分享BAT,阿里面試題、面試經驗从橘,討論技術念赶, 大家一起交流學習成長!
推薦閱讀
iOS開發(fā)——最新 BAT面試題合集(持續(xù)更新中)
內存管理
- weak的實現(xiàn)原理恰力?SideTable的結構是什么樣的
- 關聯(lián)對象的應用叉谜?系統(tǒng)如何實現(xiàn)關聯(lián)對象的
- 關聯(lián)對象的如何進行內存管理的?關聯(lián)對象如何實現(xiàn)weak屬性
- Autoreleasepool的原理踩萎?所使用的的數據結構是什么
- ARC的實現(xiàn)原理停局?ARC下對retain & release做了哪些優(yōu)化
- ARC下哪些情況會造成內存泄漏
其他
- Method Swizzle注意事項
- 屬性修飾符atomic的內部實現(xiàn)是怎么樣的?能保證線程安全嗎
- iOS 中內省的幾個方法有哪些?內部實現(xiàn)原理是什么
- class香府、objc_getClass董栽、object_getclass 方法有什么區(qū)別?
NSNotification相關
實現(xiàn)原理(結構設計、通知如何存儲的企孩、name&observer&SEL之間的關系等)
通知的發(fā)送時同步的锭碳,還是異步的
NSNotificationCenter接受消息和發(fā)送消息是在一個線程里嗎?如何異步發(fā)送消息
NSNotificationQueue是異步還是同步發(fā)送勿璃?在哪個線程響應
NSNotificationQueue和runloop的關系
如何保證通知接收的線程在主線程
頁面銷毀時不移除通知會崩潰嗎
多次添加同一個通知會是什么結果擒抛?多次移除通知呢
-
下面的方式能接收到通知嗎?為什么
// 發(fā)送通知 [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleNotification:) name:@"TestNotification" object:@1]; // 接收通知 [NSNotificationCenter.defaultCenter postNotificationName:@"TestNotification" object:nil];
runloop
- app如何接收到觸摸事件的
- 為什么只有主線程的runloop是開啟的
- 為什么只在主線程刷新UI
- PerformSelector和runloop的關系
- 如何使線程辈挂桑活
KVO
- 實現(xiàn)原理
- 如何手動關閉kvo
- 通過KVC修改屬性會觸發(fā)KVO么
- 哪些情況下使用kvo會崩潰闻葵,怎么防護崩潰
- kvo的優(yōu)缺點
Block
- block的內部實現(xiàn),結構體是什么樣的
- block是類嗎癣丧,有哪些類型
- 一個int變量被 __block 修飾與否的區(qū)別?block的變量截獲
- block在修改NSMutableArray栈妆,需不需要添加__block
- 怎么進行內存管理的
- block可以用strong修飾嗎
- 解決循環(huán)引用時為什么要用__strong胁编、__weak修飾
- block發(fā)生copy時機
- Block訪問對象類型的auto變量時,在ARC和MRC下有什么區(qū)別
多線程
主要以GCD為主
- iOS開發(fā)中有多少類型的線程?分別對比
- GCD有哪些隊列牙咏,默認提供哪些隊列
- GCD有哪些方法api
- GCD主線程 & 主隊列的關系
- 如何實現(xiàn)同步祷肯,有多少方式就說多少
- dispatch_once實現(xiàn)原理
- 什么情況下會死鎖
- 有哪些類型的線程鎖,分別介紹下作用和使用場景
- NSOperationQueue中的maxConcurrentOperationCount默認值
- NSTimer市框、CADisplayLink霞扬、dispatch_source_t 的優(yōu)劣
視圖&圖像相關
- AutoLayout的原理,性能如何
- UIView & CALayer的區(qū)別
- 事件響應鏈
- drawrect & layoutsubviews調用時機
- UI的刷新原理
- 隱式動畫 & 顯示動畫區(qū)別
- 什么是離屏渲染
- imageName & imageWithContentsOfFile區(qū)別
- 多個相同的圖片枫振,會重復加載嗎
- 圖片是什么時候解碼的喻圃,如何優(yōu)化
- 圖片渲染怎么優(yōu)化
- 如果GPU的刷新率超過了iOS屏幕60Hz刷新率是什么現(xiàn)象,怎么解決
性能優(yōu)化
- 如何做啟動優(yōu)化粪滤,如何監(jiān)控
- 如何做卡頓優(yōu)化斧拍,如何監(jiān)控
- 如何做耗電優(yōu)化,如何監(jiān)控
- 如何做網絡優(yōu)化杖小,如何監(jiān)控
開發(fā)證書
- 蘋果使用證書的目的是什么
- AppStore安裝app時的認證流程
- 開發(fā)者怎么在debug模式下把app安裝到設備呢
架構設計
典型源碼的學習
只是列出一些iOS比較核心的開源庫肆汹,這些庫包含了很多高質量的思想,源碼學習的時候一定要關注每個框架解決的核心問題是什么予权,還有它們的優(yōu)缺點昂勉,這樣才能算真正理解和吸收
- AFN
- SDWebImage
- JSPatch、Aspects(雖然一個不可用扫腺、另一個不維護岗照,但是這兩個庫都很精煉巧妙,很適合學習)
- Weex/RN, 筆者認為這種前端和客戶端緊密聯(lián)系的庫是必須要知道其原理的
- CTMediator斧账、其他router庫谴返,這些都是常見的路由庫咧织,開發(fā)中基本上都會用到
架構設計
- 手動埋點嗓袱、自動化埋點习绢、可視化埋點
- MVC、MVP闪萄、MVVM設計模式
- 常見的設計模式
- 單例的弊端
- 常見的路由方案梧却,以及優(yōu)缺點對比
- 如果保證項目的穩(wěn)定性
- 設計一個圖片緩存框架(LRU)
- 如何設計一個git diff
- 設計一個線程池?畫出你的架構圖
- 你的app架構是什么放航,有什么優(yōu)缺點、為什么這么做广鳍、怎么改進
其他問題
- PerformSelector & NSInvocation優(yōu)劣對比
- oc怎么實現(xiàn)多繼承荆几?怎么面向切面(可以參考Aspects深度解析-iOS面向切面編程)
- 哪些bug會導致崩潰,如何防護崩潰
- 怎么監(jiān)控崩潰
- app的啟動過程(考察LLVM編譯過程赊时、靜態(tài)鏈接吨铸、動態(tài)鏈接祖秒、runtime初始化)
- 沙盒目錄的每個文件夾劃分的作用
- 簡述下match-o文件結構
系統(tǒng)基礎知識
- 進程和線程的區(qū)別
- HTTPS的握手過程
- 什么是中間人攻擊?怎么預防
- TCP的握手過程竭缝?為什么進行三次握手,四次揮手
- 堆和棧區(qū)的區(qū)別?誰的占用內存空間大
- 加密算法:對稱加密算法和非對稱加密算法區(qū)別
- 常見的對稱加密和非對稱加密算法有哪些
- MD5暴浦、Sha1晓锻、Sha256區(qū)別
- charles抓包過程?不使用charles独撇,4G網絡如何抓包
數據結構與算法
對于移動開發(fā)者來說躁锁,一般不會遇到非常難的算法,大多以數據結構為主战转,筆者列出一些必會的算法,當然有時間了可以去LeetCode上刷刷題
- 八大排序算法
- 棧&隊列
- 字符串處理
- 鏈表
- 二叉樹相關操作
- 深搜廣搜
- 基本的動態(tài)規(guī)劃題啄踊、貪心算法刁标、二分查找
作為一個開發(fā)者,有一個學習的氛圍跟一個交流圈子特別重要膀懈,這是一個我的iOS交流群:413038000,不管你是大牛還是小白都歡迎入駐 撵儿,分享BAT,阿里面試題、面試經驗淀歇,討論技術匈织, 大家一起交流學習成長!