2024U3D游戏客户端,社招面经(一)
前言:记录下自己面试的经验,因为自己从其他同学的面经中受益良多,现在也想记录一下
已经面试完了。最终选择了网易,想想这一个月的社招还是很艰辛。
挂了或者拒绝了:完美世界手游。盛趣。MetaApp。吉比特。途游。友塔(二面什么都没问,然后评估了一个星期,给挂了,服)。网易外包(因为职业规划不合面试官心意,服)。大梦龙途。完美世界诛仙1。飞鱼科技。冰川网络。小牛互联。域起网络。微派手游。凉屋游戏(让做一个Gamefeel的游戏demo,实在没时间做了)。
最终offer:网易
面试问题:(不敢标注具体公司,狗头保命)
一:
- C#和C++的类的区别
- C# List添加100个Obj和100 int内存是怎么变化的(一个一个添加),我答错了,可能觉得我不太熟悉C#开始问C++,(刚刚查了下原来C#的List居然是个数组。。虽然也不奇怪C#没有指针)
- 重载和重写的区别,重载是怎么实现的
- 重写是怎么实现的?(当时没听懂面试官说的是什么问题,然后我就往我懂的方向去引导了。我答的是子类继承父类虚函数的实现过程虚函数表和指针的实现,)
- 虚函数表是类的还是对象的
- 用过哪些C++的STL
- Vector底层是怎么实现的
- Vector添加一百次数据内存是怎么变化(一个个添加)
- Map的底层,红黑树的查询和插入的时间复杂程度,Unordermap的底层实现是什么
- List的底层是怎么实现的(发现自己对List完全不了解下来一定好好看看),队列是怎么实现的(我只记得用两个栈可以实现)
- 给了游戏场景,场景里面有6个玩家扮演贪吃蛇进行3v3,场景里面有水果吃了可以边长,蛇碰到队友没有问题,碰到自己的尾巴也没有问题,碰到对手的尾巴的时候会死掉。问怎么把游戏抽象用代码实现(感觉自己答的贼好不知道为什么答的都很对,可能以前做过MMO的全栈开发思想比较符合)
- 我简历上面说我平常做了游戏UI的优化,问我怎么优化的UI
- 为什么要用图集,规定图集的大小,超出了图集大小怎么办
- 了解drawcall吗,什么情况下drawcall会被打断
- 了解渲染吗
- 你在上个RPGMMO项目里面的服务器代码是怎么实现的,你们服务器有多少个进程和线程,进程之间是怎么通信的(我说我不知道,是我我只会用tcp/udp连接通信)
- tcp/udp在哪一层,socket呢
- C++和lua是怎么通信的
- C++和C#的异同(我没总结过,我凭感觉答的,我说最大是GC,C#不用操作和管理指针)
- 了解九宫格吗,原理是怎么样的呢,怎么让一张很小的图变大
- 说下面对对象设计
- 你在项目里面做了哪些UI系统,讲一下
- 你们UI的消息是怎么交互的,讲下你们项目的UI框架
- 了解过资源的更新吗,如果一个很大的图集更新,但是里面只更新了一小张图,更好的更新方式是什么,难道是直接更新一个图集吗,(最后引导下来是先更新一个小图过去维护功能,不打进图集,下个版本的时候再重新打图集)
- 你了解python的GC吗,不了解只了解过Lua的,然后说了一下lua的。
- C#中Ref和out的区别
- 手写快排
- 怎么优化的UI,图集过大怎么办,怎么优化的spine和特效和animition
- 有没有接触过渲染
- 讲下Tcp的过程几次挥手几次握手
二:
1,3D的模型怎么显示到2DUI上面
2,C#的ArryList和List的区别
3,接口和抽象类的区别,你一般什么时候用接口
4,UGUI怎么渲染的UI,UGUI的层级管理(怎么不打断合批),合批流程
5,平常用到了设计模式,观察者模式是什么
6,上个项目的UI框架,怎么管理的UI的切换,和场景的切换
7,Unity和android怎么交互的
8,Unity编辑器的扩展学过吗,学过哪些,新增一个窗口是继承哪个类
9,Lua的类型有哪些,pair和ipair的区别,lua怎么实现的面对对象,__newindex是什么,一般用来干嘛,
10,对象池用过吗,好处和坏处
11,Uinty携程用过吗,和线程的区别,之前项目组哪些地方用携程
12,Unity里面判断两个物体的碰撞条件(我回答的需要挂在哪些组件),碰撞器和触发器的区别
13,用过什么算法,A*怎么实现,最重要的是哪些数据结构,A*是宽还是深搜索,搜索路径是最短还是最优
14,你们项目的动画都是用什么做的,你参与过开发吗
15,用过什么lua交互,xlua
16,问了很多上个项目的内容不具体说明了。
三:
- 你们项目设置系统是怎么做的
- 讲下你做了哪些UI系统
- (我讲了一个我做的UI系统用了很多携程)你用携程做UI系统的时候不会出现同步不及时的问题吗(肯定有,不过没关系,策划能接受)
- 用的UGUI吗?讲下你们的UI框架
- 有对UGUI的源码改动吗,你了解哪些改动。
- 滑动窗口定向滑到一个位置你们是怎么做的
- 你们ui上面会用粒子特效吗(没有)
- 你们的窗口会有窗口动效吗。是怎么做的呢(animition)
- 你们UGUI是怎么优化的吗(开始背书)
- 你们UI这块除了图集本身的材质还会用到其他的材质吗(没有,有我也不知道,我没写过shader)
- UGUI的Mask的原理,为什么Mask会打断合批,怎么实现个不打断合批的Mask
- Lua的metatable你们项目哪些地方用到了
- Lua面向对象继承有遇到过问题吗,是怎么实现的
- Lua里面的全局变量用的多吗,有什么常量会定义到全局的东西里面吗
- 你们C#和lua是怎么交互的
- Lua的内存优化有了解过吗(我说的UI框架会控制GC时机,我只了解对象池和Lua的GC流程)
- 你用UnityProfile检查出过什么问题
- 你们游戏有哪些公共组件
- 讲下你接触到的战斗相关的
- 战斗对技能模型,动效之类的有更深入的了解吗
- 接入过哪些SDK,打包是怎么打的
- 职业规划
四:狠狠吐槽某些外包面试官,上来问我技术的职业规划方向,然后说我的方向没用。讲了一小时道理,转手给你挂了。浪费时间
五:
- C++,释放内存的时候 关键字delete和free有什么区别
- 堆和栈内存有什么区别
- 指针跟引用的区别
- C++多态是怎么是实现的
- 怎么创建一个不能继承的类
- Socket实现的过程是怎么样的
- UDP和TCP的区别是什么
- 多线程怎么通信,竞争资源怎么办,怎么避免产生死锁
- Lua跟C++的绑定知道怎么写吗
- 计算机的图像学
- 有些过什么开发工具之类的吗
六:
- 数据持久化是怎么实现的
- 对象池是怎么实现的
- 图片的淡出怎么实现
- 图片某些情况显示灰色是怎么实现,写shader怎么写
- 说一个你遇到的技术上的问题
- 接入过哪些SDK
- 了解协程吗,看过源码吗,知道延时器怎么写吗
七:
- 问了很多项目组的东西
- C++基础,stl用过哪些,list,vector,map,unodermap
- Map,unodermap的区别
- 删除map的一个元素用什么方法,erase返回的迭代器是指向哪
- Vector扩容的过程
- Map,和unordermap 对有序性没有要求,插入和删除频率很高一般选哪个
- 跟着上面。如果是插入会引起容器大小的剧烈变化一般用哪个
八:
- Lua怎么实现的面对对象
- _newIndex是干嘛的
- 方法调用的点和冒号有什么区别
- Lua的异常捕获是用的什么,堆栈信息是怎么打印
- 闭包的概念,举个例子
- C#中ArryList和List的区别,dictionary是怎么实现的,栈和队列的特点
- 数据结构中链表和数组的插入和删除和访问的复杂度
- 二叉树,平衡二叉树的概念
- Dijstla和A*算法
- 常用的排序算法说下,快排和堆排
- 用过协程和线程吗,(task,thread没用过线程,后来了解到项目要用ECS,下来学下下这方面)
- 你们项目组是怎么管理的资源包,和加载的资源包
- TCP三次握手和四次挥手过程
- TCP的拆包和粘包的问题是什么,怎么解决(听都没听过..)
- 什么是drawcall,什么是合批
- 3d模型勾选的静态合批太多了会有什么问题
- Xlua和C#交互的原理
- C#代码在unity里面编译跑起来的流程
- Mono内存有什么特点因为没听懂,换成问C#创建一个对象是问谁要内存(我回答的堆内存),堆内存是谁管理的(我说是mono虚拟机)。释放一个对象的内存mono会还给操作系统吗(我说不会应该会做压缩操作吧),mono是解释性运行C#的中间代码吗(我猜的是,因为可以做C#热更新)。乱答的不知道对不对
- Unity的GC流程
九:
- 游戏设计个排行榜,100W个玩家,想知道排行榜前一百的玩家是谁。怎么设计我说的用数组加堆排
- 建堆的算法复杂度
- 玩家发生变更怎么办(我说拿出来 然后二分查找到合适的位置)
- 二分查找的算法复杂度
- C#的DIctionary是怎么实现的
- Hash表查询和插入的时间复杂度
- 解决的hash冲突有哪些方法
- 用开放定址法的线性探测法删除一个元素的过程是怎么样的(我说找到之后直接删除,问我直接删除元素至于不会有什么问题吗,一番争执之下我发现自己错了,直接打脸),时间复杂度是怎么样的。
- 图集有尝试做工具检查多引用吗
- Unity怎么会产生GC(我回答的是创建引用过多和协程会产生),创建对象少一点会有GC吗(也会,不过GC频率会少一点吧),创建协程会有GC吗,具体在哪一步,怎么避免(瞎猜的)
- 设计模式了解的多吗(我说我会单例,工厂,代理,观察者,其他也看过,他直接问其他的是哪些说一下,我直接回答不上来,6)
- UGUI看过哪些源码,对UGUI的布局组件看过吗(layout),用的多吗,layoutelement这个组件知道吗
太长了接:https://www.nowcoder.com/share/jump/1711364601771
总结和建议:希望各位同学能呆满三年最好呆满三年。多学一些核心技术,不然面试没有优势,社招面试的时候大家其实差不多,经验和优势点(会一些别人不会的技能会成为竞争的强有力优势)。基础很重要,对以前项目的自己设计的框架或者系统建议画图讲解不然真的很乱,加油!