前言
本文借鑑整理了iOS高階開發常見的面試題,並且分部落格一一分析,希望能和大家一起進步學習。
歡迎大家關注我的 Github?以及相關部落格 Github.io 簡書 部落格園
大家的鼓勵是我前進的動力?
iOS基礎題
- 分類和擴充套件有什麼區別?可以分別用來做什麼?分類有哪些侷限性?分類的結構體裡面有哪些成員? Category探索
- 講一下atomic的實現機制;為什麼不能保證絕對的執行緒安全(最好可以結合場景來說)?
- 被weak修飾的物件在被釋放的時候會發生什麼?是如何實現的?知道sideTable麼?裡面的結構可以畫出來麼?
- 關聯物件有什麼應用,系統如何管理關聯物件?其被釋放的時候需要手動將其指標置空麼? AssociatedObject關聯物件原理實現
- KVO的底層實現?如何取消系統預設的KVO並手動觸發(給KVO的觸發設定條件:改變的值符合某個條件時再觸發KVO)? 刨根問底KVO原理
Autoreleasepool
所使用的資料結構是什麼?AutoreleasePoolPage
結構體瞭解麼?- 講一下物件,類物件,元類,跟元類結構體的組成以及他們是如何相關聯的?為什麼物件方法沒有儲存的物件結構體裡,而是儲存在類物件的結構體裡?
class_ro_t
和class_rw_t
的區別?- iOS 中內省的幾個方法?
class
方法和objc_getClass
方法有什麼區別? - 在執行時建立類的方法
objc_allocateClassPair
的方法名尾部為什麼是pair(成對的意思)? - 一個int變數被
__block
修飾與否的區別? \12. 為什麼在block外部使用__weak
修飾的同時需要在內部使用__strong
修飾? - RunLoop的作用是什麼?它的內部工作機制瞭解麼?(最好結合執行緒和記憶體管理來說)
- 哪些場景可以觸發離屏渲染?(知道多少說多少)
iOS 實戰題
- AppDelegate如何瘦身?
- 反射是什麼?可以舉出幾個應用場景麼?(知道多少說多少)
- 有哪些場景是NSOperation比GCD更容易實現的?(或是NSOperation優於GCD的幾點,知道多少說多少)
- App 啟動優化策略?最好結合啟動流程來說(main()函式的執行前後都分別說一下,知道多少說多少)
- App 無痕埋點的思路瞭解麼?你認為理想的無痕埋點系統應該具備哪些特點?(知道多少說多少)
- 你知道有哪些情況會導致app崩潰,分別可以用什麼方法攔截並化解?(知道多少說多少)
- 你知道有哪些情況會導致app卡頓,分別可以用什麼方法來避免?(知道多少說多少)
網路題
- App 網路層有哪些優化策略?
- TCP為什麼要三次握手,四次揮手?
- 對稱加密和非對稱加密的區別?分別有哪些演算法的實現?
- HTTPS的握手流程?為什麼金鑰的傳遞需要使用非對稱加密?雙向認證瞭解麼?
- HTTPS是如何實現驗證身份和驗證完整性的?
- 如何用Charles抓HTTPS的包?其中原理和流程是什麼?
- 什麼是中間人攻擊?如何避免?
計算機系統題
- 瞭解編譯的過程麼?分為哪幾個步驟?
- 靜態連結瞭解麼?靜態庫和動態庫的區別?
- 記憶體的幾大區域,各自的職能分別是什麼?
- static和const有什麼區別?
- 瞭解行內函數麼?
- 什麼時候會出現死鎖?如何避免?
- 說一說你對執行緒安全的理解?
- 列舉你知道的執行緒同步策略?
- 有哪幾種鎖?各自的原理?它們之間的區別是什麼?最好可以結合使用場景來說
設計模式題
- 除了單例,觀察者設計模式以外,還知道哪些設計模式?分別介紹一下
- 最喜歡哪個設計模式?為什麼?
- iOS SDK 裡面有哪些設計模式的實踐?
- **設計模式是為了解決什麼問題的?
- **設計模式的成員構成以及工作機制是什麼?
- **設計模式的優缺點是什麼?
架構 & 設計題
- MVC和MVVM的區別?MVVM和MVP的區別?
- 物件導向的幾個設計原則瞭解麼?最好可以結合場景來說。
- 可以說幾個重構的技巧麼?你覺得重構適合什麼時候來做?
- 你覺得框架和設計模式的區別是什麼?
- 看過哪些第三方框架的原始碼,它們是怎麼設計的?設計好的地方在哪裡,不好的地方在哪裡,如何改進?(這道題的後三個問題的難度已經很高了,如果不是太N的公司不建議深究)
資料結構&演算法題
- 連結串列和陣列的區別是什麼?插入和查詢的時間複雜度分別是多少?
- 雜湊表是如何實現的?如何解決地址衝突?
- 排序題:氣泡排序,選擇排序,插入排序,快速排序(二路,三路)能寫出那些?
- 連結串列題:如何檢測連結串列中是否有環?如何刪除連結串列中等於某個值的所有節點?
- 陣列題:如何在有序陣列中找出和等於給定值的兩個元素?如何合併兩個有序的陣列之後保持有序?
- 二叉樹題:如何反轉二叉樹?如何驗證兩個二叉樹是完全相等的?