全新角度剖析–iOS面試

  • 2019 年 10 月 6 日
  • 筆記

一:面試題注意事項 (面試官角度)

我們很多iOS面試官在招聘的時候,很多都是直接在網上找一份iOS面試題就開始面試了!(?偷懶?)而我覺得這是一個很錯誤的做法。網上很多面試題的確不錯,但是這樣招聘過來的iOS開發人員不一定是非常優秀的,可能是背的面試題,也可能是貴公司的面試題泄漏,導致iOS求職者表現非常好!

  • 1:面試題可以網上獲取,但是我希望面試官認真對待,希望能夠結合你們的公司實際開發,落地到面試題 (這樣也就避免人家吐槽,面試造?,開發擰?)
  • 2:面試題可以適當變動。根據求職者的簡歷情況,來變動面試題!有的簡歷不錯的,可以適當調難一些。剛好在你的招聘及格線的求職者可以適當降低要求(畢竟要去不一樣,後面薪資以及培養方向也會不一樣)
  • 3:根據貴公司的狀況也考慮:要不要筆試!筆試無好壞,只是一輪刷選,能夠幫你適當刷掉一部分不符合你要求的iOS開發人員!但是貴公司招聘情況很不理想,我覺得可以反思:是不是筆試太難,筆試題目過多…

二:面試流程 (面試官角度)

個人比較反感的是:招聘崗位很少,卻叫去很多面試者面試!這個是一種比較嚴重不尊重求職的一種行為!其實也是對你的一種損失 聯繫過多面試者來面試,這樣的做法你既浪費了求職者的時間,同時也會造成面試成本飆升

希望面試官拿到簡歷,請你快速刷選出你合適中意的簡歷,然後分批安排面試! 對你中意的iOS 高級求職者!我希望能夠多幾次面試流程。一個真正的iOS高級開發對於公司來說非常重要,希望通過幾個流程由不同的崗位 leader 寫出評分,綜合考慮, 切記盲目 同時這樣正規的流程也能讓求職者感受到貴公司的重視,以及入職以後的對於工作的重視!

三:iOS 高級面試內容

可能眾多面試官還是比較關心面試內容,我這裡從

  • iOS基礎
  • Runtime相關
  • 網路&多執行緒
  • 數據結構&演算法
  • 架構設計
  • 性能優化

等這些方面,給各位面試官準備了一些題,希望能夠幫助到你

iOS基礎

  • 1:講講你對noatomic & nonatomic的理解
  • 2:被 weak 修飾的對象在被釋放的時候會發生什麼?是如何實現的?知道sideTable 么?裡面的結構可以畫出來么?
  • 3:block 用什麼修飾?strong 可以?
  • 4:block 為什麼能夠捕獲外界變數? __block做了什麼事?
  • 5:談談你對事件的傳遞鏈和響應鏈的理解 (這個面試題,如果求職者能夠回答一些實際開發相關的處理,不只是簡單的概念,予以加分)
  • 6:談談 KVC 以及 KVO 的理解?
  • 7:RunLoop 的作用是什麼?它的內部工作機制了解么?
  • 8:蘋果是如何實現 autoreleasepool的?
  • 9:談談你對 FRP (函數響應式) 的理解,延伸一下 RxSwift 或者 RAC
  • 10:平時開發有沒有玩過 Instrument ?

分析:這裡的內容非常有意思,對於一個iOS高級開發人員,我覺得還有很有必要掌握的!尤其開發3-5年,如果沒有掌握這些內容我覺得是不合格的在一些合適的地方可以進行延伸!第二題,第一問是關於 weak 這個面試是非常經典的,只要是個iOS開發都能回答一點。但是後面部分就需要他的學習能力了! 第三題和第四題,側擊一下 MRC 一個資深4-5年開發經驗或多或少都應該要知道一些 MRC 相關的知識!順便可以摸摸求職者的探索能力 第五題和第六題:我覺得如果求職者回答了一些實際開發相關以及文檔能力的應該予以加分 第七題、第八題、第九題以及第十題都是可以拓展更多的內容!

Runtime

  • 1:什麼是 isa,isa 的作用是什麼?
  • 2:一個實例對象的isa 指向什麼?類對象指向什麼?元類isa 指向什麼?
  • 3:objc 中類方法和實例方法有什麼本質區別和聯繫?
  • 4:load 和 initialize 的去唄?
  • 5:_objc_msgForward 函數是做什麼的?直接調用會發生什麼問題?
  • 6:簡述下 Objective-C 中調用方法的過程
  • 7:能否想向編譯後得到的類中增加實例變數?能否向運行時創建的類中添加實例變數?為什麼?
  • 8:談談你對切面編程的理解

分析:Runtime 這個模組iOS面試無論初中高都會面試。我覺得這個模組不光只是僅僅問問關於知識點內容,我更新想要聽到求職者在這裡面的爬坑探索辛歷路程!

網路&多執行緒

  • 1:HTTP的缺陷是什麼?
  • 2:談談三次握手,四次揮手!為什麼是三次握手,四次揮手?
  • 3:socket 連接和 Http 連接的區別
  • 4:HTTPS,安全層除了SSL還有,最新的? 參數握手時首先客戶端要發什麼額外參數
  • 5:HTTPS是什麼?握手過程,SSL原理,非對稱加密了解多少
  • 6:什麼時候POP網路,有了 Alamofire 封裝網路 URLSession為什麼還要用Moya ?
  • 7:如何實現 dispatch_once
  • 8:能否寫一個讀寫鎖?談談具體的分析
  • 9:什麼時候會出現死鎖?如何避免?
  • 10:有哪幾種鎖?各自的原理?它們之間的區別是什麼?最好可以結合使用場景來說

分析:這個模組可能是一般開發人員的盲區。因為一般開發真心沒必要去操心這麼多!面試官你們可以挑去拷問就OK,面試過程中不能對答如流也是正常!當然如果能夠回答上來應該加分!

數據結構

  • 1.數據結構的存儲一般常用的有幾種?各有什麼特點?
  • 2.集合結構 線性結構 樹形結構 圖形結構
  • 3.單向鏈表 雙向鏈表 循環鏈表
  • 4.數組和鏈表區別
  • 5.堆、棧和隊列
  • 6.輸入一棵二叉樹的根結點,求該樹的深度?
  • 7.輸入一課二叉樹的根結點,判斷該樹是不是平衡二叉樹?

演算法

  • 1.時間複雜度
  • 2.空間複雜度
  • 3.常用的排序演算法
  • 4.字元串反轉
  • 5.鏈表反轉(頭差法)
  • 6.有序數組合併
  • 7.查找第一個只出現一次的字元(Hash查找)
  • 8.查找兩個子視圖的共同父視圖
  • 9.無序數組中的中位數(快排思想)
  • 10.給定一個整數數組和一個目標值,找出數組中和為目標值的兩個數。

分析:這個模組是絕大部分開發人員的軟肋!這個模組是最能測試求職者思維能力的!但是我不建議面試官直接讓求職者手寫 在那樣的面試緊張環境,手寫數據結構或者一些演算法程式碼,是非常有挑戰的!思維到我覺得差不多!

架構設計

  • 1:設計模式是為了解決什麼問題的?
  • 2:看過哪些第三方框架的源碼,它們是怎麼設計的?
  • 3:可以說幾個重構的技巧么?你覺得重構適合什麼時候來做?
  • 4:開發中常用架構設計模式你怎麼選型?
  • 5:你是如何組件化解耦的?

分析:架構設計這一層對於一個iOS中高級開發人員來說。這一塊那是他必須要去思考和感受總結的!如果這位求職者開發4-5年了,一直都在做應用層介面開發,那麼想必他未來的職業晉陞是已經落後了的!面試官不妨在這一個模組單獨設計成一面,就和求職者一起交流討論。畢竟這些思維的設計,也許能夠給面試官帶來一些不一樣的東西!?

性能優化

  • 1:tableView 有什麼好的性能優化方案?
  • 2: 介面卡頓和檢測你都是怎麼處理?
  • 3:談談你對離屏渲染的理解?
  • 4:如何降低APP包的大小
  • 5:日常如何檢查記憶體泄露?
  • 6:APP啟動時間應從哪些方面優化?

分析:現在APP性能優化以及成為iOS中高級開發人員必須要去關係的東西!這一塊我個人建議結合實際開發去和求職者交流。而不是僅僅停留在知識點問答,因為沒有實際開發能力的性能優化都只是紙上談兵!

推薦面試文集

* iOS面試題合集

* BAT—最新iOS面試題總結

總結

一個優秀的iOS中高級開發 = iOS技術 + 學習能力 + 態度 其中態度和學習能力也是我在面試別人過程中非常看重的!哪怕你技術目前很差,但是你有謙虛誠懇的態度,優秀的學習能力。也會願意帶你!

非常感謝你閱讀到了這裡!前面都是本人的建議,具體你的實施還是需要你根據情況調整!