??前言
- 正所谓 金三银四 ,又到了找工作的大好时机了,不知道大家有没有意向找一份更好的工作呢~
- 之前写了很多Unity的学习和实例文章,但是面试题部分还没有一个系统的整理。
- 那本篇文章就来整理一下Unity中一些常见的面试题,说不准就会面试的时候就会遇到!
- 本篇文章会将Unity所有方面的面试资料都融会贯通,绝对是2022年Unity面试领域最实用的文章啦!
- 为了方便大家可以重点复习某个方面,所以大致分为下面几个模块方便学习
- 看完记得 点赞 + 收藏 一波哦,过了这村可就找不到这家店了!
- 励志做2022Unity最全的面试题整理!
- C#基础
- 计算机基础
- Unity基础
- 物理系统
- UI部分 & 2D
- 协程
- 动画系统
- 数据持久化 & 资源管理
- Lua语言和Xlua热更
- 络
- 渲染 & Shader
- 优化部分
- 算法
??Unity面试题大全

??C#基础
1. 重载和重写的区别
- 封装、继承、多态所处位置不同,重载在同类中,重写在父子类中。
- 定义方式不同,重载方法名相同参数列表不同,重写方法名和参数列表都相同。
- 调用方式不同,重载使用相同对象以不同参数调用,重写用不同对象以相同参数调用。
- 多态时机不同,重载时编译时多态,重写是运行时多态。
2.面向对象的三大特点
- 继承: 提高代码重用度,增强软件可维护性的重要手段,符合开闭原则。继承最主要的作用就是把子类的公共属性集合起来,便与共同管理,使用起来也更加方便。你既然使用了继承,那代表着你认同子类都有一些共同的特性,所以你把这些共同的特性提取出来设置为父类。继承的传递性:传递机制 a?b; b?c; c具有a的特性 。继承的单根性:在C#中一个类只能继承一个类,不能有多个父类。
- 封装: 封装是将数据和行为相结合,通过行为约束代码修改数据的程度,增强数据的安全性,属性是C#封装实现的最好体现。就是将一些复杂的逻辑经过包装之后给别人使用就很方便,别人不需要了解里面是如何实现的,只要传入所需要的参数就可以得到想要的结果。封装的意义在于保护或者防止代码(数据)被我们无意中破坏。
- 多态性: 多态性是指同名的方法在不同环境下,自适应的反应出不同得表现,是方法动态展示的重要手段。多态就是一个对象多种状态,子类对象可以赋值给父类型的变量。
3.简述值类型和引用类型有什么区别
值类型:包含了所有简单类型(整数、浮点、bool、char)、struct、enum。
继承自System.ValueTyoe
引用类型包含了string,object,class,interface,delegate,array
继承自System.Object
- 值类型存储在内存栈中,引用类型数据存储在内存堆中,而内存单元中存放的是堆中存放的地址。
- 值类型存取快,引用类型存取慢。
- 值类型表示实际数据,引用类型表示指向存储在内存堆中的数据的指针和引用。
- 栈的内存是自动释放的,堆内存是.NET 中会由 GC 来自动释放。
- 值类型继承自 System.ValueType,引用类型继承自 System.Object。
- 值类型的变?直接存放实际的数据,?引?类型的
变?存放的则是数据的地址,即对象的引?。 - 值类型变量直接把变量的值保存在堆栈中,引?类
型的变量把实际数据的地址保存在堆栈中。
4.请简述private,public,protected,internal的区别
- public:对任何类和成员都公开,无限制访问
- private:仅对该类公开
- protected:对该类和其派生类公开
- internal:只能在包含该类的程序集中访问该类
- protected internal:protected + internal
5.C#中所有引用类型的基类是什么
引用类型的基类是System.Object值类型的基类是 System.ValueType
同时,值类型也隐式继承自System.Object
6.请简述ArrayList和 List的主要区别
- ArrayList 不带泛型 数据类型丢失
- List 带泛型 数据类型不丢失
- ArrayList 需要装箱拆箱 List不需要
ArrayList存在不安全类型(ArrayList会把所有插 ?其中的数据都当做Object来处理)装箱拆箱的 操作(费时)IList是接?,ArrayList是?个实现了 该接?的类,可以被实例化
List类是ArrayList类的泛型等效类。它的大部分用法都与ArrayList相似,因为List类也继承了IList接口。最关键的区别在于,在声明List集合时,我们同时需要为其声明List集合内数据的对象类型。
7.请简述GC(垃圾回收)产生的原因,并描述如何避免/h4>
GC为了避免内存溢出而产生的回收机制
避免:
1)减少 new 产生对象的次数
2)使用公用的对象(静态成员)
3)将 String 换为 StringBuilder
8. 请描述Interface与抽象类之间的不同
- 接口不是类 不能实例化 抽象类可以间接实例化
- 接口是完全抽象 抽象类为部分抽象
- 接口可以多继承 抽象类是单继承
9.请简述关键字Sealed用在类声明和函数声明时的作用
类声明时可防止其他类继承此类,在方法中声明则可防止派生类重写此方法。
10. 反射的实现原理/h4>
可以在加载程序运行时,动态获取和加载程序集,并且可以获取到程序集的信息反射即在运行期动态获取类、对象、方法、对象数据等的一种重要手段
主要使用的类库:System.Reflection
核心类:
- Assembly描述了程序集
- Type描述了类这种类型
- ConstructorInfo描述了构造函数
- MethodInfo描述了所有的方法
- FieldInfo描述了类的字段
- PropertyInfo描述类的属性
通过以上核心类可在运行时动态获取程序集中的类,并执行类构造产生类对象,动态获取对象的字段或属性值,更可以动态执行类方法和实例方法等。
11. .Net与 Mono 的关系/h4>
.Net是一个语言平台,Mono为.Net提供集成开发环境,集成并实现了.NET的编译器、CLR 和基础类库,使得.Net既可以运行在windows也可以运行于 linux,Unix,Mac OS 等。
12. 在类的构造函数前加上static会 什么错什么/h4>
构造函数格式为public+类名如果加上 static 会 错(静态构造函数不能有访问、型的对象,静态构造函数只执行一次;
运行库创建类实例或者首次访问静态成员之前,运行库调用静态构造函数;
静态构造函数执行先于任何实例级别的构造函数;
显然也就无法使用this和 base 来调用构造函数。
一个类只能有一个静态函数,如果有静态变量,系统也会自动生成静态函数
13.C# String类型比 stringBuilder 类型的优势是什么/h4>
如果是处理字符串的话,用string中的方法每次都需要创建一个新的字符串对象并且分配新的内存地址,而 stringBuilder 是在原来的内存里对字符串进行修改,所以在字符串处理
方面还是建议用stringBuilder这样比较节约内存。但是 string 类的方法和功能仍然还是比 stringBuilder 类要强。
string类由于具有不可变性(即对一个 string 对象进行任何更改时,其实都是创建另外一个 string 类的对象),所以当需要频繁的对一个 string 类对象进行更改的时候,建议使用StringBuilder 类,StringBuilder 类的原理是首先在内存中开辟一定大小的内存空间,当对此 StringBuilder 类对象进行更改时, 如果内存空间大小不够, 会对此内存空间进行扩充,而不是重新创建一个对象,这样如果对一个字符串对象进行频繁操作的时候,不会造成过多的内存浪费,其实本质上并没有很大区别,都是用来存储和操作字符串的,唯一的区别就在于性能上。
String主要用于公共 API,通用性好、用途广泛、读取性能高、占用内存小。
StringBuilder主要用于拼接 String,修改性能好。
不过现在的编译器已经把String的 + 操作优化成 StringBuilder 了, 所以一般用String 就可以了
String是不可变的,所以天然线程同步。
StringBuilder可变,非线程同步。
14.C#函数 Func(string a, string b)用 Lambda 表达式怎么写/h4>
15. 数列1,1,2,3,5,8,13…第 n 位数是多少 C#递归算法实现
16. 冒泡排序(手写代码)
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!