UE游戏客户端24秋招总结+面经
个人背景:
BG是本非硕9,科班,本科icpc cu,读研主要是做ue的开发不过和游戏关系不大,暑期在育碧水过一段时间。
先碎碎念一会:
游开今年还是好难,可能只是我比较菜,总共投了40几家游戏公司,本身也是打算allin游戏客户端,所以其他的投了其他c++岗也是基本笔完一面挂。真的感觉大家是在抢offer,基本上公司一开,第一批笔完就招满了一样。从9月初开始陆续投递挣扎了很久,基本每天都在关注牛客和其他求职App。虽然没有拿到心仪的offer,但是受益于牛客各位前辈的面经,并且UE相关的面经确实少的可怜,所以打算分享一下自己快2个月的秋招经历把,希望能为仍然想在寒冬进入游戏开发行业的各位尽一份绵薄之力。
秋招:
以下为个人秋招全部历程,面试共包含:多益、英雄游戏、网易互娱、网易雷火、腾讯光子、诗悦网络、数字天空、MetaApp、吉比特、竞技世界等。由于有一些是在10月末的面试,有些疲惫所以没有去录音,就凭着记忆写一下了。
简历挂的:
4399-c++游戏开发、库洛-UE4游戏客户端、友塔-游戏开发、91Act-unity、呦尔哈-unity、叠纸、梦加网络、柠檬微趣、鹰角、莉莉丝、紫龙、搜狐畅游、阿里灵犀互娱。
笔试挂的(包括没反应的):
剑心互娱、完美世界、funplus、bilibili、盛趣、西山居、快手游戏、米哈游、字节跳动-朝夕光年、Snk中国、游卡、沐瞳。
一面挂的:
冰川网络、诗悦网络、MetaApp、竞技世界、腾讯光子
二面挂的:
英雄游戏、网易互娱、网易雷火、吉比特
英雄游戏(杭州-潘神)
一面(10月11号左右)
- 项目工具链有没有设计一些常用模块
- 在育碧用的什么引擎
- 多态,重写和重载的区别
- 纯虚函数
- override,final关键字
- 虚函数怎么实现,子类和父类是否共用一张虚函数表?
- c++内存区域,虚表应该放在哪个区
- stl常用容器介绍,具体vector,map与unordered_map(其实map的key不可以重复)区别,解释一下冲突
- 再详细介绍一下项目
- UE4网络同步,UE的角色几种权限,说一下属性同步,RPC,以及他们的优劣
- 在服务器生成了一个actor,actor有一个属性x,都开启了网络同步,现在由于客户端性能原因,延迟生成了actor,请问在客户端生成actor前服务器修改了x的值,这个属性可以同步吗?
- 说一下AI行为树的节点
- 怎么实现顿振
- UE4的set global time具体做了什么
- 手撕:3数之和
- 反问: 技术栈(UE+lua) 觉得我还有什么提高的地方(代码能力没到预期)
tps:除了三数之和用了hash表有点浪费空间,其他面的都没什么问题,大概过了一周左右约了二面
二面
- 自我介绍
- 手撕:用栈实现前序遍历
- 两道智力题:15匹马,5个赛道,选前5名。100层楼丢2个鸡蛋,测临界位置。
- 再问了一下项目,结束
tps:真的意难平,全程面试官提不起兴趣,加上智力题没怎么看过,磕磕绊绊在提示下打出来了,最后在反问下面试官说觉得我没怎么用过ue,事实上他也根本没有问。本来对潘神真的很感兴趣,本身技术栈比较对口,项目也感兴趣,去不了也是自己太菜了。
网易互娱
一面
- 自我介绍
- 询问育碧做的项目,主要负责的工作内容,特意询问了是否和渲染有关联
- TCP和UDP的区别,具体报文段有什么区别,这些字段分别是用来干什么的
- 详细说一下拥塞控制的流程
- 请你设计一个文件系统(从TCP和UDP去考虑),详细来说大文件用什么协议,小文件用什么协议,小文件用tcp会有什么问题
- 讲一下map的种类,有什么区别,怎么扩容的,vector扩容会不会有性能问题?
- 链表判环,证明算法可行。
- 找一个数组的三等分点
- 手撕:如何把n个多边形放入一个边长为x的矩形里,求x的最小值。
反问:
有没有提高的地方
技术栈
二面
- 自我介绍
- 项目介绍,谈到了UE4工具链的开发,uasset扩展等,大概就是问工作内容的意义是什么
- 工具链的ui是通过slate还是umg写的,不觉得slate慢吗,为什么慢(谈到UBT,UEC++)
- UE4的语法和c++不一样的地方(谈到GC,反射,Cast)
- UE4 Cast底层实现(谈到禁用RTTI,以及C-style-cast,并且通过反射获取信息)
- UE4 反射的实现(谈到UE宏,以及普通c++实现反射的方式)
- 询问除了UI还有哪一块做的比较多(谈到网络同步)
- 场景题:UE4如何实现属性同步()
- 询问如果一帧内有多次变更怎么优化通信的带宽
- 如果一帧内更新一次的话怎么设计数据结构,提高传输效率
- 设计好的数据结构怎么实现序列化以及反序列化(xml或者json)
- 有多个UI-tag在屏幕上,怎么判断点击了哪一个tag(先不考虑重叠)
- 如果这些tag是动态的呢(谈到了四叉树和kd-tree)
- 问了一下kd-tree的更新是怎么做的
- 如果重叠的话,怎么快速的检测这个tag的重叠情况
反问:
有没有提高的地方
技术栈
tps:问题基本都是根据上一个问题的表达进行深入讨论的,第一个场景题可以说一步错步步错,一直没有get到面试官的用意,导致越来越混乱。
网易雷火
一面
- 对UE工具链的修改做了哪些
- 介绍一下制作的UE4插件的功能,为什么要用插件
- 为什么不放在蓝图里面
- 介绍一下UE4扩展的反射功能在哪些地方应用
- UBT是怎么实现反射的
- c++里怎么让蓝图属性只读
- 大概介绍一下用UBT做了什么
- 介绍一下UE4的智能指针
- UObject的智能指针有没有了解
- Slate怎么Debug
- 有没有了解过蓝图的实现
- 问实习相关的工作
- 自研引擎的设计模式是什么
- 手动合批是怎么做的
- 怎么判断合批是成功的
- 三道408题
- 为什么内存对齐会快
- 大端小端是什么,怎么判断,手写一下
腾讯光子
一面
- 对面向对象和面向过程的理解
- 多态是怎么实现的
- 虚函数是怎么调用的
- 如果一个类继承了基类,那它调用虚函数的流程是什么
- 一个空类的sizeof是多少,有虚函数呢,如果多继承两个父类都有虚函数那么大小是多少
- 菱形继承会有什么问题,怎么解决
- 内存对齐的相关问题
- 能不能讲一讲static和extern的区别
- 讲一讲浅拷贝和深拷贝
- 浅拷贝除了刚刚说到的仅仅是内存拷贝之外,会不会出现什么问题(谈到解决方法是用智能指针)
- 讲讲常用智能指针,weak_ptr是为了解决什么问题,shared_ptr怎么实现引用计数
- 能不能讲一讲单例是怎么实现的,怎么确保用户使用的单例是唯一的
- 说一说c++内存管理
- 讲一讲TCP/UDP的区别
- TCP的头部比UCP多多少
- 滑动窗口是干什么的
- 第k大的数和最长上升子序列
反问:
项目对应技术栈
(谈到项目内涉及到的技术点应该深挖,比如ue4网络传输中的赋值操作怎么实现
,动画中的ik怎么能做出效果等等)
9点是正常上班时间吗
吉比特
一面
- Const用法
- 智能指针
- 实现一下shared_ptr(计数的部分提出疑问)
- 多态体现在哪
- hash冲突怎么解决,有哪种方法
- 介绍一下红黑树
- 实现一下堆排序(数组实现)
- 介绍一下你的代码,复杂度多少
- 进程和线程的区别
- 多线程怎么保证线程的同步
- 三次握手
- tcp怎么进行分包解包(不会)
- 两个沙漏,一个漏完4分钟,另一个7分钟,怎么得到一个连续的9分钟
- 反问:技术栈(unity,cocos,自研引擎) 有无相应的培养制度(一般是分到具体项目中成长)有没有提高的地方
二面
有点忘了,反正手撕题面试官觉得我用字符串模拟位运算这个行为很不满意,最后过几天也是挂了
多益网络
一面
HR面
多益基本上就是速通了,主要还是问加班好好说就行了。
数字天空
一面
主要问的内容很多是Inside UE4相关的,大家可以好好读一读大钊老师的文章,应付UE4的八股我觉得足够了。
这边放上老师博文的链接InsideUE4
二面
二面更多就是具体底层的一些实现探讨了,包括GC的实现,这边更多是自圆其说即可,包括并查集是否可以用在GC当中这些知识点的运用。
HR面+CTO面
到这一步基本上就是聊天了,没啥好说的,主要是本人也确实太疲惫了,没有精力去做记录了。
总结
还有一些中小厂,这边确实也没有去做记录了。基本上八股也能看到,大同小异。我觉得不需要花太多的时间去准备,像我都是在面试和面经中去总结,因为我基本是在谈到项目经历方面给面试官留下了很差的印象,希望各位也引此为戒。好好雕琢自己的项目,至少做到在某一方面可以有话可说。至于实习,个人觉得还真是没有那么重要。目前的去处是大概定下来了,准备春招再去好好试一试了,希望后面投身这个行业的大家可以找到自己满意的工作,respect!
#面经##游戏##游戏客户端开发工程师##24届秋招同行攻略分享##你觉得今年秋招难吗#