同僚天天說我卷,我沒有。
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIn5GcuIjM1EjM5gTN30yMwMTNxMDN1EDNxITMxIDMy0CN2gDM3gTMvwlMxEjMwIzLcRjN4AzN4EzLcd2bsJ2Lc12bj5ycn9Gbi52YuAjMwIzZtl2Lc9CX6MHc0RHaiojIsJye.png)
我隻是在你們摸魚的時候偷偷出去,見識了一下世面,結果發現面試官更卷.....
下面是我最近個月面試整理的題目,可能會有遺漏,畢竟頭發都快沒了,你還能要求我有記憶力嗎!
不是說開局都先問底層的嗎,我這一拳四個月的工夫,你怎麼不接啊!
圖像、渲染流程
- 圖檔是什麼時候解碼的,如何優化
- drawrect & layoutsubviews調用時機
- 解釋一下離屏渲染, 什麼場景下會出現?優化點在哪裡?
- SDWebImage源碼,如果保證圖檔隻下載下傳一次
- 如何從磁盤快速顯示圖檔,SDWebImage做了什麼
- UIImage *image = [UIImage imageNamed:/imageWithContentOfFile:]; // 這兩個的差別
- tableView 動态計算行高布局問題;
響應鍊
- app如何接收到觸摸事件的
- 響應鍊: 如果 Swizzle 了 父 View 的 touchBegin 的方法, 會對子 View 造成什麼影響?
- UIbutton繼承鍊,UIControl UIresponder差別
- hit-test 和 point inside 的差別
動畫
- CoreAnimation的實作原理?
- 如何讓 CoreAnimation 變得可互動? 比如讓動畫播放一半, 點選讓他停止? 讓他播放到50%就停止播放? --追問-->基于你的方案, 請分析CoreAnimation 内部相關接口實作原理(寫出僞代碼).
- 我取消一個 CoreAnimation 動畫? 到 50% 後, 我讓他不再播放動畫(不是暫停)?分析内部如何實作的?
音視訊
- AVFoundation 介紹
- 音頻降燥、視訊合成
算法(哪來的這麼多樹啊)
- 二叉樹、排序
- 堆的資料結構
- 二叉搜尋樹的作用
- 層序周遊也叫什麼周遊,怎麼實作
- 二叉樹中增加節點
- 堆排序、歸并排序、快排原理,優缺點
- 排序算法, 字母和數字排序, 字母優先級高于數字: abc123.
- 二叉樹反轉, 數組形式
iOS内卷面試題-你以為你夠卷了,面試官更卷!
連結清單
- 找到連結清單的倒數第k個結點?
- 合并有序連結清單
- 兩個無限長度連結清單(也就是可能有環) 判斷有沒有交點
- 兩個連結清單中間交于某個節點,求這個結點。
- 找連結清單的倒數第k個結點
- 把一個連結清單比某個值大的放在左邊,比它小的放在右邊
- 反轉連結清單
- 環形連結清單
- 删除單連結清單的倒數第 K 個節點
字元串、查找
- 二維有序數組查找數字
- 把 “www.zhidao.baidu.com” 這樣的字元串改成 “com/baidu/zhidao/www”。——老題目了,劍指 offer 的,兩次逆序排列即可。
- 找出一個字元串中隻出現一次且是第一個的字元
- 最長公共字首
- 資料流中的第K大元素
- 滑動視窗最大值
- 前K個高頻單詞
- 反轉字元串
搜尋、其他算法
- 兩數之和
- 有效的字母異位詞
- 請手寫一份 LRU 實作 (要求先介紹 LRU 實作, LRU如何 key-value 的資料進行處理)
- KMP算法
- 如果最高效的計算17 * 2?
- 10億個數中找最大的1000個數
- 給定一字元串隻包含數字,請寫一個算法,找出該字元串中的最長不重複子串的長度(不重複是指子串中每一進制素不同于子串中其他元素)如:“120135435”最長不重複子串"
Swift
- Swift、OC 如何互相調用? Swift-->OC 、OC -->Swift? 我開發一個Swift的SDK,(API都是Swift的), 内部需要調用到 OC 的庫, 要怎麼做?.
- dynamic 在swift與OC中的作用
- protobuf的原理
- rn 與 flutter 的差別,flutter 元件渲染規則(不是再問swift嗎,怎麼最後的精英怪是跨平台!!!)
iOS内卷面試題-你以為你夠卷了,面試官更卷!
如果你正在跳槽或者正準備跳槽不妨動動小手,添加一下咱們的交流群1012951431來擷取一份詳細的大廠面試資料為你的跳槽多添一份保障。
前面的算法已經耗盡了我7成功力,怎料覺得準備充分的底層,給了我一套閃電五連鞭。
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 的話, 是否能處理方法有傳回值的場景?具體怎麼處理的?
KVC、KVO
- 結構體的位元組對齊和OC對象的位元組對齊?
- instance(執行個體對象)、class(類對象)、meta-class(元類對象)分别儲存了什麼資訊?為什麼要設計元類?
- KVO的具體實作流程?通路成員變量(類似self->age)會觸發KVO嘛?KVC會觸發KVO嘛?KVO的兩個核心調用方法是?
- KVC的原理?getter 和 setter 的搜尋政策是什麼?KVC 有什麼實際的應用?
引用計數、weak、autoreleasepool
- 引用計數怎麼實作的?weak怎麼實作的?sideTable的 底層結構是怎麼樣的? weak指針做了什麼操作?
- 對象的 release 是怎麼處理的?
- 堆和棧的差別是什麼?
- 棧、堆分别是否會被線程所共享?
- 記憶體空間中除了堆和棧還有什麼内容?
- weak 如何把 對象重制為 nil
- assign、strong 差別, 是否能用assign修飾 NSObject?
- AutoReleasePool(自動釋放池) 的底層實作是什麼?他怎麼實作及時釋放的?子線程的釋放時機是怎麼樣的?
記憶體檢測、OOM
- ARC下哪些情況會造成記憶體洩漏
- 記憶體洩漏如何檢測? 要求能具體到循環引用鍊條, 你用到的工具 (比如:https://github.com/facebook/FBRetainCycleDetector)實作原理怎麼做?
- -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申請記憶體空間幹什麼用,做增删操作的時候記憶體空間是怎麼改變的,可以用别的方法實作嗎?"
線程、隊列、鎖
- 線程、隊列的關系? 一個線程是否可能存在于兩個隊列?
- 隊列一定會建立線程嗎?
- 隊列是否可以無限制建立?
- PerformSelector & NSInvocation優劣對比*
- gcd 的使用,能不能取消?
- 如何進行線程保活
- 程式設計題 3個線程順序列印 0-100
GCD
- group 如何實作barrier類似的功能?
- gcd queue 的差別
- gcd、NSOperation差別, 功能方法差別.
- GCD group 如何實作同步的? (還能用什麼實作?)
- 執行一個 NSThread 任務, 如何在執行過程中讓他終止?
- iOS NSOperation 是如何終止/取消任務的?
- 多線程,異步執行(async)一個performSelector 會執行麼?如果加上 afterDelay呢?
- GCD 實作 NSOperationQueue
- DispatchQoS的作用
Runloop
- RunLoop 的本質是什麼?
- Runloop和線程是什麼關系?
- Runloop的底層資料結構是什麼樣的?有幾種 運作模式(mode)?每個運作模式下面的 CFRunloopMode 是哪些?他們分别是什麼職責?
- Runloop 的監聽狀态有哪幾種?
- Runloop 的工作流程大概是什麼樣的?
- Runloop 有哪些應用?
- Source0, Source1
Timer、鎖
- NSTimer、CADisplayLink、dispatch_source_t 的優劣
- 8種鎖,然後問的很細,為什麼這個鎖性能差,那個鎖性能好
- 自旋鎖和互斥鎖怎麼選擇?
- 你知道 iOS 有哪些鎖?性能分别怎麼樣?
- NSNotificationCenter 跨線程及底層結構是怎樣的
- 讀寫鎖思路、手寫一下
- atomic 原理 @synchroize
Block
- 聊聊Block底層原理
- block記憶體及循環引用
- block三層copy
- __forwarding 說一說
這一套組合拳給4年沒跳過的我,又給打回去了,哎。隻能回去接着卷,卷到明年金三銀四,一口氣卷進大廠去。
文末推薦:iOS熱門文集
- ① BAT等各個大廠iOS面試真題+答案大全
- ② iOS中進階開發必看的熱門書籍(經典必看)
- ③ iOS開發進階面試"履歷制作"指導
- ④ iOS面試流程到基礎知識大全