技術面試心理學
之前沒有太認真去想面試這件事。身為Engineer,面試過程的主要任務就是把我們的技術能力展現出來、把Coding題最佳解回答出來。直到最近看到批踢踢上的面試討論,回想了之前的一些經歷,才覺得很多細節的地方是很值得討論的。
我知道每個面試官應該都有不同的問問題的風格,也有不同的評判標準。所以得先聲明一下以下寫的都只是我個人的心得。很多分析也是依照著小公司的面試標準來延伸。
由於已經很久沒有被面試了,近年來都是面試別人,所以我想要以面試官的觀點出發,思考一下怎樣算是個好的交流。(其實不太喜歡 “官” 這個字,因為不是所有面試都有階級之分,常常面試到的人都是非常資深的。)
面試是交流
把面試當成考試似乎有點太過嚴肅,我覺得 “交流” 對我來說算是一個比較適當的說法。面試其實就是人與人之前的交流,經由觀察一個人的表現來推斷他適不適合作為未來可以一起合作的夥伴。
以交流這個觀點來分析面試的話,一切就會變得很複雜且微妙。再也不是一個只有零和一的事情、不是你能把題都做完做對就能夠拿到Offer。我個人面試的方式比較多的情況是先聊經歷,然後做一題難度簡單的暖身Coding題跟一題系統設計。
強的人不一定能做出很難的題或者立刻想出最優解,問一題難度適中的題其實是看解題中的思路、Coding Style甚至是Debug的能力。系統設計也是Open question。答案千百種,但是基本上都能感覺出來一個人有沒有這方面的Sense,挺大一部分還是看感覺的!
還記得以前剛開始面試人的時候,身為一個工程師當然有著很重的邏輯思維,每次的面試我都會很認真的規劃,思考怎樣能帶給面試者一個很公平的面試然後可以做出一個很正確的判斷。但是幾次下來之後,才發面這其實是一件不太可能的事情… 😅。
1. 解題能力不能百分百表示能力:
有了工作後你就會發現你做的事情大部分是跟刷題不相關的,有多年工作經驗的人大部分不會比LeetCode 題全刷完的強。相信90%的人工作之後再也沒寫過Tree?他們可能有很強的架構能力,這些靠刷題是無法體現的。
很多東西比解題還重要的多,學習能力是其一。能不能保證在各種框架汰舊換新速度之快時,你還能跟得上腳步?Project掌握與應變能力也很重要,有時候在關鍵的時機點Deliver你的產品遠比寫出最佳解重要。
2. 你無法掌握誰是你的面試官:
面試官的個性是無法掌握的,就好像你周圍的人不是每個都是你朋友,肯定有些人喜歡有些人不喜歡。面試官的個性可能剛好就跟你不Match,你的一言一行就是不會青睞。
你的表現也可能會因為面試官當下的狀態而影響。他可能準備要休假、被升值、被主管訓、趕Project等等,畢竟技術面試不是他工作中的主要任務不是?
3. 期間內面試者間的比較:
你的表現同時會被你的競爭對手影響。你的競爭對手是這段期間內也被同個面試官面到的人,這種相對性的比較很直接決定了你面試結果的好壞。
市場供給的概念也能套用到這裡來。有些公司剛好在時間內需要很多人,那面試門檻也會相對降低很多。如果現在職缺只有一個並且有很多人要面試,那競爭就會很激烈。
4. 面試者對題目的熟悉程度:
很明顯當你遇到你不擅長的題,表現肯定差強人意。面試官可能這個月問的題是Graph相關,問了Topological Sorting,你知道但你剛好沒準備好😩。結果下個月面試官改問Dynamic Programming題,是你擅長的…,就是這麼湊巧你早了一個月面。
當然你能力越強的話,以上問題的影響是可以減小的。我覺得技術能力依照你應徵的職位,到達一定門檻就行了。正常來說,好的面試官如果真的想知道你的能力,應該是不會問太過刁鑽的題?!有時候題太難大家都不會的時候反而會錯過很多好的人才。
其他部分,因爲面試是交流,有另外一大部分會因你的態度與個性決定。最後就是運氣…😅。
提升交流能力
既然面試不是100%靠技術,那剩下的另一大部分就是交流能力。畢竟面試的人之後有可能會是同事,你如果題都解出來但交流的很不好大家還是不會想與你共事的。
很多人的表現普普只過了基本門檻,但溝通能力特別突出,我們還是會給予挺高的評價。這也是為什麼有時候你覺得某些同學明明沒你厲害卻能拿到offer的原因之一。
提升交流能力其實不容易,有時候面試者的表現真的令人為之驚艷,甚至在想自己是面試者的話一定沒法像這樣。常常也從面試者身上學了不少。
換位思考可能是個不錯的方法,想想如果你今天是面試官,面試者怎樣的表現會讓你很滿意?
有些很基本卻很加分的表現,像是讓談話中帶有輕鬆的氛圍、語帶微笑又不過於輕浮,畢竟大家都不喜歡太嚴肅的氛圍不是嗎?另一個方式是儘量使用正面積極的話語。像是:你說的沒錯、這想法很棒、當然沒問題! 等等…。(寫成中文好像怪怪的,用英文說出更為自然🤣)
同時多避免辯論性的對話,並且少質疑。大部分的情況下一樣的題目面試官估計已經問很多次、看過各種思路與解法。如果他們對你的解法有問題的話,絕大多數是真的有問題,對你來說其實是的Hint也是件好事。如果你能因此修正方向說不定還能加分!
以上也不是說完全不解釋他不認同的思路,但是說話是門藝術,你得很小心!你的各種辯解在你以為他已認同的時候,說不定心中已經幫你扣了些分數。
一些取巧技能
面試中我有觀察到一些現象,我個人認為可能一定程度可以當成小技巧在適當時機使用一下。
通常一開始面試官會讓你介紹一下自己還有你做的東西。我們假設大部分的面試官是比你有經驗的,如果你的技能跟他類似,有一定概率之下你會自曝其短。這種狀況之下你可以選擇他不熟的技能並且大力發揮講出很專業又合邏輯的言論。面試官對於自己不熟的東西是不會follow up太多有深度的東西的。這時候就會有些錯覺 — 變成了你好像比他還懂:)
當然不是要讓你無中生有、網路上特別查一個自己之前不會的東西,你要做的是在介紹自己的時候選擇想要著重的點!
舉個例子,假如你知道你要面試的公司或組用的框架是Django Python,那你可能可以說你之前也寫過挺多Django,但點到為止就好。再來就開始說你之前用Go做了很多Project,開始往Go的一些框架或是特點往下延伸。
當然以上前提是要出現在 — “假設大部分的面試官是比你有經驗的”,如果你對Django真的超極熟,那絕對要多加著墨,因為你的技能是否與組Match這件事非常重要!
另一個小技巧是你要儘量對這個職位、組、公司表現出高度興趣。先做足功課,面試的最後一個環節多問一些問題。避免過度稱讚,用問題的方式表達出你的興趣。當然也要記得看一下臉色,不要人家可能有事要忙了還要拖時間。
之前有個面試者本來在技術面的環節中表現普普,但是最後在問問題的環節中我們聊了很多也很愉快,後來我把原本的已經No Hire的決定又改成Hire。
結論
技術面試理所當然還是以技術為主,多準備還是好的。只是要注意不要因為太Focus在解題而忘了其他部分。好不容易刷題刷了好久然後各種準備,最後卻敗在其他細節上,真的是挺漚的一件事!
心態方面則是不要太過負面,如同上面所說,被拒很多時候並不完全是你的問題,運氣成面倒是占了挺大部分。有時候甚至還有這種情況:面試的人各方面都挺完美的,就是技能不Match我們的Tech Stack、當下改變主意而放手等…。
希望大家都能找到屬於自己的Dream Job!
END
推一個 Calfoodie
灣區生活的工程師們Check it out!
灣區生活與旅遊: https://medium.com/calfoodie
灣區美食:https://www.instagram.com/cal_foodie/
灣區美食地圖版:https://calfoodie.com/