前言
收錄的iOS面試技術(shù)點夕春,可能沒那么多時間來總結(jié)答案未荒,有什么需要討論的地方歡迎大家底部留言。主要記錄一下大廠技術(shù)點及志,希望能幫助到正在面試或者將要面試的伙伴吧片排。
- 更多iOS技術(shù)題合集:
Runloop
- RunLoop 的本質(zhì)是什么寨腔?
- Runloop和線程是什么關(guān)系?
- Runloop的底層數(shù)據(jù)結(jié)構(gòu)是什么樣的率寡?有幾種 運行模式(mode)迫卢?每個運行模式下面的 CFRunloopMode 是哪些?他們分別是什么職責(zé)冶共?
- Runloop 的監(jiān)聽狀態(tài)有哪幾種乾蛤?
- Runloop 的工作流程大概是什么樣的?
- Runloop 有哪些應(yīng)用捅僵?
- Source0家卖, Source1
線程、隊列庙楚、鎖
- 線程上荡、隊列的關(guān)系? 一個線程是否可能存在于兩個隊列?
- 隊列一定會創(chuàng)建線程嗎?
- 隊列是否可以無限制創(chuàng)建?
- PerformSelector & NSInvocation優(yōu)劣對比
- gcd 的使用,能不能取消馒闷?
- 如何進行線程崩壹瘢活
- 編程題 3個線程順序打印 0-100
GCD
- GCD、NSOperation區(qū)別, 功能方法區(qū)別.
- gcd queue 的區(qū)別
- group 如何實現(xiàn)barrier類似的功能?
- GCD group 如何實現(xiàn)同步的? (還能用什么實現(xiàn)?)
- 執(zhí)行一個 NSThread 任務(wù), 如何在執(zhí)行過程中讓他終止?
- iOS NSOperation 是如何終止/取消任務(wù)的?
- 多線程纳账,異步執(zhí)行(async)一個performSelector 會執(zhí)行么逛薇?如果加上 afterDelay呢?
- GCD 實現(xiàn) NSOperationQueue
- DispatchQoS的作用
KVC疏虫、KVO
- 結(jié)構(gòu)體的字節(jié)對齊和OC對象的字節(jié)對齊永罚?
- instance(實例對象)、class(類對象)卧秘、meta-class(元類對象)分別儲存了什么信息尤蛮?為什么要設(shè)計元類?
- KVO的具體實現(xiàn)流程斯议?訪問成員變量(類似self->age)會觸發(fā)KVO嘛产捞?KVC會觸發(fā)KVO嘛?KVO的兩個核心調(diào)用方法是哼御?
- KVC的原理坯临?getter 和 setter 的搜索策略是什么?KVC 有什么實際的應(yīng)用恋昼?
ISA看靠、類結(jié)構(gòu)
- isa 指針是什么?里面有哪些特殊的位數(shù)液肌?什么是TaggedPointer的優(yōu)化挟炬?
- isa指針里面都存了什么,32和64位分別講一下
- OC 是否支持重載? 為什么?
- IMP、SEL Method 都表示什么意思? 與 _cmd 相關(guān)
- class 的底層結(jié)構(gòu)是什么樣的谤祖?
- method_t 里包含什么婿滓?
- super 關(guān)鍵字的本質(zhì)是什么?
- OC的消息機制有幾步粥喜?
消息轉(zhuǎn)發(fā)
- 如何防止類似 unrecognized selector 的錯誤凸主?_objc_msgForward能干什么?
- runtime 有哪些應(yīng)用额湘?方法替換(method - Swizzling)有什么缺點卿吐?如何安全的進行方法替換?
- person有個+test方法锋华,實現(xiàn)輸出persion test嗡官,student繼承persion,頭文件定義-test方法毯焕,但沒實現(xiàn)谨湘,student *obj=new student [obj test] 結(jié)果是啥?
- 介紹下 Swizzle 的步驟? 具體到方法名.
- Swizzle 時, 我不想替換父類, 只想替換子類,怎么辦?
- Swizzle 的優(yōu)缺點? 缺點會導(dǎo)致什么問題?
- 方法交換和分類同時去hook同一個方法,結(jié)果會怎么樣? 具體交換的是什么芥丧?交換時是如何處理傳參數(shù)? 如果使用NSInvocation 的話, 是否能處理方法有返回值的場景?具體怎么處理的?
引用計數(shù)、weak坊罢、autoreleasepool
- 引用計數(shù)怎么實現(xiàn)的续担?weak怎么實現(xiàn)的?sideTable的 底層結(jié)構(gòu)是怎么樣的活孩? 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會有什么問題
分類训裆、擴展眶根、關(guān)聯(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關(guān)聯(lián)對象(AssociateObject)的底層實現(xiàn)是什么?
- 方法如果寫了多個分類类茂、會執(zhí)行哪一個?執(zhí)行邏輯是什么樣?
- 關(guān)聯(lián)對象 weak 底層原理
NSMutableArray擴展
- [mutablearry alloc]init 和 [nsmublearray array]有什么區(qū)別
- 結(jié)構(gòu)體中為什么不能使用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 跨線程及底層結(jié)構(gòu)是怎樣的?
- 讀寫鎖思路矩父、手寫一下
- 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、工作在什么層球订、默認(rèn)端口?
- Ping原理
- 證書信息相關(guān)
二叉樹后裸、排序
- 堆的數(shù)據(jù)結(jié)構(gòu)
- 二叉搜索樹的作用
- 層序遍歷也叫什么遍歷,怎么實現(xiàn)
- 二叉樹中增加節(jié)點
- 堆排序冒滩、歸并排序微驶、快排原理,優(yōu)缺點
- 二叉樹反轉(zhuǎn)开睡, 數(shù)組形式
- 更多iOS技術(shù)題答案合集: