NVIDIA 的实习招聘从来不"轻"——即便是 SWE Intern,也常被拉去做 CUDA 入门题、C++ 内存模型题、甚至 DL 框架数值题。社区里有一种误解:"实习面 = 简化版 full-time 面",这在 NVIDIA 不成立。NVIDIA 把实习当作直转 full-time 的预筛选,Hiring Bar 几乎和正职一致。
这篇文章把一位通过 NVIDIA SWE Intern Final 的同学的 5 轮 VO 真题完整还原,从 Recruiter 到 Hiring Manager 逐轮给出真题、解法骨架与考察重点。读完你会知道每一轮该花多少时间在算法 / 项目 / 行为题,以及哪些题目是"看似算法实则系统"的伪装题。
五轮总览:时间轴 + 题型 + 通过率
| 轮次 | 时长 | 题型 | 通过率 |
|---|---|---|---|
| Round 0:Recruiter Screen | 30 min | 行为 + 项目 + Why NVIDIA | 70% |
| Round 1:Tech Phone | 60 min | CUDA 入门 + C++ 中等 | 50% |
| Round 2:Onsite 1 | 60 min | C++ 内存模型 | 60% |
| Round 3:Onsite 2 | 60 min | DL / 数值题 | 60% |
| Round 4:Onsite 3 | 60 min | 系统题 + 简历深挖 | 65% |
| Round 5:Hiring Manager | 45 min | 行为 + 团队匹配 | 80% |
累积通过率:70% × 50% × 60% × 60% × 65% × 80% ≈ 6.5%。1/15 的转化率。
Round 0:Recruiter Screen 真实问答
问题 1(5 分钟):"Walk me through your resume."
回答骨架:用倒序时间轴,3 个项目,每个 1 分钟:
- 最近的研究项目:CUDA 优化或 DL 系统经验
- 一个开源贡献:PyTorch / TensorFlow / cuBLAS
- 一个 hackathon / 课程项目:体现工程交付能力
问题 2(10 分钟):"Tell me about a project you're most proud of."
关键考察点:你能否用Why / What / How / Result 四步把项目讲清楚。
- Why:为什么这个问题值得做
- What:具体范围
- How:技术选型 + tradeoff
- Result:可量化指标(kernel 加速 5x / pass rate 提升 30%)
问题 3(5 分钟):"Why NVIDIA?"
避免空话。具体引用:
- 你用过的 NVIDIA 产品:CUDA / cuDNN / TensorRT / Omniverse
- 你想加入的具体团队:DL Frameworks / Driver / Compiler
- 一个具体的 NVIDIA 论文或博客
Round 1:Tech Phone 真题
真题:实现 GPU-friendly 的 prefix sum (scan)
给一个 float 数组,实现并行前缀和(exclusive scan)。先写 CPU 版,再口头描述 GPU 版。
CPU 版:
def exclusive_scan(arr):
out = [0] * len(arr)
s = 0
for i, x in enumerate(arr):
out[i] = s
s += x
return out
GPU 版口头思路(关键考点):
- upsweep:树形向上 reduce,O(log N) 步
- downsweep:把 root 设为 0,向下传播
- bank conflict 优化:shared memory 加 padding 避免冲突
陷阱:面试官会追问"如果数组超过 1 个 block 怎么办"——答案是分级 scan:先 block 内 scan,每个 block 总和再做一次全局 scan,最后回写。
Round 2:C++ 内存模型真题
真题:实现一个 atomic shared_ptr
不能用
std::shared_ptr<T>自带的std::atomic_*函数,要求自己实现一个支持多线程读写的AtomicSharedPtr。
核心考点:
- 引用计数的内存序
- ABA 问题(多线程同时 swap)
- 销毁时机
简化版骨架:
template <typename T>
class AtomicSharedPtr {
public:
void store(std::shared_ptr<T> p) {
std::atomic_store(&ptr_, p);
}
std::shared_ptr<T> load() const {
return std::atomic_load(&ptr_);
}
private:
std::shared_ptr<T> ptr_;
};
追问:面试官会要求你用 std::atomic<std::shared_ptr<T>>(C++20)替换上面的实现,并讨论与裸指针 + ref count 手写版的性能差异。
Round 3:DL / 数值题真题
真题:实现一个 stable softmax + 反向传播
import math
def softmax_forward(xs):
m = max(xs)
exps = [math.exp(x - m) for x in xs]
s = sum(exps)
return [e / s for e in exps]
def softmax_backward(probs, dy):
n = len(probs)
dx = [0.0] * n
for i in range(n):
for j in range(n):
if i == j:
dx[i] += dy[j] * probs[i] * (1 - probs[i])
else:
dx[i] += dy[j] * (-probs[i] * probs[j])
return dx
面试官追问:
- 反向能否 O(n)?答案:合并 cross-entropy 后是 O(n)
- fp16 下怎么避免 underflow?答案:用 fp32 累加,再 cast 回去
- batch 维度怎么并行?答案:每个 sample 独立计算
Round 4:系统题 + 简历深挖
真题:设计一个 GPU 内存池
要求:
- 支持 alloc / free,分配粒度按 256 bytes
- 多线程安全
- 碎片率低
回答骨架(P-S-T-F 模型:Pool / Strategy / Threading / Fragmentation):
- Pool:每个 size class 一个 free list,size class 按 2 的幂或 slab
- Strategy:alloc 走 first-fit 或 best-fit;free 时 coalesce
- Threading:每个 thread 一个 thread-local cache(类似 tcmalloc),全局池作为 fallback
- Fragmentation:定期做 defrag,或用 buddy system 自然合并
简历深挖:面试官会随机抽你简历上一个项目,问"如果让你重做一遍,会改什么"——这是观察你的 self-reflection 能力。
Round 5:Hiring Manager
行为题套餐
5-6 个行为问题,每个 5 分钟:
- "Tell me about a time you disagreed with your manager."
- "Tell me about a time you failed."
- "How do you prioritize when everything is urgent?"
- "Walk me through a debugging story you're proud of."
- "What kind of team / mentor are you looking for?"
STAR 模板:Situation / Task / Action / Result,每个故事 4 句话内说完。
反向问题
至少准备 3 个:
- "What does success look like for an intern in the first 3 months on your team?"
- "How does the team balance research vs production work?"
- "What's the team's biggest technical challenge right now?"
FAQ
Q1:实习 VO 真的和 full-time 一样难吗? 算法题难度 略低(更多 medium,少 hard),但广度 一致——CUDA / C++ / 系统题都会问。
Q2:没有 CUDA 经验能过 Tech Phone 吗? 能,但需要在 phone 之前至少写过 reduce / scan / matmul 三个 kernel 并理解。否则会被秒挂。
Q3:Onsite 是远程还是 onsite? 绝大多数 Intern Onsite 是远程(Zoom + CoderPad)。如果是 PhD 实习,可能要求到 Santa Clara onsite。
Q4:Hiring Manager 这一轮真的有 80% 通过率吗? 前提是前 4 轮都拿到 lean hire 以上。HM 主要看 team match,技术问题已经在前面验证过了。
Q5:从面试到收到 offer 多久? 平均 4-6 周。最快 2 周 是因为 HM 急招,最慢 8-10 周 是因为 visa / budget 审批。
正在准备 NVIDIA 实习 VO?
如果你想做 CUDA 入门题逐题 walkthrough、Hiring Manager 反向问题打磨,或希望面试日有真人 VO代面 / VO辅助 全程陪跑,可以聊聊看完整的 OA代面 / VO辅助 方案。
联系方式
需要面试真题与定制备战计划?立刻联系微信 Coding0201,获取真题。
Email: [email protected] Telegram: @OAVOProxy