30天完成60多場(chǎng)技術(shù)面試,我學(xué)到了什么?
如果你致力于成為一名軟件工程師或數(shù)據(jù)科學(xué)家,技術(shù)面試往往是求職過(guò)程中的必經(jīng)流程。近日,軟件工程師兼科技作家 Uduak Obong-Eren 分享了他在 30 天內(nèi)完成 60 多場(chǎng)技術(shù)面試后總結(jié)的經(jīng)驗(yàn)教訓(xùn)。
如果你是一位希望事業(yè)成長(zhǎng)的軟件工程師或技術(shù)人員,技術(shù)面試肯定是必然會(huì)面臨的難關(guān),并且往往讓人覺(jué)得很難。因此無(wú)論是從感覺(jué)上還是在其它方面,技術(shù)面試有時(shí)會(huì)讓技術(shù)人員感到恐懼。
本文將介紹作者軟件工程師 Uduak Obong-Eren 在 30 天內(nèi)完成 60 多場(chǎng)技術(shù)面試的經(jīng)歷以及從那些成功和失敗中收獲的經(jīng)驗(yàn)教訓(xùn)。這些經(jīng)驗(yàn)教訓(xùn)分為三個(gè)類別,對(duì)應(yīng)典型招聘流程的三個(gè)階段。
盡管這里的大多數(shù)經(jīng)驗(yàn)教訓(xùn)都直接針對(duì)的是軟件工程師和技術(shù)專業(yè)人士,但其背后的原理適用于幾乎所有職業(yè)。希望你能在其中看到對(duì)你的職業(yè)生涯有用的東西。
我是怎樣開(kāi)始的?
「如果你必將失敗,那就快些失敗?!?mdash;—佚名
和其他軟件工程師一樣,我也參加過(guò)多種不同類型的技術(shù)面試——從讓人望而生畏的白板編程面試到非同尋常的在 Hackerrank 平臺(tái)上的 45 分鐘編程挑戰(zhàn)賽。盡管我有一些很棒的面試經(jīng)歷,但也有一些很糟糕甚至極其糟糕的經(jīng)歷。
但我希望能在面試中表現(xiàn)更好,甚至非常好。我希望學(xué)習(xí)克服面試恐懼癥并在面試中展現(xiàn)自信。就像一個(gè)技能精湛的沖浪者,我希望能在面試所帶來(lái)的高壓力浪潮中乘風(fēng)破浪。恰好那時(shí)我也一直想要換個(gè)工作。
因此從 2020 年 1 月到 3 月初,我申請(qǐng)了美國(guó)和歐洲的多家公司并得到了他們的回應(yīng)。其中既有 Coda 等處于早期階段的創(chuàng)業(yè)公司,也有 Crunchbase 等處于較后階段的創(chuàng)業(yè)公司,還有 Affirm 等中等規(guī)模的公司以及亞馬遜等大型公司,甚至還有 Webflow 等遠(yuǎn)程公司。
發(fā)出了至少 109 份申請(qǐng)之后,我收到了超過(guò) 60 份面試邀請(qǐng)。總結(jié)起來(lái),其中包括超過(guò) 60 次介紹性的電話面試、50 多次技術(shù)視頻電話面試、18 次居家編程項(xiàng)目、11 個(gè)編程挑戰(zhàn)賽以及 8 場(chǎng)現(xiàn)場(chǎng)面試(包括 3 次虛擬面試)。
為了便于理解,我將學(xué)到的經(jīng)驗(yàn)教訓(xùn)分為了三個(gè)類別,對(duì)應(yīng)典型招聘過(guò)程的三個(gè)階段。
面試前階段
這個(gè)階段是指與公司初次接觸到第一次面試發(fā)生前的階段。
有關(guān)工作申請(qǐng)的經(jīng)驗(yàn)教訓(xùn)
當(dāng)我開(kāi)始向公司申請(qǐng)工作崗位時(shí),我想象的是我提交的申請(qǐng)?jiān)蕉?,我獲得面試的機(jī)會(huì)就越多。看起來(lái)符合邏輯,對(duì)吧?所以我當(dāng)時(shí)設(shè)定的目標(biāo)是每天發(fā)出 5 個(gè)申請(qǐng),期望每 5 個(gè)申請(qǐng)就能獲得一次面試機(jī)會(huì)。
但我的策略的效果并不如我期望的那樣。我收到的面試邀請(qǐng)的數(shù)量往往不及我的目標(biāo):差不多是 1:12 的比例,即每申請(qǐng) 12 次會(huì)獲得一次面試機(jī)會(huì)。
我面臨著這樣一個(gè)問(wèn)題:我需要將我的每日申請(qǐng)量提高一些嗎?比如每天發(fā) 10 份申請(qǐng)?;蛘呶倚枰谄渌矫孀鲆恍└淖??每一份不成功的申請(qǐng)背后,我都能看到一些需要改變的東西。
當(dāng)我不再執(zhí)著于申請(qǐng)數(shù)量,修整一下并開(kāi)始思考簡(jiǎn)歷的質(zhì)量時(shí),情況迎來(lái)了變化。我開(kāi)始將每份申請(qǐng)看做是向招聘經(jīng)理或其他會(huì)看到我的簡(jiǎn)歷的人的自我展銷,也就是說(shuō)我自己就是我想出售的商品。如果公司需要填補(bǔ)人才空缺,而我說(shuō)自己有這些技能,我還需要讓他們相信我確實(shí)有。
然后,我的新任務(wù)就變成了找到一種能有效推銷自己的技能、經(jīng)驗(yàn)和個(gè)人特質(zhì)的方法,以便說(shuō)服招聘經(jīng)理相信我就是適合他們崗位的人。
下面給出一個(gè)我想出的這類自我推銷的例子:
加上我的簡(jiǎn)歷,這份求職信的成功率高達(dá) 95%。只有一次這份求職信沒(méi)有起效,但那位招聘經(jīng)理仍然回復(fù)了我,并告訴我那個(gè)崗位已經(jīng)不再招聘了,不過(guò)他希望未來(lái)能聯(lián)系我。
這里的經(jīng)驗(yàn)教訓(xùn)是:你發(fā)出的申請(qǐng)應(yīng)該非常具有針對(duì)性——質(zhì)量?jī)?yōu)于數(shù)量,最好兩者兼?zhèn)?。你要知道你的特有能力和?jīng)驗(yàn),并以一種能滿足公司需求的方式呈現(xiàn)它們,同時(shí)還要不失你的個(gè)性。
你也需要了解你所申請(qǐng)的公司的特點(diǎn)及其具體需求。創(chuàng)業(yè)公司或小公司的需求可能與大公司不一樣,因此需要不同的技能組合。
推銷你自己,并確保在面試時(shí)佐證你的說(shuō)法。
從招聘者來(lái)信所學(xué)到的經(jīng)驗(yàn)教訓(xùn)
在這期間,我收到了很多招聘者來(lái)信(大都是不請(qǐng)自來(lái)的),希望我去應(yīng)聘他們公司的空缺崗位,但其中大多數(shù)崗位我都不感興趣。
當(dāng)然,鑒于我的日程繁忙,這些郵件實(shí)在太多了,但我學(xué)會(huì)了保持同理心,我理解這些招聘者只是在完成自己的工作而已。
所以我不再將這些郵件視為我收件箱里的噪聲,而是開(kāi)始努力回復(fù)所有招聘者的來(lái)信,即使那些職位我并不感興趣。這樣做讓我成功構(gòu)建了一個(gè)招聘者網(wǎng)絡(luò),這已經(jīng)成為了我未來(lái)轉(zhuǎn)變職業(yè)角色時(shí)的重要資源。
你倒不必開(kāi)始回復(fù)你收到的每一封郵件。但你要知道,我獲得的一些有用的面試建議都是從我回復(fù)的不感興趣職位的招聘者那里得到的?;貜?fù)一下其實(shí)沒(méi)啥損失。
面試階段
這部分涵蓋有關(guān)面試本身的一切,其中涉及多種不同的面試類型。
如何應(yīng)答介紹性電話
是的,我懂的,你很忙,很多事情都在搶占你的時(shí)間。但是,你也是一位出色的專業(yè)人員,也就是說(shuō)你在接到這樣的電話時(shí),至少已經(jīng)知道了兩件事:
- 你的面試官的名字
- 關(guān)于該公司的至少一件具體有形的事情——他們是做什么的、公司位于何處、近期有什么新聞等等。
我注意到,當(dāng)我為準(zhǔn)備面試而去了解這些事情時(shí),我總是會(huì)開(kāi)始真正對(duì)這家公司產(chǎn)生興趣。這通常是招聘人員在進(jìn)行這類面試時(shí)所期望的事情。
如何應(yīng)對(duì)技術(shù)性視頻電話面試
在技術(shù)性視頻電話面試中,唯一最具決定性的因素是,你能否清晰地表達(dá)你的想法。
你之前可能聽(tīng)說(shuō)過(guò)這樣的事情:
「面試官關(guān)心的是你的思考過(guò)程。是的,他們可以看你的代碼,但重要的是他們想知道你這樣寫(xiě)代碼的原因?!?/p>
面試官不在你的身邊,也就無(wú)法看見(jiàn)其它非語(yǔ)言的線索,比如你的手勢(shì)和細(xì)微動(dòng)作。面試官只能通過(guò)你的聲音來(lái)理解你的思維過(guò)程。
現(xiàn)在你知道該如何引導(dǎo)這場(chǎng)對(duì)話了,接下來(lái)的問(wèn)題是你該如何變得擅長(zhǎng)?因?yàn)槭聦?shí)上,盡管某些人能夠自然地表達(dá)自己的思想,但另一些人則很難做到,其中就包括我。
答案是:練習(xí)!練習(xí)??!練習(xí)?。?!
練習(xí)很多次模擬面試。與朋友進(jìn)行模擬面試能讓我更好更自信地解釋我自己的思維過(guò)程。但更有意思的,這能幫助我建立對(duì)面試的新看法。
我開(kāi)始將面試看做是與朋友或團(tuán)隊(duì)成員的對(duì)話。我將另一邊的面試官看作是我的朋友(有時(shí)候我還會(huì)在頭腦里給面試官一個(gè)名字)。因此,過(guò)去被我視為壓力巨大的面試,現(xiàn)在變成了我與朋友討論一個(gè)技術(shù)問(wèn)題,僅此而已。
這個(gè)新看法輔以許多實(shí)際的面試經(jīng)歷幫助我變得更加自信,甚至讓我開(kāi)始享受面試,不對(duì),應(yīng)該是技術(shù)聊天。
如何開(kāi)始解決問(wèn)題
永遠(yuǎn)不要在完全理解問(wèn)題陳述之前開(kāi)始解決問(wèn)題。如果你一開(kāi)始就讓對(duì)方澄清問(wèn)題,那么你幾乎就不會(huì)出錯(cuò)。如果你能夠事先清晰地提問(wèn),而不是自己一個(gè)人按自己的假設(shè)行事,也能給面試官留下一個(gè)好印象。
如何解決問(wèn)題
優(yōu)秀的候選人知道如何解決問(wèn)題(比如排序問(wèn)題),但最好的候選人知道一個(gè)問(wèn)題的多個(gè)解決方案,并且理解一個(gè)解決方案與另一個(gè)之間的權(quán)衡。我表現(xiàn)最好的面試是那些我不僅解決了算法難題的面試,而是還提供了替代解決方案并討論了權(quán)衡的面試。
你要以提供問(wèn)題的多個(gè)解決方案為目標(biāo),要樂(lè)于討論權(quán)衡,并且至少要能實(shí)現(xiàn)其中一種方案。
對(duì)于技術(shù)面試而言,要寫(xiě)出清晰的代碼。大多數(shù)面試官既關(guān)心你的代碼質(zhì)量,也關(guān)心你的解決方案的正確性。你要盡可能地寫(xiě)模塊化代碼,將可復(fù)用的邏輯適當(dāng)?shù)貏澐譃閷?shí)用函數(shù)、名稱變量和方法,就像你是 boss 一樣。
如果你被一個(gè)問(wèn)題難住了該怎么辦?
有時(shí)候你會(huì)被難住。原因可能有很多:你缺乏必要的知識(shí)、你的假設(shè)不正確、你遺漏了細(xì)節(jié)等等。
我過(guò)去以為,在這樣的時(shí)候,面試官會(huì)基于我想出解決方案的快慢來(lái)評(píng)價(jià)我。所以我會(huì)很安靜地思考,不與面試官交流,只是思考。
這就是我們大多數(shù)人出錯(cuò)的地方。我也明白,你需要一個(gè)人思考的時(shí)間。但很抱歉打破你的幻夢(mèng),你在接受面試時(shí)不是你的個(gè)人時(shí)間。
是的,如果你能自己想出一個(gè)解決方案,面試官當(dāng)然喜聞樂(lè)見(jiàn),但不要忘了他們也希望看到你能與其他同事合作構(gòu)想解決方案。盡管公司想要技術(shù)明星,但他們也想要團(tuán)隊(duì)合作者。
因?yàn)槟愕拿嬖嚬偈且粋€(gè)朋友、一個(gè)伙伴、一個(gè)團(tuán)隊(duì)成員,他和你是一邊的,也就意味著你在思考解決方案時(shí)應(yīng)該與他們交談。
你應(yīng)該分享你的思維過(guò)程,直到你卡住為止;你要充滿自信地尋求幫助,而不是哭泣般請(qǐng)求幫助。這樣做時(shí)你可能就會(huì)揭示出解決方案,就像我在接受 Coda 面試時(shí)那樣。
如何應(yīng)對(duì)編程挑戰(zhàn)
這里的經(jīng)驗(yàn)教訓(xùn)適用于以在 Hackerrank 和 Codility 等平臺(tái)上執(zhí)行編程挑戰(zhàn)形式的面試。通常這些挑戰(zhàn)都是限時(shí)挑戰(zhàn),比如 45 分鐘或更長(zhǎng)時(shí)間。
我前面分享的一些經(jīng)驗(yàn)教訓(xùn)在這里也適用,但其它一些卻并不適用,比如讓別人澄清問(wèn)題,因?yàn)檫@里沒(méi)人可問(wèn)。這里我推薦一些步驟:
- 通讀并完全理解問(wèn)題。
- 首先寫(xiě)出能工作的代碼,即便是暴力搜索算法也行。這可能無(wú)法通過(guò)所有測(cè)試案例,但優(yōu)先事項(xiàng)是拿出可工作的代碼,最好能在前 15-20 分鐘完成。
- 使用不同的輸入類型測(cè)試你的代碼,因?yàn)檫@有助于你處理邊緣案例。
- 優(yōu)化效率。
- 重復(fù) 4 和 5 ,直到最后一分鐘。
這里,很好地掌握計(jì)算機(jī)科學(xué)基礎(chǔ)很關(guān)鍵。
如何應(yīng)對(duì)居家編程項(xiàng)目
居家編程項(xiàng)目能讓你有機(jī)會(huì)更好地展現(xiàn)自己的才能,因?yàn)槟阌懈鄷r(shí)間。這也意味著這類項(xiàng)目更耗時(shí)間。
一家面試我的公司還為從事居家編程項(xiàng)目的時(shí)間提供了大約 68 美元一小時(shí)的薪資——說(shuō)明這個(gè)任務(wù)很嚴(yán)肅,你也應(yīng)該嚴(yán)肅對(duì)待。不過(guò)在你花時(shí)間搞居家項(xiàng)目之前,你一定要相當(dāng)確信你希望進(jìn)入這家公司。
永遠(yuǎn)不要在居家項(xiàng)目的代碼質(zhì)量上松懈自己。要針對(duì)性地進(jìn)行你的設(shè)計(jì)決策,即命名規(guī)范、代碼結(jié)構(gòu)等等都要好好考慮,并且要做好準(zhǔn)備為你的選擇辯護(hù)。
你應(yīng)該使用什么工具?
在我接受 Course Hero 的面試時(shí),我使用了 regex 來(lái)解決我本可用更簡(jiǎn)單的字符串解析算法來(lái)解決的問(wèn)題。事實(shí)證明,這是個(gè)糟糕的決定,我也沒(méi)通過(guò)面試。
經(jīng)驗(yàn)教訓(xùn):僅使用你非常熟悉而且經(jīng)驗(yàn)豐富的工具。
如何進(jìn)行現(xiàn)場(chǎng)面試
在面試前一晚好好睡一覺(jué)。面試當(dāng)天提前到達(dá),然后保持微笑(這有助于你展示信心,而且更重要的是能讓你保持放松并感覺(jué)一切都在控制中)。
直面你的恐懼并接受它——即使失敗,也不是世界末日,畢竟這只是又一場(chǎng)技術(shù)聊天而已。然后進(jìn)門,開(kāi)始聊天。
如何進(jìn)行虛擬現(xiàn)場(chǎng)面試
這與現(xiàn)場(chǎng)面試大不相同,因?yàn)槊總€(gè)人的眼睛都看著你,這可能讓人神經(jīng)緊張。
我收到了三個(gè)虛擬現(xiàn)場(chǎng)面試,而我沒(méi)通過(guò)其中任何一個(gè)。很抱歉你沒(méi)法從我這里獲取成功經(jīng)驗(yàn)。
面試之后
如何應(yīng)對(duì)失敗
你沒(méi)通過(guò)一輪面試的原因有很多,我認(rèn)識(shí)的一些最好的工程師都曾在面試時(shí)受挫過(guò),現(xiàn)在也仍然會(huì)失敗。
因此,不要執(zhí)著于失敗的面試,而要從失敗的面試經(jīng)歷中找到可以吸取的教訓(xùn),然后借助它們繼續(xù)前行。就像他們說(shuō)的——前進(jìn)!
面試成功了又怎樣?
慶祝你的成功吧,不管你覺(jué)得這個(gè)成功有多小。我有一些慶祝的思路。
你接下來(lái)應(yīng)該做什么?
- 與朋友進(jìn)行很多模擬面試。盡管我并不完全同意「練習(xí)造就完美」的說(shuō)法(因?yàn)樵谖铱磥?lái)完美是個(gè)一直在變動(dòng)的目標(biāo)),但練習(xí)能幫助你快速識(shí)別面試問(wèn)題中的模式,幫助你熟練,最終提升你的信心。
- 對(duì)于技術(shù)面試,很好地理解數(shù)據(jù)結(jié)構(gòu)和算法基礎(chǔ)是必需的。
- 開(kāi)始面試并不斷面試。即便你有工作,也可以時(shí)不時(shí)面試一下——也許每?jī)蓚€(gè)月或一個(gè)季度一次。面試是一項(xiàng)技能,可以繼續(xù)磨煉。
希望這篇文章能幫助到你。