私下和不少朋友交流過這個話題,大部分求職者認爲,我能作基本的 iOS 開發工做,就達到公司的要求了,卻不知公司招聘員工,更但願的是這我的可以在關鍵時候可以發揮通常人作不到的能力。php
這篇文章是來自微信讀書的 bang ,我徹底贊成他的觀點。除了他的這些面試方法外,我還認爲作比說更重要,因此我更喜歡在面試的時候,拿出一張白紙,讓求職者寫一段富有邏輯性的代碼,看看他的思惟是否嚴謹,對於一些常見的數據結構和算法基礎有了解。java
做者介紹:bang,iOS 開發者,推特中文圈 / JSPatch做者,博客 http://cnbang.net , 目前就任於廣州騰訊。linux
參加了內部面委會的一個分享,結合我本身的方式,說說怎樣面試一個普通的 iOS 工程師。程序員
通常我傾向的考察分兩個主要的部分,第一是在簡歷裏提到的項目經歷中找挖掘點,第二是基礎知識考察。另外也會看狀況作一些軟實力的考察和性格特徵的判斷。面試
若是順利的話這第一步佔的比例會很大,由於每一個程序員都不會方方面面知識都熟悉,但至少他寫在簡歷上的作過的項目是熟悉的,講本身熟悉的東西容易讓他進入狀態,展現好的一面。這裏主要考察兩方面,一是有沒有在某些點上有過深刻研究。二是對項目總體瞭解如何。算法
在中大型的公司裏比較注重工程師有深刻研究的能力,若是能把一個功能講得很清晰是比較好的加分項,這裏會問實現的思路,經過追問去了解候選人在這塊深刻的程度,從思路到方法,從上層 API 調用到框架流程再到底層實現。若是候選人在講述時有一條邏輯主線,例如講述業界廣泛是怎麼作的,本身在業界方案基礎上作了什麼改進,怎樣作到更好,進一步改進的思路是怎樣,這是最好的。若是還能把解決問題的方法概括起來運用在其餘地方,能觸類旁通,包裝成通用解決方案,或者作開源貢獻,就更好了。數據庫
通常會問候選人哪個項目技術點最能體現本身的技術,而後不停追問技術細節,例如作了一個相冊項目,以爲列表優化是最能體現技術點的,會問這裏優化的思路是什麼,怎樣評估,遇到過什麼困難,怎麼解決的,若是用到圖片緩存開源項目,說說它具體作了什麼事,緩存策略是什麼,從下載到顯示的整個流程是怎樣的,還有沒有更好的方案,追問到必定程度後也會發散去問跟這個話題相關聯的問題,例如若是有部分用戶反饋圖片顯示不了,你會怎樣排查問題,排查修復後怎樣監控,就會過分到一些網絡和運營監控方面的內容,也會順便問到一些基礎知識。緩存
問完本身職責範圍內的功能技術點後,還會看看對項目裏其餘的實現有沒有了解,特別是項目的大體架構和核心功能,最好能畫出項目大體結構,看狀況問問網絡層和數據層是怎樣實現的,爲何這樣實現,項目最核心功能是怎樣實現的,例如作讀書的至少要知道項目裏的排版引擎的大體實現方式,作 QQ 的要知道消息收發的機制,若是不知道,也能夠說說若是本身實現會怎麼作。這裏主要看看有沒有技術好奇心,會不會積極主動了解項目裏已有的非職責範圍內的技術點,主動和好學這兩點是很重要的。微信
若是項目經歷裏能問出大部分東西,這部分比例就會比較少了,這是比較好的狀況,不然就按套路去多考察一些基礎知識,包括 iOS 開發的基礎和計算機基礎,像內存 / 網絡 / 存儲 / 線程等,例如 ARC 是怎樣作到自動管理內存的,跟 java/js 的垃圾回收的區別,網絡 http 協議是怎樣的,用過什麼數據庫框架,db 索引是什麼,多線程開發要注意什麼,跟 runloop 的關係是什麼等等,這類問題在網上都有不少,就很少說了。數據結構和算法在筆試時會涉及,面試會比較少,若是問算法的話只會問問思路,通常我以爲若是項目經歷方面不太好,纔會考慮考考算法做爲輔助判斷。網絡
一些通用能力像邏輯思惟能力,溝通能力,自我驅動能力等均可以在上面那些問題的交流中表現出來,另外像團隊協做能力、抗壓能力和性格特徵這些也會看狀況考察一下,例如問問若是產品讓你作個需求,你以爲不靠譜,會怎樣作,設計讓你作個很難實現的效果,你會怎樣評估?或者問個低級問題,故意說個錯誤的答案,看看他的反應是怎樣,是表現出嘲笑和攻擊性,仍是懷疑本身,仍是細心求證。抗壓能力的考察有些人比較喜歡,我是以爲面試仍是輕鬆一點好。軟實力方面的考察在一面會比較少,或者不會涉及,實際上這方面我也沒太多經驗,也在摸索中。
做爲程序員,若是有 GitHub 開源項目是最好的,直接能夠看到代碼風格,代碼質量,處理 issue 和 PR 的方式,若是有技術博客也是很好的,能夠提早看到平時的一些技術積累,省了不少事。但若是 GitHub 內容是培訓班的那種仿寫 APP,博客內容是摘抄文章什麼的就是負分了。
以上是正常套路,若候選人有特殊經歷或技能,例如牛 X 大學畢業,ACM 冠軍,通讀 linux 源碼,php 源碼貢獻者之類,會另當別論,針對性進行面試,這不是惟一的標準。另外針對不一樣的工做年限也有不一樣的問法和要求,工做年限越高要求越高。
其實面試就是想低成本找到合適在團隊裏一塊兒工做的人,由於若是經過一塊兒工做一段時間去判斷是否合適成本過高。這種低成本的代價就是會誤判,有些工程師是理論型,有些是實踐型,面試的方式會對實踐型的人不利,儘管他們若是招進來會是適合的人,並且人會在不一樣環境下會有不一樣的表現,只根據過去的經歷去判斷有時是不許確的。只能儘可能採起一些措施去減小誤判的機率,例如提升面試官的判斷能力,或多幾輪面試。通常若是不是急招,策略都會是寧殺錯不放過,因此其實就算面試被否了,也不必定表明能力不行。
另外每一個面試官可能都有本身摸索出來的一種判斷方式,並隨着面試經驗的豐富不斷改進,達到更準的判斷機率,這只是我我的在目前有限的經驗裏的一點小總結,僅供參考。