我们组是C++深度用户,所以我在面试候选人的时候当然是以C++为主。简单说一下我的一些经验,供人参考。
首先要知道即使是我作为面试官也不可能知道全部C++知识,哪怕你是标准委员会的成员也不敢说C++我全都了解了,所以在面试的时候我肯定不会以某一点边角料的知识你知不知道作为考点。这点不知道那我就换一点,总有一些你深入研究过的,我们可以在此基础上展开愉快的讨论。
基础知识就是类,成员函数,虚函数,构造析构,内存管理,标准库等等,至少怎么用你得明白,这些要是不明白那拜拜了。其他的比方说成员函数指针不知道,虚表不知道,或者placement new不知道(感谢@kusugawa指正),那没关系,工作中用到的不多,需要了现学现用呗。
但是我们面试最重要的一个指标是:确保这个人招进来以后"现学"能够"现用"。比方说你这好几块内容不太清楚,但是有一块内容特别清楚,比如范型编程,你用的特别多,有哪些坑碰到过,语言的设计原则,有什么应用,明显不是靠突击强化学习就能掌握的,我就会觉得你确实是深入研究过的,掌握其他的内容也完全没有问题。
再比如你虽然现在知道的不多,但是我稍微提示一下,你就马上明白了,而且基于刚刚获得的知识立刻有了进一步的想法(推论,或者新问题)。比如我一说thunk函数马上能联想到到多继承和this指针调整。我也认为你是一直在思考这方面的问题的,只不过之前的工作经验没有给你解决这些疑问的机会,那这种人我们也会优先考虑。
在C++面试的内容上,我鼓励面试者在平时多了解和积累以下内容:
(补充一下,这个列表只是列举了研究的方向,不是问题本身,已经有人引起误会了,以为我就问这些问题。我们组的面试是会一直问,从易到难,问到你不会为止,如果你某一块了解很深入可以详细介绍那一块,不需要面面俱到。另外如果在另一个大块"problem solving"里有出色的表现也是很加分的,哪怕C++不是特别熟悉。当然这个超出了本回答讨论的范畴)
另外一般用C++比较多的公司往往会接触更多的操作系统特性,比如内存映射,调用栈,同步对象等,连同公司本身的业务都需要有一定的了解。
希望对看到的人有所帮助,也欢迎交流。