【2023暑期实习】字节朝夕|游戏开发客户端(更新4.6)
23暑期实习游戏开发岗1022616984
字节朝夕客户端二面
感觉难度和深度更大了orz
大概40min,有两个面试官(看见两个面试官之后疯狂紧张
自我介绍,如果一面有一些没有回答上来的问题也可以再和我们说一下 【只进行了自我介绍
数据结构和算法的话平时有没有刷过题或者有没有上过相关的课程? 【both
面试官A
-
先不做coding了,简单问一些问题,一个无序数组,可能有重复,给你另外一个值,要你找出两个 数组中的元素,说一下思路和算法。 【我第一遍把两个 数组中的元素理解成了两个数组 中的元素,然后让面试官又描述了一遍题面(虽然我知道应该是两数之和,但是我以为是什么变种 【然后想都没想说了先排序然后双指针
- 追问: 如果要给出这两个数原始数组的索引怎么办?
- 【应该就做不成了(想着不如说另一种解法,就说了应该做不成了
- 引导:做不成吗?要不你再想想?
- 【带着索引一起排序
- 追问:前面提到了会有相同值,可能会使得有多对索引成立,要返回索引值最小的,用你的方法该怎么办?
- 【可以再把索引也进行排序(殊不知我掉进了面试官挖的坑里
- 麻烦了吧,排序里面有稳定排序和不稳定排序
- 【沉默(感觉掉坑里了
- 不再深问了,那你的这个算法时间复杂度大概是什么级别?
- 排序nlogn + 遍历 n
- 引导:你确定吗?要不你想一想最坏的情况是什么?
- 最坏排序可以达到n方(我也不知道非得考虑最坏情况
- 追问:你第二次遍历最坏的情况是什么?
- 【我说的是要找的解在正中间(现在想了想,应该说在某一侧是最差的
- 引导:你要不再想想?然后打断,有没有想过更快的办法?
- 【哈希表
- 追问:能具体说一下吗?
- 【两数之和解法之一,不赘述了(早说这个方法就没上面那么多事了
-
说一下你在项目中用过哪些设计模式吗? 【单例、观察者、工厂(只是单纯回答了一下,但是没有具体举例子
- 单例模式和工厂模式一起用过吗?
- 【没有
- 追问:那你的工厂模式是怎么用的?
- 【把要用的工厂模式的函数变为静态
- 追问:调用静态函数,如果在非主线程调用的话会有一些问题,不知道你在项目中有没有遇到过这种情况?如果有,或者说我希望你规避不规范的调用,你会怎么做?
- 【没有遇见过这种情况,不太会处理
- 我看你项目用到过观察者模式,是所有敌人监听一个对象,那如果有一万个敌人的话会一万个人都同时监听一个对象?
- 【对,但可能会引发一系列的问题。
- 追问:所以如果我要你解决这个问题,你该如何解决?
- 【一万多个的话我可能不会让他们去做这个操作了(开始回避问题
- 追问:这可能是解决方法中的一个,那如果要你解决一万个敌人监听一个对象这个问题,你要怎么解决?
- 【胡言乱语瞎回答了“那就在敌人类里写死吧”
- 好,我了解了。
-
我看到你这几个项目里都会有对敌人的管理,我想了解一下对对象的管理都是怎样的管理? 【首先是它的生成,比如用对象池来对内存进行管理;比如设计不同的类来管理不同的行为状态
- 理解下来,还是对生命期的管理。
-
你有没有去了解一下游戏里场景或者物体管理的方法? 【对于素材的话我会文件夹分类,场景中的物体我会在视图窗口分类,场景的话写SceneManager来管理场景(不知道对不对
-
说一下你用NavMesh的时候,你对NavMesh的理解
面试官B
-
你觉得你对Unity最深入的模块是啥? 【感觉没有什么特别深入的
-
UGUI,做手机游戏的话手机屏幕大小不一,适配的话你该怎么做? 【用Canvas里的适配长宽的设置
- 追问:你是按宽还是按长呢?
- 【按宽
- 追问:为什么呢?
- 【感觉(不是很清楚,就说按感觉
- 追问:所有品类所有情况都按宽吗?
- 【不太清楚,手机上开发得比较少
- 追问:电脑上的宽高也不一样
- 【我会锁定1080P
- 追问:如果长屏的话你是会留黑边吗?
- 【那我可能会把背景图片拉大一些
-
如果想让HUD固定在左上角,你会怎么做? 【用锚点
- 追问:锚点是什么原理?
- 【具体原理不清楚
- 任何地方的锚点都是以画面为基准的吗?
- 【这边开始没反应过来,后来引导之后答的以父物体为基准
- 追问:所以如果让你设计的话,你会怎么设计锚点呢?让物体固定在左上角或者右上角或者拉伸?
- 引导:子物体需要保存什么数据才能让它显示到相应的位置?
- 【存储占父物体的长和宽的百分比位置
- 追问:有了这些数据之后,如何计算这个UI的位置?
简单看一个代码考核
每个任务有一个ID号,同时有其依赖关系struct TaskConfig{public int ID; public List<int> dep }
策划给你一个任务列表传给你List<TaskConfig> configs;
,同时已知任务完成的ID列表int[] completed
返回一个列表,玩家接下来可以完成哪些任务?
【最开始以为要拓扑排序,然后说了一下想法,面试官问有没有更简单的方法,考虑很久,想到可以直接遍历任务列表,然后对每个任务开始搜索其依赖是否完成,复杂度n方
其他
实习有感兴趣的方向的吗?
老板对你们管的严吗?
实习时间?
反问
- 你们现在做的项目是可以说的吗?
- 不太能说,不过现在是在做一个海外休闲类的项目。
- 如果我进去的话会做什么工作?
- 肯定是客户端的工作。可能会负责一个玩法的模块,主要用Lua来写,和策划美术对接,进行实现和调优,必要还会和服务端对接协议,有能力有诉求可以去服务端逻辑的编写和优化。
- 工作制度?
- 上午10点开始,晚上7-8点;如果没做完或者需要和别的同学配合最晚9点,不会每天都是这样的。 ## 字节朝夕客户端一面
大概35min,不知道诸位有没有什么复习八股的好办法,操作系统实在是太难背了
### 自我介绍&项目
面试官自我介绍:绿洲工作室P3项目负责人
申请暑期的还是有可能后续日常也可以?
项目经历
介绍一下A项目
项目的游戏引擎,都是几个人做的
你觉得最有成就感/最满意的项目是什么?你能介绍一下吗?
为什么有成就感?
你觉得这几个项目里最有技术难点的是什么,可以和我分享一下吗?
【手写了一个简单的对象池来管理敌人、特效生成
可以说说如何实现的吗?
### 业务
一个进程有多个线程还是一个线程有多个进程?
两个线程之间通信的话大概会有哪些方法呢?
【没复习操作系统,只回答了一个 信号量
- 引导:有没有什么更简单一点的方法?
- 【沉默
- 引导:不考虑锁的话,最简单的方法应该是什么?
- 【将资源放在他们共有的进程里(我在说啥
- 追问:如果说一个线程一个只读一个只写的话,需要对资源进行加锁保护吗?
- 【需要(我猜的
- 追问:为什么?可以举个例子。
- 【如果对某个资源读取的同时对其写入的话可能会出问题(我猜的
#### Unity细节(真的很细节)
一个材质分为 sharedMaterial和普通的Material,他们两个有什么区别?
【面试官有点口音我没听清shared这个词,不过搜了一下发现确实我也没用过:
- 当使用Renderer.material的时候,每次调用都会生成一个新的material到内存中去,这在销毁物体的时候需要我们手动去销毁该material,否则会一直存在内存中。也可以在场景替换的时候使用Resources.UnloadUnusedAssets去统一释放内存。
- 当使用Renderer.sharedMaterial的时候并不会生成新的material,而是直接在原material上修改,并且修改后的设置就会被保存到项目工程中。
你在UGUI下显示过粒子吗?
【没用过
那在场景下有用过粒子吗?,在哪里用过?
【用过,比如爆炸相关的特效会用到。
在UGUI中接触过合批的概念吗?怎么才能把UI用比较高效的方式绘制呢?
【没接触过,管理的话可能会用pannel来管理
- 追问:了解过Canvas吗?
- 【画布,了解过一些。
- 用Canvas的时候是用几个呢?使用一个把UI都放在上面吗?
- 【有时候会分组用多个,不需要的会直接关闭Canvas
### 代码
有序数组用最快方式查找值,有该数返回下标,没有返回-1。
【二分(即答
(好像这次面试HR没给开编写代码的权限,所以只问了一道题,然后问了别的问题)
### 项目again
你的项目里是联机的还是单机的?
【都是单机的
你的B游戏里用了navmash寻路,自动寻路是怎么做的?
【直接用的Unity插件(没敢说知道A*,因为仅仅是知道
### 业务again
在函数外声明的变量和函数里面声明的变量有什么区别?
- 追问:如果是new出来的变量的话会存在哪里呢?
- 追问:三种变量的生命周期是怎么样的?
C++中new一个类出来,在内存中大概的结构是什么样的?(这个类有父类和祖先类,还都有各自的虚函数)
虚函数表的内容应该是什么样子的呢?
【之前看过,但是不记得先后顺序了
### 反问
1. 面试官现在是做什么的?
- 正在做一个老虎机相关的游戏,客户端开发的负责人
2. 如果我进入到你们团队的话会做什么工作?
- 刚开始很可能是去做系统,比如说促销或购买等,或小游戏的玩法,主要是UI操作相关的东西等,具体是什么会根据项目安排等。项目周期大概一两个星期。也可能是换换皮,比如圣诞节活动换上相应的主题素材
3. 团队中用的引擎和语言是什么?
- (面试官对我的问题有点疑惑,我忘了招聘要求上写没写了)就是Unity,语言就是C#和Lua,Lua用得多一点,要用热更新。
#实习面经##面经##字节游戏#