游戏客户端面经及经历分享

前言

我的秋招结束了,非常艰难,一度以为自己找不到工作了,感觉经历了一段至暗期。期间牛客的帖子帮助很大,所以秋招结束后也想分享一些面经、建议、经历、和心路历程, 希望能够帮助到一些想加入游戏行业的同学。我投递的几乎都是游戏客户端开发岗位,本文也主要围绕这个岗位进行分享。

个人简介

简单介绍一下背景:25届硕士,毕业于美国某名牌大学,计算机专业,游戏开发方向。学校是挺好的,同届同学很多也早早加入游戏大厂,而同时间我却挣扎了很久。主要是参加了25届的春招的一些补录和26届的秋招,所以今年秋招有一部分被挂掉有可能是由于毕业时间。至于为什么晚了一年找工作,只能说纯是自己太昏头,需要以我为戒。同时如果有类似背景的同学也可以参考我的经历。

简历上两段游戏实习经历,一段国内某中厂UE相关,也就是整个小型demo;一段国外小工作室Unity VR项目,非常小的团队。两段经历的含金量都不高。项目经历包括一个毕业项目和两个课程项目,含金量也很一般。总之,毕业院校还不错但经历非常普通。

游戏客户端面经

首先直入正题,先分享一些八股和面经

八股

C++

  • 多态(静态/动态多态,虚函数,虚表,是什么以及原理)
  • 智能指针
  • 析构函数(为什么是虚函数、内存泄漏、继承下析构顺序)

以上为C++高频,这几条几乎每场必考

  • 内存布局(堆、栈等)
  • 指针和引用的区别
  • 源代码到可执行文件的流程
  • Lamda(是什么、使用时需要注意什么)
  • 继承(内存长什么样,有/无虚函数时又长什么样)
  • 菱形继承(有什么问题、虚继承、内存长什么样)
  • new/malloc区别
  • 构造函数(能不能为virtual、继承下调用顺序)
  • vector和list的区别(局部性、性能、结构)
  • vector扩容机制
  • unordered_map/map(底层结构是什么、哈希冲突怎么解决)
  • 模板(能不能声明定义分开写)
  • static/const用法
  • 常量指针、指针常量

其实可能很多没写全的,可以去看一些更全面的资料,附上一些我看过的:

********** (力扣上的书,要会员,有些东西可能有点老,个人觉得还挺全面,高频也很准)

C/C++ 技术面试基础知识总结

计算机网络

  • TCP/UDP
  • 三次握手
  • 可靠UDP
  • 帧同步/状态同步

考得不多但第一条非常高频

操作系统

  • 进程/线程(协程有时候会一起问)
  • 线程同步(锁、条件变量、原子操作)
  • 死锁(是什么,怎么解决)
  • 进程同步(几乎不会考)

考的不多但第一条比较高频

图形学

  • 渲染管线(最高频)
  • 判断点在三角形内(叉积、重心坐标、面积法)
  • 抗锯齿(各算法、优劣、有什么问题)
  • 透明混合
  • 前向/延迟渲染
  • 阴影(light map、shadow map原理)
  • 碰撞检测优化:BVH/空间划分(八叉树)
  • 光线追踪
  • 欧拉角/四元数(优劣、差别)
  • Early-Z(什么时候会失效)

这个也挺牛的,很多人分享过

【游戏开发面经汇总】- 图形学基础篇

算法

  • Top-K
  • 判断链表是否有环,找到环入口(怎么证明)
  • AStar(流程、是否最优)

口撕是这些比较高频,AStar可能是我简历有相关所以这个问的也多

Unity

  • C#值类型/引用类型
  • AB包(打包注意什么、加载卸载要注意什么、引用计数)
  • 合批(静态/动态/UI)
  • 装箱/拆箱
  • 模板(有什么好处)
  • UGUI的理解(底层/怎么用,很少会问)
  • Collider/Trigger
  • 垃圾回收
  • 协程(IEnumerator/Coroutine)

其实很少会问Unity的八股,Unity项目可能会问,但也非常少

Unity与.NET的垃圾回收(GC)

浅谈Unity ECS

Unity八股总结

UE

  • 反射系统(原理、UTH)
  • UPROPERTY等宏
  • 大地图流式加载

其实也没什么了,引擎相关的知识其实很少问,UE项目有可能会问到反射相关,其余也不深究

《InsideUE4》GamePlay架构

也是很多人分享过的很厉害的作者了,其他文章也值得看。虽然面试可能不会直接问,但是能展现出理解我觉得也是优势

面经

分享一些公司的面试中遇到的还记得的提问和经历

巨人

  • vector中去重(erase会有什么问题、迭代器)
  • 导致游戏卡顿的因素
  • 找最短路径用什么算法、数据结构(BFS、FIFO)
  • 状态同步

点点

一面:遇到的唯一一家纯问Unity,参考上文

  • 装箱/拆箱
  • 模板(避免装箱)
  • C#值类型/引用类型
  • 接口和抽象类的区别
  • trigger和collider
  • drawcall优化的方法
  • 静态/动态合批及条件(动态小物体,不超过300顶点)
  • UI合批,合批条件:不能被打断、不能穿插、要一个图集
  • AB包(如何设计、打包、加载/卸载、引用计数)

对于我没回答好的问题,面试官会给出解答

二面为策划面

  • 项目中的团队合作,如何和不同成员沟通、互动
  • 如果同时有几个策划在和你对接,水平可能参差不齐,你如何沟通、整理需求、实现功能

没给反问环节,面完就感觉寄了

Bilibili

UE在研(一面)

  • UE反射系统
  • C++高频八股(多态、智能指针)
  • 有一堆2D坐标,快速找有哪些落在半径为r的圆范围内
  • skinning原理
  • 哈希冲突
  • 垃圾回收机制
  • UE的字符串
  • UE和Unity的区别
  • 渲染管线
  • 抗锯齿

感觉答挺好,一面挂

库洛

一面纯八股

  • C++高频
  • 栈什么情况会爆
  • 类大小计算(内存对齐)
  • 菱形继承(有什么问题、虚继承、内存布局)
  • Lamda(要注意什么)
  • AStar流程
  • Static
  • TCP/UDP
  • 口撕:链表找环入口(快慢指针、数学证明)

二面问项目/实习,没什么参考价值

  • Unity实习项目的代码结构
  • 项目功能实现

二面挂,有点像KPI面

雷火

一面有两轮

第一轮纯做题

  • new int()和new int的区别
  • 从给出的strcpy代码中找问题
  • 排列组合数学题
  • 继承例子中构造函数和析构函数的调用顺序

第二轮纯八股

  • C++高频
  • placement new
  • 进程通信
  • 大端小端
  • Unity垃圾回收机制
  • 堆排序
  • 判断点是否在三角形内部
  • 死锁,线程同步
  • 光追原理
  • 渲染管线

二面主管面

  • 死锁,线程同步
  • C#值类型/引用类型
  • 进程通信的方式
  • C++移动语义
  • 简历项目
  • 手撕:循环小数找循环节

二面挂,非常看重C++基础和算法,面试官说如果这两方面能对答如流,他们会觉得你很有潜力,如果中等的话,也可以考虑,下等就不好说了。我以为我是中等,但可能别人认为是下等

米哈游(Gameplay方向)

一面纯八股

  • C++高频
  • i++和++i哪个是左值哪个是右值
  • C++四种cast
  • 模板(什么时候知道T的具体类型)
  • 遍历数组和链表哪个更快(局部性、cache命中、cacheline)
  • 哈希表最差情况复杂度,哈希冲突怎么解决
  • 线程同步(自旋锁和互斥锁的区别,底层实现)
  • 空类占多大内存
  • delete是怎么知道要delete多少字节
  • 口撕:无序数组找前k小(堆、快速选择、时/空间复杂度)
  • 有没有了解过设计模式
  • 手撕:单例模式

面试官很友好,面试体验很好,开始时会介绍接下来会问到什么。即使回答不出来,也会做一些引导和提醒,会给你机会对没问到的方面进行补充说明,结果出来的也很快,第二天立马挂。米哈游是出了名的重八股的,会问的比较细,后面什么环节就不知道了。

米哈游(UE5在研)

  • C++高频(vptr、虚表)
  • 菱形继承(内存中长什么样)
  • 射击游戏的一定范围内散射怎么做(就是锥体内找随机偏转方向,找角度)

这次八股问的不深,并且没有手撕。同样第二天立马挂

腾讯(CFMobile)

一面

  • 口撕:找到有环链表的入环口,然后反转从头到环口这一段(就是找环口+反转链表、数学证明)
  • map的底层是什么,复杂度(红黑树)
  • vector扩容
  • GPU skinning
  • CPU和GPU间的通信
  • 类似新战神里演出的无缝切换怎么做的
  • 有没有了解过业界的一些新技术
  • OOP、数据驱动、对UE的一些框架/设计的看法、ECS(主要是简历有相关才问的)

二面

  • Shadowmap原理
  • 狙击开镜怎么做的
  • 2000个顶点的模型,vertex shader和frag shader各执行多少次(vs逐顶点,fs看分辨率)
  • strcmp怎么做的(一个个char对比)有没有更快的方式

其他的都是问了一些简历有关的,面试官对我评价很一般,说是看过我的github,觉得作品完成度不如很多同学,二面挂

腾娱

光环:和平精英组,社招

一面

  • C++高频(多态、智能指针)
  • new和malloc区别
  • 析构时先析构子还是父
  • final
  • 模板声明写头文件定义写cpp里有什么问题
  • TCP/UDP
  • 抗锯齿
  • UE的EQS是什么,和Navmesh怎么搭配用
  • 如果想自己实现EQS的话,要怎么做(框架)
  • 如果希望AI只寻找当前楼层的点,防止找到其他楼层(高低差),怎么做

二面

  • 简历实习项目相关
  • C++17新特性了解过吗
  • C++和C#优缺点,有没有什么C#功能是你想移到C++的,或者反过来
  • 如果你写的AI功能有性能问题,如何排查

三面

  • 项目的难点
  • Navmesh问的比较多
  • 如果想实现可视化从人物当前位置到指定位置的路线,怎么做;如果中间有障碍物能跳过去呢,怎么做

腾娱是腾讯子公司,说难听点就是内包,光环是给光子工作室做事的。不过面试官都是腾讯正式员工,有三场技术面。

灵犀

一面:UE在研SLG

  • ECS是什么,component在内存中的布局
  • TCP三次握手
  • 判断链表是否有环和找入环口
  • 问了一些简历相关

一面挂

腾娱(王者荣耀)

一面

  • ECS component更新顺序
  • ECS怎么debug
  • 找前10最小(Top-K),复杂度
  • 父类构造函数调用父类virtual时,具体调用的是哪个函数(父的还是子类重写的)
  • C#的array和list区别,linkedlist、stack、map
  • 对UGUI的理解
  • 还问了一些简历项目相关

英雄

潘神工作室

一面

  • C++高频(多态、智能指针)
  • 模板原理,性能和虚函数比如何
  • 常量指针、指针常量
  • 堆和栈区别
  • new和malloc区别
  • 用迭代器遍历vector的同时用push_back有什么问题
  • 判断点是否在三角形内部(叉积)
  • C++11特性
  • Lamda是什么,捕获怎么用
  • 手撕:合并区间
  • 多线程中使用share_ptr时,引用计数会怎么更新,会有问题吗
  • 法线贴图(法线怎么存的、为什么一般多为蓝色)

有一些问题可能是面试官突发奇想,没有硬性要求要回答出,总体体验不错

二面

  • 问了一些简历相关
  • 手撕:给一个string找合法DNS(xx.xx.xx.xx,每个xx为0-255)没做好,讲的也不好,花了很长时间
  • 喜欢玩什么游戏

腾娱(游戏AI)

一面电话面试

  • 内存碎片
  • 怎么设计一个内存管理系统避免内存碎片
  • ECS相关

二面

  • C++高频(智能指针)
  • AStar算法
  • using怎么用
  • Image-based lighting
  • 阴影技术
  • placement new
  • 如何计算一个类大小(内存对齐)
  • 一个怪会掉不同稀有度的装备,各有不同概率(0.1白、0.2蓝、0.15橙),如何实现
  • 正态分布如何转换为均匀分布

莉莉丝

  • UE5 GAS
  • GameplayTag怎么用的,有什么好处
  • 用GAS实现一个沉默效果怎么做
  • GameFeature是什么,如果有依赖关系怎么办
  • 项目寻路系统相关
  • SIMD原理

主要是基于简历问的,参考价值不高

  • C++智能指针(为什么要有weak count)一面挂

途游

Cocos2d项目

一面

  • Unity和UE的区别、理解
  • TCP/UDP
  • 三次握手
  • 问了一些项目相关
  • 平常喜欢玩什么游戏、玩什么手游

对我反馈还不错,但没后续了

投递情况

有些可能是因为卡毕业时间直接刷掉,也有可能只是因为我不够优秀,但也有一些公司在我毕业时间不匹配的情况下仍发了笔试面试的,供大家参考。

长时间不理人的也当挂了,我没有一个个官网去复查,有些公司也不更新。以下除非明确注明都为26届秋招:

简历挂:鹰角、搜狐畅游、XVERSE元象、三七互娱、完美世界、朝夕光年、盛趣、游卡、华娱游戏、西山居、散爆网络、紫龙游戏、深蓝互动

笔试挂:沐瞳、Funplus、诗悦(不难,感觉做挺好还是挂)、吉比特、吉比特无界计划(笔试形式为24小时作业,做的挺用心的但依旧挂)、快手、友塔游戏(太难了)、掌趣、波克城市、库洛(感觉这次秋招比春招笔试难很多)、网易互娱

一面挂:灵犀、莉莉丝、诗悦(TA方向,客户端笔试就挂了但居然TA捞了,但其实不太对口)、Bilibili、Garena(发了一面通知,预约了但没发会议链接,联系了hr说当周约满了等之后发通知,然后就不了了之了,追问也不回,最神人的一集)、途游、巨人网络、米哈游、腾娱(王者荣耀)

二面挂:点点互动、腾娱(游戏AI方向,反馈还可以但没消息了)、腾讯(CF手游、春招)、网易雷火(春招)、库洛(春招)

接下来就是搞心态的了,有两家是技术面全过并且hr面也结束,处于等待offer的阶段,最终因为各自的理由把我拒了,基本都是拖了一到两周,甚至还得自己追问,已经被遗忘掉了。在此之前一直以为到了hr面就稳了。

个人建议

基于这段时间的求职经历和自己的学习历程分享一些个人拙见,比较浅显,也许可以帮助到一些新手。

简历

关于我自己的简历,模板上就是用的最简洁的纯黑白,没有什么花里胡哨的格式/分区,也是网上最推荐的。内容上除了基本的教育经历、实习经历、项目经历,还加了专业技能(注明熟练程度)、个人简介。我写简历的经验也不丰富,主要是说下我踩过的一些坑。

首先你的简历是为了你投递的岗位量身定制的,在一页纸内尽可能多填岗位相关的内容。以游戏客户端为例,我之前把游戏项目中做过的事全写进去了,包括找素材、配动画、剪预告片、设计、做playtest等,看起来很全面,但问都不知道能问什么,面试官大概率不会关心。需要写上一些技术相关的条目,包括用到的技术栈、算法等,也算是用来引导面试官的提问方向。并且需要熟知写在简历上的每一个点,不要抱着侥幸心理,觉得可能问不到。

关于编简历,有看过网上说可以编实习或者项目经历的,无中生有是有点难度,但我觉得半真半假是可行的。写在简历的东西不一定非要是你真的上手做过的,可以是想过但没做的功能、其他地方看到过相关解决方案、其他成员做的功能等,只要能讲明白怎么做的、涉及到的技术、原理、细节。毕竟面试官只能从问答中了解你的经历,并不会看你的代码。当然,对于这一块需要深度准备一下,只是草率地了解一下是经不起拷打的。有时间甚至可以打开自己的项目自己拓展一下,或者是针对某个功能做个简单demo,这样被问到了也能回答得更自信。这种方法可能更适合个人项目经历,像涉及到比较大型或成熟项目的实习经历可能就不太好编了,每个人情况都不一样。如果是在快要求职或是正在求职的阶段,可以尝试这个方法。如果是还没到求职阶段,那准备时间还长,提前考虑好求职方向,做好眼前的项目就好。

学习

分享一些简单的学习建议,如果你想要加入游戏行业,有充分的时间准备但不知道从何入手,也许能够有所启发。

首先,C++必学,几乎所有游戏公司的笔试和面试都会问到。而且不能只是简单知道语法怎么用,会写点算法题就行了,背后的一些底层原理、功能特性、STL等都要有理解,可以参考网上的C++八股。如果能上手一些C++项目,尤其涉及内存管理、多线程相关的代码则更好。我没做过,这方面不太懂。其实我觉得面试也很少会去问很深度的C++的应用,但我觉得如果你项目里有这方面的经验应该能算一个亮点。

其次是图形学,即使是面客户端也会经常被问到。如果没学过可以从Games101开始,作业也是C++,顺便也一起练了。这个作者的其他系列我认为也蛮有趣的。如果对图形API和游戏引擎开发感兴趣可以看看Cherno的教程。

项目

其实我也没什么经验,但回顾经历,感觉踩了一些可能看起来很理所当然的坑。我的建议就是提前了解想做的岗位是做什么的,考察什么,然后针对性的做这岗位相关的项目,并且要有深度。以我为例,当时游戏设计课就做了一个技术上没什么含金量的游戏,侧重点全放在怎么让画面好看点、玩法完整一点,但我又不是要做策划。还有毕业项目也是加入了一个全是小白的团队,我这水平还当了个leader,做出来的东西也没什么含金量。反观其他同学,制作组都是大佬,最终项目还的奖了。总之人还是得脱离舒适区,和比自己厉害的人多相处,向他们学习,并且这样也有机会获取更多信息。

求职

校招很重要,当然大家都知道,边上学边求职是肯定的,关注多点官号公众号等可以及时收到消息,开了就投就好了,别像我一样时间都搞不明白。可以做个表格记录一下投递了哪些,方便回顾和总结。

之前和两个从业者交流过,我总结出来他们有一个相同的建议,就是培养出一个自己的长板。一位是我实习的老大,他说可以自己挑一个感兴趣或者岗位需要的点作为长板,围绕着进行准备。当时我就想那就图形学,我挺感兴趣。但是以我为例,这样临时抱佛脚其实并没有什么用,只是单纯看看资料背点八股,没有项目支撑并不能怎么突出这是一个长板,而且客户端岗一般也不会那么深入关心你的图形学经验。

还有一位是腾讯的三面面试官。当时是问了我有没有什么研究的比较深的方面,不一定是游戏的,计算机方面的都行。我的确没什么长板,就扯了个之前了解过的gpu-driven pipeline。然后他又问有没有代码相关的经验,并没有,所以回答得很无力。整个面试让我觉得,他重点关注的是大学期间我做了什么,怎么学的,有没有为这个加入这个相关岗位而学习和钻研,做出了什么成果。总而言之,除了八股、算法的基础,还需要有上述提到的有一定钻研深度的亮点和长处。从我这次这个大厂面试经历就可见一斑了,如果你还有时间的话,可以往这方向努力。以这次面试中问到的一个问题为例,他问我喜欢玩ARPG,那对动作系统或者这方面相关的技术有没有了解,然而我并没有什么了解。总而言之,既然喜欢玩游戏,想要成为从业者,就不能只是作为一个消费者看待游戏,可以按自己的兴趣去对某一领域的技术进行深入,甚至可以挑选个课题,做个项目等等。很可惜这些我都没有实现。顺带一提,感觉腾讯不怎么考太深入的八股文。

结语

最终不包括被鸽掉的,我也就只收到两个offer,并且最后还是选择了那个非游戏行业的offer。这篇文章去年十二月份就写了一大半了,本想入职前就分享出来,结果一直拖到现在我都转正了才写完,而且写到后面感觉也有点草率了。以上都为一些个人拙见,理解尚浅,望多多包涵,也希望能够为各位的求职提供一些帮助和避坑。

#春招##秋招##26届求职交流#
全部评论
25届还能参加26届秋招吗,有几个公司能接受?(纯好奇,求教)
点赞 回复 分享
发布于 今天 19:11 上海

相关推荐

评论
9
30
分享

创作者周榜

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