MIL6——模拟面试题
MIL6——模拟面试题 问题 C# C# 中如何让自定义容器类能够使用 for 循环遍历?(通过 类对象[索引] 的形式遍历) C# 中如何让自定义容器类能够使用 foreach 循环遍历? C# 中接口的作用是什么?说说你的理解 Unity引擎中哪些功能使用了 C# 的反射功能?至少说出一点 请问以下这三行代码,运行后,在堆上会分配几个“房间” 123456static void Main(string[] args){ string str = "123"; string str2 = "123"; string str3 = "1234";} Unity Unity中 Awake 和 Start 两个生命周期函数,分别在什么时候被调用? Unity场景上有多个对象,都分别挂载了n个脚本。 我们如何控制不同脚本间生命周期函数 Awake...
MIL5——模拟面试题
MIL5——模拟面试题 问题 C# 以下代码,谁的效率更高?为什么? 123456789101112//代码1:List<int> list = new List<int>();for (int i = 0; i < 50; i++){ list.Add(i);}//代码2:List<int> list2 = new List<int>(50);for (int i = 0; i < 50; i++){ list2.Add(i);} 数组和链表的区别是什么? C# 中的 Action 和 Func 是什么?Unity 中的 UnityAction 是什么?他们有什么区别? 请问最终的打印结果是什么? 123456public struct Record{ public int id; public string name; public int[] children;} 123456public...
MIL4——模拟面试题
MIL4——模拟面试题 问题 C# 请说明字符串中 string str = null、string str = ""、string str = string.Empty 三者的区别 C# 重载运算符,重载 == 和 != 以及 万物之父 object 基类中的虚方法 virtual bool Equals(Object obj) 对于我们的意义是什么? 在开发时,对 string 和 StringBuilder 我们应该如何选择 请简要说明 .NET 跨语言原理 请简要说明 .NET 跨平台原理 Unity Unity中的 Destroy 和 DestroyImmediate 的区别是什么? 请问最终打印的 s 的结果为? 123456789101112string s = string.Empty;GameObject go = new GameObject();DestroyImmediate(go)if (!go) s += "A";if (go is null) s +=...
MIL3——模拟面试题
MIL3——模拟面试题 问题 C# 泛型的约束有哪几种? 什么是闭包?可以举例说明 内存泄漏指什么?常见的内存泄漏有哪些? 序列化是什么?常见的序列化方式有哪些?什么时候我们会用到序列化? 请问A、B、C 三处打印结果分别为多少?为什么? 1234567891011121314151617181920212223242526272829static unsafe void Main(string[] args){ int test1Value = 10; Test1(test1Value); Console.WriteLine($"A:{test1Value}"); int test2Value = 10; Test2(&test1Value); Console.WriteLine($"A:{test2Value}"); int test3Value = 10; Test3(ref test3Value); ...
MIL2——模拟面试题
MIL2——模拟面试题 问题 C# 请说说你认为 C# 中 == 和 Equals 的区别是什么? 浅拷贝和深拷贝的区别? 可以举例说明 下面两种获取10000个数的方式,哪种效率更高?为什么 12345678910List<int> list = new List<int>();for (int i = 0; i < 10000; i++){ list.Add(i);}float[] array = new float[10000];for (int i = 0; i < 10000; i++){ array[i] = i;} 现在有如下代码: 12345678910111213141516171819static void Main(string[] args){ int i = GetInt(); Console.WriteLine($"第A处 i = {i}");}static int...
CS2L6——函数基础
CS2L6——函数基础 本章代码关键字 1return //可以结束函数的执行,并返回其后边的值给外部 函数(方法) 函数(方法)本质是一块具有名称的代码块,可以使用函数(方法)的名称来执行该代码块。 函数(方法)是封装代码进行重复使用的一种机制 函数(方法)的主要作用: 封装代码 提升代码复用率 抽象化行为 例如,Main 就是一个函数,在程序启动时调用,为程序的起点, 其中 Console.WriteLine() 就是调用的 Console 类中的 WriteLine() 函数 1234static void Main(string[] args){ Console.WriteLine("函数")} 函数写在 class 或者 struct 里,return 可以提前结束函数逻辑 程序是线性执行的 函数写在哪里 一定写在 class 语句块 和 struct 语句块中!!! 函数基本语法 12345678910//1 2 3 4static 返回类型 函数名...
CS2L5——特殊的引用类型string
CS2L5——特殊的引用类型string 回顾值类型与引用类型 引用类型:string 数组 类(未学习) 值类型:其他类型 结构体(未学习) 值类型 在相互赋值时 把内容拷贝给了对方 它变我不变 引用类型 在相互赋值时 是 让两者指向同一个值 它变我也变 为什么有这样的区别 值类型和引用类型 存储在内存的区域是不同的 存储方式是不同的 值类型 存储在 栈空间 —— 系统分配,自动回收,小而快 引用类型 存储在 堆空间 —— 手动申请和释放,大而慢,引用类型的地址存储在栈空间里,地址指向堆空间里的数据 特殊的引用类型string 因为 string 是引用类型 按理说 应该是“它变我也变”, 但是 C# 做了特别处理,让 string 非常的特殊 它具备 值类型的特征 即“它变我不变” 12345string str1 = "123";string str2 = str1;str2 =...
CS2L4——值类型和引用类型
CS2L4——值类型和引用类型 变量类型的复习 基本数据类型 //1、有符号的整形变量 能存储一定范围内的正负数包括0的变量类型 sbyte sb = 1; // -128~127 int i = 1; // -21亿~21亿 short s = 1; // -32768~32767 long l = 1; // -九百万兆~九百万兆 //2、无符号的整型变量 能存储一定范围内0和正数的变量类型 byte b = 1; // 0~255 uint ui = 1; // 0~42亿 ushort us = 1; // 0~65535 ulong ul = 1; // 0~18百万兆 //3、浮点数(小数) float f = 0.1f; // 数字后必须加f声明float,因为小数会被默认为double,从非0数算起为有效数字,7/8位有效数字,根据编译器不同有可能不同,超出部分会四舍五入 double d = 0.1; // 从非0数算起为有效数字,15~17位有效数字,超出部分会四舍五入 decimal de =...
CS5L13-3——使用分组统计出现频率
CS5L13-3——使用分组统计出现频率 本章代码关键字 12345group ... by ... into ... //第一个空传入集合中的单个元素,第二个空传入分组依据(表达式),第三空为分组得到某个组集合,后续可以使用IEnumerable<>.GroupBy() //传入分组方法,对集合进行分组,返回分组出来的集合IEnumerable<>.Select() //传入选择方法,返回一个新集合IEnumerable<>.ToDictionary() //传入两个方法,一个是获取键的方法,一个是获取值的方法,根据这两个方法将集合转换为字典 统计频率 假设有一个长度为200的数组,其中值是随机的,范围在0到19之间 1234Random random = new Random(1334); //使用种子使数组内部的值是唯一的var arr = new int[200];for (int i = 0; i < arr.Length; i++) ...
CS5L13-2——求两个数据集合的交集
CS5L13-2——求两个数据集合的交集 本章代码关键字 1IEnumerable<>.Intersect() //传入另一个集合,返回该集合和传入的集合的交集 交集 假设有两个数组,求两个数组的交集 123//假设有两个数组,求两个数组的交集int[] arr1 = new int[] { 1, 2, 3, 4, 5, 6 };int[] arr2 = new int[] { 4, 5, 6, 7, 8, 9 }; 不使用LINQ 12345678910private static void Normal2(int[] arr1, int[] arr2){ Console.WriteLine("不使用LINQ"); var result = new List<int>(); foreach (var i in arr1) if (arr2.Contains(i)) result.Add(i); foreach...