MIL19——模拟面试题
MIL19——模拟面试题
C#
-
请问以下这段代码的打印结果是多少?
c#1
2
3float f = 10.4;
int i = f / 2;
Console.WriteLine(i); -
在 C# 当中,我们想要用一个字典容器存储场景中的所有敌对对象,比如 怪物、Boss、可被攻击的场景物件等等,应该如何存储
-
在 C# 中,给你一个数字,表示有 n 秒,请问如何在不改变这个数字的前提下,将它转换成格式为
__小时__分__秒
-
请问执行以下代码后,
List
中还存在哪些内容?c#1
2
3List<int> list = new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }
for (int i = 0; i < list.Count; i++)
list.RemoveAt(i); -
假设游戏中有一个怪物管理器管理所有怪物,那么在开发时,为了避免内存泄漏,我们需要注意什么?
Unity
- Unity 生命周期函数中的
OnEnable
和Start
,我们在使用时应该如何选择?可以举例说明 - 如果你要开发一个项目
Assetbundle
和Addressables
你会如何选择? - 网络通讯中分包黏包指的是什么?我们应该如何解决这些问题?
- TCP 和 UDP 通讯最大的区别是什么?
- 如果想要让 UDP 通讯具备 TCP 的优点,应该如何处理?
答案
C#
-
请问以下这段代码的打印结果是多少?
c#1
2
3float f = 10.4;
int i = f / 2;
Console.WriteLine(i);会报错,代码片段中存在两个错误,应该改为:
-
float f = 10.4f
-
int i = (int)(f/2)
-
-
在 C# 当中,我们想要用一个字典容器存储场景中的所有敌对对象,比如 怪物、Boss、可被攻击的场景物件等等,应该如何存储
里式替换原则,父类容器装载子类对象
-
在 C# 中,给你一个数字,表示有 n 秒,请问如何在不改变这个数字的前提下,将它转换成格式为
__小时__分__秒
c#1
2
3int h = n / 3600;
int m = (n % 3600) / 60;
int s = n % 60; -
请问执行以下代码后,
List
中还存在哪些内容?c#1
2
3List<int> list = new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }
for (int i = 0; i < list.Count; i++)
list.RemoveAt(i);答:
2、4、6、8、10
- 第 1 次:
i = 0
移除了1
,后面往前放2,3,4,5,6,7,8,9,10
- 第 2 次:
i = 1
移除了3
,后面往前放2,4,5,6,7,8,9,10
- 第 3 次:
i = 2
移除了5
,后面往前放2,4,6,7,8,9,10
- 第 4 次:
i = 3
移除了7
,后面往前放2,4,6,8,9,10
- 第 5 次:
i = 4
移除了9
,后面往前放2,4,6,8,10
- 结束
- 第 1 次:
-
假设游戏中有一个怪物管理器管理所有怪物,那么在开发时,为了避免内存泄漏,我们需要注意什么?
当某一怪物真正需要移除时,我们需要清除怪物管理器对该怪物的引用
Unity
-
Unity 生命周期函数中的
OnEnable
和Start
,我们在使用时应该如何选择?可以举例说明在对象的整个生命周期中,
OnEnable
在对象激活时都会自动调用一次,Start
在第一次Update
调用之前只会调用一次
我们需要根据执行时机的这个特点来决定何时调用他们,OnEnable
可以将一些想要重置的数据,放在其中处理,Start
一般放只会初始化一次的数据内容 -
如果你要开发一个项目
Assetbundle
和Addressables
你会如何选择?首先应该将两者的关系回答清楚:
Addressables
是 Unity 提供的基于Assetbundle
的资源管理系统 -
如何选择?如果想要对
Assetbundle
资源进行更多的底层控制,那么选择Assetbundle
可操作性更多,
可以根据自己的项目实际情况来定制需求,如果团队更熟悉传统的AssetBundle
工作流程,那么选择AssetBundles
可能更合适。
因为一般情况下,老团队肯定会有一套基于Assetbundle
的资源管理机制,也经过了上线项目验证 -
网络通讯中分包黏包指的是什么?我们应该如何解决这些问题?
- 分包:一个独立的数据包(消息)被拆分成了多个小数据,分别发送出去
- 黏包:多个数据包(消息)被粘合在了一起,变成了一个更大的数据包,发送出去
- 解决:加入消息头,在消息头中加入长度等其他信息,用于接收后判断消息长度,进行对应的逻辑处理
-
TCP 和 UDP 通讯最大的区别是什么?
- 安全性上: TCP 是安全可靠的,有序、无差错、不丢失,而 UDP 不保证可靠性,发送的数据可能会丢失,也可能会乱序
- 效率上: UDP 通讯效率更高
-
如果想要让 UDP 通讯具备 TCP 的优点,应该如何处理?
主要思路就是基于 UDP 模拟出 TCP 的安全性,主要做法:
- 为消息加入序号:为 UDP 发送的每一个消息加入一个序号
- 加入消息确认机制:接收端在成功接收到一个消息后,向发送端发送一个确认消息,表示该消息已经被正确接收。
- 加入超时重传机制:发送端在超时时间内未收到确认,则进行消息的重传。