本文同时发布至我的个人博客,点击进入我的个人博客阅读。本博客供技术交流与经验分享,可自由转载。转载请在评论区或私信简单通知,感谢!
前言
大二暑假之前做了许多的暑假设想:学习python、了解人工智能和机器学习、学一学 Unity3D shader、补听完上半年落下的新专辑...虽然按照以往的经验这些计划往往都会泡汤,但是单单是这样一想,也可以说是野心勃勃了。在众多设想里面,唯独没有考虑过“实习”这件事,似乎心里把它默认为大三才应该做的事。后来,和一个同校的师姐聊天的时候聊到暑假和实习的事,被怂恿去找实习。于是回到宿舍后闲着没事在实习僧平台上看了几眼,发现了几个还蛮感兴趣的公司和岗位,然后转念一想觉得其实实习也不错,于是便开始深入地物色对比各种实习招聘以及准备简历。
面试前准备
首先是准备简历了,第一次写简历不知道从何下手,在网上找了个 html 版的简历,修修改改就变成了自己的简历了。后来发现用 html 写简历还是略有点不方便,主要是要转化成 pdf 时总会出现 css 样式丢失、链接丢失等等问题。找了许多办法,最后还是 chrome 大法好,找到了 FireShot 这个 chrome 插件,完美转化 html 为 pdf,简历搞定。
接着发现了网易游戏的引擎开发实习生这个岗位,大致看了一下 jd ,大概就是 c++/ lua/ cocos2dx/ u3d 这一类的方向,觉得和自己的技术栈还是较为贴合的,于是就在7月4号将简历投给了网易游戏。很快,隔天 hr 就来联系面试了,二面时间定在7月6号。这个二面的形式其实就相当于笔试+技术面了,做完笔试如果笔试成绩过了的话直接进行技术面。当时由于之前的一段时间都在准备期末考试,完全没有看过技术面试和笔试相关的内容,心想八成是要裸面了,心里开始有点忐忑,大概就是“要是笔试一道题都做不出就尴尬了”那种心态。
忐忑归忐忑,虽然只有一天左右的时间准备,但是还是要尽量准备吧。首先由于是第一次职场面试,在面试礼仪之类还是要多做功课,于是在知乎和掘金刷了一堆面试经验和面试禁忌。后来发现其实对于软件开发行业来说,面试环境都是相对轻松的,所以有些面试细节并不是想象中那么重要,只要表现得比较礼貌,着装整洁基本就没有什么大的问题。
然后再看了一下数据结构课的笔记,大致看了下重要的基础排序查找算法,温习一下 c++ 基本语法。最后在看了十来道“技术面试高频题”,看了一下之前 unity3d 项目的项目总结,然后就去面试了。
笔试
提前15分钟到达网易游戏,下午2点30笔试准时开始。拿到试卷大致扫描了一遍,长吁一口气:三道逻辑题有一道是比较熟悉的,另外两道不熟悉的感觉难度不大,编程题感觉也不是很不友好,至少不会像之前担心的那样一道题也做不出了。逻辑题大都大同小异,基本都是一些智力题,就不多讲了。编程题的话也没有涉及很明确的复杂度要求,而且也是类似实现非递归全排列这样的类型题,不用太担心答不出来的问题。主要是答题时间的把握吧,如果时间充裕的话能想出复杂度更低的方法当然能有所加分的。
技术面
笔试完 HR 小姐姐让我们在公司的一个讨论室稍等十分钟等待笔试结果。由于是第一次笔试,做完之后其实也不知道自己发挥的算好算坏,最大的感觉是手写代码什么的很难受,写得十分潦草。总之忐忑地等了十分钟后,HR 小姐姐过来通知笔试通过了,接着进来了两个面试官,看样子应该是部门的技术负责人,然后面试立刻就开始了。
面试完的感觉是:面试官很 nice,面试内容比想象中丰富。除了自我介绍、项目介绍这些固定环节,还问了四五个技术方面的问题,大多数是关于游戏开发和游戏引擎的问题。另外还有一些关于产品和开发流程之类的问题也有所提及。问题的难度并不大,面试官应该是根据个人情况调整问题的难度,所以不必担心完全答不上的问题。这里列几个印象比较深刻的问题:
屏幕自适应是如何实现的?
一开始问到这个问题我是有点懵的,直接想到的是 UGUI 里Canvas
的自适应渲染,就说只要把Canvas
调整为Screen Space
就可以。果然面试官追问我,怎么通过代码实现?这个时候我才懂了面试官的意思,联系之前 uwp 开发的经验不太确定的回答了,大致就是需要使用游戏引擎提供的 API 或者是调用系统的接口获得设备的屏幕分辨率,根据分辨率进行缩放就可以。回来查了一下在中可以使用UnityEngine
中 Screen
来实现。
一个游戏引擎需要实现哪些功能?
游戏引擎包含以下系统:渲染引擎(即“渲染器”,含二维图像引擎和三维图像引擎)、物理引擎、碰撞检测系统、音效、脚本引擎、电脑动画、人工智能、网络引擎以及场景管理。面试时答得并不是很好,只提到了其中几个点,庆幸的是没有犯常识性和方向性的错误。
如果让你来选择一个游戏引擎,你会考虑那些问题?
非技术的问题应该就是见仁见智了,感觉主要还是在考对游戏引擎的理解。由于并没有真正地参与过大型项目,就只凭着常识水了几点,大概就是:引擎的性能优化、画质的支持、平台兼容性、使用什么语言开发、符不符合当前团队的技术栈、学习成本有多高这几点。其实可以提到的还有很多:例如开发手段是否友好便捷(支持可视化脚本)、第三方插件数量、性能分析工具、是否支持 VR 等等。
另外也有很多回答同样都是很开放的问题:“不给你任何数据,你要怎么判断一款游戏当前的收入?”,“比较一下 unity3D 与 cocos2dx”等等。
面试体会
- 笔试的手写代码其实不用过分的纠结于一些细节,最重要的是把你的想法用语言与注释明确地表达出来,具体的代码实现细节并不会有太大的影响,当然保持最基本的代码风格和整洁度,以及规范的变量命名是必要的。
- 逻辑题的答案,尽量用表格、分点列举的形式有条理的表述你的答案。除了便于面试官理解,也便于自己的纠错和梳理。
- 技术面试,答案明确的话就直接一步到位直接点题,如果自己并没有什么把我,可以先询问一下面试官这个问题是不是自己所理解的那样,然后通过联系一些相关的开发经历去回答,尝试获取和认真把握面试官的引导尤为重要。如果实在完全不懂,就直接告诉面试官自己这方面了解不足,不懂装懂是大忌。
- 平时可以多整理一些各大公司的面试真题,总会有用的。
- 项目经历以及熟悉自己的项目很重要。不一定是要很难、完整性很高的项目,但是项目中的每个技术细节你都要了解,尤其是要能准确地表达出“在这个项目中,你用到(学会)了什么技术?”这个问题。
后记
面试完没过多久人事部的同事就联系我了,说笔试面试的表现都很不错,但是两个月的实习时间太短,问我是否确定只能实习两个月。虽然很希望能在网易游戏工作,但是也确实没办法保证更长的实习时间,所以还是遗憾地没能留住这次宝贵的实习机会~虽然这次没能在网易游戏实习,但是面试获得的经验还是很让我成长的,而且整个面试过程也是很开心的。一是网易游戏的氛围与环境给人的感觉很舒适,和 HR 小姐姐的交流中也能感觉到在这里工作是件比较愉悦的事;二是技术氛围很好,接触的两个面技术的面试官给人的感觉都是技术很成熟,而且没有什么技术架子。面试过程中许多问题都会尽量引导,面试完之后还送了我一程,很 nice。希望以后有机会能在网易游戏工作~