最簡單的解釋:典型的工人去面試工程師職位,通不過面試是應該的。(假設如描述所說最難只問到二叉樹。)
我反對面試官隨便網上找一道題就拿來問的做法,我也反對 @歸辰 所說的只應該考察工作上實際所需知識的做法,因為這兩者都基于一個錯誤的面試思路,那就是用面試來考察你懂不懂什么的。面試不是用來考察你懂不懂什么的,而是用來考察你有沒有解決問題的能力的,以及將來和你一起解決問題是否容易。我知道中國絕大多數人在經歷了十多年應試教育后,無論是站在面試者的角度來看,還是若干年后成為面試官了從面試官的角度來看,都只會用這種方式來思考問題——「面試」嘛,有個「試」字不就應該跟「考試」差不多咯,而我們習慣的考試就是考察你是否懂某個知識咯,只要死記硬背就可以了。然而真正好的面試不是這樣做的,有興趣的可以去看我之前寫的那篇《理想的技術面試過程》。
回到問題上來,我認為正確的面試方式是這樣子的:現在你來我這里面試,我就告訴你我們在做一輛車子的原型,現在少了一個輪子問你怎么辦。沒錯,我就是要讓你重新發明輪子。誰不知道樓下 7-11 有輪子賣,但我就想知道你會如何解決沒有輪子的問題。
你可以從各種聽起來非常愚蠢的方法開始,例如問我這個原型是不是只是用來展出的,是的話把車子放在展廳一角然后讓缺了輪子的一側對著角落,這樣子隨便拿幾塊磚頭把車撐起來就可以了,反正沒人會去看車子的那一側。然后我會告訴你,展廳的天花不可能打開,所以我們不能直接用吊車把原型放進去,最終原型在展廳外面卸下來后你還是是要想個辦法把它弄進去。你可能會說,那就用埃及人用圓木搬動大石塊的方法咯,在原型的底下放幾條滾動的圓木至少能讓它推得動吧。這聽起來還是比較蠢,但我會告訴你這個思路的方向是正確的。這個討論延續下去,最終你還是會提出用金屬做輪子外面再包一圈橡膠的做法,從而完成了重新發明輪子的過程。
之后我會把你帶到車間里,告訴你這里有你所需的所有電動工具和原材料,你把你剛才發明的那個輪子造出來吧。有些人手藝非常好,一下子就能做出來一個非常好的輪子。有些人無論說得輪子有多圓,做出來的東西永遠只能是方形的。大多數人介乎兩者之間,對此我會說你不如把你造出來的輪子裝到原型上試試看是否合適,不合適的話拿下來再調整一下。
這是正常的面試流程。我不指望你一開始能夠給我一個輪子,我也知道外面賣的輪子很便宜,但我需要驗證你有沒有遇到問題后解決問題的能力,這包括思維和動手兩方面。在這個比喻的基礎上,我們可以來探討一下面試過程中遇到的各種面試者。
那些不懂算法同時也非常拒絕面試算法的面試者,就如同一條汽車流水線上的工人來面試汽車工程師一樣。「沒有輪子?老板你這不是耍我么。我能夠純熟地把輪胎和軸承對齊,然后用電動工具把所有螺絲都擰緊。但沒有輪子這就不是我的問題了。這要么是采購的問題,要么是倉管的問題,反正輪胎沒有出現在流水線上我就什么都做不了。如果說沒有電動工具,我可以去找兩把手動工具來,用腳踩兩下也能擰緊,但沒有輪胎真的不是我能負責的。」
當然這都不是最搞笑的,還有更搞笑的類型。ACM/ICPC 競賽選手或者是面試前專門在網上刷題的面試者,基本上一上來就「哦,你要個輪子是吧。我知道怎么造輪子,你給我工具和材料就行了」,然后就以極快的速度造了一個輪子出來,裝上去也沒有任何問題。有一定的概率我在仔細檢查后發現,這個輪子是用鉚釘裝上去的,所以拆不下來了,橡膠是一次充氣后完全密封的,因此漏氣之后不可能再打氣。不過想想也合理,這類工程師專業做撞擊測試,所以在他們的世界里面任何東西造出來都不是長期使用的,而是拿去測試一下,通過或通不過都立即變廢品。
還有一些情況是這樣子的,例如我問超大整數乘法然后對方說用 Python 直接用乘號,又或者說我問快速排序對方說用 Haskell 一行寫完。這就如同一個面試者打開公文包掏出一個輪子說「我這正好有一個,不知道是否合適?」呃……你的百寶袋里面還有什么?
最后從面試官的角度來說,面試 ACM/ICPC 競賽選手往往都很無聊。他們能夠給出一個完美的輪子,但我不覺得我能從他們身上學到新東西。(面試過足夠多的人后,要見到一個比已知完美輪子更完美的輪子其實非常難。)更有趣的面試者會說,「你知道嗎,其實中國古代獨輪手推車的輪子設計得比古羅馬戰車的輪子要合理」。其實我不知道你在說什么,但如果你能夠把整套理論說得自圓其說的話我覺得你至少有點思維能力,同時你還真的對輪子感興趣。事后我可能會去搜索一下看看你說的理論是否正確,但至少我會學到點新東西。
您需要登錄后才可以評論, 登錄| 注冊
于詩詞盛宴中看見書香霞浦2024-05-28
閩南網推出專題報道,以圖、文、視頻等形式,展現泉州在補齊養老事業短板,提升養老服