2015年4月27日 星期一

面試 iOS 工程師的一些題目

前言

自己參加過不少 iOS 的工作面試機會,前一陣子敝公司在徵 iOS 工程師,也讓我有這個機會去面試求職者。這段期間下來,也累積了不少面試題目,趁這個機會列出其中幾個題目跟各位交流。
我在面試求職者的時候,不會去問這份工作用不到的問題。例如演算法,我知道它很重要,但這份工作如果不太有機會要工程師寫演算法的東西,那就沒必要問。所以我在面試 iOS 工程師的時候,幾乎不會要求對方當場寫程式,我問的問題都比較偏向基礎知識與觀念,有些有正確答案,有些則是申論題。
以下題目不一定適用於你的公司現況或工作內容,使用前請自行斟酌
以下題目不一定適用於你的公司現況或工作內容,使用前請自行斟酌
以下題目不一定適用於你的公司現況或工作內容,使用前請自行斟酌
廢話不多說,以下就列出一些我曾經問過的幾個問題。

一般閒聊

這些問題真的就只是閒聊,一來放鬆彼此的心情,二來也可以了解一下求職者的相關背景與個性。
  • 怎麼學 iOS 開發的,有在關注哪些網站嗎?最近有看到什麼感興趣的技術或討論嗎?
  • 有在使用第三方套件嗎?如何管理第三方套件?
  • 開發 iOS 過程,有遇過什麼技術上的難題嗎?
  • 如何收集用戶 crash 紀錄,如何 debug
  • 如何追蹤使用者行為
  • 有在使用版本控制系統嗎?請說明你們的版本控制流程
  • 有在看 WWDC 嗎?對哪些 session 比較有印象,有什麼感想?
  • 有在寫測試嗎?有的話,請說明一下用哪套工具測試,還有測試什麼東西
  • 是否有特別喜歡某個 app,你認為這個 app 的架構大概是怎樣,你會如何設計這個 app?

基礎問題

個人覺得這些都是非常基礎的問題,任何一個有一年以上經驗的 iOS 開發者應該都要能回答這些問題。但讓我訝異的是,一些號稱有多年經驗的面試者,還是會答錯某些有正確答案的問題。
  • 會使用 XIB 跟 Storyboard 嗎?有辦法用程式碼刻畫面嗎?能否比較 XIB, Storyboard, Code 刻畫面的優劣?
  • 我們可以使用 [anObject doSomething] 讓某物件去做某件事?那如果 anObject = nil 會發生什麼事?
  • 假設 array 是一個 mutable array,那 [array addObject:nil] 會發生什麼事?
  • 假設 dic 是一個 mutable dictionary,那 dic[@"key"] = nil 會發生什麼事?dic[nil] = @"value" 會發生什麼事?
  • 什麼是 ARC,什麼是 MRC
  • ARC 是如何判斷何時要回收記憶體的?它跟 GC 有不一樣嗎?
  • new 跟 alloc init 有不一樣嗎?何時該用哪一種

進階問題

這裡的問題大多偏向觀念性,有少數是比較實作細節的東西。會問這些問題,是想知道面試者平時是否會思考該怎麼設計程式、是否有想過什麼時候用哪種解決方案比較適合,以及是否會去碰一些比較細節的東西。
  • 物件之間可以透過哪些方式溝通,什麼情況下該用哪一種
  • 如果要擴充一個 Class 的功能,又不能修改該 Class 的原始碼,有哪些方法可以辦到,其優缺點為何
  • 有用過 Category 嗎?請舉出一些用它的實際情況。可能會遇到哪些問題,要如何解決
  • 什麼是 Singleton,有什麼優缺點,請舉出使用它的時機
  • 什麼是 retain cycle,為何會發生,該怎麼解決
  • 直接呼叫 method 跟使用 performSelector: 有何不同,何時會使用後者
  • 有實作過 isEqual 嗎?要注意哪些地方
  • 什麼情況下無法使用 ARC
  • 知道什麼是 toll free bridging 嗎
  • 知道什麼是 shallow copy 跟 deep copy 嗎?如何 deep copy 一個 array
  • 說說對 MVC 的看法

沒有留言:

張貼留言