腾讯天美 游戏客户端暑期实习 一面+二面+HR面

本人中下流211本硕,技术栈很浅,基本只会Unity和C#,C++基本不会,算法题更是从来不刷,但是项目经历相对丰富,已经实习了大半年,在此之前也做了若干个人小项目。很意外一面和二面都没问到算法题,都是大段地照着简历让我描述项目,八股问的也不多,最后同时获得了一面二面面试官和HR的肯定(尤其是一面面试官),我感到很庆幸也很荣幸

一面:80min

1. 上来简单寒暄以后看到了我简历中着重写的Unity Gameframework框架,面试官说他也没用过,让我大致介绍,我先总体介绍,再分模块介绍,讲到了UI、本地化、事件、对象池、流程、以及我的一些自定义模块,如读表模块的内部大致实现,以及我对其源代码上进行的扩展。

其中面试官具体问了本地化的配表读表方式,介绍是配表后通过我的自定义读表模块在预加载流程时读表并加入到本地化模块的字典中,也顺便介绍了UI本地化、配表数据本地化、字体与资源本地化的方式。

另外我提到了事件模块中事件类使用对象池进行管理后,面试官询问使用过程中会不会有什么问题?我一时间没反应过来,但是马上意识到我漏说了一点,就是事件类在被对象池回收前需要执行一个Clear方法用于清空事件类内部数据,方便再次复用,面试官给了肯定的回复。

这部分说了共计半小时。

2. 面试官大致问了些Unity中动画组件的内容,我介绍了帧动画系统和状态机系统,以及Spine和自带的2D Animation;面试官接着让我大致介绍骨骼动画的原理,以及如何实现,回答说父物体带动子物体变换位置,借用Unity的本地坐标与世界坐标系统即可实现,或是根骨骼移动时让所有子骨骼都进行同样的变换。面试完了我才想起来忘记说IK和Avatar有关的3D动画项目,明明自己做过。

3. 面试官询问C和C++在内存管理上有何区别?C++的准备了C的我一点都不清楚,于是回答说我只知道C++与C#或Java这些有托管的语言内存管理有何区别。面试官同意后,我把栈、堆、托管堆非托管堆、new和delete、引用和值、析构和IDisposable一股脑全部倒了出去,我没说完但觉得说的有点多了,于是问面试官要不要把GC和装箱拆箱也描述一下,面试官说当然可以,只要是你会的都可以展示出来,于是又巴拉巴拉说了一大通。

到这里我已经很进入状态了,面试官也一直频频点头。后来面试官说虽然他们不用C++,但是问C++是他们的标准流程,所以依然得问。

4. 面试官接着问八股,先问了遍历二维数组怎么更快,回答说和CPU缓存命中有关,解释后面试官又问我知不知道内存对齐,回答了内存对齐的方式和作用。

5. 面试官问了个很宽泛的数据结构问题,当我需要存储一些数据,选择数据结构时会有什么样的考虑?我先分为了线性表和非线性表回答,线性表里逻辑结构和物理结构都能分成若干,非线性表分为树和图,每种树大致介绍,最后补了下如果是在语言中每种构造好的类型的特性。

到这里已经基本一个小时过去了,后面的感觉是面试官额外的一些拓展,我基本都没回答上来,但是面试官表示没什么太大关系。

6. 面试官看到我本科并非计算机,大致询问了我为什么研究生转计算机,以及研究生工作情况。接着连续问了我K近邻算法和傅立叶变换,分别对应我研究生AI相关的内容和本科信息相关的内容,给我问懵了,因为我全忘了,最后勉强答出了这两个算法的用处,面试官安慰说他只是随便一问,回答不上来也无所谓。

7. 面试官询问我会不会图形学,回答说不会,101看了一半,对于图形学的了解仅限于自己摆弄游戏画面设置。然后面试官随口问了我了不了解DLSS,我详细对DLSS的原理进行了介绍,DLSS3和4也相应提了下,但是毕竟还是很表层,感觉面试官只是拿这个和我聊聊天。他接着问了我知不知道MVP矩阵变换,我回答说不知道。

8. 闲聊:看到我很喜欢玩游戏,写游戏评测,问我玩什么类型的游戏;问我有没有玩过三角洲行动(我回答说感觉不如2042,后来有点后怕,还好面试官应该不是三角洲项目组的);接着问我以后更想待在哪个城市,以后留在深圳可不可以。

9. 反问:表现如何,面试官回答说挺好的,做了很多东西,但是大多比较浅,对于图形学等就没什么了解,和我说实习面试和正式工面试一样的流程,得要有一二面+HR面,愿意接下来帮我推荐。

二面:40min

1. 自我介绍

2. 面试官一样对Unity Gameframework好奇,切入的角度是如果让我设计一个游戏框架,你认为哪些功能是重要的,回答了UGF中一些很好的设计。

3. 面试官询问我在单位最近的工作,将一面中提到的本地化模块的构建与使用原封不动复述了一遍,面试官进行了比较详细的追问。

4. 上一环节中提到了事件模块中的工厂模式,面试官询问我还用过什么设计模式,回答说单例、观察者、策略、命令,大致介绍了每种优缺点和应用场合。

5. 面试官询问了我简历上写了掌握的Unity导航系统,追问我知不知道一些寻路算法,我详细描述了一下A*算法。

以上内容占了面试的大部分时间。

6. 面试官问我一般使用什么语言,回答说使用C#,C++方面几乎不写,但是知道理论上的一些内容(八股),面试官就没有接着问,从最后面试官对我的评价来看他可能默认我不会了,这也是个教训,面试官大体问某个内容时不能太谦虚,以为你不会可能就压根不问了,哪怕你稍微会一点。

7. 面试官让我描述线程同步,回答说不会,没学过操作系统和组成原理,但是在数据库中学过锁有关内容,面试官说他了解了,没有继续追问。

8. 面试官让我描述快速排序,我询问是详细描述每步过程还是思路,回答说大体思路就可以,很顺利地回答完了。

9. 面试官让我简要描述TCP和UDP,后追问在射击游戏中用TCP还是UDP好?触及到我知识盲区了,我凭臆断回答TCP更好,因为玩家宁愿接受多一点延迟,也忍受不了丢包,又补充说在异步联机如艾尔登法环的留言系统使用UDP更好。面试完搜了一下才发现完全答错,后来我说给我同事听,他觉得能在非客户端负责的部分说出自己思考并进行补充,哪怕答错了也没太大关系。

10. 闲聊:同样是问了喜欢玩什么游戏,关于我的评测和B站直播内容,问了关于我组校队去打网易风暴英雄比赛的事情,感觉一面二面的面试官都对简历上这些非专业的内容挺感兴趣的,没白写;同样问了关于城市的问题,以后能不能留在深圳。

11. 反问:我也一样问了表现如何,面试官回答说我在游戏开发实践方面准备非常充足,但是由于我本科不是计算机,所以编程语言和专业知识方面稍微有所欠缺(实际上编程语言方面他没问,我个人其实不太觉得我有所欠缺),说会和初试面试官再商量一下,让我等待结果。

中午十一点多面试完,下午一两点就发现已经通过,我猜测是一面面试官对我印象比较好,由于是直接领导,所以比较想要我,二面的技术总监面更像是走个流程。所以说一面非常重要,很多时候二面挂了是一面面试官拿不定主意,而不是单纯因为二面表现不佳。

HR面:

二面通过第二天下午就收到了HR面的邀请,主要就是聊天了;令我印象比较深刻的是我提到最近在玩双影奇境后,HR问我隐藏关打了没有,结果我刚打到倒数第二章开头,压根还没到隐藏关的触发位置玩游戏这方面我一个大学生居然被大厂员工比下去了

我觉得我面试能顺利通过除了运气比较好外,主要靠的就是扎实的项目经验和实践基础,积累了充足的经验以后,哪怕八股算法等锦上添花的内容不太好,也依然有不小的机会。

看了那么久面经,第一次自己写,算是回馈互联网了,写的有点啰嗦也请大家包涵,祝大家都能找到想要的工作
全部评论
大佬有没有手撕算法题啊
点赞 回复 分享
发布于 07-11 13:36 河北
沾沾喜气
点赞 回复 分享
发布于 04-17 11:03 黑龙江
哪个项目知道吗
点赞 回复 分享
发布于 04-15 12:11 广东
接好运
点赞 回复 分享
发布于 04-12 19:16 湖北
uu base是哪里呀?
点赞 回复 分享
发布于 04-05 02:44 天津
沾沾喜气
点赞 回复 分享
发布于 04-01 22:02 湖南
接好运
点赞 回复 分享
发布于 04-01 22:02 湖南
腾讯拒绝offer了,还能被其他部门捞吗?
点赞 回复 分享
发布于 03-31 13:48 天津
大佬有timeline吗,hr面都问了些啥
点赞 回复 分享
发布于 03-30 20:52 广东
老哥有好点的gameframework教程吗
点赞 回复 分享
发布于 03-30 17:07 山东

相关推荐

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项目的服务器在干什么我不懂。原本是想写点毕业一年的总结,结果临时起意突发奇想地想给没入行的朋友们写点感受。行文不成体系,多有碎碎念。错字先发后改。看到这里的同学,如果能帮到你就最好啦
程序员小白条:[赞干货,就是文章可以搞些排版和格式[赞]
点赞 评论 收藏
分享
评论
28
74
分享

创作者周榜

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