刚刚面完网易的初面,被网易的面试官按在地上摩擦。先说说感受再放面试题把,就我已经工作三年了,虽然是最近一年才开始发粪涂墙。但是本来面试之前是觉得C++八股文应该准备的挺到位的。但是面试官还是会往下扣,真正一扣还是会被扣出来,真正理解和背,还是有差别的。
好的,话不多说,下面放面经:
-
介绍自己,说说过往的经历,以及你觉得有意思的,有困难的地方。
这部分我还是有点东西说的,之前有一个比较有成就的地方,就是把一个特别卡的UI界面,给优化到与平常UI一样。然后面试官围绕着我是怎么进行优化的扣了半天。好在这是我真正的经历,我都能掰扯出来。只是面试官对我提供的数据不是很相信,我表示我很委屈。
-
开发的时候遇到过野指针吗?你是怎么处理的?
这个问题一看就是让说智能指针,很庆幸自己准备过了,说了自己准备过的shared_ptr,unique_ptr, weak_ptr。但是面试官听完之后会接着向下挖掘,在我讲完weak_ptr之后,问我只用weak_ptr行不行?其实面试官想让我说,weak_ptr可以判断持有指针是否有效。这个当时脑子瓦特了没有答出来。
-
然后又问了问我的项目,因为我之前做过demo,就是我发视频的自走棋,还有灰魂。因为自走棋是联机的,所以想问我虚幻的网络框架,以及灰魂里的技能是怎么做的。
这个捶胸顿足啊,很明显,前者是想让我讲虚幻的网络框架,后者是想让我讲虚幻GAS。目前我的水平只是会用这两个东西而已,真让我讲底层的东西,我真讲不出来。我已经在学了,只是没有成果。这一部分很快略过了。
-
开始问C++,Vector是如何实现的。
这个问题在面试前没有复习过,只能凭老本掰扯,我讲了讲底层是数组,以及大概扩容的策略,但是显然很多细节我不能咬的很死。面试官也听得兴致阑珊。
-
vector 的 push_back 和 emplace_back 有什么区别?
这个我只答上来,emplace会直接在插入位置构造,减少开销。面试官直接追问,如果也是传入一个对象呢?直接问住,刚搜了一下,是在传入对象实现了移动构造函数的时候会有区别。
-
讲讲你对右值引用的理解吧。
应该是和上面的vector一个系列的,想由emplace引出来移动语义,可惜我不太争气。不过右值引用还是准备过的,讲了讲。
-
问你一个比较难的问题吧,说说虚函数的性能开销?
直接懵逼,虚函数的性能开销……我就胡乱说了说,可能也是驴唇不对马嘴吧,面试官没有再追问。
-
C++的部分结束了,接下来问我图形学。上来先问一个比较常见的问题,动态阴影是怎么渲染的?
面试官觉得常见,然鹅我完全不知道。
-
接下来问,如果画一个三角形?
我恨呐,图形学我只学到画直线,然后我给面试官讲了讲,面试官没做评价。
-
虚幻的渲染管线有了解吗?
-
在虚幻里把一个立方体放到世界中都做了哪些操作?
-
虚幻向世界加载蓝图的时候,要做什么特殊操作吗?
要加一个“_C”
-
为什么?
-
反问环节
面试至此结束。有一点小感悟分享一下吧。
八股文环节面试官都会向下挖掘,挖掘了之后觉得我还是用的比较少。确实如此,这些八股文我都是自己学的,平时应用的场景少到几乎没有,真正用过理解和单纯的背书还是有很大的区别的。这一整个面试,我唯一底气十足的阶段就是掰扯那段界面优化,那是我真正做过的,我从头到尾全都了解的东西。
我这个是工作了三年的社招面经,不知道面试官是不是提高了门槛,给想跳槽的大兄弟们分享一下吧。
最后对在校的还是想跳槽的大兄弟们说,我这一场面试基本上C++的部分都是C++11 的东西,这些东西,虽然我们能用到的场景确实不太常见,但是如果有,千万别错过了,只会背口诀的和真正练过武功的还是很好分辨的。而且虽然少,但是面试时造的火箭真的有机会用!

2022.12.2 更新
二面面经

二面一直都在围绕着我过往的经历和项目进行挖掘,可能对于别人参考性不是那么大,大家随便看看把:
-
直接跳过了自我介绍环节,上来直接说在过往的项目中有什么成果,对项目做出了那些提升?
唉,属实是没有什么能拿的出手的。又拿出了一面说的优化了UI性能,面试官示意我接着说,我就又说了点其他的大个的功能,以及之前写的一些小工具链,android logcat。面试官示意我接着说,然鹅已经没有了。比较尴尬。
-
有了解过Tracy是怎么监控CPU时间的吗?
这个问题是承接着UI优化来的,因为提到数据了,问我是怎么得到的,我说Tracy,这一下应该是撞枪口了,面试官显然是知道Tracy并且很懂。我确实是看过我们项目是怎么把函数暴露给Tracy的,但是Tracy的内部没有研究过,就胡乱说了说。
-
你了解虚幻的哪些模块呢?
经典尴尬,一直在搬砖,虚幻是将将会用,让我掰扯模块是真掰不出来呀。支吾了一阵,面试官说没有也没关系。过。
-
你刚刚说你搭了一个礼包的框架,这里面有什么设计模式吗?
妈的,想哭。我就是实现了傻逼策划的傻逼需求(希望我的策划看不到,看到了我就不承认),哪有什么具体的设计模式呀。不过我灵机一动,因为我们整个项目是基于观察者模式的,然后我基于我们项目给面试官讲观察者模式,也不知道讲得对不对,反正不明确的地方就项目是什么样,我就讲什么样。
-
看来你写lua写的比较多,那你知道lua里面能继承吗?
终于问到自己会的了,结合元表给面试官讲了一下,lua怎么实现继承。
-
lua里面require都做了哪些事情?
讲了loaded表,庆幸自己平时有积累。
-
开始问demo,问我的demo里都是基于虚幻已有的功能写的吗,有没有自己的扩展?
这一部分问了几个问题,我的移动啊,碰撞啊, 都是怎么做的。那些都是我学习虚幻时做的demo,属实是说不出来啥,都是虚幻的能力,我自己没什么扩展,这里合并成一个问题,不展开了。
-
如果卡顿的话,有可能碰撞体上一帧的位置,和这一帧的位置已经有很大的差距了(比如发射一颗子弹),你要怎么优化这个误差?
不知道标准答案,但是摁着头皮扯。
-
想要检测碰撞的话,归根结底就是线段,那么空间内两条线段,注意是线段,你要怎么判断他们是否相交?
嗯扯。
-
动态阴影和烘焙阴影叠加会发生什么?会更黑一点吗?
扯就完事了。
-
再问你个C++吧,如果我把一个指向A类的指针强转为B类指针(AB类没有继承关系),会发生什么?
终于问八股文了,我泪流满面,但是这个问法让我很捉鸡。讲了一下,AB没有关系,会调用reinterpret_cast,会产生未定义行为。
-
那么如果我按照int类型进行访问呢?
面试官解释说,因为所有的地址都可以看成是int型,那么我强转之后,一定能访问成功吗?不知道答案,我就扯了扯,最后说,实际开发中,我会尽量避免这种不安全的行为。
-
反问环节
感觉网易的二面没有太明确的问题范围,完全是根据个人定制。都是围绕着你的简历来问,不断的去挖掘你的上限,也侧面反映了网易面试官的技术水平深不可测,哪怕是八股文,都能问点花样出来,本来问到类型转换我还挺开心,结果自己答的竟然似懂非懂。
最后,祝我好运,也祝看我面经的大兄弟们好运!