腾讯一面GG面经(C++后台)
嗯一面挂,莫名其妙挂。
面试官上来就问觉得C++如何,然后巴拉一堆。
Q:你说你了解C++ 11 ,C++ 11 有哪些特性?
A: 自动类型推导,lambda,function,右值引用,右值移动构造等。
Q:说说右值引用。
A: 短时存在的,可能被销毁的临时变量。
Q:说说右值移动构造。
A:本质是控制权的转交,将临时对象的内存控制权交给新对象,同时移后源指针置为空,应保证不对移后源对象做其它操作,任何操作都是不可控的。
Q:一定会有控制权移交吗?
A:(这时候已经在怀疑面试官不懂右值移动构造了)是的,这也是设计的初衷,为了提升性能。
Q:为什么会有性能提升?
A:因为本质上只是原对象的重新利用,而不是构造函数重新分配内存。
Q:你觉得这个新特性用的多吗?
A:事实上有很多限制,编译器大都不会为你生成移动构造函数(这里有问题,限定条件应该是所有成员可移动且未定义拷贝构造函数)。用的还是挺多的,比如说vector的push_back,新版本参数是右值引用,会根据传入的具体类型(左值构造,右值移动)来操作,此外,新版本的swap函数的标准实现就是三个move,而没有临时对象。
Q:关于异常了解吗?
A:移动赋值/赋值运算符要注意赋值过程中的异常安全,简单来说就是防止自赋值。
Q:那如果析构抛出异常怎么办?
A:没了解过。(这里答案是终止)。
Q:数据库了解吗?
A:了解课本知识。然后没问了
Q:网络协议了解吗?HTTP?
A: HTTP是应用层协议,底层传输层是TCP。(需要说特点吗?面试官答不需要,然后结束)
Q:聊聊研究经历。
A: 这块说了10分钟,讲了研究生阶段做的研究。
总结:大的问题没有,但感觉面试官对C++ 11并没有很深的掌握,挂的也是莫名奇妙,不清楚原因。具体BG不要问啦。
#内推##实习##面经#