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.
  • 二叉樹反轉, 數組形式

鏈表

  • 找到鏈表的倒數第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熱門文集


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM