跳至主要內容
YIP NEWS
YIP NEWS

9月21日

面試官連環追問的那個下午,你家爐子上其實早燉著答案

生活爐 美食生活

招銀雲創後端一面的一串技術問答,被我們翻譯成廚房裡備料、看火與第一鍋湯該怎麼起鍋的滋味故事。

刊出 (台北時間) 閱讀約 6 分鐘

九月中的某個下午,牛客網上出現了一篇招銀雲創後端一面的面經。發文的人把問題一條條列下來,從 Java 的集合聊到 JVM,從資料庫索引聊到 Redis 快取,再追到分散式與訊息佇列。字裡行間看得出來,那是一場問得又細又密的面試,問答之間幾乎沒有喘息。

我們之前就把面試間裡的問答翻譯過廚房的語言,那次是資料庫的問題,對上一鍋早就燉對了的湯。這回讀到招銀雲創這份面經,第一個浮上來的畫面更具體:一個剛開始學燉湯的人,站在爐子前,被師傅從選料一路問到起鍋。

備料的問題,永遠先上桌

面試的開頭往往是基礎題。ArrayList 跟 LinkedList 差在哪,HashMap 的擴容是怎麼發生的,執行緒的生命週期有哪些狀態。這些題目像極了師傅站在備料臺前問你:這把青菜為什麼要先泡水,這塊肉為什麼要逆紋切,蔥薑蒜下鍋的順序為什麼不能顛倒。

看起來瑣碎,其實每一條都指向同一件事:你知不知道自己手上的東西是什麼。

逆紋切的肉,咬下去是鬆的;順紋切,嚼到腮幫子發酸。泡過水的青菜下鍋不會瞬間焦邊,大火一炒,葉片上還掛著一點水汽,滋啦一聲,鍋氣就起來了。基礎題答得穩的人,就像備料備得乾淨的人,砧板上沒有多餘的水,碗裡的調味事先量好,爐火一開,手不慌。

面經裡發文的人說,有些問題答得順,有些卡住了。這太正常了。誰家廚房裡沒有幾樣永遠記不住的細節?有人燉了十年湯還是記不得香料包要幾分鐘撈起來,有人煎魚永遠在最後翻面那一下破皮。卡住的地方,往往就是下一次進步的地方。

索引像高湯,都是提前熬好的

面試問到資料庫索引,問到為什麼查得快、什麼時候會失效。這一題放到廚房裡,就是高湯的道理。

一間生意好的麵店,客人點一碗牛肉麵,三分鐘內要上桌。湯不可能是現熬的,一定是前一天夜裡、甚至幾天前就開始吊的那鍋高湯。牛骨、雞架、薑、蔥,大火煮開轉小火,浮沫一遍遍撇掉,湯色從渾濁慢慢轉成清亮的琥珀。等客人上門,廚師舀一勺高湯,加熱,下麵,淋油,快得像變魔術。

索引就是那鍋提前熬好的湯。寫入的時候慢一點、麻煩一點,就像吊湯要花上一整夜的火;查詢的時候快得驚人,就像那三分鐘上桌的一碗麵。而索引失效的場景,也像極了高湯用錯地方:你拿一鍋清雞湯去煮麻辣鍋底,再好的湯也救不了那鍋紅油。工具沒有問題,是用法跟場景對不上。

快取的兩難,每個家庭主婦都遇過

Redis 快取與資料庫一致性的題目,據說是這場面試裡被追得最深的一段。先寫資料庫還是先寫快取,快取過期了怎麼辦,這一連串追問,本質上是一個家裡冰箱每天都在上演的問題。

週末滷了一大鍋肉,冷藏可以放三天。第一天最香,第二天入味,第三天開始你就要猶豫了:熱來喫,還是倒掉?冰箱裡的那盒滷肉,跟你腦中「這鍋滷肉是上週六做的」那筆帳,得隨時對得上。帳對不上,就是喫壞肚子的風險。

快取過期策略就像你家處理剩菜的直覺。有人設一個固定期限,過了就倒,乾脆但偶爾浪費;有人每次聞一下、看一眼,判斷準但有風險。工程師爭論的先寫誰後寫誰,跟家庭主婦爭論「隔夜菜到底能不能喫」是同一種日常智慧,只是換了一套名詞。

被追問到牆角時,爐火別關

一場一面平均四、五十分鐘,問答密集的時候,人會有一種被逼到牆角的感覺。這種感覺,下過廚的人都不陌生。

就說炒糖色。冰糖下鍋,小火,慢慢化,從透明到起小泡,顏色一路從淺琥珀轉深棗紅,那個「剛剛好」的窗口只有幾秒鐘。猶豫一下,過了,苦味就出來了,整鍋倒掉重來。多少人在那幾秒鐘裡慌了手腳,鍋鏟亂揮,火沒關,糖已經焦了。

被追問的時候最忌諱的,跟炒糖色一樣,是慌。答不出來的題目,老實說「這部分我不確定,但我的理解是」,比硬掰一段聽起來漂亮的錯誤答案好得多。焦了的糖色加一點熱水有時還能救,硬掰的答案救不回來。面試官每天聽幾十場,誰在背、誰在想,一耳朵就分出來了。

之前寫火候的問題,你家爐上那一鍋早就答過的時候提過,看火比開火難。承認自己看不懂火,是學會看火的第一步。

起鍋之前,總有一段沒人看見的等待

面經的最後,發文的人照例問了一句:大概多久會有下一面的消息。底下幾樓回覆,有人說等了一週,有人說三天,也有人石沉大海。

等待這件事,廚房最懂。一鍋紅燒肉進了烤箱,接下來的一個半小時你什麼也不能做,只能偶爾去看一眼,聞一聞從烤箱縫隙裡漏出來的那股醬香與肉脂混著的氣味。香味先冒出來的時候肉還沒爛,最折磨人的就是這一段:香氣告訴你快了,筷子告訴你還早。

等面試結果的人,大概就是這種狀態。訊息沒來的日子照樣過,飯照樣喫,只是滑手機的頻率比平常高了一些。這沒什麼好掩飾的,每個等過的人都是這樣。

寫給剛開始燉湯的人

如果那位發面經的朋友,或者正在準備下一場面試的你,恰好在讀這篇文章,我想說的是:一面的密度再高,問的也不過是那幾鍋早就該熟悉的味道。集合與執行緒是備料,索引與快取是高湯與冰箱,分散式是一桌菜要同時上,訊息佇列是客人點了單、廚房排的隊。

廚房裡沒有天生的老手,只有多燒過幾頓飯的人。第一次燉湯會太鹹,第一次煎魚會破皮,第一次被追問會腦袋空白。這些都是過程,寫進面經裡的那一條條「沒答好」,就像鍋底那一圈洗不掉的焦痕,難看,但記性好。

下一場面試前,如果有個傍晚不知道該做什麼,就去市場買一根牛骨、兩段甘蔗、一把玉米,回家吊一鍋湯。小火,三個小時,浮沫撇乾淨。什麼都不想的時候,很多答不上來的問題,會自己慢慢沉澱出味道來。

爐火開著,答案就還在燉。