同事天天說我卷,我沒有,

我只是在你們摸魚的時候偷偷出去,見識了一下世面,結果發現面試官更卷.....
下面是我最近個月面試整理的題目,可能會有遺漏,畢竟頭發都快沒了,你還能要求我有記憶力嗎!
不是說開局都先問底層的嗎,我這一拳四個月的工夫,你怎么不接啊!

影像、渲染流程
- 圖片是什么時候解碼的,如何優化
- 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.
- 二叉樹反轉, 陣列形式

鏈表
- 找到鏈表的倒數第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嗎,怎么最后的精英怪是跨平臺!!!)

如果你正在跳槽或者正準備跳槽不妨動動小手,添加一下咱們的交流群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面試流程到基礎知識大全
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/380843.html
標籤:iOS
