MIL26——模拟面试题
MIL26——模拟面试题
C#
-
以下代码,请问最终的打印结果是多少?为什么?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17class TestClass
{
public int i = 0;
}
static void TestFun(TestClass obj)
{
obj = new TestClass();
obj.i = 10;
}
static void Main(string[] args)
{
TestClass t = new TestClass();
TestFun(t);
Console.WriteLine(t.i);
} -
基于上一题,我们要如何修改,才能让最后的结果为10?请说出 3 种方式
-
C# 中
List 中的Sort 方法中,传入的比较器委托函数,返回的-1,0,1分别代表什么意思? -
C# 中的 CLR 是什么?
-
代码混淆是什么意思?有什么作用?
Unity
- Unity 生命周期函数中在整个生命周期中可能会被反复执行的有哪些?(至少说出5个)
- Unity 中生命周期函数被调用的底层原理是什么?
- 如何在 UGUI 中处理不同分辨率和屏幕比例的适配?
- UGUI 中如何做到点击按钮时,不要响应其他 Input 相关的检测
- Unity 中前向渲染路径、顶点照明渲染路径、延迟渲染路径各自的优缺点是什么?
答案
-
以下代码,请问最终的打印结果是多少?为什么?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17class TestClass
{
public int i = 0;
}
static void TestFun(TestClass obj)
{
obj = new TestClass();
obj.i = 10;
}
static void Main(string[] args)
{
TestClass t = new TestClass();
TestFun(t);
Console.WriteLine(t.i);
}答:0
因为在函数参数传递时是按值传递的,这意味着参数的副本会被传递给方法,而不是原始对象的引用。
因此,当在TestFun 方法内部重新为obj 分配一个新的对象时,只是修改了这个副本的引用,而不会影响到Main 方法中的t对象 -
基于上一题,我们要如何修改,才能让最后的结果为10?请说出 3 种方式
-
TestFun 中参数前加ref -
TestFun 中参数前加out - 不要在
TestFun 中new 对象,而是直接修改obj.i - 通过
TestFun 直接返回一个新对象,在外部赋值给t
等等
-
-
C# 中
List 中的Sort 方法中,传入的比较器委托函数,返回的-1,0,1分别代表什么意思?比较器委托函数会传入两个对象
-1:-
-1表示第一个对象小于第二个对象 -
0表示两个对象相等 -
1表示第一个对象大于第二个对象
-
-
C# 中的 CLR 是什么?
CLR 全称为 Common Language Runtime(公共语言运行时)它是 .NET Framework 的基础,所有的 .NET 技术都是建立在此之上的
它是一个在执行时管理代码的代码,提供内存管理、 线程管理等等核心服务,就好像一个小型的操作系统一样。所以形象的把它称为“.NET 虚拟机”。
如果想要应用程序在目标操作系统上能够运行,就必须依靠 .NET 提供的 CLR 环境来支持
那就必须在操作系统上安装 .NET Framework 它会把程序集中的 IL(中间代码)翻译成机器码最终在操作系统上运行 -
代码混淆是什么意思?有什么作用?
代码混淆(也称花指令)是指通过各种技术手段使代码变得难以理解的一种技术。
混淆后的代码仍然可以正常运行,只是它的机构和逻辑会变得比较复杂和难以阅读。
主要作用:保护知识产权,当代码被反编译后,能够提高理解门槛,让破解和复制变得更困难
Unity
-
Unity 生命周期函数中在整个生命周期中可能会被反复执行的有哪些?(至少说出5个)
-
Update:每帧调用 -
LateUpdate:每一帧最后被调用,晚于Update -
FixedUpdate:固定频率调用,和帧率无关 -
OnEnable:对象第一次启用以及对象从禁用状态切换到启用状态时被调用 -
OnDisable:对象被禁用时调用,从启用状态切换到禁用状态时调用
-
-
Unity 中生命周期函数被调用的底层原理是什么?
反射,当脚本被加载时,Unity 使用反射来检测脚本中定义了哪些生命周期函数,
并为了避免每一帧中使用反射,Unity 会在脚本加载时将这些函数缓存起来。
在主循环中的每一帧的特殊时机去调用对应的生命周期函数,或基于事件触发驱动(比如失活,激活等情况) -
如何在 UGUI 中处理不同分辨率和屏幕比例的适配?
- 利用 Canvas Scaler 组件,根据屏幕分辨率或物理尺寸进行缩放
- 利用
RectTransform的锚点和边距设置,适应不同分辨率的布局(常用九宫格布局)
-
UGUI 中如何做到点击按钮时,不要响应其他 Input 相关的检测
利用
EventSystem 中的IsPointerOverGameObject 方法判断
当点击 UI 中按钮时,IsPointerOverGameObject 方法会返回true,在此帧不处理输入检测逻辑即可 -
Unity 中前向渲染路径、顶点照明渲染路径、延迟渲染路径各自的优缺点是什么?
-
前向渲染路径
- 优点:适用于相对简单的场景和较少数量的光源,基本可以实现任何渲染效果。设备支持率较高
- 缺点:对于复杂场景和大量光源的情况性能消耗相对较大
-
顶点照明渲染路径
- 优点:相对来说,性能开销较小,适用于资源受限设备极差时的轻量级渲染情景
- 缺点:表现效果较差,光照计算精度较低
-
延迟渲染路径
- 优点:适用于复杂场景和大量光源,能够有效减少光照计算的开销
- 缺点:对于透明物体和一些特殊效果不能直接支持,需要复杂的处理。
并且对硬件有一定要求,不是所有设备都支持,在一些性能较差的移动设备上不受支持
-
