[轉]上級向的十個iOS面試問題

今天看見了onevcat的這篇文章,感慨頗多,會和懂徹底是兩碼事情。爲了這十個及其後面的問題,共勉。ios

以此做爲編程三年的檢討。面試

Reference:http://onevcat.com/2013/04/ios-interview/編程

上級向的十個iOS面試問題

Welcome to Xcode

Welcome to Xcodexcode

無論對於招聘和應聘來講,面試都是很重要的一個環節,特別對於開發者來講,面試中的技術問題環節不只是企業對應聘者技能和積累的考察,也是一個開發者自我檢驗的好機會。對於iOS和Mac開發來講,由於本事還算比較新,企業對於這方面的開發者需求也比較大,因此面試時的要求可能並非很高,通常能知道一些Cocoa和OC的基本知識也就認爲能夠了。可是對於一個但願擁有技術力基礎的企業的iOS或者Mac開發來講,兩到三個頂尖的熟練技術人員,帶領一些還較爲初級的開發者,共同完成項目應該是比較常見的構成。網絡

Cocoa特別是CocoaTouch的開發,上手能夠說十分容易,可是背後隱藏的細節和原理卻很豐富。一方面對於基礎不夠熟練和清晰(好比從一個AppDelegate開始用代碼構建ViewController,或者清晰地說明棧和堆之類的概念),另外一方面對於更進階的開發知之甚少(好比多線程、網絡異步處理或者Core開頭的各類框架等等)。這些內容十分重要,可是可能如今通常的iOS開發者或多或少都在這些問題上存在薄弱。在這裏我整理了一份面向於較高層級的iOS開發者的面試題目的問題清單,列出了十個應聘Leader級別的高級Cocoa/CocoaTouch開發工程師所應該掌握和理解的技術。這份列表沒有提供標準答案,由於這些問題自己就沒有標準答案。隨每一個人對這些內容的認識的不一樣和理解的差別,能夠有不同的答案。可是最基本地,若是面對的是一名資深的Cocoa開發者,至少指望能獲得的答案都是「接觸過」,而且能結合本身的經驗說個七七八八,達到互相能明白意圖和方法的地步。可以在其中兩三個領域有不錯的看法和具體的闡述的話,那是更好。這種對於知識覆蓋面和深度的考察很能真實反映出開發者的技術水平。若是清單裏的很大部份內容都是徹底沒接觸過和沒聽過的話,那可能距離資深Cocoa開發這樣一個階段還尚有距離了。多線程

那麼,面試開始。框架

  1. 你使用過Objective-C的運行時編程(Runtime Programming)麼?若是使用過,你用它作了什麼?你還能記得你所使用的相關的頭文件或者某些方法的名稱嗎?
  2. 你實現過多線程的Core Data麼?NSPersistentStoreCoordinator,NSManagedObjectContext和NSManagedObject中的哪些須要在線程中建立或者傳遞?你是用什麼樣的策略來實現的?
  3. Core開頭的系列的內容。是否使用過CoreAnimation和CoreGraphics。UI框架和CA,CG框架的聯繫是什麼?分別用CA和CG作過些什麼動畫或者圖像上的內容。(有須要的話還能夠涉及Quartz的一些內容)
  4. 是否使用過CoreText或者CoreImage等?若是使用過,請談談你使用CoreText或者CoreImage的體驗。
  5. NSNotification和KVO的區別和用法是什麼?何時應該使用通知,何時應該使用KVO,它們的實現上有什麼區別嗎?若是用protocol和delegate(或者delegate的Array)來實現相似的功能可能嗎?若是可能,會有什麼潛在的問題?若是不能,爲何?(雖然protocol和delegate這種東西面試已經面爛了…)
  6. 你用過NSOperationQueue麼?若是用過或者瞭解的話,你爲何要使用NSOperationQueue,實現了什麼?請描述它和GCD的區別和相似的地方(提示:能夠從二者的實現機制和適用範圍來描述)。
  7. 既然提到GCD,那麼問一下在使用GCD以及block時要注意些什麼?它們兩是一回事兒麼?block在ARC中和傳統的MRC中的行爲和用法有沒有什麼區別,須要注意些什麼?
  8. 您是否作過異步的網絡處理和通信方面的工做?若是有,能具體介紹一些實現策略麼?
  9. 對於Objective-C,你認爲它最大的優勢和最大的不足是什麼?對於不足之處,如今有沒有可用的方法繞過這些不足來實現需求。若是能夠的話,你有沒有考慮或者實踐太重新實現OC的一些功能,若是有,具體會如何作?
  10. 你實現過一個框架或者庫以供別人使用麼?若是有,請談一談構建框架或者庫時候的經驗;若是沒有,請設想和設計框架的public的API,並指出大概須要如何作、須要注意一些什麼方面,來使別人容易地使用你的框架。

以上10個問題對於初級或者剛接觸iOS的開發者來講,確定是過於難了。想要答出所有問題,可能須要至少兩到三年的Cocoa/CocoaTouch開發經驗。而若是想要有所見地的回答,可能須要更長的時間和經驗。這些問題對於技術的積累會是一個很好的考察,由於若是沒有對這些問題中涉及的內容有過實際使用和體會的話,是很難較完整和全面回答這些問題的。同時,由於這些問題並不像ABCD的客觀題有標準答案,表現的是應聘者的理解,因此提問者也必須具有必要的材料或者知識,以應對可能的討論。異步

在爲團隊尋求高級別的開發工程師或者Leader類的職位時,這些問題的回答會是對應聘者技術深度和廣度的一個有效的考察。一樣地,若是你的團隊在Cocoa/CocoaTouch上比較偏重,可是技術團隊的No.1的工程師卻不能很好地回答這些問題的話,可能也會是須要反省技術層的一個信號。動畫

相關文章
相關標籤/搜索