淺談如何面試iOS工程師

學識都 人氣:6.25K

推薦序

淺談如何面試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 開發的每一條資訊。長按圖片二維碼識別,技術乾貨盡在掌握中。