我的面试经历主要是集中在2020年的11月到12月中旬,历经一个半月大大小小的面试也经历了数十场了,下面主要是分享下我面试过程中遇到的问题(只是问题,并没有答案,需要自行google哦)
Unity面试提问
- C# 的一些语法基础,我被问到的有数据结构有哪些。数据结构中,链表和数组的区别,他们在增删改的操作中各有什么优点和缺点或者不同。字典的底层原理是什么。
- 栈和堆的区别是什么
- 值类型和引用类型有什么不同,列举常用的值类型和引用类型。
- struct结构体是值类型还是引用类型。
- 说说你对out和ref 的理解。
- 说说对委托和事件的理解。
- 说下你常用的UGUI组件
- 2DUI和3D要相互交叉时,怎么合理运用层级(例如一个模型前后都有UI),改变层级的方式有哪几种,列举一下
- 写下unity声明周期相关函数,awake和start和onEnable的区别
- 说下unity的物理系统(碰撞体,刚体,触发器)
- 说下你对Animator和Animation的理解
- Unity3D几个特殊的文件路径,他们的读写权限
- UGUI事件的原理
- AssetBundle整个加载流程
- Unity资源加载、卸载流程(包含了Assetbundle,Resources),就是如何做资源管理
- Unity网络通信,HTTP和sockets有什么不同,异步通信,异步阻塞是如何实现
- Unity主线程问题,如何实现多线程
徒手写一个冒泡排序。
Cocos Creator 面试提问
- creator 声明周期函数,onLoad和start的不同
- 对于apply,call和bind的理解
- 对于闭包的理解
- 数组扁平化
- 屏幕适配
- cocos creator如何做资源管理
Cocos creator的比较少面试,所有收集的也比较少。主要问的问题也都是项目中的问题,下面的系统问题会提到
一些算法问题
- 冒泡排序,快速排序(其实我面试了好多家,只有一家问了十大排序算法,而且问的也不多不深)
- 搜索算法(BFS,DFS)
- 在场景中,主角在场景中快速找到哪个怪物离自己最近–场景管理算法(四叉树,八叉树)
- 一个移动的人物,在其前面有个角度一定的扇形,但这个扇形会一直围绕人物移动,如何去在这个扇形区域内生成一点个。
- 背包物体问题,在物品栏了,当你永远大量物品时,如何去生成更新这些物品
系统性提问
这里的问题都是看你个人项目经验,经验积累的问题,通用于所有游戏开发,所有不区分引擎。
- 性能优化,内存优化,GC优化(这些百度一大堆)
- 如何去定位问题,在项目中遇到问题,或者突然的卡顿,怎么去及时的发现
- 如何优化DrawCall,如何优化Label(图文合并)
- DrawCall的理解
- 对象池是消耗CPU还是GPU
- 四元数的理解
- 有用过什么框架或者设计模式,说说你对MVC的理解,你在项目中是如何运用框架的
- 3D渲染流程
- 对于渲染中透明度测试,深度测试、模板测试、混合这几个概念和理解
- 会几个光照模型
- 齐次坐标的意义和原理,主要是为了解决什么问题
- 法线贴图是什么,漫反射
- 阴影的原理是什么
- 物理系统中的碰撞检测原理是什么,如果让你自己去实现碰撞检测,你会怎么做。
最后说点
有时候面试多了,也就麻木了,对于这些普遍性的问题,大多数是能够信手拈来的。但我想说的是,绝大部分面试官还是看你项目经验的,他会抓住你的做过的项目去寻根问底,探讨你在这个功能上是如何做的,这样做的原因是什么,好处是什么,缺点又是什么,这个地方的原理是什么,会一直深入挖掘你的上限。所有我觉得自己做过一些大型项目是绝对好的优势,如果没有大项目经验,可能连面试的机会都没有(我就经历过)。
在你还有精力的时候,在你还想在游戏开发中发展下去的时候,千万不要为了追求安逸去做小游戏,要做多人开发的游戏,大游戏,积累扎实的项目经验。这样你找工作选择的机会也多很多。