3.26网易互娱 暑期实习 游戏研发工程师 一面凉经

3.29早上刷新,已挂。意料之中,看别人的面试比我问的深,而且基本都答上来了,但我问的就很浅,而且很多东西回答的不好,希望各位顺利。

但其实仔细想想确实有点奇怪,我本来是抱着游戏开发客户端去面的,两位在中间也和我说他们不懂客户端的内容,主要是服务端那边的,然后问我服务器同步、热更新之类的问题,难道网易是想招一个既懂服务端又懂客户端的人进来吗?

——————————————————————————————————————

看了一圈,好像又是没有比我更快的,那我先发了?

昨天四点下午躺在按摩椅上的时候突然收到广州的电话,问我今天11点10分能不能面试,那我欣然接受,一个小时。

本人双偏上9,本科不是计算机。内心里其实对游戏一直感兴趣,包括本科期间实际上有玩各种游戏&当过三个月的数值策划,因此秋招只投了四个游戏公司(腾子和米已经感谢信了),网易是目前唯一发面的。我自己有两个项目,都是粥的同人游戏,一个是类似王权的卡牌游戏,另一个是avg(或者也可以理解为galgame)。网易互娱笔试a了2.9道。

面试官是11点进来的,两个面试官,一个看起来很和蔼,另一个有点阴沉没有表情。说如果准备好了那就开始,于是调整了一下设备就开始了。

1.简单介绍一下自己,我介绍了一下我本科的游戏经历,主要是二游和端游(dota2)。他问我玩不玩yys,我说很早之前玩过,但是已经不玩了。
2.让我开视频介绍一下我的avg,于是展示了完整的对话、背包、设置等。然后问了我一些关于项目的人员分配问题,以及存档是在本地还是云端,问我是否以后也要自己开公司做游戏之类的,我回答说我更想去公司系统性学习主要流程,对自己比较有认知。
3.unity主要是C#,问我懂不懂其他语言,我说C和C++,然后就是Python也懂一些。

然后就到了C++环节。
4.问我构造函数能不能是虚函数,我说不能,要先调用构造函数才有虚函数表和虚函数指针,所以没法虚构造函数。
5.问我那析构函数能不能是虚函数,我说能,虚的析构函数可以解决继承的问题,先析构子类的对象和子类本身,再调用父类的析构函数来完全释放。中间我答错了一个地方,他问我覆盖和重写(我答成了覆盖和隐藏了),我说的是子类和父类有一个同名函数,如果覆盖的话,调用子类的该方法就只会执行子类函数,用父类指针也只会执行子类函数。
6.问我懂不懂C++内存相关,很杂,我说能否说的比较细一点,他说没关系,想到什么回答什么。于是我先从类的new/delete和c的malloc/free开始说,然后提到了四种智能指针。
7.四种智能指针的区别?我说auto_ptr(已废弃),unique_ptr(独占某个资源),shared_ptr(共享某个资源),weak_ptr(弱引用计数,用来解决shared_ptr循环引用)。
8.问我shared_ptr要用什么函数创建?这个我记得不太清了(后来查的时候发现我说对了,确实是make_shared),然后问我为什么推荐使用这个函数,而不是直接赋值?我没回答上来,可能是内存分配的问题。

然后就到了操作系统环节。
9.进程间通信一般有哪些方法?我说了六个,管道(有名、无名、流)、共享内存、信号、信号量、消息队列、套接字。这里他问了我一个问题,临界区是共享内存吗?能作为消息传递的方法吗?我说应该行,但是他说不太行,让我线下看看。
10.问我那如果现在两个进程在不同的主机上通信,哪些方法不能用。我凭感觉觉得是只能用套接字,印象中别的都和内核关联。
11.问我知不知道锁,简单介绍一下各种锁。我说有自旋锁、读写锁、mutex、RCU锁之类的。
12.问我自旋锁怎么实现的,我说当进程要访问临界区的时候尝试获取锁,如果获取不了就一直while执行,直到能读取。
13.问我自旋锁的优势和劣势,我说优势是比较简单(这个没答好),劣势是自旋锁会一直等待,因此很吃CPU资源,高并发的时候会占满CPU。他说优势不应该是简单,引导我说是因为自旋锁不会睡眠,可以一直在用户态。
14.场景,假设现在有一个多线程环境,CPU全部占满,所有进程都在自旋等待,我该怎么做。我说第一个是减少并发,另一个是尝试用非自旋的锁来睡眠。面试官说假设你是调的api,锁都在api内部(即必须自旋),我说那我可能不太清楚。

然后就到了手撕环节
15.如何交换二叉树的子节点,我用递归做了一遍。他们问我能不能不用递归来做,并引导我用其他的想法来。我首先用层序+栈的方法做了一遍,但他们说层序也算递归。现在想想,或许他们是想让我用栈来模拟递归(脱裤子放*)?

然后把我的项目又拿出来问。
16.问我是怎么实现动画的,我说是DOTween来实现,简单介绍了一下DOT的原理和实际作用。
17.首先是问我这个项目我遇到过什么问题,怎么找到+怎么解决的。我解释了一下我之前设置上的一个bug,通过帧率来检查出来,然后减少代码逐步排查。他问我有没有用过其他的unity debug工具,我说没有,用得比较多的就是ide的debug和unity的stat工具。
18.另一个面试官开始问,首先问我Unity只能用C#吗?我说不是,可以用TypeScript,然后实际开发可以用Lua进行热更新。但是我只知道原理,自己当前项目比较小,都是直接安装包更新。
19.问我对Monobehavior的了解,我简单介绍了一下生命周期,Awake(脚本实例调用),Start(每次调用实例时调用),Update(0.02s调用一次),FixedUpdate(插值计算帧来调用),LateUpdate(Update执行完毕后最后调用)。
20.问我这个项目有多少资源,每次编译需要多久,我说大概1g不到,编译下来可能两三分钟。他说毕竟这是小项目,但如果是那种商业游戏,比如很大的项目,应该怎么优化。我先说了我朋友那边解决方法就是换好电脑,他们说这确实是个方法但是很大的时候也没辙。(但我说实话这个问题做项目的也答不上来,如果我能一个人做一个商业游戏体量,我应该也不会来投简历吧?不过我查了一下资料,说是可以把代码拆分开来,没动的不用编译。然后拆分成不同场景,每次只加载相应的场景。再加上把常用的稳定的一些代码转换成dll,就不需要每次动态编译了。)
21.问我动态库和静态库的区别,这个没回答上来。后来查了一下,静态库是会被编译到程序内部去的,速度快,但是可能导致体量增加,且静态库修改就要全部重编译。而动态库相反。

反问环节:
1.我问你们对什么样的人才更感兴趣,比如某些公司想要进来的人什么都会。他说他们考察的比较全面(很太极),有些人可能没有项目就考察更多的知识架构,有项目就详细的深挖项目。
2.我问游戏引擎用的unity还是ue,她说公司没有严格要求,主要其实是看项目组。
3.你们是什么项目组的,他们说知道项目组没有意义,因为第一轮面试是跨组面,指不定就算进来了也不是这个组。

总结一下,网易的面试情绪价值是拉满的,面的我很舒服,但是C++相关的东西我确实不太懂,项目一些比较深的实现我可能也回答的不太好。因此我感觉可能是凉了,呜呜。希望各位用得上我的(大概率)凉经。
#牛客创作赏金赛##0offer互助地##网易#
全部评论
我早上十点十分面试的,应该是真·最早的一批了半个小时拷打项目半个小时八股,考查范围横跨计网/操作系统/汇编/C++等各种细节,问得很细很细,很多说不出来,估计也凉了
1 回复 分享
发布于 03-27 13:21 新加坡
接好运
1 回复 分享
发布于 03-26 15:13 湖北
网易真考察全面啊
点赞 回复 分享
发布于 04-14 21:11 上海
同26号面的互娱,也是双9本科非科班,再一看还是同学……世另我
点赞 回复 分享
发布于 04-01 00:20 四川
还真是。互娱好像就喜欢啥都懂的 。。。
点赞 回复 分享
发布于 03-30 16:22 上海
感觉你这答的挺好的呀。
点赞 回复 分享
发布于 03-30 12:17 广东
我也是早上挂的
点赞 回复 分享
发布于 03-29 14:40 山东
我全程就像聊天一样,八股也没怎么问
点赞 回复 分享
发布于 03-29 10:34 重庆
点赞 回复 分享
发布于 03-28 11:31 广东
听你们这么一说,我更凉了
点赞 回复 分享
发布于 03-27 21:14 上海
佬,想问一下,互娱面试是不是网页视频面试,能监控到桌面吗
点赞 回复 分享
发布于 03-27 16:53 浙江
感觉比我昨年问得难
点赞 回复 分享
发布于 03-27 14:42 广东
接好运
点赞 回复 分享
发布于 03-26 21:43 吉林
后天面,等后续
点赞 回复 分享
发布于 03-26 21:32 吉林
什么事业部阿佬
点赞 回复 分享
发布于 03-26 19:44 日本
我在你后面俩小时面试,面试官是真的很和善。你这答的看起来比我好,蹲一手后续
点赞 回复 分享
发布于 03-26 18:28 美国
可以的,只不过网易问得比较深,容错应该比较高。吧
点赞 回复 分享
发布于 03-26 18:08 山东
佬经历相当广泛哇,刚看完oppo面经
点赞 回复 分享
发布于 03-26 15:46 陕西
春招吗
点赞 回复 分享
发布于 03-26 14:05 四川

相关推荐

07-14 17:04
已编辑
门头沟学院 C++
先说结论:目前不建议入行。除非你真的参与过工业界游戏开发管线,并且仍觉得自己非常合适,否则不建议任何人凭着对游戏的热爱和满腔热血杀进这个行业,起码现在不建议。给大家讲讲目前业界的状况:去年我自己和几位朋友加一起经历了6个项目,目前的情况是:一个上线但苟活,一个上线但缩编,一个正常在研,一个重做,两个砍掉。情况没有两三年前那么严峻(那时候5个项目砍4个),但也远远谈不上什么前途。十年前游戏行业最大的困境在于人才缺乏,五年前最大的困境在于版号稀缺,现在最大的困境在于缺少方向。以前是没有资源做,现在是不知道做什么。援引某高管的观点:过去十年,手游发展的动力,来自于将主机pc平台的佳作搬上手机,而现在这种动能已经十分微弱。(下面开始是个人观点)由于缺乏确定的方向和可预见的回报,现在业界的打法仍然十分保守,以防御为主,扩张和立项都十分谨慎,hc极其有限。另一方面,近年来得益于games系列等优秀课程的出现,以及ue5的发布,游戏界确确实实多了很多人才。尽管靠谱的ue程序依然难招,但也不至于跟以前一样会点cpp就要。以上因素综合导致了新人入行竞争加剧的现象。至于单机市场,尽管近年来国内涌现出一批以黑猴为代表的优秀作品,但国单市场盘子很小,roi很低。虽然玩家群体目前充满乐对国单市场的期望,但资方大多仍保持克制谨慎的现象,大厂项目很少,且人员要求比较高。手游尚且可以容忍粗制滥造,愿给新人一些成长的机会,单机基本立项之初就是冲着高品质去的,再加上项目组面对资方预期回报数据的巨大压力,更倾向于把有限的hc用在高熟练高产出的业内老兵身上。除开大厂,独立游戏工作室倒是愿意给新人机会,不过大多数独游工作室都不太稳定(虽说大厂也没好到哪去,但你可以活水不是),而且技术栈比较浅,人员质量参差不齐,出了问题都不知道问谁(我组有句俗语:我要去引擎组搬救兵了),从成长的角度来说不建议职业初期就去做独游。OK,以上是大环境部分,下面我们讲一讲个人部分。先声明:本人是做客户端的,如果你想了解服务器的知识,可以直接翻到最下面先说引擎吧,unity从数量上看仍然是绝对主力,但ue的反攻势不可挡,现在有点实力的厂都在纷纷开设ue项目,so如果你是大一大二的同学,建议学好cpp,以ue为主力引擎。如果你无法学会cpp,建议离开游戏行业,因为语言关只是第一关,游戏的技术栈深度太恐怖了,cpp无法学明白的话,就算换unity估计也只能在ui仔的岗位上空蹉跎几年。再说说学历,鄙人近年来没亲眼见过公司里新进过非985 211的正编,但听说过有这样的人,不过主要集中在非技术岗,so我不是很了解。实际上211都很少,985本硕是主力,海外名校有很多。不过你能掌握好cpp的话,学历估计也能到这个标准吧,so个人并不觉得学历会卡人再说说方向。客户端的方向主要分渲染,物理,动画,ai,gameplay五大方向。渲染是负责绘制游戏画面的,主要分图程和ta,图程偏向于挖掘更多性能,ta偏向于做出更好的视觉效果,技术上前者更深,后者要懂美术。不过图形学最大的问题其实在于严重的人才过剩。顶刊顶会的top2佬也捞不到渲染的工作做,只能天天写lua搓ui,一个项目组往往有一两个人图程就够了。至于其他人,猛学了两年图形学,到头来也只能证明你很聪明,仅此而已。物理主要是修bug和搞性能。学物理的没有学渲染的那么多,但用物理的项目就更少了。绝大多数游戏只要用引擎提供的基本功能就好了,不会需要用到什么复杂的软体,绳索模拟等。就算真要,一般也只会寻求视觉欺诈的解决方案,找不到就砍需求,而不是找个物理程序去给你改底层物理引擎。实际上物理程序一般不是做物理需求,而是处理因为组内同事搞不来物理引擎导致的物理bug。另一方面,游戏物理会教你怎么做高性能计算,因此物理出身的程序往往在做性能优化,场景管理,加载管理等看起来跟物理没关系的事。动画顾名思义,研究角色动画的。底层要改的很少,工作中更多的是用动画编辑器,配合美术干纯体力活。ue那动画蓝图你就连去吧,一连一个不吱声。动画的技术比较古老且少,绝大部分游戏用的还是传统状态机,少部分会用状态树,motion match(手游用不上,因为太吃性能了)等技术。算是这5个方向里水最浅的一个。ai现在分两种,一种是做传统游戏ai,一种是通过ai辅助游戏生产。前者目前比较新的实用技术是通过机器学习给ai下行动指令,多见于对抗性较强的竞技游戏(我做过,我的评价是版本管理学的灾难,pm的噩梦)。后者业内还在研究,目前处于一个各家都说自己做的ai好使,但大家看了还是更愿意发挥工匠精神,手工研制游戏的阶段gameplay是搞玩法的。以上4个方向都可以说是纯技术,但决定游戏做成啥样的还得是做gameplay的(其实是策划,gameplay只是负责伺候策划的)。这很杂,水很深。市面上主要是3c和战斗系统比较缺人。吃经验,吃在某一游戏类型上的钻研程度。网络同步也是gameplay在做当然还有做工具的,做打包构建的,做ui的等,不一一列举,但你确定你入行就是为了做这个吗关于方向的选择,我的答案是新人没有选择,全都要学,不求学得多深,只求学个皮毛,看看这个领域主要在干嘛,以及自己适不适合。全入门之后再决定自己要研究什么也不迟不过目前市场上比较缺乏的,主要是做网络的,做战斗的,做动画的,做3c的,做性能的(刚入行搞不了这个),可见都集中在gameplay方向。这是因为其他方向引擎已经把工具做的很好了,项目组只要做gameplay的把这些工具拿来拼一拼就能拼出个游戏了再说说语言,目前手游界主要是cpp/cs+lua的组合。lua总归是要学的,这语言挺简单的,语法学完再看看虚拟机原理,关键源码(lua虚拟机是用c写的,而且开源)读一读,基本都能熟练掌握。网上学习资料也有很多关于项目,其实只要不是ui点点点,走路模拟器,跑跑跳跳吃金币这种,都行。关键要有技术闪光点。打个比方,都是跑跑跳跳吃金币,有的人只会给金币加个碰撞体,做个输入绑定,播个动画就完事,这种属于培训班2天速成的。有的人能做循环地图,随机路径金币生成,角色动画没有滑步跳变,位移方式和角色姿态多样,这种就是有技术闪光点的关于面试,面试看的所谓技术,是你对引擎工具的了解程度,毕竟刚入行的做游戏就是拿工具拼好游嘛。但是能拼好游的多了去了,培训班速成的一大堆,so只能看你知不知道工具上各个螺丝钉是干啥的,或者看你能不能把工具抡得虎虎生风举个栗子:面试官问你怎么做枪械开火的命中检测。你说我不知道,下个公司见。你说射线检测,或者给子弹加个碰撞体,下等马。你说考虑到对远距离目标的弹道下坠问题,需要分段射线检测,中等马。你说对低速子弹,比如手雷,箭矢,给子弹加碰撞体,同时考虑到隧穿问题,风速问题等,上里马。你说我还知道射线/碰撞检测的原理,我还知道如何处理网络延迟,千里马。最后聊聊服务器,ue项目的服务器主要是在做非战斗的,系统侧的业务。比如什么改改勋章啊,发发成就啊,送送奖励啊这种。战斗的部分是由客户端做的(因为ds和客户端代码是一体的)。有项目(这种一般是陈年老项目,或是有大佬为了晋级想重复造轮子)不用ds的,会让服务器参与到战斗里去,这种比较少。unity项目的服务器在干什么我不懂。原本是想写点毕业一年的总结,结果临时起意突发奇想地想给没入行的朋友们写点感受。行文不成体系,多有碎碎念。错字先发后改。看到这里的同学,如果能帮到你就最好啦
程序员小白条:[赞干货,就是文章可以搞些排版和格式[赞]
点赞 评论 收藏
分享
评论
37
96
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务