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