前言
收錄的iOS面試技術點,可能沒那麼多時間來總結答案,有什麼需要討論的地方歡迎大家底部留言。主要記錄一下大廠技術點,希望能幫助到正在面試或者將要面試的夥伴吧。
- 更多iOS技術題合集:
Runloop
- RunLoop 的本質是什麼?
- Runloop和線程是什麼關係?
- Runloop的底層數據結構是什麼樣的?有幾種 運行模式(mode)?每個運行模式下面的 CFRunloopMode 是哪些?他們分別是什麼職責?
- Runloop 的監聽狀態有哪幾種?
- Runloop 的工作流程大概是什麼樣的?
- Runloop 有哪些應用?
- Source0, Source1
線程、隊列、鎖
- 線程、隊列的關係? 一個線程是否可能存在於兩個隊列?
- 隊列一定會創建線程嗎?
- 隊列是否可以無限制創建?
- PerformSelector & NSInvocation優劣對比
- gcd 的使用,能不能取消?
- 如何進行線程保活
- 編程題 3個線程順序打印 0-100
GCD
- GCD、NSOperation區別, 功能方法區別.
- gcd queue 的區別
- group 如何實現barrier類似的功能?
- GCD group 如何實現同步的? (還能用什麼實現?)
- 執行一個 NSThread 任務, 如何在執行過程中讓他終止?
- iOS NSOperation 是如何終止/取消任務的?
- 多線程,異步執行(async)一個performSelector 會執行麼?如果加上 afterDelay呢?
- GCD 實現 NSOperationQueue
- DispatchQoS的作用
KVC、KVO
- 結構體的字節對齊和OC對象的字節對齊?
- instance(實例對象)、class(類對象)、meta-class(元類對象)分別儲存了什麼信息?爲什麼要設計元類?
- KVO的具體實現流程?訪問成員變量(類似self->age)會觸發KVO嘛?KVC會觸發KVO嘛?KVO的兩個核心調用方法是?
- KVC的原理?getter 和 setter 的搜索策略是什麼?KVC 有什麼實際的應用?
ISA、類結構
- isa 指針是什麼?裏面有哪些特殊的位數?什麼是TaggedPointer的優化?
- isa指針裏面都存了什麼,32和64位分別講一下
- OC 是否支持重載? 爲什麼?
- IMP、SEL Method 都表示什麼意思? 與 _cmd 相關
- class 的底層結構是什麼樣的?
- method_t 裏包含什麼?
- super 關鍵字的本質是什麼?
- OC的消息機制有幾步?
消息轉發
- 如何防止類似 unrecognized selector 的錯誤?_objc_msgForward能幹什麼?
- runtime 有哪些應用?方法替換(method - Swizzling)有什麼缺點?如何安全的進行方法替換?
- person有個+test方法,實現輸出persion test,student繼承persion,頭文件定義-test方法,但沒實現,student *obj=new student [obj test] 結果是啥?
- 介紹下 Swizzle 的步驟? 具體到方法名.
- Swizzle 時, 我不想替換父類, 只想替換子類,怎麼辦?
- Swizzle 的優缺點? 缺點會導致什麼問題?
- 方法交換和分類同時去hook同一個方法,結果會怎麼樣? 具體交換的是什麼?交換時是如何處理傳參數? 如果使用NSInvocation 的話, 是否能處理方法有返回值的場景?具體怎麼處理的?
引用計數、weak、autoreleasepool
- 引用計數怎麼實現的?weak怎麼實現的?sideTable的 底層結構是怎麼樣的? weak指針做了什麼操作?
- 對象的 release 是怎麼處理的?
- 堆和棧的區別是什麼?
- 棧、堆分別是否會被線程所共享?
- 內存空間中除了堆和棧還有什麼內容?
- weak 如何把 對象重製爲 nil
- assign、strong 區別, 是否能用assign修飾 NSObject?
- AutoReleasePool(自動釋放池) 的底層實現是什麼?他怎麼實現及時釋放的?子線程的釋放時機是怎麼樣的?
內存檢測、OOM
- ARC下哪些情況會造成內存泄漏
- 內存泄漏如何檢測?
- -OOM (Out Of Memory) 類型的 crash介紹下, 怎麼檢測, 怎麼處理?
- dealloc __weak會有什麼問題
分類、擴展、關聯對象
- Catagory 和 extension 分別的使用場合和特點是什麼?
- Catagory 的實現原理是什麼?Catagory 有哪些用處?Catagory 有什麼侷限?
- Class 和 他的 Catagory 同名方法的調用順序是什麼?Catagory A 和 Catagory B 同名方法的調用順序是如何?如果想要不按照系統順序執行要怎麼做?
- +load 和 +initialize 的調用時機和順序?兩者區別是什麼?
- Catagory 有 +load 方法麼?+load 是什麼時候調用的?能繼承麼?會覆蓋Class 的 +load 麼?
- Catagory關聯對象(AssociateObject)的底層實現是什麼?
- 方法如果寫了多個分類、會執行哪一個?執行邏輯是什麼樣?
- 關聯對象 weak 底層原理
NSMutableArray擴展
- [mutablearry alloc]init 和 [nsmublearray array]有什麼區別
- 結構體中爲什麼不能使用oc對象
- 我們在開發中使用文件的.mm是基於什麼原因?
- string和NSString的區別
- mutablearray是怎麼實現的,mutablearray申請內存空間幹什麼用,做增刪操作的時候內存空間是怎麼改變的,可以用別的方法實現嗎?
Timer、鎖
- 你知道 iOS 有哪些鎖?性能分別怎麼樣?
- NSTimer、CADisplayLink、dispatch_source_t 的優劣
- 自旋鎖和互斥鎖怎麼選擇?
- NSNotificationCenter 跨線程及底層結構是怎樣的?
- 讀寫鎖思路、手寫一下
- atomic與@synchroize原理
TCP/IP協議族
- HTTP、HTTPS 區別?
- GET、POST 請求的 cache 怎麼做,幾級緩存? 着重講本地緩存? 緩存有效期怎麼做的?內部緩存機制的優化機制?如何防止內存、磁盤的緩存爆掉?
- HTTP 請求方法種類有哪些?(別忘記HEAD)
- TCP流量控制
- HTTPS的握手過程
- HTTPS與HTTP的區別? 非對稱加密、對稱加密都是在哪一個步驟?
- DNS、工作在什麼層、默認端口?
- Ping原理
- 證書信息相關
二叉樹、排序
- 堆的數據結構
- 二叉搜索樹的作用
- 層序遍歷也叫什麼遍歷,怎麼實現
- 二叉樹中增加節點
- 堆排序、歸併排序、快排原理,優缺點
- 二叉樹反轉, 數組形式
- 更多iOS技術題答案合集: