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协同程序进行异步加载时,底层是否会使用多线程?
答案:可能会,协同程序的原理是分时分步完成指定逻辑
在其中的某一步骤中,是可以使用多线程来完成某些加载操作的,
多线程加载完成后,再进入协同程序的下一步继续执行 
