Pinterest VO | 大頭釘面經 | Pinterest Onsite 面試記錄|General Backend|經驗總結

1,232Views
尚無留言

這場 Pinterest VO 是我最近經歷里數一數二密集的,整體五輪,覆蓋演算法、系統設計、BQ 全部維度。
一開始我信心滿滿,覺得系統設計自己也準備得挺多了,結果真的上場之後才知道,Pinterest 的 follow-up 是屬於那種一步步挖到底的風格,根本不給你“繞過去”的機會。 下面來分享一下面試的細節。

Pinterest VO | 大頭釘面經 | Pinterest Onsite 面試記錄|General Backend|經驗總結

Pinterest 面試流程

Pinterest 的面试流程整体节奏偏快,从 recruiter reach out 到正式 VO 一般在 2~3 周内完成。

階段 內容描述 時長 重點考察點
簡歷篩選 內推 or 官網投遞,經 recruiter 初步篩選 背景匹配度、項目經驗、跳槽動機等
Recruiter Call 招聘 HR 電話初聊,介紹崗位、確認意向,部分情況會有簡短行為面試 30 分鐘左右 溝通表達、求職動機、文化契合度
OA(視崗位而定) 部分崗位可能要求做在線筆試(如 DS、ML) 60~90 分鐘 編碼能力、演算法基礎
VO(Virtual Onsite) 一般包含 4~5 輪:Coding、System Design、BQ、可能加一輪架構討論 每輪 45 分鐘 綜合評估技術深度、系統設計、協作溝通等

第一輪 Coding:鏡子反射路徑問題

這一題面試官一上來就直接發了題,說白了就是給一個二維 grid,裡面每個格子要麼是 /\\、要麼是空的,你從某個起點、方向進入,要類比光線反射的軌跡,看能不能走到目標點。

思路其實不複雜,但陷阱特別多。
我最開始寫得太粗暴,反射方向用 if 寫了一大堆邏輯,結果邊界判斷漏了,方向更新也寫錯了,跑了樣例直接 infinite loop。
幸好我這邊 ProgramHelp 實時語音提醒了:先抽象方向為 (dx, dy),然後用一個映射表去寫鏡子反射的變化,這個思路一下就清晰了,改完之後一下就過了樣例。
而且他們還提醒我這個題容易在 visited 記錄上出錯,不只是位置座標,還要帶方向資訊,不然你可能來迴轉圈都發現不了 bug。

第二輪 Coding:TopK 廣告統計 + 滑窗版本

這輪是屬於那種一開始看起來很簡單,越寫越細思極恐的題目。
給一堆 (timestamp, adId),你要返回出現頻率最高的前 K 個廣告,follow-up 是 sliding window 場景下的 topK。

我最開始就用了 hash + heap 的方法,結果面試官直接 challenge:
“如果有上億條記錄、滑窗只保留 1 分鐘內的事件,你的數據結構怎麼更新? 性能夠嗎? ”
我當時愣了,heap 的 lazy remove 來不及處理這麼頻繁的數據變動。

ProgramHelp 的語音提醒直接來了個點睛:可以用 bucket + counter map,timestamp 向下對齊到時間片段(比如每 10 秒一組),然後用多個桶滑動清理過期數據。 這一改整個邏輯就順了,我連帶空間複雜度也解釋得很到位,面試官也滿意地點頭說:“That's a nice trick.”

第三輪 SD:使用者點擊事件和廣告事件的聚合系統

這一輪題干超級長,一上來面試官丟了一大堆字段,讓我設計一個 event aggregation 系統,目標是輸出 “adId -> region -> click/view 次數”。

剛開始我以為是那種標準流處理題,直接上了 flink + window join,但被面試官挑戰了:“你這個 join 有沒有辦法簡化? 數據是不是一定得即時 join? ”
我直接卡了,陷入“我要不要分流”的思想旋渦裡。
ProgramHelp 提示說:這裡的核心不是 join,而是藉助 Redis 構建一個中間 servingId -> adId + region 的映射關係,把複雜邏輯提前緩解,後台做 lazy join。
我一聽立馬換了個方向,後續設計得就非常自然,尤其是 Redis key/value 的結構在提醒下也做了優化,避免了數據冗餘。

第四輪 SD:商品 catalog 上傳系統

這題說實話差點把我勸退。
場景是:商戶上傳商品 catalog,一次可能會有 50 萬個 item,要設計後端處理系統,要求穩定、可擴展。

我第一反應是 chunk 分批上傳,結果面試官直接懟回來:
“我們不控制 client,我們 server 要能接 50w 個 item 一次性過來。”

我一時語塞,只能說可能要用流式消費,異步落庫,但講不清楚架構穩定性。
ProgramHelp 後台馬上提醒我:先確認讀寫比例,再決定是走 write 優化還是 read 優化架構。 我重新澄清需求后,發現其實讀遠多於寫。
於是換了個方向,設計成寫入 buffer + 後台分批持久化 + 前端用 cache 減少高頻讀取,再加一個寫入任務佇列保證吞吐,整個系統設計邏輯一下就清晰了。

這輪算是從崩盤邊緣救回來...

第五輪 BQ:領導力、衝突、專案所有權

這輪 BQ 我倒是準備得比較充分,因為 ProgramHelp 給了我一份 behavior 模擬題庫,還提前用語音 mock 過幾遍。
問的都是經典題型,比如:

  • “Tell me about a time you disagreed with a teammate”
  • “When did you take initiative to lead something not in your scope”

我用 STAR 框架穩穩講下來,每個例子里我都穿插了一些數據指標/影響範圍,算是打動人了,面試官最後還誇我:very structured, and impact-focused.

總結:這次面試給我最大的感觸

Pinterest 的面試風格偏挑戰型,尤其系統設計這兩輪,一定不要怕被 challenge,而是要“clarify + reposition”,要表現出你能從 feedback 中快速調整。

而我這次最大的加分項,其實就是 ProgramHelp 的 VO 助攻:

coding 卡死的時候能提醒你“這裏其實可以用方向 map”

design 卡偏方向時會立馬建議你“clarify 需求再出圖”

就連 BQ 也提前幫我提煉了幾個範本和案例,講起來特別順

沒有這個服務我大概率至少掛一輪。 現在等 hr 迴音,但 overall 感覺還挺穩。

author avatar
azn7u2@gmail.com
END
 0
Comment(尚無留言)