网易游戏
1.C++对象的内存分布?
2.STL的底层机制?
3.OS的原理坑定会问的,以及物理内存和虚拟内存?
4.数据结构肯定会问的?通过题目穿插的方式?
5.常用的算法也会问道?
6网络方面,udp与TCP的区别,三次握手画图,阻塞窗口?
面试过程:
电话面试主要问专业基础知识,包括C++,STL,网络,数据结构,算法题目之类的。
面试官问的问题:
C++让写类的get和set函数,STL问了vector,网络问了三次握手,数据结构问了二叉查找树和hash表,算法问了走台阶(每次走一步或两步,n步的台阶有多少种走法,斐波拉契数列),算法问了深度优先遍历,洗牌程序。
2018网易游戏暑期实习面经
到了找实习的时期,听说网易游戏福利不错所以就投了个简历,最后一路下来也是顺利拿到了实习Offer, 这里分享一下经历。
岗位是游戏研发岗。
投递简历
一般来说到那时候随便上网搜搜就有,我是因为比较喜欢玩游戏,所以就顺手投了个网易游戏。网易游戏分网易互娱与雷火&盘古。互娱做手游,雷火&盘古做端游。
简历中英文都备一份,把大一到现在好看的东西往上填就行了…具体的简历写法网上一大堆我也是随便找了个模板改了改就上传了。
笔试
网易游戏的面试题是在牛客网上在线做的,可以用本地IDE, 只能使用Java or C++, 其他语言不能用。一共3道题,2个半小时,第一第二题都不是很难,第三题我当时没做。 这里提醒一下,Java不知道牛客网那平台怎么实现的,匿名类用不了,我当时第一题是个非常简单的文本处理,用的Java, 1.7的JDE不能用lambda表达式,而且不支持匿名类, 用匿名类会报编译错误,所以请采用保守的方式编程,C++的话感觉要好很多, 我最后第一题就是因为这烂平台死活过不了。不过过了一道第二题就有面试机会了,也是挺意外的。
面试前
收到面试通知后会发个链接,确认网上面试时间。我个人没怎么准备,之前面过其他的已经准备过面经之类的了,所以基本上就是裸上的。
面试
网易游戏只有一面,面完就有结果,这一点我还是面完才知道的… 面试的时候牛客网的平台我听不到面试官的声音,最后采用电话面试,但是打字面试官还是可以看到的, 也方便发一些链接什么的,所以和网面差不多了。
自我介绍
面试官先让自我介绍,以及传一份更新的简历等等。我由于研究生是系统方向,面试官好像不是很感兴趣,一直很关注我本科的项目经历。
项目经历
听完自我介绍后面试官就开始问我各种简历上的项目经历,首先是研究生期间做的虚拟化部分,我做了简单介绍。之后是大四的软件测试和嵌入式开发,大三的LeapMotion和Android App开发, 之前接触过的Kinect开发等等。了解完后就开始问我熟悉的编程语言(我说的Java & Pure C)。
了解到LeapMotion是做的有关一个游戏的内容后就开始问我详细内容,由于里面用到了交互设备和图形学的简单知识,问我了不了解OpenGL。(我说的不了解,但是说了一些概念)。 之后聊到 游戏开发引擎,我只说了我听说过Unity和Unreal.. 然后说的是我不了解,专业是系统方向。
游戏经历
这个我其实挺意外的,面试官问了我好久的游戏经历,基本上先是从国内著名手游开始介绍,面试官问我端游,开始介绍网易代理的暴雪游戏、腾讯、盛大、空中网、久游代理过的游戏等等, 中间面试官问过我是不是只玩日系,我赶紧补充的韩国冒险岛、DNF、跑跑卡丁车,俄罗斯的战舰世界等等.. 还补充过页游弹弹堂。然后大吹自己游戏经历(小学三年级开始玩泡泡堂,一直吹到现在).. 面试官又问我是不是只玩网络游戏,又赶紧吹主机游戏Gravity, 仙境传说奥赛德(这两个是PSV上的游戏,当时舍友买的我玩过), 刚好当时Nier Automation刚出赶紧也是介绍一番。基本上都是说到 xx国xx开发商xx代理商xx平台的什么游戏,自己玩到什么程度等等,可能这个还挺加分的?
语言知识
之后面试官开始问C++问题,由于用的是Pure C, 所以其实这个答的非常糟,一度让我以为自己要被刷。我把纯虚函数和虚函数弄混了,vtable答了上来,普通的继承多态啥的根本不问, 导致我Java的知识根本用不上…问我有没有用过 C++和C交叉编译(没用过)、STL库(我没用过), 图形学的一些知识(不会)我当时真是尴尬万分…不过我说我用Lambda表达式,Java是1.8 的特性,C++里面是C++11的特性,面试官就问我Lambda的用法和好处,然后问我其他C++11的新特性有没有用过(没…)
算法&数据结构
算法题问了一道一串数只出现一次,给定一个输入,让返回所有数对,数对中的两个数之和等于输入。我考虑了1min回答两种思路,第一种快排后两边向中间遍历,大了右边-1,小了左边+1, O(nlogn)的复杂度,然后就是说不排序就和冒泡一样遍历,O(n2)的复杂度。
又问了游戏排行榜的数据结构应该怎么设计,我先说只取前几名的话堆排序,如果不是前几名的话要看查询多还是改动多,然后说目前只能想到BST。然后又聊会说可以先分组,再排序,就和Query 的select一样,最后join就可以了。后来上网上看了下,网上答案是桶排序和红黑树,虽然自己回答的不精确,不过看来思路还是差不多的。
之后要求我写快排,基本上就是说下思路就可以了,没什么难度。
操作系统
可能面试官了解到我是系统方向,所以让我解释一个Hello World程序从C到最终运行起来的过程。 基本上就是先编译,得到Symbol, 链接器Resolve Symbol, Printf属于动态链接库里面的内容 所以涉及到GOT和PLT表,然后操作系统开新的进程,Load二进制文件,将控制流跳到程序入口Main函数执行等等。面试官听到动态链接库,又问了我一些动态链接库的内容和进程的地址空间和 内存的映射(基本上就是回答新进程的地址空间只是映射了Kernel代码,不用创建新的,动态链接库也是映射过来可以执行balabala)
Misc.
其中还问过我一些图形学的知识,不过我不是很了解,所以只是介绍了一下景深、3D里面摄像头balabala,把当时大三LeapMotion项目的内容说了一点点…
提问
最后就是我问问题,我也就问了下网易研发和策划之间的协作和不同,研发是有自己的考核机制,也有与策划的反馈机制,所以可以影响游戏的设计,不过影响不大云云。
第二个问题就是问我这种方向差异比较大的要怎么跟进,面试官也是介绍了那边的培训制度,不用担心云云…
结果
最后也是顺利拿到了实习的offer. 网易游戏的实习待遇还是挺不错的,除去薪资和补贴,有饭补、来回路费和员工宿舍。所以外地的小伙伴还是不用怎么折腾的。
链接:https://www.zhihu.com/question/21851929/answer/27052723
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
第一轮的电话面试是在周一上午十点,可是我一直等到10点40才接到面试官的电话,第一面的面试官是南京大学的学长,人非常nice,没有问什么很难的问题,基本上一开始就是从我做过的战棋游戏的项目入手,因为我负责的主要是GamePlay,所以问的问题也都集中在这一块,比如游戏中的状态机的设计,动画曲线的设计,相机的移动,游戏中如何使用MVC之类的(可以参考我的这篇文章)等等。然后就是我一个人在扯一些Cocos2d-x的事情了,因为我本人对Cocos2d-x还算有点研究,就把Cocos2d-x的一些重要的特性说了下,但是学长好像是做Unity3D的,感觉有点对不上路。算法方面的问题倒是一个也没问,面试结束后,我问了下学长对我的印象如何,学长说各方面都还不错,我就觉得这一轮差不多了。
总之第一轮的电话面试,还算简单,只要你有几个拿得出手的项目就行了,最好是移动游戏,实在不行的话,做过移动App也行吧。当然,熟悉Unity3D或者OpenGL之类的有加分,要是获悉一些后端的东西,比如网易的Pomelo就更好了。
网易游戏二面过了一周之后,网易发来了通知,叫我去杭州参加第二次面试,知道这个消息还是蛮兴奋的,因为网易的本科生录取率还不到5%吧。。。又过了一周,果断买票赶往杭州!
网易的第二次面试实际上是三次面试,就是三个工程师会轮流对你进行面试,然后综合评价之后,再判断是否给你下一轮的机会。对于这次面试我还是做了不少准备的,我不但专门为这次游戏做了一个游戏Demo,用MVC架构做了一个Cocos2d-x的游戏,源码在这,另外还有一个用Unity3D做的应用,MrNerverDie/MiniWeChat-Client · GitHub,而且专门准备了一份自我介绍和一些想问面试官的问题。
去进行面试的一共有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,只好下次再战。。。