生活
手撕三題寫不出快速冪,隔天早上就收到感謝函:騰訊這場後臺一面,把「基礎不牢」四個字擺上了檯面
9月21日晚一場騰訊後臺開發一面在牛客網流傳,上來先手撕三題再連問作業系統、網路、資料庫與腦筋急轉彎,隔天早上即掛,本文回顧這份面經與留言區的圍觀樣貌。
先把時間點說清楚。這場面試發生在9月21日晚上,面試者是騰訊的後臺開發崗,9月22日早上就收到了不通的結果,前後不到十二個小時。面試者把整場十六題的問答完整貼上了牛客網,結尾一句「感覺實力確實不夠,一面掛也是好事」,把這場面試的基調定得很清楚:不留情面,但也不怨天尤人。
這份面經在牛客網的秋招版面上流傳開來,留言區很快圍了一圈人。有人對著第十四題的快取一致性追問開始討論起來,有人感嘆騰訊老愛問這種文字題,還有人發現第十六題的賽馬問題自己面新創公司時也被問過。一份掛掉的面經,就這樣變成了秋招季的公共教材。
上來先手撕,而且撕的是快速冪
這場面試的開場方式相當直接:先手撕三道題,不寒暄,不熱身。其中一道考的是取模版快速冪,面試者自己承認忘記怎麼寫了。
快速冪是演算法面試裡的經典老題,核心是把指數冪運算拆成二進位表示,透過反覆平方把時間複雜度壓到對數級別,再配上取模運算防止數字爆掉。這題不算刁鑽,但它卡的是一個很實際的門檻:你平常刷題時是理解了原理,還是只是背下了模板。秋招現場沒有編譯器提示,沒有搜尋引擎,忘記就是忘記。
手撕完之後才是自我介紹,這個順序本身就有點話題感。一般面試的慣例是先聊背景再考題,這場直接反過來,先看程式碼能力,再決定要不要花時間認識你。對基礎崗位的後端面試來說,這種安排傳達的訊息很明白:八股可以背,手上的東西騙不了人。
十六題一路問下來:從記憶體問到賽馬場
緊接著手撕的,是一整套後端工程師的標準題單。這份題單的覆蓋面很廣,從作業系統一路問到網路協定,再到資料庫和快取,最後還加了兩道純邏輯題。逐題看下來,大致可以分成幾個板塊。
作業系統部分的開場題就很有畫面:一個只有512M記憶體的作業系統,申請1G的記憶體空間,會發生什麼。這題考的是虛擬記憶體的概念,申請成功不代表立即佔用實體記憶體,真正的考驗發生在實際觸碰那些頁面的時候,缺頁、換頁、OOM,一路往下追。第二題問Linux上一個進程開了一百個執行緒,kill掉這個進程時怎麼保證一百個執行緒都被殺掉,面試者標注了「不會」。kill訊號送給的是進程,但訊號的處理在多執行緒情境下有預設的派發規則,這題考的是對訊號機制的理解深度。
網路部分是這場面試的重頭戲。epoll有沒有用過,邊緣觸發和水平觸發的區別,ET模式怎麼保證讀完所有數據。TCP四次揮手時TIME_WAIT階段發生了什麼,要等多久,給一個具體時間。TCP怎麼實現可靠傳輸。然後是一道很有層次的題:UDP在弱網下會丟包,有沒有什麼協定把TCP和UDP的優點結合起來,以及為什麼有了TCP還要有UDP。這題的標準答案方向會指向QUIC這一類在UDP上重建可靠性的設計,考的是面試者有沒有跳出背誦、看過真實世界的工程取捨。連接復用怎麼區分是誰的數據,這題則把話題帶到了多路復用的串流識別。
資料庫和快取部分問得相當深。MySQL分頁查詢指定LIMIT和OFFSET時,為什麼越往後越慢,實際專案中怎麼解決,這是深分頁的經典問題,答案會指向遊標分頁或者延遲關聯。然後是Redis的三連追問,層層遞進:我想更新資料庫時,Redis裡的資料怎麼辦;先更新資料庫再更新快取,如果刪Redis失敗了會怎樣;假設用消息佇列重試刪除,但刪除命令進到快取之前,資料庫又被舊值覆蓋了,佇列裡的刪除命令執行後刪掉了快取,這種情況怎麼辦。
這第三層追問是整份面經裡討論度最高的一題。留言區有人給出了自己的分析:這種時序錯亂造成的結果大概是不必要的快取擊穿,不太會出現真正的髒數據,因為快取被刪掉之後,下一次讀取會從資料庫重新載入。一場已經結束的面試,就這樣在留言區被重新開庭討論了一遍。
硬幣和賽馬:基礎題之外的心理戰
十六題的末尾放了兩道邏輯題,面試者兩題都標了「不會」。
第一題:一百枚硬幣,三十枚朝上,七十枚朝下,怎麼分成兩堆,讓兩堆中朝下的硬幣數量相同,硬幣可以反轉。這題有一個漂亮的解法,關鍵在於翻轉操作本身的數學性質,取任意三十枚硬幣出來全部翻面,兩堆朝下的硬幣數就會相等。
第二題更是老面孔:二十五匹馬,五條跑道,每次比賽只能拿到排名,最少比幾次能找出最快的五匹馬並給出排名。留言區有人感嘆這題為什麼老是考,自己以前面一家新創公司時也被問過同樣的題。這類題不考任何具體的工程知識,考的是在資訊受限的條件下做推理的耐心,以及有沒有見過這個套路。見過的人幾分鐘解完,沒見過的人現場很難推得出來,這也是它常年引發爭議的原因。
把這兩題放在面試的最後,多少帶點壓力測試的味道。前面十幾題問的是你學過什麼,最後兩題問的是你沒學過的東西面前,你會怎麼反應。
反問環節的一句話,比十六題都耐嚼
面經的最後記了反問環節的兩個問答。面試者問是什麼業務,對方答wxg視頻號視頻加熱。再問什麼技術棧,得到的回答是「這個沒事,能通過面試說明足夠聰明,可以學」。
這句話單獨看是安慰,放在一場隔天早上就掛掉的面試之後看,就多了一層意味。技術棧可以學的前提是先通過面試,而這場面試卡住的恰恰是那些被認為不該靠聰明、該靠準備的東西:快速冪、kill訊號、TIME_WAIT、深分頁。換句話說,面試官嘴上說聰明最重要,考題卻都在篩選基本功。這種言行之間的落差,是每年秋招季面經留言區永恆的話題。
這場面試放在今年的大廠考題光譜裡
把這份面經和這個秋天其他流出的後端面試並排放著看,味道就出來了。同樣是騰訊體系,前幾天流出的IEG Go後端一面把七題AI協作開發問在八股之前,先問AI寫的程式碼怎麼驗收才輪到goroutine,讓牛客網一面驚呼壓力山大,那場面的考法可見騰訊IEG這份一面面經裡的新舊考題比例。對照之下,這場後臺開發一面幾乎沒有碰AI相關的題目,問的全是最傳統的作業系統、網路、資料庫三板斧。
留言區也有人直接下了註解:基本是八股。在AI工具題正在攻佔各大廠面經的這個秋天,一份純八股加手撕加邏輯題的面經,反而顯得有點懷舊。它提醒大家一個樸素的事實:崗位不同,篩選的邏輯就不同。影片號的後臺開發要扛的是高併發的基礎設施問題,epoll、TIME_WAIT、快取一致性這些老題目,問的就是日常工作裡每天都會踩到的坑。
這也和美團那場AI全棧Agent開發一面的畫風形成對照,面試官全程笑著把考題藏進「如果讓你設計」的場景題裡,追的是Markdown切分、Query Rewrite和行程規劃Agent,兩種崗位對「基礎」二字的理解完全不同,相關的考法差異可見美團這場Agent一面的場景題樣貌。
掛掉的人把題目留下來,圍觀的人把答案補完
這份面經最後的落點值得單獨一提。面試者寫「一面掛也是好事」,語氣平靜,沒有太多情緒。但真正讓這篇貼文活躍起來的,是留言區那些接手的人:有人替第十四題補上快取擊穿的分析,有人討論騰訊愛問文字題的風格,有人指出賽馬題到處都在考,當然也少不了招募者留言「要不要了解下我們這邊」。
牛客網的秋招版面每年九月都是這個樣子:面試掛掉的人貼出題目,圍觀的人補完討論,下一批面試的人把這些題目拿去準備。一份十二小時就出結果的失敗面試,被拆解成教材、被爭論、被收藏,最後變成整個求職季公共知識的一部分。這大概也是面試者那句「好事」的另一層意思:題目留下了,經驗留下了,下一場就不會再忘記取模版快速冪怎麼寫。