MIL14——模拟面试题
MIL14——模拟面试题
C#
-
C# 中属性(Property)和字段(Field)的区别是什么?
属性一般可以用来封装字段,属性相对字段来说,属性具有封装性,允许对字段进行封装,提供更多的控制和逻辑。
相比直接访问字段来说,属性允许我们在字段访问的过程汇总添加验证、计算等逻辑,
属性还可以在其中对set
和get
设置不同的访问级别,使得字段的读取和写入可以收到更精细的控制 -
请解释一下 C# 中的异步编程模型(
async
/await
),它是用来做什么的?C# 中的异步编程模型是一种用于处理并发任务的技术
允许在执行异步操作时,让程序继续执行其他任务,而不会阻塞主线程。
这对于处理诸如网络请求、文件读写、长时间计算等耗时操作非常有用 -
请问七大排序算法一般指哪七种排序算法?你一般常用的排序算法是哪种?请简单描述它的排序原理
冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序
-
请简单描述斐波那契数列的基本规则是什么
假设数列从索引 0 开始,斐波那契数列的基本规则就是从数列的第2项开始,每一项的值都是前两项的和:
即:1,1,2,3,5,8,13,21…
-
请简单描述 A 星寻路算法的基本原理
关键点:
- 寻路消耗公式:
- 开启列表
- 关闭列表
- 基本原理: 每一次寻路,计算周围点的寻路消耗,并放入开启列表,对开启列表进行排序,得到寻路消耗最小的点放入关闭列表中
Unity
-
在 Unity 中,有时在第一次执行
GameObject.Instantiate
的时候有明显卡顿,该怎么解决?通过 Unity 的 Profiler 窗口排查卡顿原因,一般有以下几种可能性:
-
加载过大资源造成卡顿,解决方案:
- 预加载资源
- 简化资源(修改图片大小,减少模型顶点、面数,压缩优化资源等)
- 异步加载资源(分帧加载)
-
对象挂载的脚本中初始化耗时,解决方案:
- 减少序列化或反序列化信息
- 优化初始化相关逻辑,提前初始化,分帧初始化等
-
-
在 Unity 中 AssetBundle 的压缩方式有不压缩、LZMA、LZ4 三种,请问 LZMA 和 LZ4 有什么区别?
-
LZMA:压缩算法为 Lempel-Ziv-Markov chain-Algorithm,
压缩包最小(压缩率更高),但是解压过程较慢,耗时较长(因为它需要进行更多的解压缩操作)
-
LZ4:压缩算法为Lempel-Ziv 4
压缩包较大(压缩率较低),但是不要求完整的数据包就可以解压缩,无需解压完整压缩包,解压时间快(几乎可以立即解压
AssetBundle
)
-
-
Unity 中 DrawCall、Batches、SetPass Calls 的意思是什么
-
Draw Call: 表示渲染请求的数量(每个 Draw Call 都会引起一次从 CPU 到 GPU 的数据传输)
直接影响渲染性能,因为它决定了 CPU 和 GPU 之间的通信次数,
减少 DrawCall 的数量通常是优化渲染性能的关键之一,可以通过使用批处理技术(Batching)来合并多个物体为一个 DrawCall 来实现 -
Batches: 是一种将多个物体合并为一个 Draw Call 的渲染优化技术
它将多个相似的物体合并成一个 Draw Call,从而减少 CPU 到 GPU 的数据传输和渲染开销
可以使用静态批处理、动态批处理和 GPU Instancing 等技术来进一步优化 Batch -
SetPass Calls:渲染
Pass
(Shader 中渲染通道)的数量,移动平台中尽量减少 Shader 中Pass
的数量可以提升性能
-
-
Unity Shader 中,深度测试是在做什么?
深度测试用于确定哪些像素应该被绘制到屏幕上,并决定它们的可见性。
深度测试的主要目标是解决遮挡关系,确保前面的对象覆盖后面的对象,从而正确呈现场景 -
Unity Shader 中某片元通过了深度测试,但是没有开启深度写入,该片元的颜色信息是否写入到颜色缓冲区?
会写入颜色缓冲区,因为深度写入和颜色写入是两个独立的操作
只要通过了深度测试,不管是否写入深度缓冲区,该片元的颜色信息都会写入到颜色缓冲区中