12-interview-questions-for-ios-developer

面試 iOS Developer 的 12 條問題

面試 iOS Developer 時應該問些什麼問題呢?

筆者最近為一家公司面試 iOS Developer,準備了 12 條問題簡單測試下面試者對 iOS Development 的認識,部份問題並沒有標準答案,目標是與面試者交流,分享給大家。

1. 你初次接觸開發時的 iOS 版本是?

這個問題可以了解面試者的 iOS 開發年資,若由 iOS 4 開始接觸的話都有 4 至 5 年經驗了,而 iOS 每個換代也有其特別意義,例如:

  • iOS 4 需要手動管理記憶體 (Retain / Release 這種東西),以及當時還未有 Storyboard,要用 xib 管理 UI。但這個時候只有 3.5 寸的 iPhone,做 UI 非常方便。
  • iOS 5 引入 ARC 自動化記憶體管理及 Storyboard,推出了 iPhone 5,需要兼容 3.5 寸 及 4 寸屏幕。
  • iOS 6 引入 AutoLayout (Constraints)
  • iOS 7 跟以往版本的最大分別是應用了扁平化設計 (Flat Design),以及 Status Bar 的 20px 高也納入 App 可調整的範圍內。

2. 你的記憶體管理技能 (Memory Management Skills) 如何?

如果面試者對 iOS 4 有開發經驗,定必對於記憶體管理有很深刻的印象。那個年代需要手動 Retain / Release Pointer,常常 Release 錯了就會 Crash 掉整個 App。iOS 5 開始新增了 ARC 功能,自動化記憶體管理,只需定義 variable 是 strong 或 weak 即可。

3. 你常用的 Network Framework 有哪些?

iOS 4 / 5 年代最流行用的就是 ASIHttpRequest,但不支援 ARC。現在 Objective-C 下最流行的有 AFNetworking、RESTKit 及 MKNetworkKit 等。

Swift 的話則有 Alamofire。

4. 請解釋 Delegate 是什麼?

Delegate 的中文譯法是「委托」,「委托」另一個 Class 提供一些東西去完成一些事。

舉個例子,在 Implement UITableView 的時候,需要使用 Delegate 去「委托」你這個 Class 提供表格內容是長什麼樣子 (UITableViewCell)、TableViewCell 的高度是多少等等,以「協助」UITableView 去完成 TableView 的 Rendering。

5. 試描述透過 OTA 發佈 Ad-Hoc App 的流程

  1. 首先是要準備好 Apple Developer ID、購買了 iOS Developer Program 及建立好 Distribution Certificate。
  2. 在 Apple Developer Portal 建立 App ID,Ad-Hoc Provisioning Profile。
  3. 加入測試裝置的 UDID 到 Devices
  4. 更新 Ad-Hoc Provisioning Profile 的 Devices
  5. 下載 Ad-Hoc Provisioning Profile 或到 Xcode 的 Preference 內更新
  6. Archive Xcode Project (Release)
  7. 用 Ad-Hoc Provisioning Profile 產生 ipa 檔案及 plist 檔案
  8. 將 ipa 及 plist 檔案上載到網絡,需支援 HTTPS (最方便例如 Dropbox)。
  9. 產生下載連結,Protocol 為 itms-service://,指向 plist 檔案。
  10. 用戶必須使用 iOS Safari 打開 Ad-Hoc App 的下載連結

6. 共有多少種 Provisioning Profile?

Provisioning Profile 共分為兩類三種:

  • Development
    • Provisioning Profile
  • Distribution
    • Ad-Hoc Distribution Provisioning Profile
    • App Store Distribution Provisioning Profile

7. 你懂得幾種資料儲存方法?

iOS 的資料儲存方法包括(但不只於):

  • NSCoding
  • NSData
  • CoreData
  • SQLite
  • NSUserDefault
  • … 等等

8. 有哪些 Open Source Libraries 你是最喜歡的?為什麼?

這主要測試面試者對 iOS 開發的認識及有沒有使用 Open Source Libraries 的習慣,常用的 Open Source Library 有:

  • AFNetworking
  • MBProgressHUD
  • SDWebImage
  • OpenUDID
  • GoogleAnalytics
  • FXKeyChain
  • … 等等。

9. 你需要將一個包含 10 張圖片的網頁(網頁和圖片均在網絡上)載入到一個 UIWebView,在第一次瀏覽後需要將它緩存到本地供日後離線瀏覽。假設那個網頁和 App 你都可以全權控制,你會用什麼最便捷的方法處理?

這其實沒有標準答案,主要測試面試者的思考邏輯和對於 Web + App 的技術認識。

筆者遇過幾位面試者的答案,都是先以 Regular Expression 從 HTML 中解拆出 Image Tag 內的圖片網址,然後分別下載 HTML 和 10 張圖片,再對應好路徑儲存圖片。這答案是正確的,但處理路徑時容易出錯和較為繁複。

筆者個人會這樣做:將 10 張圖片以 Base64 Encode 成字串,然後直接內嵌在 Image Tag 內 (例如 <img src=“data:image/jpg;base64,Base64-String”>),這樣一來只要將整個 HTML 下載並儲存到本地即可,只需處理一個文件。

10. 你從什麼途徑學習 iOS Development?

了解面試者的學習途徑,有助規劃公司對員工的培訓方式。

  • 官方途徑:
    Apple 官方本身提供了很豐富的學習教材,iTunes U 上有足本的 WWDC 影片及由 Stanford University 錄製的教學課程。

11. 在開發過程中遇到問題時,你會怎樣找解決方法?

懂得找解決問題的方法比擅長寫程式更為重要。

如果面試者主張直接向同事或老師請教答案,則比較依賴,未必可以獨立面對問題,而且答案得來容易,印象亦不會深刻,容易在第二次遇到相同問題時重覆發問。

IT 人用 IT 方法,先到 StackOverflowQuoraGoogle 等網站找找答案,多嘗試多了解,才能加強學習能力,提升技能。

12. 我們常看到 NSString,NSArray,NSLog 等以 “NS” 開頭的命名方法,其實 NS 是什麼?

面試來到尾聲,不如問一條較輕鬆有趣的問題做結尾,這可測試面試者對 iOS Development 的歷史有沒有多少認識(因為一般 iOS Development 的教材都會在前言中對此略有提及)。

“NS” 是 “NeXTStep” 的縮寫。Steve Jobs 於 1985 年離開 Apple 後創立 NeXT 公司,開發了 Unix Based 名為 NeXTStep 的作業系統,使用 Objective-C 語言。現在的 Cocoa Framework 的 Code Base 就是源自於 NeXTStep。

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *