反轉技術面試!還有這樣的操作?

聽風發表於2017-07-20

假想面試的時候用 Clojure 做題,狠狠地鄙視了一下不懂 Clojure、且高傲無知的面試官,然後瀟灑地離去。


如果你打算找一份程式設計師的工作,那麼你必須要通過白板面試。 作為工程師,模擬白板面試也經常是我們早上例行公事的一部分,同時還需要在星光層(astral plane)上開啟一個漂亮的網格狀的 xterms 視窗,並且在每個鄰近的目錄中不由自主地執行 ls 命令,以防事情在昨晚有什麼變化。

這不亞於在廚房後面的那個抽屜裡,搞一次天翻地覆地搜查。而那個抽屜裡存放著各種各樣的法蘭盤、螺絲刀和從各種家用電器上掉下來多年的各種配飾或零件。現在誰也不知道這些東西原來是做什麼用的,或許從來就沒知道過,儘管如此,我們還必須小心翼翼的對待它們。

下面我將通過一個常見的面試題,向你演示一下白板面試:反轉連結串列。

首先,我們需要一個連結串列。清除 xterms 中不需要的工作區,然後在兩個括號的作用域中寫上必要的元素和萬用字元。這樣我們就從無到有建立出了一個連結串列。

“那不是一個連結串列,那只是一條 if 語句。”面試官說。

“ 這不就是一個另類點的連結串列嗎?”你回答到,同時翻了一個白眼。

反轉技術面試!還有這樣的操作?

“x 到底是什麼?”面試官儘量讓自己看些來友善些。答案就在 REPL,但不要被它一時誤導了,它們可不是你的朋友。你在前臺的“誓言”,不允許你使用它。

“瞭解一個事物最好的方式,就是對它命名。”你回答到。恰當的名字具備魔力。由 Ursula K. Le Guin 發明的 K 語言是最古老和最精練的形式語言之一。一旦你使用某個字元對程式進行自定義命名,意味著你將不能再使用這個字元元素。 你自定義的縮寫名稱會記錄在程式的記憶體中。

“呃,好吧,你怎麼從這個連結串列裡面取出一個元素呢?” 面試官又問。

反轉技術面試!還有這樣的操作?

那些巧妙的表示式在你腦海中逐一呈現,彷彿紅地毯在你光著的雙腳下慢慢展開; 猶如昨晚觀看奧斯卡頒獎典禮時,你憧憬著不同的明星來親吻你;又好像你住在瑟略島(Sørøya )山脈之上,月亮就是你的愛人。 除了邊界檢查,你在第一時間寫出了正確的程式碼:

“你能不能給我寫一個正常的連結串列嗎?就像 Python 中的那樣?”

你咬緊牙關,氣憤地在地板上直跺腳,但還是寫了一個排版良好的列印函式。 此刻,你的手掌彷彿充滿了老繭,你的眼皮彷彿沾滿了冰霜、以及菸灰黑色的雪花。 每個函式都是要付出代價的,當然,除非它是無副作用的純函式。

反轉技術面試!還有這樣的操作?

白板面試時根本沒有多餘的時間去描述變數、寫示例或文件註釋。在白板面試中,時間就是一切。你就假裝你是一名 Haskell 程式設計師,正當著你奶奶的面繼續完成下面的程式碼。

面試官笑了,安心了。 至少此時,程式碼輸出的連結串列仍是正序的。“那麼,要反轉這個連結串列,你需要……”

你抓住了他的手,然後在白板上寫程式碼,那感覺就像在用古老的語言吟誦詩句。而此時此刻,他的大腦卻一片混亂,好像鬆了發條的瘋狂亂撞的鐘,又彷彿心臟上爬過絛蟲,砰砰直跳的心臟恨不得逃出胸腔。

當你鬆開他的手時,他結結巴巴地說了些有禮貌的話,然後把連帽衫的拉鍊拉上假裝以抵禦寒冷。這裡將會有其它的面試會議,但你已經不需要參加了。他用銳利的眼光朝你所在的地方看了一眼。

當然,他們會拒絕你,並且總是裝著極其難為情地說,你不符合他們的公司文化。乘風歸去吧。此地不屬於你。

相關文章