网易游戏面试经历总结
Cainiao啦啦啦
电话面试
第一轮的电话面试是在周一上午十点,可是我一直等到10点40才接到面试官的电话,第一面的面试官是南京大学的学长,人非常nice,没有问什么很难的问题,基本上一开始就是从我做过的战棋游戏的项目入手,因为我负责的主要是GamePlay,所以问的问题也都集中在这一块,比如游戏中的状态机的设计,动画曲线的设计,相机的移动,游戏中如何使用MVC之类的(可以参考我的 这篇文章 )等等。然后就是我一个人在扯一些Cocos2d-x的事情了,因为我本人对Cocos2d-x还算有点研究,就把Cocos2d-x的一些重要的特性说了下,但是学长好像是做Unity3D的,感觉有点对不上路。算法方面的问题倒是一个也没问,面试结束后,我问了下学长对我的印象如何,学长说各方面都还不错,我就觉得这一轮差不多了。
总之第一轮的电话面试,还算简单,只要你有几个拿得出手的项目就行了,最好是移动游戏,实在不行的话,做过移动App也行吧。当然,熟悉Unity3D或者OpenGL之类的有加分,要是获悉一些后端的东西,比如网易的Pomelo就更好了。
网易游戏二面
过了一周之后,网易发来了通知,叫我去杭州参加第二次面试,知道这个消息还是蛮兴奋的,因为网易的本科生录取率还不到5%吧。。。又过了一周,果断买票赶往杭州!
网易的第二次面试实际上是三次面试,就是三个工程师会轮流对你进行面试,然后综合评价之后,再判断是否给你下一轮的机会。对于这次面试我还是做了不少准备的,我不但专门为这次游戏做了一个游戏Demo,用MVC架构做了一个Cocos2d-x的游戏, 源码在这 ,而且专门准备了一份自我介绍和一些想问面试官的问题。
去进行面试的一共有6个人,五个是应聘实习生的,一个是春季补招的,也就是说,网易对实习生的招聘和正式员工的校招要求的水平基本一致,这点各位注意一下。一般过了第一面之后,在杭州这一次是6个里面淘汰5个,这6个人基本都拿到BAT或者同级别的的offer了,除了我和我的一个同学(我两之前一起做了那个战棋游戏。。。)是本科生外,其他人基本都是研究生,可见网易的选拔还是比较严格的。
接下来说一说二面都问了些什么问题吧,我一一列举如下,各位可以参考一下(网易的人别打我,我这不算泄露机密吧):
-
如何对手机游戏进行优化,我的回答基本上是以下这样的
- 一般分为内存优化帧数优化,内存优化和运存优化。
- 帧数优化可以考虑对一个message loop中的逻辑运算进行优化,比如可以考虑A*的剪枝。或者进行time slice,具体可以参考我的 这篇文章
-
体积和运行内存优化有以下几点
- 使用工具对资源进行打包,使用TexturePacker等工具把多张资源合成一张图片。
- 采用png压缩工具,在打包图片之前对每张图片进行压缩,降低图片质量。
- 针对不同的平台使用特定的压缩格式的图片
- 如果项目中帧序列占的比较多,那么可以采用降帧的方式来优化。
- 缩放图片,将原来图片缩小为原来的70% ~ %80,再对图像进行放大
- 采用编辑器,将大图转化为拼接,那么就可以利用地图编辑器、动作编辑器等从而减少体积,降低内存的使 用。
-
如何在对游戏的“手感”进行改进:
- 游戏手感一般指的是打击感,那么我就在打击到一个游戏对象时,游戏对象要产生击退的效果,产生该对象被打击的感觉。
- 时间控制要恰当,要让某个对象(比如火球,拳头)打击到另一个游戏对象的时候,才产生击退效果,这就需要进行使用消息机制和回调来解决。
-
如何在数据库中存储一个人的所有装备
- 建立一个人物ID和装备ID的关系表。
- 将人物的所有装备的id序列化为一个JSON字符串存储为人物的一个字段。
- 这两个最大的区别是在修改装备时,第一个只会影响一条记录,当时第二个会影响所有装备,一旦出现bug还让玩家损失所有装备。两者各有利弊,根据使用场景自己权衡。
- C++11的新特性?
- 如何对一个快排进行优化使得它的最坏的时间复杂度达到O(LogN)?
- Lua和Unity中的协程是怎么使用的,都有什么区别?
- 我的游戏Demo中AI的设计思路是怎样的。
- 如果让你设计一个暗黑破坏神的简化版手机游戏,你会从哪里开始设计。
只记录了一些我认为比较有价值的问题,有些问题没有记录,其实除了这些问题之外,我和面试官的许多交流都围绕在我做的游戏Demo上了,讨论了许多关于这个游戏AI,架构和Cocos2d-x相关的问题,我还把自己的游戏代码给面试官看了,很多问题都是边看代码边聊的,还是和第一次一样基本没问算法,大部分时间是在聊项目。所以各位同学们,有个拿得出手的项目还是很重要的。
总而言之,和这几个面试官的聊天过程,还是比较开心的,大部分问题都能答得不错,几个面试官对我的评价也不错,顺利进入下午的三面。
要注意的是二面的时间比较长,每一面的时间都有30分钟以上,还要连着跟三个面试官聊天,前一天一定要休息好,要不然可能撑不住。
网易游戏三面
三面是总监面,到了三面的时候,6个人又被淘汰了几个,然后我第一个被叫过去总监面,三个总监貌似是主策,主美和主程。这一面的压力还是蛮大的,问的问题明显要比二面的时候难了不少,我整理了一下三面中一些比较难的问题,供大家参考一下:
- C++11有那些特性?
- C++11模板中的特化和偏特化分别指什么?都在那些情况下应用?
- C++11模版的高级使用有那些?请举出例子。
- Java Runtime和Lua Runtime有什么区别和相同点?
- 游戏中状态机如何实现REDO,UNDO和MERGE?(用stack即可实现)
- 极大极小算法的原理和在AI中的应用?
- 3D游戏中相机是有那三个元素构成的(Translate,Target和Up Vector),分别起什么作用,如何使用四元数进行相机的变换?
由于本人计算机图形学比较菜,很多相关的问题没法打上来,在第三次面试中真实蛮失败的,最终很可惜,没拿到offer,只好下次再战。。。
网易游戏到底招什么样的应届生?
网易游戏的面试流程整体走下来,感觉还是蛮规范的,网易确实在认真的招人和面试,我的感觉是网易希望招聘的应届生除了有一个 拿得出手的项目 之外(最好是游戏相关的),还要在以下这两个方面 至少熟悉一样 :
- 计算机图形学
- 游戏服务器编程
然后再说一下网易的基本要求,当然了,什么数据结构,操作系统,数据库,编译原理这些的 基本原理和应用 就不细说了,都是本科生基础必会的东西,说些和游戏相关的要求:
- 对C++的模版的高级用法要了解的比较深入。
- 对C++的内存管理的各种解决方案要非常熟悉并亲手实验过。
- 对AI的各种算法要有了解:比如博弈论中的极大极小算法,A*算法的优化等等
- 对C++的装载链接过程和Lua的虚拟机的一些底层实现要有了解
- 对VS或者Xcode这两种IDE需要可以熟练的应用
- 需要的项目经历: 自己开发过 一个简单的游戏引擎或者是做过 比较复杂的 游戏Demo(大概是Kingdom Rush这个级别就可以了吧)
- 对Unity3D或者Cocos2d-x有着丰富的使用经验 (可以没有,有的话加分)
- 对OpenGL或者是DirectX要有了解,做过一些Shader和Renderer (可以没有,有的话加分)
- 了解过网易的后端框架Pomelo(可以没有,有的话加分)
再说一下,网易手游这边目前的一些相关信息,
- 游戏引擎:主要是Unity,有部分Cocos2d-x
- IDE:主要是Xcode
- 后端:主要是Pomelo
- 项目前景:大部分是被砍