英伟达 SDE-2 面试体验
第 1 轮(技术面试) ——提出了三个编码问题以及一些 C++ 输出问题。
- https://www.geeksforgeeks.org/pairwise-swap-elements-of-a-given-linked-list/ - 我被要求为 k > 2 缩放实现的逻辑。(类似于这个问题:https:// www.geeksforgeeks.org/reverse-a-list-in-groups-of-given-size/)
- https://www.geeksforgeeks.org/kth-largest-element-in-bst-when-modification-to-bst-is-not-allowed/
- https://leetcode.com/problems/keys-and-rooms/
- 基于构造函数和析构函数询问 C++ 输出问题。
第 2 轮(逻辑面试) - 一些数学问题被要求检查逻辑能力。
- 在一组 7 个男孩和 5 个女孩中,将选择四个孩子。找出可以选择的方式的数量,以便至少有一个男孩总是在那里。
- 两个骰子一起滚动。求骰子上出现的数字相差 1 的概率。
- 拼图:https://www.geeksforgeeks.org/puzzle-heads-or-tails/
- 要求得到以下函数的时间复杂度。检查是否可以优化,如果可以,则获取优化函数的时间复杂度。
C++
unsigned int power( unsigned int x, unsigned int n) { if(n == 0) return 1; if(n%2 == 0) return power(x,n/2) * power(x,n/2); else return x * power(x,n/2) * power(x,n/2); }
第三轮(技术面试)——
- 存储在一维数组中的 4D 张量:转换 NCHW -> NHWC
输入:N=1,C=3,H=2,W=2 -> 1 2 3 4 5 6 7 8 9 10 11 12
输出:N=1,H=2,W=2,C=3 -> 1 5 9 2 6 10 3 7 11 4 8 12 - https://www.geeksforgeeks.org/search-an-element-in-a-sorted-and-pivoted-array/
- https://www.geeksforgeeks.org/design-a-stack-that-supports-getmin-in-o1-time-and-o1-extra-space/
- 实现 align_Malloc(int size, int align) 使其接受要分配的字节数和对齐方式。例如:如果 align = 10,并且 malloc函数返回地址 123,则返回 120 或 130。
- 提出了基于结构填充和偏移运算符的问题。
- 谜题:有 128 名选手参加的网球锦标赛。他们之间共享一个传递属性,如果 A 击败 B,B 击败 C,则 A 将击败 C。找出在 128 名中获得最佳和第二好的球员所需的最少比赛数。[主要关注的是获得第二名播放器]
第 4 轮(技术 + 行为面试)
- 我被问及我引以为豪的项目。然后他们问我面临的挑战,我学到了什么等。
- 基于虚函数概念和复制构造函数概念提出了一些 C++ 输出问题。
- https://www.geeksforgeeks.org/swap-two-numbers-without-using-temporary-variable/
- 编写一个多线程 C 代码,其中一个线程打印所有偶数,另一个线程打印所有奇数。输出应始终按顺序排列,即。 0,1,2,3,4……等等。
[ https://gist.github.com/jmurudi/7a2fc49e855cb0b308d19f277c7e12b7 ] – 面试官想检查多线程、互斥锁、条件变量等的概念。
第 5 轮(技术 + 行为面试)
- 有人问了我项目的一些问题——角色和职责、你学到了什么、你所做的任何改进或修改等。
- 互斥量和信号量之间的区别,因为我的一些项目是基于多线程的。
- 如果两个线程试图访问同一个资源,会出现什么问题? -> 我回答了未定义的行为,执行顺序可能会产生不同的结果。要求解释一些例子。
然后我被要求考虑任何其他问题。 -> 可能会发生死锁。 - 死锁的条件,我们如何避免死锁?