iOS面試題

VanchChen發表於2018-12-29

前言

本文借鑑整理了iOS高階開發常見的面試題,並且分部落格一一分析,希望能和大家一起進步學習。

歡迎大家關注我的 Github?以及相關部落格 Github.io 簡書 部落格園

大家的鼓勵是我前進的動力?

iOS基礎題

  1. 分類和擴充套件有什麼區別?可以分別用來做什麼?分類有哪些侷限性?分類的結構體裡面有哪些成員? Category探索
  2. 講一下atomic的實現機制;為什麼不能保證絕對的執行緒安全(最好可以結合場景來說)?
  3. 被weak修飾的物件在被釋放的時候會發生什麼?是如何實現的?知道sideTable麼?裡面的結構可以畫出來麼?
  4. 關聯物件有什麼應用,系統如何管理關聯物件?其被釋放的時候需要手動將其指標置空麼? AssociatedObject關聯物件原理實現
  5. KVO的底層實現?如何取消系統預設的KVO並手動觸發(給KVO的觸發設定條件:改變的值符合某個條件時再觸發KVO)? 刨根問底KVO原理
  6. Autoreleasepool所使用的資料結構是什麼?AutoreleasePoolPage結構體瞭解麼?
  7. 講一下物件,類物件,元類,跟元類結構體的組成以及他們是如何相關聯的?為什麼物件方法沒有儲存的物件結構體裡,而是儲存在類物件的結構體裡?
  8. class_ro_tclass_rw_t 的區別?
  9. iOS 中內省的幾個方法?class方法和objc_getClass方法有什麼區別?
  10. 在執行時建立類的方法objc_allocateClassPair的方法名尾部為什麼是pair(成對的意思)?
  11. 一個int變數被__block修飾與否的區別? \12. 為什麼在block外部使用__weak修飾的同時需要在內部使用__strong修飾?
  12. RunLoop的作用是什麼?它的內部工作機制瞭解麼?(最好結合執行緒和記憶體管理來說)
  13. 哪些場景可以觸發離屏渲染?(知道多少說多少)

iOS 實戰題

  1. AppDelegate如何瘦身?
  2. 反射是什麼?可以舉出幾個應用場景麼?(知道多少說多少)
  3. 有哪些場景是NSOperation比GCD更容易實現的?(或是NSOperation優於GCD的幾點,知道多少說多少)
  4. App 啟動優化策略?最好結合啟動流程來說(main()函式的執行前後都分別說一下,知道多少說多少)
  5. App 無痕埋點的思路瞭解麼?你認為理想的無痕埋點系統應該具備哪些特點?(知道多少說多少)
  6. 你知道有哪些情況會導致app崩潰,分別可以用什麼方法攔截並化解?(知道多少說多少)
  7. 你知道有哪些情況會導致app卡頓,分別可以用什麼方法來避免?(知道多少說多少)

網路題

  1. App 網路層有哪些優化策略?
  2. TCP為什麼要三次握手,四次揮手?
  3. 對稱加密和非對稱加密的區別?分別有哪些演算法的實現?
  4. HTTPS的握手流程?為什麼金鑰的傳遞需要使用非對稱加密?雙向認證瞭解麼?
  5. HTTPS是如何實現驗證身份和驗證完整性的?
  6. 如何用Charles抓HTTPS的包?其中原理和流程是什麼?
  7. 什麼是中間人攻擊?如何避免?

計算機系統題

  1. 瞭解編譯的過程麼?分為哪幾個步驟?
  2. 靜態連結瞭解麼?靜態庫和動態庫的區別?
  3. 記憶體的幾大區域,各自的職能分別是什麼?
  4. static和const有什麼區別?
  5. 瞭解行內函數麼?
  6. 什麼時候會出現死鎖?如何避免?
  7. 說一說你對執行緒安全的理解?
  8. 列舉你知道的執行緒同步策略?
  9. 有哪幾種鎖?各自的原理?它們之間的區別是什麼?最好可以結合使用場景來說

設計模式題

  1. 除了單例,觀察者設計模式以外,還知道哪些設計模式?分別介紹一下
  2. 最喜歡哪個設計模式?為什麼?
  3. iOS SDK 裡面有哪些設計模式的實踐?
  4. **設計模式是為了解決什麼問題的?
  5. **設計模式的成員構成以及工作機制是什麼?
  6. **設計模式的優缺點是什麼?

架構 & 設計題

  1. MVC和MVVM的區別?MVVM和MVP的區別?
  2. 物件導向的幾個設計原則瞭解麼?最好可以結合場景來說。
  3. 可以說幾個重構的技巧麼?你覺得重構適合什麼時候來做?
  4. 你覺得框架和設計模式的區別是什麼?
  5. 看過哪些第三方框架的原始碼,它們是怎麼設計的?設計好的地方在哪裡,不好的地方在哪裡,如何改進?(這道題的後三個問題的難度已經很高了,如果不是太N的公司不建議深究)

資料結構&演算法題

  1. 連結串列和陣列的區別是什麼?插入和查詢的時間複雜度分別是多少?
  2. 雜湊表是如何實現的?如何解決地址衝突?
  3. 排序題:氣泡排序,選擇排序,插入排序,快速排序(二路,三路)能寫出那些?
  4. 連結串列題:如何檢測連結串列中是否有環?如何刪除連結串列中等於某個值的所有節點?
  5. 陣列題:如何在有序陣列中找出和等於給定值的兩個元素?如何合併兩個有序的陣列之後保持有序?
  6. 二叉樹題:如何反轉二叉樹?如何驗證兩個二叉樹是完全相等的?

引用

出一套 iOS 高階面試題

相關文章