iOS面試寶典《一》--面前準(zhǔn)備


面試官喜歡什么樣的人,來自一個面試官的話

一個招人的部門或個人,如何從眾多的候選人中挑到真正比較優(yōu)秀的程序員?

面試是個技術(shù)活,其本質(zhì)上是一次溝通的過程。候選人要在限定的時間和條件內(nèi)向面試官展現(xiàn)自己的才能,而面試官同樣也要在有限的時間和條件內(nèi)發(fā)現(xiàn)候選人是否適合該職位。對于候選人的觀察,很多人存在誤區(qū),那就是:技術(shù)主導(dǎo),只要技術(shù)牛,那就是我要找的人。其實(shí)我認(rèn)為這樣是非常不靠譜的,為什么?因?yàn)槲艺J(rèn)為,無論什么行業(yè),作為一個部門負(fù)責(zé)人或者團(tuán)隊(duì)負(fù)責(zé)人,在選擇候選人的時候,應(yīng)該把德行放在第一位,其次才是技術(shù)水平,第三是身體狀況和其他因素。下面我就這三點(diǎn)展開來談一談。

  • ==第一:德行==

對于一個程序員候選人來說的話,如何評判一個候選人的德行呢?我覺得有以下幾點(diǎn):

==眼神==

注意觀察候選人眼神是否飄忽不定,是否總是不敢直視你的眼睛,或者回答問題的時候總是往左右兩邊瞟。一般來說,眼神是一個人性格的直觀表現(xiàn)之一,如果眼神不夠沉穩(wěn)堅(jiā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ù)?,是面試官在偷懶的表現(xiàn)。不是說做卷子不能反映問題,只是這種方式太死板,并不能真正過濾掉不合格的面試者。比如,我其實(shí)沒有什么技術(shù)能力,但是我面試前背了很多書,那么做卷子這一關(guān)我有可能可以過,到真正面試的時候才會被拒。所以,做卷子只能過濾那些真正沒有技術(shù),而且沒有背書的面試者。但是,即便是直接面試,面試官真的碰到這樣的面試者,又花的了幾分鐘就可以判斷出來再拒絕呢?所以,我建議,不要做卷子,直接面試,并且分成以下幾個內(nèi)容來考察面試者。

==過往經(jīng)驗(yàn)==

可以讓候選人介紹最近一個項(xiàng)目,并且描述自己的工作內(nèi)容。首先看看候選人是否能夠說得清楚這個項(xiàng)目,比如有哪些模塊,每個模塊有哪些功能,實(shí)現(xiàn)了一個什么業(yè)務(wù)邏輯,自己負(fù)責(zé)的這一塊的詳細(xì)業(yè)務(wù)邏輯又是怎樣的,等等,如果連這些都說不清楚,那么基本上可以判斷候選人在撒謊。了解了項(xiàng)目之后,可以通過候選人負(fù)責(zé)的內(nèi)容進(jìn)行深入技術(shù)提問,候選人說使用了多線程,那么就多線程相關(guān)的知識進(jìn)行提問,但是注意要由淺入深,不要一上來就問一些很難很深的問題。一般來說如果候選人沒有撒謊,那么應(yīng)該來說還是可以回答一些不太難的問題的。

==基礎(chǔ)知識==

一定要考察候選人的基礎(chǔ)知識。很多候選人在說起自己做過的項(xiàng)目的時候眉飛色舞,一套一套的,甚至滿嘴都掛著一些熱門的詞匯,比如大數(shù)據(jù),高并發(fā),云計(jì)算,等等。但是一問基礎(chǔ)知識就傻眼,最簡單的值類型引用類型都不知道有什么本質(zhì)區(qū)別。很多候選人都會辯稱,自己會編程,能夠?qū)崿F(xiàn)業(yè)務(wù)邏輯,為什么還要去背那些概念性的東西,殊不知,那些他們認(rèn)為沒有的概念性的東西,正是我們構(gòu)筑大廈的根基所在。舉個例子,我造一所房子,地基打了10米,你造一所同樣的房子,沒有地基。我們都造好以后,在風(fēng)和日麗的時候,看上去一模一樣,你會笑話我,"看,我們一樣,但是我比你不知道省了多少工序",但是你要知道,并不是每天都會風(fēng)和日麗,總會遇到狂風(fēng)暴雨,等到考驗(yàn)真正來臨的時候,誰的房子更不容易傾塌呢?

==分類考察==

在面試候選人的時候,最好是分類進(jìn)行考察,每個類別準(zhǔn)備5個問題左右,并且由淺入深。頂尖的互聯(lián)網(wǎng)公司就那么幾個,一般的公司招聘沒必要搞那么高大上,兩個字,務(wù)實(shí)!。

  • ==第三:身體狀況及其他原因==

為什么把身體狀況單獨(dú)拎出來說呢?因?yàn)檎l都不想剛招進(jìn)來的人三天兩頭的請假看病,面試官在招聘時,一定要注意候選人身體狀態(tài),如果有明顯的身體狀態(tài)問題或者不正常,千萬要慎重考慮。另外,需要考慮的還有下面的因素:

==候選人是否準(zhǔn)備創(chuàng)業(yè)==

有些候選人因?yàn)槭状蝿?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的特性都非常熟悉??梢圆碌牡綍幸恍╆P(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í),因?yàn)樵谝蝗喝嗣媲爸苯泳帉懘a會非常有壓力,沒有代碼自動補(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á)到最好的效果。有時我甚至需要縮短面試時間就只因?yàn)槊嬖囌叩默F(xiàn)任老板需要他去工作! 請避免增加你目前已有的壓力。

進(jìn)行面對面的面試,請?jiān)绲?5分鐘左右,但不要太早。對于電話面試,如果是在線會議的話,確保提前兩分鐘撥號進(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)回答這些問題的時候,盡量使你的答案簡明扼要,如果必要的話解釋下你的思路。面試官不是因?yàn)椴恢来鸢付鴣韱柲氵@些問題的,他們要知道的是你對你所說的內(nèi)容了解程度有多少。

如果你還不是很了解這些內(nèi)容的話, 記住學(xué)習(xí)的過程是極富有樂趣的一個過程!


直接進(jìn)入正題,這些是技術(shù)性面試的一些樣例題目。

請解釋下method swizzling,并說出你一般什么時候會用到它?- 我喜歡問這個問題因?yàn)檫@屬于較為深層次的語法。大多數(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),而且明白核心的框架是如何運(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ì)算機(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àn)樗茏屛掖_定在公司盈利的前提下,應(yīng)該支付給這個面試者多少薪水。對軟件面試本身來說,能找出快速解決問題的開發(fā)者就是最大的幸事。

在完成細(xì)節(jié)跟完成時間之間,有一個微妙的平衡點(diǎn)。如果有個人用1/3的時間完成了95%,另一個人用了更多的時間完成了100%的話,那我傾向于選擇前者。還有一個秘密可以告訴你,我們也是堅(jiān)持通過這種實(shí)際編碼的測試來選擇員工主管的。

幸運(yùn)的是(或者也可以說這是不幸的,取決于你是如何看待這個問題的),準(zhǔn)備實(shí)際編碼的面試的最好的方式就是勤練習(xí)。你做的app越多,你越有可能更快的開發(fā)出更穩(wěn)健的代碼。所以要堅(jiān)持練習(xí)和學(xué)習(xí)!

該何去何從?

總結(jié)一下:

請熟練掌握計(jì)算機(jī)語言的基礎(chǔ)知識,這樣可以讓你幫助你在面試中放松自己。在面試中,談?wù)撃阋獞?yīng)聘的公司跟公司旗下的產(chǎn)品。始終保持面試答案簡明扼要、直奔主題。

在做編碼工作的時候,保持頭腦的快速運(yùn)轉(zhuǎn)。你完成任務(wù)的速度會決定項(xiàng)目的成敗。如果你能更快速的編寫好優(yōu)秀的代碼,那你就更有價值,你更有價值,公司就更愿意給你更多的薪水。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容