大家好,我最近剛結束 NVIDIA Summer Intern SDE 的完整面試(電話面 + 技術面 + 兩輪 VO),目前已收到 Positive Feedback。這裡把真實經驗和每一輪的具體題目、解答過程、面試官追問分享給大家。
流程:HR 電話 + 技術面 + 兩輪 VO
整體感受:要求真的很高,不只是刷題,每回合都有很深的工程細節追問,C++ 問到底層,系統設計也非常落地。

電話面(35 分鐘)
這一輪由 HR 主導,但夾雜了部分技術問題。
專案深挖
面試官重點問了我履歷表上的一個多線程資料 pipeline 專案。我詳細說明了自己負責執行緒池和任務佇列的設計,使用 C++11 的 std::thread、std::mutex 和 std::condition_variable 實作。特別強調隊列是自己實現的,以精細控制記憶體分配和即時性。
面試官追問了線程安全問題,我重點講了虛假喚醒的處理,以及為什麼在條件變數中使用 while 而不是 if。
其他問題
- 什麼時候用多線程,什麼時候用多進程? (結合實際場景回答)
- 鍊錶有環如何判斷? (快慢指針 + 找環入口)
這一輪整體不難,但需要結合真實專案經驗回答,不能只背概念。
技術面(60 分鐘)
這一輪由 Senior Engineer 主導,C++ 問得非常深入。
RAII 實戰
面試官要求結合實際專案來講解 RAII。我舉了一個 GPU 顯存管理的例子:早期使用裸指針手動 cudaMalloc 和 cudaFree,異常路徑容易忘記釋放導致洩漏。後來改用 std::unique_ptr 配合自訂刪除器,物件析構時自動釋放。
追問了 unique_ptr 和 shared_ptr 的選擇場景,以及循環引用如何用 weak_ptr 解決。
Move Semantics 問移動語意解決了什麼問題,以及我在程式碼中實際使用 move 的場景。我講了返回大物件時避免拷貝,以及 move 後物件的有效但未指定狀態。
多執行緒同步
題目:實作三個執行緒依序列印 A1 B2 C3 A4 B5 C6 … 我使用三個 semaphore 實作定向喚醒,並用 mutex 保護共用計數器。
Follow-up:某個執行緒異常退出如何防止死鎖?我提出 watchdog 線程監控心跳,超時後重置信號量。
VO 第一輪(GPU 方向)
BQ + 項目
重點問了 CUDA 核心優化經歷。我分享了一個矩陣乘法 kernel 的最佳化過程,包括 Memory Coalescing、Shared Memory Tile 快取和 Occupancy 調優。
追問了 bank conflict 的處理,我講了使用 padding 對齊解決的問題。
Coding 部分
- 時鐘指針夾角 給定時間如 “3:45″,計算時針和分針的最小夾角。 我使用公式計算兩個指針角度,取絕對值後與 360 取最小值,注意浮點精度和邊界處理。
- 多線程順序列印 類似技術面的題目,我用 semaphore 實現,並解釋了為什麼優於簡單 mutex + condition_variable。
Follow-up 問了毫秒精度和線程異常退出處理。
VO 第二輪(系統設計輪)
系統設計:高吞吐量 GPU 推理服務(LLM 服務場景)
我從整體架構講起:
- 前端 Load Balancer + 請求隊列
- Dynamic Batching + Continuous Batching
- Worker Pool + Memory Pool 管理記憶體
- 多卡使用 NCCL 通信
面試官重點追問:
- hot/cold model 載入策略(常駐 vs LRU 換入換出)
- GPU 顯存不足時的降級方案
- CUDA Graph 的適用場景與限制
Coding:GPU 任務調度最小化 Makespan 我先給 Greedy + Priority Queue 方案,後續討論了 DAG 依賴下的 Critical Path + List Scheduling。
寫在最後
這次 NVIDIA 面試能走到這一步,我最感謝的就是 Programhelp 的幫助。在準備過程中,他們的團隊全程護航,從專案深入研究到系統設計細節,再到面試表達,都給了我非常實際的支援。如果你也在準備 NVIDIA 或其他大廠面試,你需要 OA 代寫 、即時輔助或代面服務,可以直接聯絡 Programhelp 詳談,他們會根據你的具體情況給予方案。
感謝閱讀,祝大家早日拿到 NVIDIA Offer!