现在是2019年的10月8日,在十一长假的前夕,最后一天拿到了网易游戏(互娱)的正式offer,虽然腾讯ieg还没面完,网易雷火还没出结果,但我已经休息了国庆七天了。想来这两个月真的很感谢前人们面经的指点,看面经真的很重要,所以决定也将自己的这整个秋招经历写成一份长长的面经,回馈后人。
写在前面的话
我是985计算机本硕,本身很喜欢玩游戏,也想从事游戏方面的工作,硕士期间与图形学略有沾边。
游戏技术岗面试可能的三种形式:
1 基础面:C++/ 算法/ 数据结构/ 计算机网络/ 操作系统 / 设计模式(略懂即可)/ 图形学(游戏研发选修/游戏引擎或者TA必备的)
2 项目面:讲明白自己简历上的项目,我是准备了两个版本(一版是讲给方向不对等的面试官听的通俗易懂版,另一版是讲给懂你方向的面试官的超超超详细版)
3 发散随缘面:混杂着游戏场景题/算法/项目,很随缘的那种。
在7月份前,我就只学过计算机本科的那些课程(C++,算法,数据结构,操作系统,计算机网络。读了两年研究生还给他忘干净了),站在现在的角度看,两个月前的我,只具备项目面的能力,其他实打实的知识储备都太烂了。
我认为整个面试期间最重要的一点是:【选定你的岗位】
我确实是很想做游戏的,但是游戏公司(大的)其实真的很少很少。8月的时候几次笔试失利,让我害怕吊死在游戏公司这一棵树上,因为害怕失业,我到处去投简历,各种叫得上名的有C++岗位的互联网公司投了大大小小几十家。像一个忙的团团转的无头苍蝇,明明心里知道自己想做的只有游戏。很丧但又不得不每天做几场笔试面试,觉得自己是个被公司挑挑拣拣的庸才,觉得只有大佬才有反向挑选的资格。期间心态大起大落,时而崩溃时而痛苦,直到9月中旬,我见到了第一次hr面。是360公司的C++服务端开发,hr看着我的简历,好奇的问我:
HR:“你做过前端,做过算法,为什么要选择服务端开发呢?”
我嘴上答着:“服务端技术栈很深,我希望能多学点东西”
心里却想着:“是啊,你丫的为什么要选择服务端开发呢??为什么呢!秋招失业最多就是丢人吧!?往后几年每天被自己不喜欢的东西折磨,真的要这样吗?确定了就要这么活着吗?”
自此之后,花了一整天时间整理自己。0 offer的我像重生了一般,想明白了秋招不是一场淘汰庸人的“考试”,而是一个选择未来几年做什么的“良机”。想做什么职位,就通过秋招去找,不想做的职位,不要浪费精力去找了。大不了就是秋招找不到春招再战,前提是你在现有的秋招时间里,真的很努力过。
面经全纪录
网易雷火-游戏客户端(失败的第一次)
7月下旬,网易雷火来我学校做了一次研发专场招聘会,当时选中了10余人的简历,在此之前,我精读完了《C++ primer》这本经典入门书(大致是读通了85%的内容),就这样去了现场招聘会。因为我们学校图形学基本没人搞,我呢简历和图形学沾边,就获得了一次30min直面机会。下场当然是非常惨的。
现在看来问的真的都是面经大纲里,我已经背的滚瓜烂熟了的东西,但当时确实一问三不知:
面试官问的:
1 单例模式
2 unordered map 和map底层的数据结构
3 智能指针
4 撕了一题剑指offer的原题代码
气氛一度,非...非常尴尬......
面完觉得自己要失业了,当晚下单了《effective C++》和《剑指offer》两本书,10天各刷完了一遍(我的刷法是边看边把重难点截图粘到onenote里面,第一遍看懂个70%,日后复习时就只在onenote里看重难点)。剑指offer里 60多题,敲了30多道(牛客网有)。这两本也真的是必看的,是冲大厂必备的,没有这个基础之前真是有的大佬的面经都看不懂。
从8.4开始我就陆续迎来了一大波笔试,8.4第一次用牛客网做题,做网易互娱的模拟笔试,因为不熟悉输入输出,做了个0分。o(* ̄︶ ̄*)o,吓得我下一周做了一周的牛客网真题练手感。8.11正式做网易互娱笔试就做了3.4(4.0满分),感觉笔试真的很看手感,当然也有技巧,策略。合理分配时间,合理放弃,做到后面发现还可以猜测试用例。比如做华为的时候,有一题解析字符串,有4种case需要分别处理,其中有一种逻辑很复杂,那就可以直接选择写另外三个case,然后提交,能得70%的分。
网易互娱-游戏客户端
自我介绍
C++:
1. #ifdef 这是什么作用
2. extern关键字 有什么用法,我说是全局变量,再别的文件里用,他问还有没有别的case。我不清楚(应该是extern C)
3. static关键字
4. C++多态,虚函数。。问的挺浅的,我噼里啪啦一通说,还留了一些复杂的比如MI下的虚函数,没被刨根问底。
5. 构造函数可以是虚函数么?为什么
6. 析构函数可以是虚函数么?为什么
7. STL vector底层,push_back()会发生什么,内存管理
8. map底层是什么 红黑树
9. Unordered_map底层是什么?哈希表,叽里呱啦一通背hash防碰撞,还没有背到开放寻址法,我停顿了一下,就问下一个了。。
操作系统
1. 进程线程
2. 进程通信
3. 虚拟地址:叽里呱啦一通说,感觉也没讲很全就下一part了
网络
1. TCP UDP区别
2. TCP三次握手四次挥手
图形学
1. 渲染管线
2. z-buffer是什么
3. 深度测试,如果先渲染了靠后的再渲染了靠前的会怎么样?我觉得大概是会在深度测试里刨掉吧。。不知道对不对但是下一题了。。
4. stencil听说过吗,我说模板测试,这个是了解的水平。是没怎么用过吗?嗯。
5. 光照模型,说了个phong
6. PBR知道吗 我说是基于物理的渲染,主动cue了说看IBL教程的时候看到过,可是他又没刨根问底到让我介绍IBL?
算法
1. 链表检测环
2. Top-k 最大堆 分析了下复杂度,说了下实现堆的细节
3. 一个智力题?AB抛硬币,先抛到正面的人赢,问A赢的概率。结果是1/2+1/8+1/32+…是个阶乘求和。但是怎么求的公式我忘了。。就没算到精确的结果下一题了。
4. 链表倒数第K个节点(一次遍历
5. 赛马,25匹马,5个一组赛跑。最少比几次找到前三快的。。(最后我提出的方案是模仿某一种排序,忘了名字了,5x5的格子,找中位数然后缩小范围。。先比5次,再中位数比1次(缩到了右下角的9个里,然后再可能比一次或者两次,感觉应该是对的
网易互娱一轮面完,被通知说二面等招生组到各大城市以现场面试的形式进行,一等就等到了9.27(一个多月),在此期间,我又补了一些可能会现场手撕的代码,根据别人的面经整理了一个“背题大纲”,戳链接吧太长了,把剑指offer,C++那两本书啃完,捡起来操作系统计算机网络,再结合着这个大纲背清楚,基本可以稳住基础面了。这是我9月初的版本,9月又零零散散的补了很多知识,但是就没整在一起了。这个时候,大纲里的C++已经掌握的特别细了,可以凭他通关任何一个C++岗基础面,大纲里最不精细的是算法部分,算法本来也不能靠背的。操作系统和计网也已经足够面游戏开发和通用C++了(但据我室友反应,大厂服务端,腾讯服务端问到过更细的层面)
虎牙-图形渲染工程师,三轮
第一轮是问的最细的,考图形学
渲染管线
Phong blinn phong
Early-z
知道哪些光栅化算法(这个我真不知道
PBR的基础:微表面,能量守恒
渲染方程
BRDF 镜面反射精确到cook-torrance的三个项都问了 (法线分布,菲涅尔,几何算子
金属和非金属系数上的差别,具体是哪些系数,金属在xx范围内,非金属在xx范围内。
(问的我想哭 其实也是我的问题,高光度,粗糙度,漫反射系数这好像是不同的表示方式的,但是我确实搞的挺混的,瞎猜。。 感觉答得很烂结果竟然过了,可能确实太难了吧
第二轮就一直聊项目,聊自己对这些方向的看法
第三轮面试官打错电话顺序了,我后面赶时间,本来预留了一个小时(半小时一个),结果貌似是给9:30和10:00的打错顺序了,就跟他说了我后面有面试,然后15分钟就聊完了我还以为我凉了结果过了orz
完美世界-游戏引擎,总裁面(SP)
完美世界第一轮我已经记不清了,只存证了这次惊心动魄的总裁面。
1 问了很久项目,挖的很深,会问的很细节,比方说实验中有没有什么不稳定的失败样本
除了项目全问的图形学,从开放式的问题讲起。
2 游戏中会用到哪些图形学技术? 可能涉及到网格模型,纹理贴图,光照phong blinn phong(展开了一下二者区别),阴影shadowmap,动画,光线跟踪,可能还有一些PBR的技术吧
3 你知道哪些用来做光照的方法? 说了下传统模型,和渲染方程,IBL
4 玩不玩游戏?
5 想一个手游里见过的最漂亮的场景,你感觉最耗费性能的场景? (我答了一个桃花林,桃花纷飞(应该是个粒子系统
6 估算一下这个粒子系统的计算量? 此时我心态已经崩了= = 但还是努力磨出了一点思路,粒子规模x计算公式复杂度
7 CPU一秒能算多少?GPU一秒算多少?你这个粒子系统需要算多久?
对不起_(¦3」∠)_我躺平了。。。
答成这样也过了,这就是那种随缘开放面。
盛趣游戏(盛大)-客户端
C++
1. 四种转换 static_cast dynamic_cast
2. 多态虚函数表之类的 (都在正常的背题范围内所以有点记不清了
操作系统
1. 进程线程之类的(也是在正常的背题范围
图形学
1. 你觉得游戏里会用到哪些技术?(这个问题完美世界的总裁面也问了 其实我还没想的很好,我说的是,可能涉及到网格模型,纹理贴图,光照phong blinn phong(展开了一下二者区别),阴影shadowmap,动画,光线跟踪,可能还有一些PBR的技术吧
2. 既然说到了PBR,你再说下对PBR的理解?(我就说了下PBR的概念,基于物理原理及微表面模型的,真实模拟现实世界材质。然后解释了一下微表面模型,因为我有个项目是做光照的,准确的说是PBR里的IBL部分,然后我又说了下渲染方程,BRDF。
撕的题是: X=A*A*A*B*B*B(n个A和n个B) Y=(A+B+2N) 知道X,求Y,感觉就是要把X分解成一堆A和一堆B连乘 没撕全,看完思路就过了
腾讯IEG-游戏客户端(一面)
起手是项目
图形学:
1. 渲染管线
2. 坐标转换
3. 深度测试,在什么阶段,early z, unity里是哪种?
4. shadowmap的原理
5. 光照模型,细说lambert
6. 法线贴图
7. 点积和叉积的区别
8. 矩阵运算(缩放平移旋转
9. 矩阵的逆怎么算
10. 矩阵分解(这我可是真忘了
网络/操作系统:
1. 三次握手,四次挥手
2. TCP拥塞控制
3. 长连接短连接,游戏里用什么连接?什么情况下用短连接
4. 协程是什么
5. 某个和CPU优化相关的东西,两个字儿(我完全没听说过。问他到底是啥我想查下,他说没事这只是个小工具
C++
1. 多态,虚函数
2. 智能指针
3. 内存布局
4. 有没有什么能在main函数前执行的函数
数据结构,算法
1. 链式结构顺序结构的差异
2. 不用第三者交换两个数
3. BFS DFS
个人经历:
第一次写大型点儿的工程是啥时候,接触过哪些语言,分别是什么时候?
最后说同事还会联系我。。。大概是过了吧???
9月底面的IEG,大厂是真的问的好细,如果是9月初的我绝对应付不过来啊。在9月初整理完第一次背题大纲后,我又陆续刷了很多题,面了两轮360,两轮小红书,还有一轮字节跳动,字节跳动的面试体验特别差,面试官忙着改bug,感觉心情不好听到他暴躁敲键盘了orz,粘了一道leetcode hard的题要我在那儿磨,其他的基础全都不问,也没怎么介绍说项目,然后我就挂了。
说来也是缘分,我本次秋招第一场和最后一场都是网易雷火,第二场和倒数第二场都是网易互娱。
最后两场,27号线下的网易互娱,29号线下的网易雷火。其实这时的我,已经把背题大纲搞的滚瓜烂熟,还磨出了一把宝刀,就是我的图形学。我又细细看了learnopengl这个网站上的教程,动手跟着敲了一些光照shader,还看了一本书《3D数学基础:图形与游戏开发》,还整理了几次图形学x计算几何的大纲,看了浅墨的realtime rendering博客,看了清华大学的视频教程(快速跳着看的),把PBR基础也吃透了。图形学此时已经俨然变成了一个能让面试官眼前一亮的优势,凭着这个也一路过关斩将,发现自己可以过引擎岗,可以靠图形学给客户端加分。
结果在26号时看面经,发现网易互娱的二面竟..竟然是有两篇面经都是在撕代码。忐忑但也觉得我既然是偏引擎的客户端,他..?或许不会让我撕那么多逻辑?。。但还是又把之前做过的所有题都翻出来看,怕自己的代码风格畏畏缩缩的,还背了几个基础板子(树的前中后序非递归遍历,BFS DFS,2D走格子动态规划,链表基操)。
网易互娱-游戏客户端(二面+HR)
果然互娱二面一上来就做小测试,一人撕一题,30分钟。我一看,树的中序遍历(非递归),简直是要笑醒了,但是更多的是想哭,功夫不负有心人,还真让我背到了。
HR把我带到酒店一个小房间。
1. 面试官先看了小测试的解法,我背的板子那当然没问题
2. 写一个vector的push_back()。我简直是有点万念俱灰,怕不是也碰上那个疯狂撕代码的面试官了。又冷静了一下,回忆之前自己看的STL源码(我没看那本书,但是抽重点看了别人的笔记),还是写出来了。
3. 这时心态已经佛了,果然第三题还是..一个圆形的技能,它的伤害判定怎么计算(这是碰撞检测)。
4. 好友圈的判定,A和B是朋友,B和C是朋友..找出所有B的朋友
5. 用何种数据结构管理场景中的对象(我答得四叉树,后面又被引导着答成了划分成10x10的格子,应该是对了)
然后又聊了一下对游戏客户端的理解,就下去了。我跟他表示了下说自己其实是偏渲染的但是逻辑也可以,确实一点图形学都没问,提心吊胆的还进入了HR面。我看牛客网说,今年网易互娱是没有HR面的,有HR面的都是小SP。然后就一直很想哭,太刺激了,没用自己最擅长的图形学,撕了那么多代码... (我是真的好怕在别人面前撕代码啊呜呜呜
网易雷火-技术美术TA(两轮)
也是感谢牛客,还有身边人的体验,就是发现网易雷火,他的研发HC已经在7月巡回时满的差不多了,而且特别重视学历,人均浙大,清北很多。我所在的985学校如果进去了那就是吊车尾orz。所以就战术撤退了,这就是我本次秋招唯一报的一家技术美术,因为发现自己引擎岗的通关率特别高,图形学真的被我磨得很深入了,而且我画了十多年的手绘了,知乎说TA需要会美术的程序员。自认为应该是程序员里画画一流的,我还会PS和3dmax。
总之就是带着自己的作品集(手绘/建模)一个人坐火车去了杭州。彼时已经战斗了快两个月,这将是我的收官之战。我是倩女幽魂的老玩家,对于自己玩了很久的游戏的制作工作室,总是会有很多幻想和期待的,想看看他们是怎样的。
当天到场的一共只有6个TA(40来个客户端),上午做基本面试,下午部门来挑人。中午会淘汰掉80-90%的人,无法生存到下午的基本就是陪跑了,生存到下午的希望就比较大。真的很残酷,现场念名字的时候,40来个客户端,只留下了5个还是6个人。我是唯一一个留到下午的TA,但我也只被一个部长捞了,也没有见到HR,牛客上看到有人说HR太忙了所以可能改电话。
技术美术岗问了什么
第一轮:
介绍项目,展示作品集,面我的应该是个TA偏美术的小姐姐,看起来是美术转的。环境很嘈杂,有点紧张。
因为我只会图形学和opengl的shader。
渲染管线
shadowmap
法线贴图
光照模型
PBR(金属/非金属应该用什么参数怎么做)
知道什么图像后处理?
泛光怎么实现?
渲染加速的技巧(我说是看画多少个面,场景管理)
各种剔除
(感觉面试官比较想问我实操一点的东西,但是我确实没咋用过unity和ue4,怪我啊!都怪我平时太懒了!!!unity还写过点逻辑,ue4碰都没碰过。shader什么的完全是在Opengl里用的。
我那些C++ 算法,操作系统计网还真是完全不需要了,在这个岗位上的话。
中午吃了猪场的食堂,感觉味道还真的挺不错,两个主菜,青菜自己夹。主菜都是我以前不怎么喜欢吃的,但是它做的都真的蛮好吃!我原来以为网易食堂连套餐种类也能选的,但其实是定食。
下午部长面(35min)
聊项目,这个部长应该是引擎程序转的TA,所以我们沟通项目时聊的很细节。
问了点开放性的问题,聊的满随缘的,很细碎
全局光照,用SH系数表示,那么一个大场景里怎么管理这些SH系数(我想到的方法是划分成棋盘格,决定某一点的SH系数就像纹理过滤一样在周遭采样。
平时画画用什么软件,我说买pad之前是用手绘板+sai,买pad之后是用的procrete。
反问的时候,我问了他TA究竟 到底 每天都在干什么?他举了几个例子,我感觉TA确实是个高端岗位,是在加速和规范生产线的。怪不得校招招生很少,主要来源是社招。
最后呢,我整理的材料们,这是几个完整一点的,还有一些没写在石墨里的,就算啦。
简历也真的好重要,我好朋友是做云计算的,我简历是CV/图形学/深度学习的,所以前期我找C++后端的时候连简历都过不了,然后她的机会多到不行。我把算法项目删了写本科课设反而能过C++后端的简历,简直是遭人歧视啊算法orz,做算法然后不报算法岗真的遭歧视!!!
感觉秋招从前期被虐的灰头土脸,经历了心态失衡的痛苦,豁然开朗后的醒悟,到后期找到自己的“优势”打起了翻身仗。还是蛮累蛮有意义的,压力让我长胖了快10斤o(╥﹏╥)o。下一任务就是减肥啦