天天看點

iOS内卷面試題-你以為你夠卷了,面試官更卷!

同僚天天說我卷,我沒有。

iOS内卷面試題-你以為你夠卷了,面試官更卷!

我隻是在你們摸魚的時候偷偷出去,見識了一下世面,結果發現面試官更卷.....

下面是我最近個月面試整理的題目,可能會有遺漏,畢竟頭發都快沒了,你還能要求我有記憶力嗎!

不是說開局都先問底層的嗎,我這一拳四個月的工夫,你怎麼不接啊!
iOS内卷面試題-你以為你夠卷了,面試官更卷!

圖像、渲染流程

  • 圖檔是什麼時候解碼的,如何優化
  • 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成功力,怎料覺得準備充分的底層,給了我一套閃電五連鞭。
iOS内卷面試題-你以為你夠卷了,面試官更卷!

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 說一說
iOS内卷面試題-你以為你夠卷了,面試官更卷!

這一套組合拳給4年沒跳過的我,又給打回去了,哎。隻能回去接着卷,卷到明年金三銀四,一口氣卷進大廠去。

文末推薦:iOS熱門文集

  • ① BAT等各個大廠iOS面試真題+答案大全
  • ② iOS中進階開發必看的熱門書籍(經典必看)
  • ③ iOS開發進階面試"履歷制作"指導
  • ④ iOS面試流程到基礎知識大全