多乐游戏一面(技术面)

1.自我介绍

2.Lua热更新

Lua热更新一般是结合AssetBundle来实现资源和代码的热更新。

首先是代码层面,会把需要热更的逻辑用Lua编写,再把lua脚本打包成AB包,游戏启动时先加载基础的C#核心框架,然后通过Lua虚拟机加载Lua代码;如果后续有代码更新,就从服务器拉取新的LuaAB包,替换本地的旧包,重启游戏或者重载Lua虚拟机就能生效,不用重新安装整个游戏。

资源热更新也就是类似的,把UI贴图,场景资源这些打成AB包,标记好版本号,客户端对比服务器版本,下载更新后的AB包替换本地资源,就能实现资源的热替换。

3.AB包和Lua脚本一般放在那里

1.在本地测试的阶段一般放在Unity项目的StreamingAssets目录下,这个目录的内容会被打进安装包,游戏刚启动就可以从这里读取初始的Lua代码和AB包。

2.正式上线后更新的LuaAB包会下载到PersistentDataPath目录,这个是游戏在设备上的可读写目录,重启游戏会优先加载这个目录的新包,会覆盖旧逻辑

4.如何比较两个包的差异,来从资源服务器下载呢?

通过比较资源包的版本号也就是MD5号。因为每个文件都会生产对于的MD5值作为标识,它相当于文件的“指纹”,能精准反映文件内容。我们会把本地文件的MD5和服务器上最新文件的MD5作比较,一旦发现不一致,就说明文件有更新,就会拉取服务器上的最新文件替换本地旧文件。

5.假如说本地有1000个文件,其中修改了100个文件,如何对比呢

首先游戏启动时,先会从服务器拉取最新的文件MD5清单和本地存储的旧清单做对比。接着找出100个MD5值不一致的旧文件,生成差异更新列表。然后只下载总这100个更新后的文件,替换本地对应路径的旧文件,然后更新本地的MD5清单,下次启动就会用新的文件了

6.如果在下载文件的时候传输断了会续上上吗?

比如说在热更新的时候,它是文件一个一个比对,如果说比对到50个的时候,网络断开。

1.普通断点续传:一般会把每个要下载的文件分块,比如分成1MB大小的块,每次下载完一块就把已经完成的块信息存在本地的临时文件里。如果中途断了,下次下载的时候就会先读取这个临时文件,只下载没完成的那些块,最后再把完整的块合并成完整文件

2.如果没做每块处理,那只能重新下载整个文件

7.相比C++,C语言,C#有什么优势

1.开发效率高

2.和Unity深度适配

3.语法简洁容易维护

4.学习成本低

8.C#中的GC在什么时候执行呢?

9.struct和class有什么区别?如果是频繁创建的话,哪个比较合适?开销上的区别大吗?

10.async和await必定一起出现吗?Await还会在什么场景出现呢

11.await内部的实现原理

12.Finalize,Dispose有什么关系?Dispose方法安全吗?

13.this指针的内容?以及在C++中如何理解它的?

接下来就是一些C++的需要你判断代码的正确以及一些C++的选择题

14.虚函数的原理

15.两个手撕(一个是单例模式,一个翻转链表)

多乐游戏二面(技术面)

1.自我介绍

2.对自己在学校的情况作自我介绍,围绕3个点?

3.第一点:将一下计算机相关的重点开场的学校情况,成绩说一下

4.第二点:谈谈自己的项目,挑挑一两个有代表性的项目,重点围绕技术成长,技术收获,遇到了什么问题,怎么解决的

5.第三点:谈谈自己的职业规划

6.面试官开始介绍公司

7.技术面试部分(主要是C++方向)

  • 描述C++和C#for循环中,循环变量初始化,条件判断,循环迭代变化,循环体四个部分的执行顺序,描述2个循环周期
  • 一个单层for循环的时间复杂度受到哪些因素的影响
  • 如果for循环的循环遍历变为i * 2,它的时间复杂度是多少
  • i++和++i有区别吗,区别在哪
  • i++和++i在循环是等效的吗?循环次数有没有变化?
  • 怎么理解C++多态
  • 函数重载的函数列表相同但是返回值不同正常吗,能通过编译吗?
  • 了解函数签名吗?
  • 子类对虚函数进行重写或者不重写的2种情况,其虚函数表,虚函数指针在处理上有什么差异?
  • 具有继承关系且包含该虚函数的两个对象,一般是怎么进行类型转换
  • 了解动态类型转换的几个关键字吗?
  • 用过dynamic这个关键字吗?
  • 堆和栈在功能性上的差异,使用上的差异在哪里?
  • 用过C++的智能指针吗?
  • C#是怎么进行内存管理的
  • 细化一下C#GC回收的触发时机
  • 聊聊全局变量和静态全局变量
  • 谈谈链表和线性表的基本特质以及适用场景
  • 说说堆排序的实现思路以及时间复杂度
  • 聊聊drawcall是什么以及降低drawcall的方法
  • 结合自身经历,阐述图片最终呈现在手机的过程中,计算机系统及程序员参与的工作有哪些?

8.面试官讲解公司制度