面試官喜歡什么樣的人玛痊,來自一個面試官的話
一個招人的部門或個人,如何從眾多的候選人中挑到真正比較優(yōu)秀的程序員?
面試是個技術(shù)活狂打,其本質(zhì)上是一次溝通的過程。候選人要在限定的時間和條件內(nèi)向面試官展現(xiàn)自己的才能混弥,而面試官同樣也要在有限的時間和條件內(nèi)發(fā)現(xiàn)候選人是否適合該職位趴乡。對于候選人的觀察对省,很多人存在誤區(qū),那就是:技術(shù)主導(dǎo)晾捏,只要技術(shù)牛蒿涎,那就是我要找的人。其實(shí)我認(rèn)為這樣是非常不靠譜的惦辛,為什么劳秋?因為我認(rèn)為,無論什么行業(yè)胖齐,作為一個部門負(fù)責(zé)人或者團(tuán)隊負(fù)責(zé)人玻淑,在選擇候選人的時候,應(yīng)該把德行放在第一位呀伙,其次才是技術(shù)水平补履,第三是身體狀況和其他因素。下面我就這三點(diǎn)展開來談一談剿另。
-
==第一:德行==
對于一個程序員候選人來說的話箫锤,如何評判一個候選人的德行呢?我覺得有以下幾點(diǎn):
==眼神==
注意觀察候選人眼神是否飄忽不定雨女,是否總是不敢直視你的眼睛谚攒,或者回答問題的時候總是往左右兩邊瞟。一般來說氛堕,眼神是一個人性格的直觀表現(xiàn)之一馏臭,如果眼神不夠沉穩(wěn)堅定,說明此人不踏實(shí)岔擂,心境飄忽位喂,很有可能不誠信(比如愛撒謊,不誠實(shí)乱灵,不講信用等等)塑崖。
==身體語言==
如果一個候選人在跟你聊的過程中,整個人吊兒郎當(dāng)痛倚,身體左搖右晃规婆,一會二郎腿,一會把腳放到大腿上(別懷疑蝉稳,我真遇到過)抒蚜,那么說明此人一定不沉穩(wěn),性格輕佻浮躁耘戚,最好謹(jǐn)慎考慮嗡髓。相反,如果候選人坐姿規(guī)矩收津,談話間體態(tài)得體饿这,自然浊伙,不緊張,不做作长捧,那么該候選人應(yīng)該比較有家教嚣鄙,個人習(xí)慣很好胶台,性格比較穩(wěn)定尝江。
==溝通==
在跟候選人對話時,注意對方的語氣語調(diào)鞋喇。如果候選人語速平緩肌割,吐字鏗鏘卧蜓,說明此人準(zhǔn)備比較充分,不急躁声功。當(dāng)遇到一些一時回答不上的問題時烦却,能夠保持冷靜,集中精神思考先巴,如果實(shí)在不會其爵,沒有打算糊弄過關(guān)或者顧左右而言他,而是直接答復(fù)不知道伸蚯,那么就說明該面試人性格比較沉穩(wěn)摩渺,而且比較誠實(shí),不滑頭剂邮。甚至你可以故意說錯一些細(xì)節(jié)摇幻,看看對方以何種方法給予糾正或者不糾正。你也可以直接故意用錯誤去質(zhì)疑對方正確的表述挥萌,看看對方的反映绰姻,如果對方一下就被點(diǎn)燃了一樣蹦起來,或者總打斷你說話引瀑,說明對方性格比較急躁狂芋,這是程序員的大忌。當(dāng)然此招能少用盡量少用憨栽,而且一次足矣帜矾,如果老這樣,會讓候選人覺得面試官不行屑柔,而心生鄙視屡萤。
==細(xì)節(jié)==
例如微笑,電話靜音或掛掉電話等掸宛,素質(zhì)體現(xiàn)死陆。
-
==第二:技術(shù)==
技術(shù)排第二不是說技術(shù)不重要,作為一個程序員崗位唧瘾,技術(shù)當(dāng)然是非常重要的措译。很多企業(yè)喜歡讓程序員做卷子作為首面的內(nèi)容迫像。我認(rèn)為這是不妥當(dāng)?shù)模敲嬖嚬僭谕祽械谋憩F(xiàn)瞳遍。不是說做卷子不能反映問題,只是這種方式太死板菌羽,并不能真正過濾掉不合格的面試者掠械。比如,我其實(shí)沒有什么技術(shù)能力注祖,但是我面試前背了很多書猾蒂,那么做卷子這一關(guān)我有可能可以過,到真正面試的時候才會被拒是晨。所以肚菠,做卷子只能過濾那些真正沒有技術(shù),而且沒有背書的面試者罩缴。但是蚊逢,即便是直接面試,面試官真的碰到這樣的面試者箫章,又花的了幾分鐘就可以判斷出來再拒絕呢烙荷?所以,我建議檬寂,不要做卷子终抽,直接面試,并且分成以下幾個內(nèi)容來考察面試者桶至。
==過往經(jīng)驗==
可以讓候選人介紹最近一個項目昼伴,并且描述自己的工作內(nèi)容。首先看看候選人是否能夠說得清楚這個項目镣屹,比如有哪些模塊圃郊,每個模塊有哪些功能,實(shí)現(xiàn)了一個什么業(yè)務(wù)邏輯野瘦,自己負(fù)責(zé)的這一塊的詳細(xì)業(yè)務(wù)邏輯又是怎樣的描沟,等等,如果連這些都說不清楚鞭光,那么基本上可以判斷候選人在撒謊吏廉。了解了項目之后,可以通過候選人負(fù)責(zé)的內(nèi)容進(jìn)行深入技術(shù)提問惰许,候選人說使用了多線程席覆,那么就多線程相關(guān)的知識進(jìn)行提問,但是注意要由淺入深汹买,不要一上來就問一些很難很深的問題佩伤。一般來說如果候選人沒有撒謊聊倔,那么應(yīng)該來說還是可以回答一些不太難的問題的。
==基礎(chǔ)知識==
一定要考察候選人的基礎(chǔ)知識生巡。很多候選人在說起自己做過的項目的時候眉飛色舞耙蔑,一套一套的,甚至滿嘴都掛著一些熱門的詞匯孤荣,比如大數(shù)據(jù)甸陌,高并發(fā),云計算盐股,等等钱豁。但是一問基礎(chǔ)知識就傻眼,最簡單的值類型引用類型都不知道有什么本質(zhì)區(qū)別疯汁。很多候選人都會辯稱牲尺,自己會編程,能夠?qū)崿F(xiàn)業(yè)務(wù)邏輯幌蚊,為什么還要去背那些概念性的東西谤碳,殊不知,那些他們認(rèn)為沒有的概念性的東西霹肝,正是我們構(gòu)筑大廈的根基所在估蹄。舉個例子,我造一所房子沫换,地基打了10米臭蚁,你造一所同樣的房子,沒有地基讯赏。我們都造好以后垮兑,在風(fēng)和日麗的時候,看上去一模一樣漱挎,你會笑話我系枪,"看,我們一樣磕谅,但是我比你不知道省了多少工序"私爷,但是你要知道,并不是每天都會風(fēng)和日麗膊夹,總會遇到狂風(fēng)暴雨衬浑,等到考驗真正來臨的時候,誰的房子更不容易傾塌呢放刨?
==分類考察==
在面試候選人的時候工秩,最好是分類進(jìn)行考察,每個類別準(zhǔn)備5個問題左右,并且由淺入深助币。頂尖的互聯(lián)網(wǎng)公司就那么幾個浪听,一般的公司招聘沒必要搞那么高大上,兩個字眉菱,務(wù)實(shí)迹栓!。
-
==第三:身體狀況及其他原因==
為什么把身體狀況單獨(dú)拎出來說呢俭缓?因為誰都不想剛招進(jìn)來的人三天兩頭的請假看病迈螟,面試官在招聘時,一定要注意候選人身體狀態(tài)尔崔,如果有明顯的身體狀態(tài)問題或者不正常,千萬要慎重考慮褥民。另外季春,需要考慮的還有下面的因素:
==候選人是否準(zhǔn)備創(chuàng)業(yè)==
有些候選人因為首次創(chuàng)業(yè)失敗,需要找個地方打工解決一下生活問題消返,一旦緩過勁來载弄,就會離職重新創(chuàng)業(yè),太不穩(wěn)定撵颊。
==之前換工作太頻繁==
一般我認(rèn)為宇攻,正常情況下,IT行業(yè)換工作頻率在2年一次以上是比較正常的倡勇,當(dāng)然后寫不正常情況另當(dāng)別論逞刷,例如公司倒閉老板跑路,例如被收購后辭退妻熊,等等夸浅。但是,如果正常情況下扔役,連續(xù)3分以上工作的更換頻率在1年以下帆喇,那么這種候選人需要謹(jǐn)慎對待。
==其他==
比如提一些無理要求的亿胸,期望薪水過高的坯钦,完全不尊重人的,等等侈玄,這些候選人都要謹(jǐn)慎考慮婉刀。
面試的時候要做什么準(zhǔn)備,來自一個國外大牛的話
在直接切入問題之前拗馒,我們先討論下一些基本的要領(lǐng)來確保你的技術(shù)面試盡可能順利進(jìn)行路星。
為每個可能出現(xiàn)的問題準(zhǔn)備好答案是不可能的。所以需要更加關(guān)注基礎(chǔ)方面的內(nèi)容。確保你對Objective-C的特性都非常熟悉洋丐〕饰簦可以猜的到會有一些關(guān)于通知(messaging),協(xié)議(protocols)友绝,動態(tài)類型(dynamic types)堤尾,轉(zhuǎn)發(fā)(forwarding),分類(categories)迁客,posing, method swizzling等方面的問題郭宝。面試者想考察你對現(xiàn)有的或者是之前出現(xiàn)的問題了解有多少≈朗花幾個小時去 StackOverflow 或國內(nèi)網(wǎng)站上看下最近經(jīng)常提問到有關(guān)iOS方面的問題會對你有很大幫助粘室。
讀一遍Apple’s Objective-C guides,確保你沒有任何覺得比較薄弱的主題卜范。像google式問法的那種問題衔统,比如說一個小車需要多少個高爾夫球才能填滿(250,000),或是在舊金山有多少扇窗戶(大于10億)海雪,現(xiàn)在大部分公司都停止問了锦爵。當(dāng)你要面對這些類型的問題的時候,你的思路比你的答案要更重要奥裸,關(guān)于這個問題你是如何思考的 - 這才是面試官關(guān)心的問題险掀。
==準(zhǔn)備好在白板上編碼==
如果你是面對面的面試,他們可能希望你在白板上直接編程湾宙。確保在你面試之前做了一些練習(xí)樟氢,因為在一群人面前直接編寫代碼會非常有壓力,沒有代碼自動補(bǔ)全功能的編碼難度遠(yuǎn)遠(yuǎn)大于你的想象侠鳄。
為你在簡歷上寫的熟悉的編程語言做好在白板上寫代碼的準(zhǔn)備嗡害。我的一個朋友在面試中被要求在白板上用Erlang來編程,Erlang是他在簡歷中列出來的編程語言畦攘。他得到了那份工作霸妹。地球上知道Erlang的僅有三個人,我確定他是其中的一個知押。
==面試禮節(jié)==
如果是進(jìn)行面對面面試叹螟,先詢問下公司的著裝要求。如果面試官穿短褲T恤台盯,而你穿著西裝罢绽,這樣就會比較尷尬,而且面試官也可能會很不愉快静盅。如果你穿球衣而其他人穿西裝的話也會是同樣的結(jié)果良价。關(guān)于這點(diǎn)寝殴,可以事先詢問招聘經(jīng)理,他會很樂意給你一些相關(guān)建議明垢。
確保手機(jī)調(diào)成靜音蚣常。如果你知道我在面試的時候聽到過多少次電話響起的聲音,你一定會驚訝的痊银。大多數(shù)情況下你都不應(yīng)該在面試中接電話或者查看下你的手機(jī)抵蚊。如果有一些潛在的緊急情況,例如你的妻子馬上要分娩或者是你的丈夫正在做手術(shù)溯革,請?zhí)崆案嬖V你的招聘經(jīng)理贞绳,這樣的話你接電話的行為還可以被接受。
在面試過程中致稀,無論是身體還是精神都需要放輕松冈闭。盡量把面試時間定到一段你相對空閑的時間(之后你不會有其他的事情需要做)。如果你把面試定到你目前工作的午休時間抖单,那肯定不會達(dá)到最好的效果拒秘。有時我甚至需要縮短面試時間就只因為面試者的現(xiàn)任老板需要他去工作! 請避免增加你目前已有的壓力。
進(jìn)行面對面的面試臭猜,請早到15分鐘左右,但不要太早押蚤。對于電話面試蔑歌,如果是在線會議的話,確保提前兩分鐘撥號進(jìn)入揽碘。直接打電話來的次屠,確保能按時準(zhǔn)備好。
==準(zhǔn)備好問題==
在面試的結(jié)尾雳刺,面試官通常會問你關(guān)于公司和工作劫灶,你還有哪些問題。請事先準(zhǔn)備好你的問題掖桦,把你想要問的問題寫到紙上本昏。這會表明你對這份工作真的感興趣而不是僅僅走走過場。很多面試者在這個環(huán)節(jié)中都不會問任何內(nèi)容枪汪,這讓我感到很驚訝涌穆。如果你覺得這個工作適合你的話,這是一個了解公司的很好的機(jī)會雀久。
==面試題目==
你期待已久的內(nèi)容到了 - 題目宿稀!
我們的技術(shù)性面試通常持續(xù)1個小時。有一張包含75個問題的表單赖捌,剛開始我會從里面隨機(jī)抽取題目祝沸。之后我根據(jù)對候選人知識方面的了解,有選擇的縮小問題的范圍。例如罩锐,如果我懷疑候選人哪塊兒有薄弱的知識點(diǎn)奉狈,我會繼續(xù)深入的問那塊兒內(nèi)容。
當(dāng)回答這些問題的時候唯欣,盡量使你的答案簡明扼要嘹吨,如果必要的話解釋下你的思路。面試官不是因為不知道答案而來問你這些問題的境氢,他們要知道的是你對你所說的內(nèi)容了解程度有多少蟀拷。
如果你還不是很了解這些內(nèi)容的話, 記住學(xué)習(xí)的過程是極富有樂趣的一個過程!
直接進(jìn)入正題,這些是技術(shù)性面試的一些樣例題目萍聊。
請解釋下method swizzling问芬,并說出你一般什么時候會用到它?- 我喜歡問這個問題因為這屬于較為深層次的語法寿桨。大多數(shù)人都沒有使用swizzling的需求(言外之意會用到swizzling的一般開發(fā)過一些核心的內(nèi)容了)此衅。而且通過開發(fā)者關(guān)于這個問題的回答,我還可以了解他們對復(fù)雜代碼的執(zhí)行有多大程度上的約束亭螟。一個人如果說他 swizzle所有的代碼挡鞍,那比那些說從來沒用過swizzle的人更可怕。
假設(shè)有三個對象预烙,一個父類的父類墨微,一個父類和一個子類。父類的父類持有父類的引用(retain)扁掸,父類持有子類的引用(retain)翘县,子類持有父類的引用(retain)。父類的父類釋放(release)父類谴分,解釋下會發(fā)生什么锈麸。 -——即使有ARC,我依然喜歡問一些內(nèi)存相關(guān)的問題牺蹄,這顯示了這個人有一定時間的開發(fā)經(jīng)驗忘伞,而且明白核心的框架是如何運(yùn)作的。
當(dāng)一個空指針(nil pointer)調(diào)用了一個方法會發(fā)生什么沙兰?——了解處理基礎(chǔ)的Objective-C相關(guān)問題是很重要的虑省,有好多次我都聽到了錯誤的回答,這很令我震驚僧凰。
為什么retainCount絕對不能用在發(fā)布的代碼中探颈?請給出兩個相對獨(dú)立的解釋⊙荡耄—— 考察這個問題會有兩個好處:一是可以確定面試者目前確實(shí)沒有使用retainCount伪节,并且看看他們是否知道為什么他們不應(yīng)該使用光羞。
請說明一下你查找或者解決內(nèi)存泄露的處理過程。這個可以深入了解面試者對內(nèi)存管理方面的知識怀大,instruments的運(yùn)用及其調(diào)試的處理過程纱兑。——有時候我會聽到一些可怕的回答:“注釋掉部分代碼直到內(nèi)存泄露問題被修復(fù)”化借。
解釋下自動回收池(autorelease pool)在程序運(yùn)行時是如何運(yùn)作的潜慎。 -——這類型的問題已經(jīng)超出代碼基礎(chǔ)了,一個程序員只有閱讀過一部分開發(fā)類書籍才能學(xué)到這些內(nèi)容蓖康。這些問題也同樣能考察他對程序底層代碼運(yùn)作的了解程度铐炫。
當(dāng)處理屬性申明的時候,原子(atomic)跟 非原子(non-atomic)屬性有什么區(qū)別蒜焊?-——好多人都不知道這個問題的答案倒信,我又一次震驚了。很多人他們都是看別人是怎么聲明的泳梆,他們就怎么來聲明鳖悠。類似這種的題目會暴漏出來很多問題。
在C語言中优妙,你如何能用盡可能短的時間來倒轉(zhuǎn)一個字符串乘综?—— 我不大喜歡深入問計算機(jī)的核心內(nèi)容, 但是通過這個問題可以讓我了解到他們是如何思考的套硼,同樣也可以了解到他們的C語言背景卡辰。深入詢問時間復(fù)雜度(big O notation)也能讓我了解面試者的水平。
遍歷一個NSArray和一個NSSet熟菲,哪一個更快? ——另一個深入的提問朴恳。有時候一個類解決了問題并不能代表你就應(yīng)該用這個類抄罕。
解釋代碼簽名(code signing)是如何運(yùn)作的。 —— 很多候選人都完全不了解代碼簽名是如何運(yùn)作的于颖,然后抱怨說他們一直被一些代碼簽名的一些問題所困擾呆贿。
Objective-C中的posing指的是什么? —— Posing是一個Object-C的小眾語法特性森渐。像 swizzling那個問題一樣做入,這個問題可以讓我了解面試者對語言的深入程度。
列舉標(biāo)準(zhǔn)Xcode版本中的6個工具同衣。 —— 通過這個問題我可以大致的了解到面試者會在這些工具上花費(fèi)多少時間竟块。提示:至少得用10%的寫代碼的時間來用這些工具。
**copy跟retain有什么區(qū)別耐齐? **—— 最近好多開發(fā)者都開始用ARC了浪秘,內(nèi)存方面的問題就更能反映出一個開發(fā)者的知識水平了蒋情。
frames跟bounds有哪些區(qū)別? -——我不會問很多界面相關(guān) (GUI-type)的問題耸携,我應(yīng)該問的多一些棵癣,不過通過這個問題我差不多能了解到一個開發(fā)者做了多少界面工作。
執(zhí)行如下的代碼會發(fā)生什么情況夺衍?
Ball *ball = [[[[Ball alloc] init] autorelease] autorelease];
另一個內(nèi)存相關(guān)的問題狈谊,這個問題的答案不能單用會崩潰來回答,我想要知道為什么崩潰沟沙,何時會崩潰河劝。
列舉5個iOS app的狀態(tài)。—— 幾乎沒有人能正確的回答出這個問題尝胆,通常我會給出一個例子丧裁,諸如后臺運(yùn)行的狀態(tài)(background state),這樣他們就知道我在說的是那塊兒內(nèi)容了含衔。
你認(rèn)為這次面試能很好的體現(xiàn)出來你作為開發(fā)者的能力么煎娇?—— 一些人說可以測試的很好,但是有些人不這么認(rèn)為贪染。我傾向于給面試者一些表達(dá)他們自己想法的機(jī)會缓呛。自信是非常重要的品質(zhì),而對應(yīng)這個問題的回答也能很好的反應(yīng)出一個人的自信程度杭隙。
我在提問這些問題的時候順帶會附加一些問題哟绊,類似“為什么會發(fā)生這種狀況?”或者是“請解釋下你的解題思路”痰憎。技術(shù)性面試的關(guān)鍵取決于面試者對語言跟平臺方面了解的程度票髓,這不僅僅包含技術(shù)的廣度,還有技術(shù)的深度铣耘。
實(shí)際編碼的面試
這是我們最重要的面試洽沟,這場面試可以直接反映出面試者是否可以勝任工作。我們將提供給面試者一個名為 The Dragon’s Test的app蜗细,目前已知這個app有很多問題裆操。然后給面試者一個bug清單,根據(jù)面試者解決問題的能力和時間來評定面試者的等級炉媒。
我們公司給一些大的企業(yè)法人提供iOS開發(fā)服務(wù)踪区,我們旨在用最快速的轉(zhuǎn)換模式來給客戶提供最可靠的結(jié)果。所以實(shí)際編碼的面試是有效評估面試者開發(fā)能力的重要面試吊骤, 因為它能讓我確定在公司盈利的前提下缎岗,應(yīng)該支付給這個面試者多少薪水。對軟件面試本身來說白粉,能找出快速解決問題的開發(fā)者就是最大的幸事密强。
在完成細(xì)節(jié)跟完成時間之間茅郎,有一個微妙的平衡點(diǎn)。如果有個人用1/3的時間完成了95%或渤,另一個人用了更多的時間完成了100%的話系冗,那我傾向于選擇前者。還有一個秘密可以告訴你薪鹦,我們也是堅持通過這種實(shí)際編碼的測試來選擇員工主管的掌敬。
幸運(yùn)的是(或者也可以說這是不幸的,取決于你是如何看待這個問題的)池磁,準(zhǔn)備實(shí)際編碼的面試的最好的方式就是勤練習(xí)奔害。你做的app越多,你越有可能更快的開發(fā)出更穩(wěn)健的代碼地熄。所以要堅持練習(xí)和學(xué)習(xí)华临!
該何去何從?
總結(jié)一下:
請熟練掌握計算機(jī)語言的基礎(chǔ)知識端考,這樣可以讓你幫助你在面試中放松自己雅潭。在面試中,談?wù)撃阋獞?yīng)聘的公司跟公司旗下的產(chǎn)品却特。始終保持面試答案簡明扼要扶供、直奔主題。
在做編碼工作的時候裂明,保持頭腦的快速運(yùn)轉(zhuǎn)椿浓。你完成任務(wù)的速度會決定項目的成敗。如果你能更快速的編寫好優(yōu)秀的代碼闽晦,那你就更有價值扳碍,你更有價值,公司就更愿意給你更多的薪水仙蛉。