MIL24——模拟面试题
MIL24——模拟面试题
C#
-
value1 和value2谁先初始化1
2
3
4
5
6
7
8
9public class Main1
{
static object value1;
static Main1()
{
value1 = new object();
}
static object value2 = new object();
} -
C# 中数值在调用
ToString()方法时,若传入字符串参数,有哪些格式转换规则?(至少说出3点) -
C# 中
ulong 类型可以表示最大的整数为多少?C# 中的BigInteger类对于我们来说有什么意义? -
C# 中如何把
int 数组转换为string数组?(请至少说出 2 种方式) -
为什么我们使用单例模式更多,而几乎不使用静态类?
Unity
- Unity 中的
PlayerPrefs支持存储什么类型的数据?
为什么我们一般不会使用它来制作角色数据存档功能? - 在进行数据持久化时(存档、数据存储等功能时)
如果使用 Unity 中的JsonUtility(Json),C# 中的BinaryFormatter(2进制)和XmlSerializer(xml)
这些公共类进行序列化和反序列化时,如果在反序列化时,对应的数据结构类发生变化了,是否影响数据的读取? - 游戏在设备上运行时,出现崩溃闪退现象,排查方向有哪些?(至少说出 2 点)
- 游戏在设备上运行时,出现卡顿掉帧现象,排查方向有哪些?(至少说出 2 点)
- 在进行游戏开发时,我们一般如何测试项目在目标设备的最大内存上限和性能上限?
答案
C#
-
value1 和value2谁先初始化1
2
3
4
5
6
7
8
9public class Main1
{
static object value1;
static Main1()
{
value1 = new object();
}
static object value2 = new object();
}
value2 先初始化,然后value1初始化。 静态字段的初始化会比静态构造方法的执行实际要早 -
C# 中数值在调用
ToString()方法时,若传入字符串参数,有哪些格式转换规则?(至少说出3点)-
Fn;F1,F2,F3… 后面的n代表保留几位小数 -
E;将数字以科学计数法表示 -
X;将数字转为 16 进制,比如:255.ToString("X") = FF -
P;将数字以百分比表示 -
Dn;D1,D2,D3… 后面的n代表结果字符串长度至少为 5 位,如果不足 5 位,则在前面加 0 -
C;将数字以货币格式表示 -
N;将数字以数字格式表示,比如:2500000.ToString("N") = 2,500,000.00等等
-
-
C# 中
ulong 类型可以表示最大的整数为多少?C# 中的BigInteger类对于我们来说有什么意义?-
ulong表示的最大整数位 为 18446744073709551615 ≈ 1844千万兆 -
BigInterger是一个可以表示任意大小整数的类,不受系统整数范围的限制。当你的项目中需要处理超出标准整数范围的整数时,可以使用它
-
-
C# 中如何把
int 数组转换为string数组?(请至少说出 2 种方式)- 声明一个长度和
int 数组相同的string 数组,遍历int 数组,边遍历边转换存储string数组中 - 使用
Array.ConvertAll方法 - 使用 LINQ,所有
Select方法对所有元素进行转换
- 声明一个长度和
-
为什么我们使用单例模式更多,而几乎不使用静态类?
- 单例模式允许延迟实例化对象
- 单例模式可以被继承和拓展
Unity
-
Unity 中的
PlayerPrefs支持存储什么类型的数据?为什么我们一般不会使用它来制作角色数据存档功能?
float、int、string 三种类型,不使用PlayerPrefs来制作存档功能的主要原因:- 需要进行二次封装才能用于存储自定义数据
- 存储位置时固定的,容易被玩家修改,安全性较差
-
在进行数据持久化时(存档、数据存储等功能时)
如果使用 Unity 中的JsonUtility(Json),C# 中的BinaryFormatter(2进制)和XmlSerializer(xml)
这些公共类进行序列化和反序列化时,如果在反序列化时,对应的数据结构类发生变化了,是否影响数据的读取?- 不影响,不会报错
- 抛弃的字段不会再赋值
- 新增的字段将使用默认值
-
游戏在设备上运行时,出现崩溃闪退现象,排查方向有哪些?(至少说出 2 点)
首先,尝试复现问题,看是否是在同一情况下出现该问题,根据表现精准定位问题,若问题出现随机性较强,那么从以下几方面排查:
- 内存问题,排查是否存在内存溢出,内存泄漏
- 报错问题,排查日志信息
- 排查设备兼容性,看是否是某些功能与该设备不兼容
等等
-
游戏在设备上运行时,出现卡顿掉帧现象,排查方向有哪些?(至少说出 2 点)
首先,配合性能分析工具进行排查,比如 Unity Profiler 通过分析 CPU、GPU、帧率等性能数据确定性能瓶颈所在,主要排查方向:
- CPU 使用率,检查是否有计算量过大、循环过多、算法低效的情况
- GPU 使用率,检查是否有过多的渲染操作,Shader 着色器的算法是否效率低下等情况
- 是否存在内存抖动严重的情况,不停地频繁触发GC
- 是否是因为资源加载国语频繁导致卡顿
等等
-
在进行游戏开发时,我们一般如何测试项目在目标设备的最大内存上限和性能上限?
结合性能测试工具(比如Unity自带的性能检测窗口)在多台真实的目标设备上进行测试(多台目的是避免不同设备之间存在的差异性)
可以专门制作测试场景-
添加一些动态生成的功能(比如动态增加内存分配,比如动态增加性能消耗)
-
动态增加内存分配常用方法:加载更多的图片、模型、特效资源
-
动态增加性能消耗的常用方法:
- CPU ——> 添加寻路对象数量,让场景上模型不停地切换动作
- GPU ——> 场景上增加同屏显示的模型、特效等对象数量
-
不停地观察随着内存分配提升,性能消耗提升时,整体游戏表现的变化
主要观察变化内容为: 内存到达多少时,出现崩溃现象,场景中模型、特效、动作、寻路对象等等内容到达多少时,出现掉帧卡顿现象
-
