字节朝夕|凉经|游戏开发客户端|暑期实习(4.7更新)
5378
2022.03.28
2022.04.08
发布于 未知归属地

可以加裙一起交流!23暑期实习游戏开发岗交流:1022616984
官网显示4.6日流程已结束,现在面试不过都已经不用邮件通知了是吗

字节朝夕客户端二面

感觉难度和深度更大了orz

大概40min,有两个面试官(看见两个面试官之后疯狂紧张

自我介绍,如果一面有一些没有回答上来的问题也可以再和我们说一下
【只进行了自我介绍

数据结构和算法的话平时有没有刷过题或者有没有上过相关的课程?
【both

面试官A

  1. 先不做coding了,简单问一些问题,一个无序数组,可能有重复,给你另外一个值,要你找出两个 数组中的元素,说一下思路和算法。
    【我第一遍把两个 数组中的元素理解成了两个数组 中的元素,然后让面试官又描述了一遍题面(虽然我知道应该是两数之和,但是我以为是什么变种
    【然后想都没想说了先排序然后双指针

    • 追问: 如果要给出这两个数原始数组的索引怎么办?
    • 【应该就做不成了(想着不如说另一种解法,就说了应该做不成了
    • 引导:做不成吗?要不你再想想?
    • 【带着索引一起排序
    • 追问:前面提到了会有相同值,可能会使得有多对索引成立,要返回索引值最小的,用你的方法该怎么办?
    • 【可以再把索引也进行排序(殊不知我掉进了面试官挖的坑里
    • 麻烦了吧,排序里面有稳定排序和不稳定排序
    • 【沉默(感觉掉坑里了
    • 不再深问了,那你的这个算法时间复杂度大概是什么级别?
    • 排序nlogn + 遍历 n
    • 引导:你确定吗?要不你想一想最坏的情况是什么?
    • 最坏排序可以达到n方(我也不知道非得考虑最坏情况
    • 追问:你第二次遍历最坏的情况是什么?
    • 【我说的是要找的解在正中间(现在想了想,应该说在某一侧是最差的
    • 引导:你要不再想想?然后打断,有没有想过更快的办法?
    • 【哈希表
    • 追问:能具体说一下吗?
    • 【两数之和解法之一,不赘述了(早说这个方法就没上面那么多事了
  2. 说一下你在项目中用过哪些设计模式吗?
    【单例、观察者、工厂(只是单纯回答了一下,但是没有具体举例子

    • 单例模式和工厂模式一起用过吗?
    • 【没有
    • 追问:那你的工厂模式是怎么用的?
    • 【把要用的工厂模式的函数变为静态
    • 追问:调用静态函数,如果在非主线程调用的话会有一些问题,不知道你在项目中有没有遇到过这种情况?如果有,或者说我希望你规避不规范的调用,你会怎么做?
    • 【没有遇见过这种情况,不太会处理
    • 我看你项目用到过观察者模式,是所有敌人监听一个对象,那如果有一万个敌人的话会一万个人都同时监听一个对象?
    • 【对,但可能会引发一系列的问题。
    • 追问:所以如果我要你解决这个问题,你该如何解决?
    • 【一万多个的话我可能不会让他们去做这个操作了(开始回避问题
    • 追问:这可能是解决方法中的一个,那如果要你解决一万个敌人监听一个对象这个问题,你要怎么解决?
    • 【胡言乱语瞎回答了“那就在敌人类里写死吧”
  3. 我看到你这几个项目里都会有对敌人的管理,我想了解一下对对象的管理都是怎样的管理?
    【首先是它的生成,比如用对象池来对内存进行管理;比如设计不同的类来管理不同的行为状态

    • 理解下来,还是对生命期的管理。
  4. 你有没有去了解一下游戏里场景或者物体管理的方法?
    【对于素材的话我会文件夹分类,场景中的物体我会在视图窗口分类,场景的话写SceneManager来管理场景(不知道对不对

  5. 说一下你用NavMesh的时候,你对NavMesh的理解

面试官B

  1. 你觉得你对Unity最深入的模块是啥?
    【感觉没有什么特别深入的

  2. UGUI,做手机游戏的话手机屏幕大小不一,适配的话你该怎么做?
    【用Canvas里的适配长宽的设置

    • 追问:你是按宽还是按长呢?
    • 【按宽
    • 追问:为什么呢?
    • 【感觉(不是很清楚,就说按感觉
    • 追问:所有品类所有情况都按宽吗?
    • 【不太清楚,手机上开发得比较少
    • 追问:电脑上的宽高也不一样
    • 【我会锁定1080P
    • 追问:如果长屏的话你是会留黑边吗?
    • 【那我可能会把背景图片拉大一些
  3. 如果想让HUD固定在左上角,你会怎么做?
    【用锚点

    • 追问:锚点是什么原理?
    • 【具体原理不清楚
    • 任何地方的锚点都是以画面为基准的吗?
    • 【这边开始没反应过来,后来引导之后答的以父物体为基准
    • 追问:所以如果让你设计的话,你会怎么设计锚点呢?让物体固定在左上角或者右上角或者拉伸?
    • 引导:子物体需要保存什么数据才能让它显示到相应的位置?
    • 【存储占父物体的长和宽的百分比位置
    • 追问:有了这些数据之后,如何计算这个UI的位置?

简单看一个代码考核
每个任务有一个ID号,同时有其依赖关系struct TaskConfig{public int ID; public List<int> dep; }
策划给你一个任务列表传给你List<TaskConfig> configs;,同时已知任务完成的ID列表int[] completed;

返回一个列表,玩家接下来可以完成哪些任务?

【最开始以为要拓扑排序,然后说了一下想法,面试官问有没有更简单的方法,考虑很久,想到可以直接遍历任务列表,然后对每个任务开始搜索其依赖是否完成,复杂度n方

其他

实习有感兴趣的方向的吗?

老板对你们管的严吗?

实习时间?

反问

  1. 你们现在做的项目是可以说的吗?
    • 不太能说,不过现在是在做一个海外休闲类的项目。
  2. 如果我进去的话会做什么工作?
    • 肯定是客户端的工作。可能会负责一个玩法的模块,主要用Lua来写,和策划美术对接,进行实现和调优,必要还会和服务端对接协议,有能力有诉求可以去服务端逻辑的编写和优化。
  3. 工作制度?
    • 上午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用得多一点,要用热更新。
评论 (14)