成功上岸 Nvidia(US),这里分享一下我这次完整的面试经历,给正在准备英伟达或者类似公司面试的同学一个参考。
面试的第一轮是经理的电话面试。这一轮主要是围绕个人背景和基础能力展开。面试一开始会让我做一个比较完整的自我介绍,包括自己的专业背景、上过的核心课程,以及过往参与过的一些项目经历。随后会进入到 coding 相关的内容,既有对基础编程概念的提问,也会穿插具体的 coding 题目。最后,面试官会介绍他们组里目前正在做的工作方向,同时会问一些行为面试(BQ)相关的问题,整体节奏偏稳,但信息量不小。
第二轮是组内工程师的技术面试,一共三轮,形式是 on-site 风格的电话面试,整体强度明显上来了。这几轮面试以高密度的问答为主,覆盖的知识面比较广。过程中会涉及到容器和 DevOps 相关的知识,也会问到软件开发流程中各个阶段常用的工具。同时,面试官也很关注候选人对设计思想的理解,比如代码设计原则、命名规范等偏工程实践层面的内容。
在做题方面,整体会围绕编码能力展开,包含 C/C++ 语言基础、数据结构与算法,以及一定程度的 system design 设计题。准备过程中,我个人是从两个维度来准备的,一个是技术能力本身,另一个是通用的面试应对技巧。
Nvidia 对 coding 的考察重点主要集中在两个方向。第一个是 System Design,通常会让你设计一个类似 Uber 这样的平台型系统,考察你对整体系统架构、数据结构选择以及扩展性的理解。第二个是编程能力本身,Nvidia 非常看重候选人在 C、C++、Python 等语言上的基础功底,同时也会延伸到一些计算机底层相关的知识点,甚至会结合 Nvidia 自身开发的模型或业务场景来提问。
为了方便大家准备,我这边也整理了一份 Nvidia 常见考题的文档,如果有需要可以直接联系我们获取。
题目要求是:
Write an Efficient C Program to Reverse Bits of a Number
也就是说,实现一个高效的 C 程序,用来反转一个整数的二进制位。
C 语言示例代码
// C code to implement the approach
#include <stdio.h>
// Function to reverse bits of num
unsigned int reverseBits(unsigned int num)
{unsigned int NO_OF_BITS = sizeof(num) * 8;
unsigned int reverse_num = 0;
int i;
for (i = 0; i < NO_OF_BITS; i++)
{if ((num & (1 << i)))
reverse_num |= 1 << ((NO_OF_BITS - 1) - i);
}
return reverse_num;
}
// Driver code
int main()
{
unsigned int x = 2;
printf("%u", reverseBits(x));
getchar();}
面试中允许使用 C / C++ 等不同语言进行作答。Nvidia 在这类题目中并不只看结果是否正确,更关注候选人对位运算原理、循环边界以及代码严谨性的理解。
在具体的 coding 题目中,Nvidia 也会考察一些偏基础但要求实现非常严谨的题目。例如其中一道经典题是:用 C 语言实现一个高效的程序,用来反转一个整数的二进制位。这类题目看起来不复杂,但对位运算、边界处理以及代码严谨性要求都比较高。面试中也支持使用 C/C++ 等不同语言作答,重点不在语言本身,而在思路和实现质量。
整体来看,Nvidia 的面试非常强调基础扎实、对系统和底层原理有真实理解,同时也很看重候选人是否具备良好的工程思维,而不仅仅是刷题能力。