淺談如何面試iOS工程師

才智咖 人氣:6.13K

推薦序

淺談如何面試iOS工程師

私下和很多朋友交流過這個話題,大部分求職者認為,我能做基本的 iOS 開發工作,就達到公司的要求了,殊不知公司招聘員工,更希望的是這個人能夠在關鍵時候能夠發揮一般人做不到的能力。

這篇文章是來自微信讀書的 bang ,我完全同意他的觀點。除了他的這些面試方法外,我還認為做比說更重要,所以我更喜歡在面試的時候,拿出一張白紙,讓求職者寫一段富有邏輯性的程式碼,看看他的思維是否嚴謹,對於一些常見的資料結構和演算法基礎有了解。

作者介紹:bang,iOS 開發者,推特中文圈 / JSPatch作者,部落格 , 目前就職於廣州騰訊。

正文

參加了內部面委會的一個分享,結合我自己的方式,說說怎樣面試一個普通的 iOS 工程師。

一般我傾向的考察分兩個主要的部分,第一是在簡歷裡提到的專案經歷中找挖掘點,第二是基礎知識考察。另外也會看情況做一些軟實力的考察和性格特徵的判斷。

專案經歷

如果順利的話這第一步佔的比例會很大,因為每個程式設計師都不會方方面面知識都熟悉,但至少他寫在簡歷上的做過的專案是熟悉的,講自己熟悉的東西容易讓他進入狀態,展示好的一面。這裡主要考察兩方面,一是有沒有在某些點上有過深入研究。二是對專案整體瞭解如何。

深入研究

在中大型的公司裡比較注重工程師有深入研究的能力,如果能把一個功能講得很清晰是比較好的加分項,這裡會問實現的思路,通過追問去了解候選人在這塊深入的程度,從思路到方法,從上層 API 呼叫到框架流程再到底層實現。如果候選人在講述時有一條邏輯主線,例如講述業界普遍是怎麼做的,自己在業界方案基礎上做了什麼改進,怎樣做到更好,進一步改進的思路是怎樣,這是最好的。如果還能把解決問題的方法歸納起來運用在其他地方,能舉一反三,包裝成通用解決方案,或者做開源貢獻,就更好了。

一般會問候選人哪一個專案技術點最能體現自己的技術,然後不停追問技術細節,例如做了一個相簿專案,覺得列表優化是最能體現技術點的,會問這裡優化的思路是什麼,怎樣評估,遇到過什麼困難,怎麼解決的,如果用到圖片快取開源專案,說說它具體做了什麼事,快取策略是什麼,從下載到顯示的整個流程是怎樣的,還有沒有更好的方案,追問到一定程度後也會發散去問跟這個話題相關聯的問題,例如如果有部分使用者反饋圖片顯示不了,你會怎樣排查問題,排查修復後怎樣監控,就會過度到一些網路和運營監控方面的`內容,也會順便問到一些基礎知識。

整體瞭解

問完自己職責範圍內的功能技術點後,還會看看對專案裡其他的實現有沒有了解,特別是專案的大致架構和核心功能,最好能畫出專案大致結構,看情況問問網路層和資料層是怎樣實現的,為什麼這樣實現,專案最核心功能是怎樣實現的,例如做讀書的至少要知道專案裡的排版引擎的大致實現方式,做 QQ 的要知道訊息收發的機制,如果不知道,也可以說說如果自己實現會怎麼做。這裡主要看看有沒有技術好奇心,會不會積極主動了解專案裡已有的非職責範圍內的技術點,主動和好學這兩點是很重要的。

基礎知識

如果專案經歷裡能問出大部分東西,這部分比例就會比較少了,這是比較好的情況,否則就按套路去多考察一些基礎知識,包括 iOS 開發的基礎和計算機基礎,像記憶體 / 網路 / 儲存 / 執行緒等,例如 ARC 是怎樣做到自動管理記憶體的,跟 java/js 的垃圾回收的區別,網路 http 協議是怎樣的,用過什麼資料庫框架,db 索引是什麼,多執行緒開發要注意什麼,跟 runloop 的關係是什麼等等,這類問題在網上都有很多,就不多說了。資料結構和演算法在筆試時會涉及,面試會比較少,如果問演算法的話只會問問思路,一般我覺得如果專案經歷方面不太好,才會考慮考考演算法作為輔助判斷。

軟實力

一些通用能力像邏輯思維能力,溝通能力,自我驅動能力等都可以在上面那些問題的交流中表現出來,另外像團隊協作能力、抗壓能力和性格特徵這些也會看情況考察一下,例如問問如果產品讓你做個需求,你覺得不靠譜,會怎樣做,設計讓你做個很難實現的效果,你會怎樣評估?或者問個低階問題,故意說個錯誤的答案,看看他的反應是怎樣,是表現出嘲笑和攻擊性,還是懷疑自己,還是細心求證。抗壓能力的考察有些人比較喜歡,我是覺得面試還是輕鬆一點好。軟實力方面的考察在一面會比較少,或者不會涉及,實際上這方面我也沒太多經驗,也在摸索中。

其他

作為程式設計師,如果有 GitHub 開源專案是最好的,直接可以看到程式碼風格,程式碼質量,處理 issue 和 PR 的方式,如果有技術部落格也是很好的,可以提前看到平時的一些技術積累,省了很多事。但如果 GitHub 內容是培訓班的那種仿寫 APP,部落格內容是摘抄文章什麼的就是負分了。

以上是正常套路,若候選人有特殊經歷或技能,例如牛 X 大學畢業,ACM 冠軍,通讀 linux 原始碼,php 原始碼貢獻者之類,會另當別論,針對性進行面試,這不是唯一的標準。另外針對不同的工作年限也有不同的問法和要求,工作年限越高要求越高。

最後

其實面試就是想低成本找到合適在團隊裡一起工作的人,因為如果通過一起工作一段時間去判斷是否合適成本太高。這種低成本的代價就是會誤判,有些工程師是理論型,有些是實踐型,面試的方式會對實踐型的人不利,儘管他們如果招進來會是適合的人,而且人會在不同環境下會有不同的表現,只根據過去的經歷去判斷有時是不準確的。只能儘量採取一些措施去減少誤判的概率,例如提高面試官的判斷能力,或多幾輪面試。一般如果不是急招,策略都會是寧殺錯不放過,所以其實就算面試被否了,也不一定代表能力不行。

另外每個面試官可能都有自己摸索出來的一種判斷方式,並隨著面試經驗的豐富不斷改進,達到更準的判斷概率,這只是我個人在目前有限的經驗裡的一點小總結,僅供參考。

全文完,感謝作者授權,本文的所有打賞歸 bang 所有。

贊助商:掘金是一個高質量的技術社群,讓你不錯過 iOS 開發的每一條資訊。長按圖片二維碼識別,技術乾貨盡在掌握中。