MIL12——模拟面试题
MIL12——模拟面试题
C#
-
List
是链表还是数组 - 上一题追问:当
list
满了的时候,我再加入一个元素它的效率会比较低啊,它内部大概是一个什么样的执行过程呢? - C# 里面有一个常用的接口叫做
IDispose
,它的作用是? - 上一题追问:C# 有垃圾回收机制,把一个对象设置为空的时候,系统会帮我们回收,它和接口
IDispose
有什么关系吗?为什么会存在两个做析构事情的东西呢? - Unity 中的生命周期函数,为什么设计为反射调用,而不是通过继承重写生命周期函数的形式去实现呢?(至少答出一种原因)
Unity
- CPU 和 GPU 他们分别是什么?他们主要完成什么工作
- 渲染管线中的几何阶段是由 CPU 主导还是 GPU 主导?该阶段主要是在做什么?
- 是不是所有矩阵都有逆矩阵?如何计算一个矩阵的逆矩阵?
- 齐次坐标是什么?对于我们有什么作用?
- Shader 开发中的坐标空间变换,主要是在哪几个空间中进行变换?变换顺序是什么?
答案
C#
-
List
是链表还是数组数组
-
上一题追问:当
list
满了的时候,我再加入一个元素它的效率会比较低啊,它内部大概是一个什么样的执行过程呢?数组搬家,会讲原数组移动到一个更大容量的新数组中,效率较低,并且会产生内存垃圾
-
C# 里面有一个常用的接口叫做
IDispose
,它的作用是?
IDispose
接口是 C# 中用于手动释放资源的机制 通过显式调用Dispose()
方法来实现资源的释放,避免资源泄漏和浪费
它允许对象在不再需要时显式地释放资源,而不依赖于垃圾回收器的自动内存管理 -
上一题追问:C# 有垃圾回收机制,把一个对象设置为空的时候,系统会帮我们回收,它和接口
IDispose
有什么关系吗?为什么会存在两个做析构事情的东西呢?C# 中的垃圾回收机制,只会回收托管堆上分配的对象。
对于非托管资源以及其它需要显示释放的资源,垃圾回收是无法自动处理的,因为这些资源不属于托管堆,因此垃圾回收器无法自动识别和回收。
这种情况下我们就需要显示的手动释放这些资源了。 而IDispose
接口就提供了一种通用的机制来进行资源清理,主要用于释放非托管资源。非托管资源:
- 文件句柄,在操作系统中打开的文件等
- 数据库链接,与数据库服务器简历的链接
- 网络链接:比如 Socket 的连接对象
-
unsafe
关键词中使用的指针
等等
-
Unity 中的生命周期函数,为什么设计为反射调用,而不是通过继承重写生命周期函数的形式去实现呢?(至少答出一种原因)
可能原因包括:
- 并非所有继承
MonoBehaviour
的类都需要使用所有声明周期函数,如果使用继承,就会有大量的空虚函数被调用,
而使用反射,有哪些生命周期就调用哪些,并且反射还可以调用私有方法。
Unity 只需要维护有对应生命周期函数的脚本列表,就可以避免空虚函数的调用了。 - Unity 采用组件式设计,通过使用反射,可以将某些逻辑解耦,将组件的功能模块化,使得逻辑更加灵活和可复用,
当触发一个生命周期,需要通知相应 GameObject 的所有组件,
如果使用继承多态来实现,则所有组件都要派生自包含对应生命周期的基类,或者是筛选出派生自此基类的组件逐一通知。
这样一来容易带来复杂的继承关系,并且很麻烦,就和组件式倡导的聚合代替继承的设计从理念上相悖了。 - Unity 提供插件和外部脚本支持,这些脚本可能不是在 Unity 中编写的,
而是通过第三方库或外部工具生成的,为了支持这些脚本,可以使用反射机制调用其生命周期函数
- 并非所有继承
Unity
-
CPU 和 GPU 他们分别是什么?他们主要完成什么工作
-
CPU为中央处理器
负责算数运算、逻辑操作、数据传输等通用计算任务,同时还管理和调度计算机的资源 (游戏开发中 —— 游戏逻辑处理),
主要处理操作系统管理、程序执行、通用计算等等 CPU一般处理串行任务,即顺序执行的单个任务,适用于大多数常规计算 -
GPU为图形处理器
是专门用于图形和并行计算的处理器,显卡就是搭载 GPU 的硬件设备,
显卡包含一个或多个 GPU 芯片,还包含显存(用于存储图像数据)、显示接口、视频解码器等等(游戏开发中—渲染相关处理)
GPU 主要处理并行任务,适用于图形渲染、3D游戏、机器学习、科学计算等需要大量并行计算的领域
-
-
渲染管线中的几何阶段是由 CPU 主导还是 GPU 主导?该阶段主要是在做什么?
渲染管线中的几何阶段主要由 GPU 主导,在几何阶段中完成的最主要工作就是 顶点、法线 等模型数据的相关处理
对他们进行坐标空间转换,裁剪画面外图元等等,还可以进行顶点着色,为每个顶点计算颜色、纹理坐标、法线等属性,以便在后续阶段用于处理 -
是不是所有矩阵都有逆矩阵?如何计算一个矩阵的逆矩阵?
-
并不是所有矩阵都有逆矩阵
-
计算流程
- 第一步:确定矩阵是否为方阵(即行列数相等)
- 第二步:计算矩阵的行列式(若行列式为0,则该矩阵没有逆矩阵)
- 第三步:计算矩阵的代数余子式矩阵
- 第四步:计算标准伴随矩阵(转置代数余子式矩阵)
- 第五步:计算逆矩阵(标准伴随矩阵 / 行列式)
-
-
齐次坐标是什么?对于我们有什么作用?
齐次坐标就是将一个原本是 n 维的向量或矩阵用 n + 1 维来表示,是一种扩展的坐标系统,
用于在计算机图形学等学科中进行数学运算,利用齐次坐标,我们可以明确的区分向量和点,能够表示出平移变换 -
Shader 开发中的坐标空间变换,主要是在哪几个空间中进行变换?变换顺序是什么?
主要是将模型相关数据(顶点、法线、切线等)在:模型空间 —> 世界空间 —> 观察空间 —> 裁剪空间 —> 屏幕空间 之间进行变换