2022年,iOS開發(fā)面試問題匯總(底層基礎)

前言

收錄的iOS面試技術點,可能沒那么多時間來總結答案,有什么需要討論的地方歡迎大家底部留言。主要記錄一下大廠技術點,希望能幫助到正在面試或者將要面試的伙伴吧。
  • 更多iOS技術題合集:

iOS技術題大全(上)

iOS技術題大全(中)

iOS技術題大全(下)

Runloop

  1. RunLoop 的本質(zhì)是什么?
  2. Runloop和線程是什么關系?
  3. Runloop的底層數(shù)據(jù)結構是什么樣的?有幾種 運行模式(mode)?每個運行模式下面的 CFRunloopMode 是哪些?他們分別是什么職責?
  4. Runloop 的監(jiān)聽狀態(tài)有哪幾種?
  5. Runloop 的工作流程大概是什么樣的?
  6. Runloop 有哪些應用?
  7. Source0, Source1

線程、隊列、鎖

  1. 線程、隊列的關系? 一個線程是否可能存在于兩個隊列?
  2. 隊列一定會創(chuàng)建線程嗎?
  3. 隊列是否可以無限制創(chuàng)建?
  4. PerformSelector & NSInvocation優(yōu)劣對比
  5. gcd 的使用,能不能取消?
  6. 如何進行線程?;?/li>
  7. 編程題 3個線程順序打印 0-100

GCD

  1. GCD、NSOperation區(qū)別, 功能方法區(qū)別.
  2. gcd queue 的區(qū)別
  3. group 如何實現(xiàn)barrier類似的功能?
  4. GCD group 如何實現(xiàn)同步的? (還能用什么實現(xiàn)?)
  5. 執(zhí)行一個 NSThread 任務, 如何在執(zhí)行過程中讓他終止?
  6. iOS NSOperation 是如何終止/取消任務的?
  7. 多線程,異步執(zhí)行(async)一個performSelector 會執(zhí)行么?如果加上 afterDelay呢?
  8. GCD 實現(xiàn) NSOperationQueue
  9. DispatchQoS的作用

KVC、KVO

  1. 結構體的字節(jié)對齊和OC對象的字節(jié)對齊?
  2. instance(實例對象)、class(類對象)、meta-class(元類對象)分別儲存了什么信息?為什么要設計元類?
  3. KVO的具體實現(xiàn)流程?訪問成員變量(類似self->age)會觸發(fā)KVO嘛?KVC會觸發(fā)KVO嘛?KVO的兩個核心調(diào)用方法是?
  4. KVC的原理?getter 和 setter 的搜索策略是什么?KVC 有什么實際的應用?

ISA、類結構

  1. isa 指針是什么?里面有哪些特殊的位數(shù)?什么是TaggedPointer的優(yōu)化?
  2. isa指針里面都存了什么,32和64位分別講一下
  3. OC 是否支持重載? 為什么?
  4. IMP、SEL Method 都表示什么意思? 與 _cmd 相關
  5. class 的底層結構是什么樣的?
  6. method_t 里包含什么?
  7. super 關鍵字的本質(zhì)是什么?
  8. OC的消息機制有幾步?

消息轉(zhuǎn)發(fā)

  1. 如何防止類似 unrecognized selector 的錯誤?_objc_msgForward能干什么?
  2. runtime 有哪些應用?方法替換(method - Swizzling)有什么缺點?如何安全的進行方法替換?
  3. person有個+test方法,實現(xiàn)輸出persion test,student繼承persion,頭文件定義-test方法,但沒實現(xiàn),student *obj=new student [obj test] 結果是啥?
  4. 介紹下 Swizzle 的步驟? 具體到方法名.
  5. Swizzle 時, 我不想替換父類, 只想替換子類,怎么辦?
  6. Swizzle 的優(yōu)缺點? 缺點會導致什么問題?
  7. 方法交換和分類同時去hook同一個方法,結果會怎么樣? 具體交換的是什么?交換時是如何處理傳參數(shù)? 如果使用NSInvocation 的話, 是否能處理方法有返回值的場景?具體怎么處理的?

引用計數(shù)、weak、autoreleasepool

  1. 引用計數(shù)怎么實現(xiàn)的?weak怎么實現(xiàn)的?sideTable的 底層結構是怎么樣的? weak指針做了什么操作?
  2. 對象的 release 是怎么處理的?
  3. 堆和棧的區(qū)別是什么?
  4. 棧、堆分別是否會被線程所共享?
  5. 內(nèi)存空間中除了堆和棧還有什么內(nèi)容?
  6. weak 如何把 對象重制為 nil
  7. assign、strong 區(qū)別, 是否能用assign修飾 NSObject?
  8. AutoReleasePool(自動釋放池) 的底層實現(xiàn)是什么?他怎么實現(xiàn)及時釋放的?子線程的釋放時機是怎么樣的?

內(nèi)存檢測、OOM

  1. ARC下哪些情況會造成內(nèi)存泄漏
  2. 內(nèi)存泄漏如何檢測?
  3. -OOM (Out Of Memory) 類型的 crash介紹下, 怎么檢測, 怎么處理?
  4. dealloc __weak會有什么問題

分類、擴展、關聯(lián)對象

  1. Catagory 和 extension 分別的使用場合和特點是什么?
  2. Catagory 的實現(xiàn)原理是什么?Catagory 有哪些用處?Catagory 有什么局限?
  3. Class 和 他的 Catagory 同名方法的調(diào)用順序是什么?Catagory A 和 Catagory B 同名方法的調(diào)用順序是如何?如果想要不按照系統(tǒng)順序執(zhí)行要怎么做?
  4. +load 和 +initialize 的調(diào)用時機和順序?兩者區(qū)別是什么?
  5. Catagory 有 +load 方法么?+load 是什么時候調(diào)用的?能繼承么?會覆蓋Class 的 +load 么?
  6. Catagory關聯(lián)對象(AssociateObject)的底層實現(xiàn)是什么?
  7. 方法如果寫了多個分類、會執(zhí)行哪一個?執(zhí)行邏輯是什么樣?
  8. 關聯(lián)對象 weak 底層原理

NSMutableArray擴展

  1. [mutablearry alloc]init 和 [nsmublearray array]有什么區(qū)別
  2. 結構體中為什么不能使用oc對象
  3. 我們在開發(fā)中使用文件的.mm是基于什么原因?
  4. string和NSString的區(qū)別
  5. mutablearray是怎么實現(xiàn)的,mutablearray申請內(nèi)存空間干什么用,做增刪操作的時候內(nèi)存空間是怎么改變的,可以用別的方法實現(xiàn)嗎?

Timer、鎖

  1. 你知道 iOS 有哪些鎖?性能分別怎么樣?
  2. NSTimer、CADisplayLink、dispatch_source_t 的優(yōu)劣
  3. 自旋鎖和互斥鎖怎么選擇?
  4. NSNotificationCenter 跨線程及底層結構是怎樣的?
  5. 讀寫鎖思路、手寫一下
  6. atomic與@synchroize原理

TCP/IP協(xié)議族

  1. HTTP、HTTPS 區(qū)別?
  2. GET、POST 請求的 cache 怎么做,幾級緩存? 著重講本地緩存? 緩存有效期怎么做的?內(nèi)部緩存機制的優(yōu)化機制?如何防止內(nèi)存、磁盤的緩存爆掉?
  3. HTTP 請求方法種類有哪些?(別忘記HEAD)
  4. TCP流量控制
  5. HTTPS的握手過程
  6. HTTPS與HTTP的區(qū)別? 非對稱加密、對稱加密都是在哪一個步驟?
  7. DNS、工作在什么層、默認端口?
  8. Ping原理
  9. 證書信息相關

二叉樹、排序

  1. 堆的數(shù)據(jù)結構
  2. 二叉搜索樹的作用
  3. 層序遍歷也叫什么遍歷,怎么實現(xiàn)
  4. 二叉樹中增加節(jié)點
  5. 堆排序、歸并排序、快排原理,優(yōu)缺點
  6. 二叉樹反轉(zhuǎn), 數(shù)組形式
  • 更多iOS技術題答案合集:

iOS技術題大全(上)

iOS技術題大全(中)

iOS技術題大全(下)

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容