??前言
年前沒有太多時間學習,面試百度、美團到三面就被刷下來了!
疫情期間啃完了這份美團大佬整理的iOS核心知識點,也看了不少馬士兵老師的視頻,本想著去試試,就面試了阿里,沒想到竟拿到了offer,定級P7
阿里的面試經歷
先介紹了項目,然后問了一些項目中的問題,然后開始問基礎
屬性的關鍵字
淺拷貝和深拷貝的區別
Block的循環引用、如何解決、原理
三種Block
Block和delegate的比較
kvo的實現原理
Autorelease pool的實現原理
消息轉發機制
線程死鎖的四個條件
進程和線程的區別
持久化
事務的特征
中途還討論了Masonry的約束應該寫在哪里,我說應該寫在layoutSubViews,他說會調用多次,然后爭論了一會兒
總結起來:面試官喜歡拋出一個大點,看你能講多廣多深
阿里二面 :40mins
介紹項目
性能優化
YYModel和AF源碼
如何自己設計json轉model
架構
迷之算法題
總結:阿里的面試效率是真的不提了,二面和一面間隔時間可能相差了一個月吧,我已經從北京回到了學校開始上課了,而且這次面試感覺有點奇怪,最后那道迷之算法題我們也有討論,實在沒搞懂計算兩點間的距離的算法還能怎樣優化,面試結束后我問了面試官最優解是怎樣的,面試官告訴我沒有最優,只有更優(微笑臉)
作為一個開發者,有一個學習的氛圍跟一個交流圈子特別重要,這是一個我的iOS交流群:761407670 進群密碼000,不管你是小白還是大牛歡迎入駐 ,分享BAT,阿里面試題、面試經驗,討論技術, 大家一起交流學習成長!
阿里三面:2h
一個安卓的面試官。。。。。
主要問了項目的一些東西 和給一些場景問我如何實現
自我介紹 介紹一些項目難點
主線程是相對于什么而言的
一張圖片的內存占用大小是由什么決定的
索引的作用
索引的優缺點
在數組中找最小的k個數
淘寶下拉加載更多如何優化
淘寶頁面發送HTTP請求的過程
介紹一下MVVM
知道哪些設計模式
總結:三面面試官主要就聊了一些具體場景問題和一些基礎,基礎我覺得沒太大問題。面試過程中我講到一些東西發現面試官聽不懂,才知道面試官是做安卓的,問一些問題其實有點讓我無語,但是總的來說還是回答過來了,感覺也沒有太大問題,但是后面還是被掛了,很無奈。
分享下,百度、美團的面試總結吧!
?runtime相關問題
runtime是iOS開發最核心的知識了,如果下面的問題都解決了,那么對runtime的理解已經很深了。runtime已經開源了,這有一份別人調試好可運行的源碼objc-runtime,也可以去官網找objc4
?結構模型
1.? 介紹下runtime的內存模型(isa、對象、類、metaclass、結構體的存儲信息等)
2.? 為什么要設計metaclass
3.? `class_copyIvarList` & `class_copyPropertyList`區別
4.? `class_rw_t` 和 `class_ro_t` 的區別
5.? `category`如何被加載的,兩個category的`load`方法的加載順序,兩個category的同名方法的加載順序
6.? `category` & `extension`區別,能給NSObject添加Extension嗎,結果如何
7.? 消息轉發機制,消息轉發機制和其他語言的消息機制優劣對比
8.? 在方法調用的時候,`方法查詢-> 動態解析-> 消息轉發` 之前做了什么
9.? `IMP`、`SEL`、`Method`的區別和使用場景
10.? `load`、`initialize`方法的區別什么?在繼承關系中他們有什么區別
11.? 說說消息轉發機制的優劣
? 內存管理
1.? `weak`的實現原理?`SideTable`的結構是什么樣的
2.? 關聯對象的應用?系統如何實現關聯對象的
3.? 關聯對象的如何進行內存管理的?關聯對象如何實現weak屬性
4.? `Autoreleasepool`的原理?所使用的的數據結構是什么
5.? `ARC`的實現原理?`ARC`下對`retain & release`做了哪些優化
6.? `ARC`下哪些情況會造成內存泄漏
? Runloop & KVO
? runloop
`runloop`對于一個標準的iOS開發來說都不陌生,應該說熟悉`runloop`是標配,下面就隨便列幾個典型問題吧
1.? app如何接收到觸摸事件的
2.? 為什么只有主線程的`runloop`是開啟的
3.? 為什么只在主線程刷新UI
4.? `PerformSelector`和`runloop`的關系
5.? 如何使線程保活
?KVO
同`runloop`一樣,這也是標配的知識點了,同樣列出幾個典型問題
1.? 實現原理
2.? 如何手動關閉kvo
3.? 通過KVC修改屬性會觸發KVO么
4.? 哪些情況下使用kvo會崩潰,怎么防護崩潰
5.? kvo的優缺點
? Block
1.? `block`的內部實現,結構體是什么樣的
2.? block是類嗎,有哪些類型
3.? 一個`int`變量被 `__block` 修飾與否的區別?block的變量截獲
4.? `block`在修改`NSMutableArray`,需不需要添加`__block`
5.? 怎么進行內存管理的
6.? `block`可以用`strong`修飾嗎
7.? 解決循環引用時為什么要用`__strong、__weak`修飾
8.? `block`發生`copy`時機
9.? `Block`訪問對象類型的`auto變量`時,在`ARC和MRC`下有什么區別
? 多線程
主要以GCD為主
1.? `iOS`開發中有多少類型的線程?分別對比
2.? `GCD`有哪些隊列,默認提供哪些隊列
3.? `GCD`有哪些方法api
4.? `GCD`主線程 & 主隊列的關系
5.? 如何實現同步,有多少方式就說多少
6.? `dispatch_once`實現原理
7.? 什么情況下會死鎖
8.? 有哪些類型的線程鎖,分別介紹下作用和使用場景
9.? `NSOperationQueue`中的`maxConcurrentOperationCount`默認值
10.? `NSTimer、CADisplayLink、dispatch_source_t` 的優劣
?性能優化
1.? 如何做啟動優化,如何監控
2.? 如何做卡頓優化,如何監控
3.? 如何做耗電優化,如何監控
4.? 如何做網絡優化,如何監控
?架構設計
1.? AFN
2.? SDWebImage
3.? JSPatch、Aspects(雖然一個不可用、另一個不維護,但是這兩個庫都很精煉巧妙,很適合學習)
4.? Weex/RN, 筆者認為這種前端和客戶端緊密聯系的庫是必須要知道其原理的
5.? CTMediator、其他router庫,這些都是常見的路由庫,開發中基本上都會用到
6.? 請`圈友`們在評論下面補充吧
?架構設計
1.? 手動埋點、自動化埋點、可視化埋點
2.? `MVC、MVP、MVVM`設計模式
3.? 常見的設計模式
4.? 單例的弊端
5.? 常見的路由方案,以及優缺點對比
6.? 如果保證項目的穩定性
7.? 設計一個圖片緩存框架(LRU)
8.? 如何設計一個`git diff`
9.? 設計一個線程池?畫出你的架構圖
10.? 你的app架構是什么,有什么優缺點、為什么這么做、怎么改進
?數據結構與算法
對于移動開發者來說,一般不會遇到非常難的算法,大多以數據結構為主,筆者列出一些必會的算法,當然有時間了可以去[LeetCode](https://links.jianshu.com/go?to=https%3A%2F%2Fleetcode.com%2F)上刷刷題
1.? 八大排序算法
2.? 棧&隊列
3.? 字符串處理
4.? 鏈表
5.? 二叉樹相關操作
6.? 深搜廣搜
7.? 基本的動態規劃題、貪心算法、二分查找
?總結
這些都是作者收集的加上自身面試的一些經驗總結,后期會持續收集補充,**歡迎圈內的高手在評論區或者公眾號貼上你的答案或者高質量問題**
準備面試是一方面,對于非面試的iOS開發者來說更適用于檢驗自己,發起進階之路。另外知識點是瑣碎的,但是真的能全部弄懂并把瑣碎的知識點融會貫通,構建起自己的知識體系,你就升級了。
???推薦??:
推薦閱讀:直擊2020——iOS 面試題大全(補充完整版)
大家可以加iOS技術交流群,群內提供數據結構與算法、底層進階、swift、逆向、底層面試題整合文檔等免費資料!!!
學習&提升&進階直通車:有任何問題,歡迎你來一起交流,互相學習進群密碼 000,?分享BAT,?阿里大廠面試及答案