NVIDIA Intern 莫名其妙 挂经

avatar 249530
023张教授
5887
16
楼主两周前参加了了nvidia的intern电话面试, 自我感觉是找实习以来面得最开心的面试, 因为全是C++的问题, 我最擅长这方面. 但是刚刚还是收到了拒信, 题目基本全部做出来了的, 所以莫名其妙.面试的时候, 面试官看了我的简历后说, 简单的C++我就不问了...我直接问点难的吧.

大概问了如下C++的问题.

1.描述一下template的作用.
我从generic programming 到 template metaprogramming 到 新标准的例如 varidic template, auto type deduction中template推导的情况都讲了一遍. 面试官说great.

2. 上面说varidic template的时候提到了emplace_back性能优于push_back, 问我为什么.
因为前者是直接call constructor, 后者是call copy constructor.

3. 问了 rvalue reference.
我从TR1 中 rvalue reference的雏形一直讲到了C++11中彻底定型, 包括来龙去脉, 相对于lvalue reference的异同, 优势, 都讲了一边. 面试官继续 perfect.

4. 上面说rvalue reference的时候提到了move 的性能比 copy好, 面试官问一定是所有情况下, move都更好吗?
我说, 不一定, 如果编译器开了优化, 在某些情况下会触发copy elision (RVO/NRVO), 因此不见得return by value 就比 return by reference更差.

5. 问了STL里面用过哪些函数, 当时记得起来的都说了.

6. 问了智能指针, smart_prt和weak_ptr的关系, make_shared比直接call smart_ptr的constructor好再哪些地方.
答了3点. 感觉也基本上是答全了.

7. 快结束的时候问了async, thread之类的库的作用.
大概描述了一下, 没有再深问.

8. 这是唯一一道没听懂过的东西, 他说不是C++特有的, 是general programming相关的: blocking function 和 non-blocking function的区别.
我直接说没听过这俩, 不知道是啥玩意儿...

满以为这是最稳的可以有next step的面试, 结果还是挂了...
求加米安慰, 谢谢.

补充内容 (2019-2-1 09:27):
手贱第6点的shared_prt 打成了 smart_ptr....

补充内容 (2019-2-1 10:41):
还问了type_traits是干嘛的.

补充内容 (2019-2-1 10:44):
关于make_shared的好处, 补充一点:
如果使用同一个raw pointer创建shared_ptr就会出现两个不同的shared_ptr指向同一个raw pointer指向
的资源, 会有重复释放的危险
  • 15
16条回复