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

前言

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

iOS技術題大全(上)

iOS技術題大全(中)

iOS技術題大全(下)

Runloop

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

線程、隊列、鎖

  1. 線程、隊列的關係? 一個線程是否可能存在於兩個隊列?
  2. 隊列一定會創建線程嗎?
  3. 隊列是否可以無限制創建?
  4. PerformSelector & NSInvocation優劣對比
  5. gcd 的使用,能不能取消?
  6. 如何進行線程保活
  7. 編程題 3個線程順序打印 0-100

GCD

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

KVC、KVO

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

ISA、類結構

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

消息轉發

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

引用計數、weak、autoreleasepool

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

內存檢測、OOM

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

分類、擴展、關聯對象

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

NSMutableArray擴展

  1. [mutablearry alloc]init 和 [nsmublearray array]有什麼區別
  2. 結構體中爲什麼不能使用oc對象
  3. 我們在開發中使用文件的.mm是基於什麼原因?
  4. string和NSString的區別
  5. mutablearray是怎麼實現的,mutablearray申請內存空間幹什麼用,做增刪操作的時候內存空間是怎麼改變的,可以用別的方法實現嗎?

Timer、鎖

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

TCP/IP協議族

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

二叉樹、排序

  1. 堆的數據結構
  2. 二叉搜索樹的作用
  3. 層序遍歷也叫什麼遍歷,怎麼實現
  4. 二叉樹中增加節點
  5. 堆排序、歸併排序、快排原理,優缺點
  6. 二叉樹反轉, 數組形式
  • 更多iOS技術題答案合集:

iOS技術題大全(上)

iOS技術題大全(中)

iOS技術題大全(下)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章