MIL6——模拟面试题
MIL6——模拟面试题
问题
C#
-
C# 中如何让自定义容器类能够使用
for
循环遍历?(通过类对象[索引]
的形式遍历) -
C# 中如何让自定义容器类能够使用
foreach
循环遍历? -
C# 中接口的作用是什么?说说你的理解
-
Unity引擎中哪些功能使用了 C# 的反射功能?至少说出一点
-
请问以下这三行代码,运行后,在堆上会分配几个“房间”
1
2
3
4
5
6static void Main(string[] args)
{
string str = "123";
string str2 = "123";
string str3 = "1234";
}
Unity
-
Unity中
Awake
和Start
两个生命周期函数,分别在什么时候被调用? -
Unity场景上有多个对象,都分别挂载了n个脚本。 我们如何控制不同脚本间生命周期函数
Awake
的执行先后顺序? -
想要在Unity中使用指针我们需要进行哪些操作?
-
Unity中的协同程序中
yield return
不同的内容,代表的含义不同
请说明下面这些yield return
的含义-
yield return 数字;
-
yield return null;
-
yield return new WaitForSeconds(数字);
-
yield return new WaitForFixedUpdate();
-
yield return new WaitForEndOfFrame();
-
yield break;
-
-
使用Unity协同程序进行异步加载时,底层是否会使用多线程?
答案
-
C# 中如何让自定义容器类能够使用
for
循环遍历?(通过类对象[索引]
的形式遍历)答案: 通过在类中实现索引器实现
-
C# 中如何让自定义容器类能够使用
foreach
循环遍历?答案:通过为该类实现迭代器可以让其使用foreach遍历
传统方式:继承
IEnumerator
、IEnumerable
两个接口,实现其中的-
GetEnumerator
方法 -
Current
属性 -
MoveNext
方法
语法糖方式:利用
yield return
语法糖,实现GetEnumerator
方法即可完成迭代器的实现 -
-
C# 中接口的作用是什么?说说你的理解
答案:用于建立行为的继承关系,而不是对象
不同对象,有相同行为时,我们可以利用接口对不同对象的行为进行整合 -
Unity引擎中哪些功能使用了 C# 的反射功能?至少说出一点
答案:
- Inspector窗口中显示的内容
- 预设体文件
- 场景文件
- Unity中的各种特性
等等
-
请问以下这三行代码,运行后,在堆上会分配几个“房间”
1
2
3
4
5
6static void Main(string[] args)
{
string str = "123";
string str2 = "123";
string str3 = "1234";
}监视结果:
答案:2个房间
-
"123"
一个房间 "1234"
一个房间
-
Unity
-
Unity中
Awake
和Start
两个生命周期函数,分别在什么时候被调用?答案:
-
Awake
:运行时 当脚本被动态添加到对象上时立即被调用。当对象被实例化时,依附它的脚本会立即调用Awake
,它类似构造函数 -
Start
:第一次Update
之前被调用
-
-
Unity场景上有多个对象,都分别挂载了n个脚本。 我们如何控制不同脚本间生命周期函数
Awake
的执行先后顺序?答案:
- 可以通过选中脚本文件,点击 Inspector 窗口右上角的 Execution Order(执行顺序)按钮
- 可以打开 Project Setting 窗口,选择 Script Execution Order 选项
通过这两种方式我们可以打开脚本执行顺序窗口,在其中我们可以自己设置自定义脚本的执行顺序
-
想要在Unity中使用指针我们需要进行哪些操作?
答案:
- 需要在 PlayerSetting 中的 OtherSettings 中勾选 Allow ‘unsafe’ code 选项
- 使用指针时必须在unsafe修饰的代码块中
-
Unity中的协同程序中
yield return
不同的内容,代表的含义不同
请说明下面这些yield return
的含义-
yield return 数字;
-
yield return null;
-
yield return new WaitForSeconds(数字);
-
yield return new WaitForFixedUpdate();
-
yield return new WaitForEndOfFrame();
-
yield break;
答案:
-
yield return 数字;
下一帧执行 -
yield return null;
下一帧执行 -
yield return new WaitForSeconds(数字);
等待指定秒后执行 -
yield return new WaitForFixedUpdate();
等待下一个固定物理帧更新时执行 -
yield return new WaitForEndOfFrame();
等待摄像机和GUI渲染完成后执行 -
yield break;
跳出协程
-
-
使用Unity协同程序进行异步加载时,底层是否会使用多线程?
答案:可能会,协同程序的原理是分时分步完成指定逻辑
在其中的某一步骤中,是可以使用多线程来完成某些加载操作的,
多线程加载完成后,再进入协同程序的下一步继续执行