之前面试的时候看了网上的unity面试题,考的时候一个都没考到,考的巨难,工资还低。这几天又开始面试,结果发现考的又是网上流传的unity面试题了,但是我又没记,考的大部分都看过相关的知识,没有牢记,考的时候就说的模糊不清。。面了两三家才发现之前那家是个奇葩。。还是好好复习unity的基础吧。
哇我好后悔啊啊啊啊!!!
================================================================================================
1.TCP和UDP的区别
TCP和UDP是TCP/IP协议簇中传输层的传输协议
Tcp是面向连接的,可靠地的,面向字节流的传输。TCP在连接时需要三次回收,在断开时需要四次挥手。TCP的链接是点到点的链接。Tcp收到的数据保证顺序,TCP有着拥塞控制,超时重发,丢弃重复数据,检验数据等机制。
UDP是面向数据包的,不可靠,包头简单,传输速度快。可以一对一,一对多,多对多,多对一发送,无需建立链接,没有拥塞控制,即使网络拥塞了也会不断的发送数据。目前在实时应用中,如游戏直播等,虽然UDP不可靠,但是得益于网速的提升以及可以自己编写重传机制来保证UDP的可靠性。
2.Http和Https的区别
简单来说,Http属于明文传输,不安全,https属于加密传输,较安全。
http是无状态的连接,通过明文传输,信息可能被拦截,篡改等等。HTTPS是HTTP的安全加强版,HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 http 协议安全。
https://www.leiue.com/http-vs-https
3.Animation和Animator的区别
Animation需要通过代码手动控制动画的播放和迁移。而Animator拥有有动画状态机,可以通过动画状态机来设置动画之间的状态,并且可以为单个动画设置脚本代码来控制事件。
4.MonoBehaviour的生命周期
基础的生命周期有
Rest->Awake->OnEnable->OnStart->FixedUpdate->Update->->LateUpdate->OnDrawGizomo-OnGUI->OnDisable->OnDestroy->OnApplicationQuit
这里的fixedUpdate因为设置的原因或者帧数的原因一帧可能执行多次,但是在一帧内本人不知道是先执行n次fixedUpdate后再执行update还是update穿插在n次fixedUpdate中执行,没搜到
5.类和结构体的区别?使用环境?
结构体是值类型,类是引用类型。结构体存储在栈中,类存储在堆中,栈的空间小但是访问快,堆的空间大但是访问速度较慢。
结构体不能继承,不能创建默认构造函数和析构函数。结构成员不能指定为 abstract、virtual 或 protected。结构体的构造函数必须为所有值赋初值。
结构体一般存储较为轻量的数据,类一般存储具有较为复杂逻辑结构的数据。
使用环境:
(1)当堆栈的空间很有限,且有大量的逻辑对象时,创建类要比创建结构好一些;
(2)对于点、矩形和颜色这样的轻量对象,假如要声明一个含有许多个颜色对象的数组,则CLR需要为每个对象分配内存,在这种情况下,使用结构的成本较低;
(3)在表现抽象和多级别的对象层次时,类是最好的选择,因为结构不支持继承。
引用:https://www.cnblogs.com/lvqiang/archive/2019/09/18/11539599.html
6.有一本牛津词典,现在输入一串字母组成一个单词,怎么样快速查询词典中是否有这个单词。
使用树结构来存储词典的单词,以字母为顺序分别放在相应的子树中。然后根据输入将字母从左到右分级并根据树的结构依次查询。
引用:https://www.jianshu.com/p/bcbdae8cc250
7.在一段文本中,有许多"{}"和"[]"和"()",判断这段文本中的括号是否使用正确?
如
if(sss){
asaasdasdas}是合法的。
if(asa
{}是非法的。
使用栈的结构进判断,将所有括号依次入栈,当一次入栈是右括号时判断之前的栈顶是否是对应的左括号,如果是说明合法,将之前的左括号和现在入栈的右括号都出栈。然后继续将新的括号依次入栈,当有一次入栈非法即可判定非法,或者知道最后全部判定合法则判定该文本合法。
9.栈和堆谁比较快?为什么?
面试官问区别还答出来了,问谁比较快的原因就懵了。。
(1)栈有专门的寄存器,堆是随机内存。
(2)栈是在一级缓存上运行的,而堆是在二级缓存上运行的。
(3)访问栈上的数据只需一次,而访问堆上的数据需要两次,先访问栈,再访问堆。
引用:https://zhidao.baidu.com/question/559387653310081364.html
10抽象类和接口的区别?
抽象类和接口都不能实例化。
抽象类可以有抽象的的方法和未抽象的的方法,可以通过子类来重写。抽象类主要是子类的通用结构。
常量、字段、运算符、实例构造函数、析构函数或
类型、不能包含静态成员。接口不能有实现的方法。接口主要是作为规范来使用。
11.值类型和引用类型的区别?
12.Update和FixedUpdate的区别?
13.常用的数据结是?
14.对象池使用什么数据结构构建?
15.我回答用List后面试官就不干了,非要问我为什么不用字典。。(当时的想法:人家Unity官方大会都用的List,你非要我用字典。。)
然后问:List和队列的区别?
队列从队尾,队首和中间出队的区别是什么??
先说字典,其实本意上是差不多的,我的想法是在轻量级的对象池情况下,直接将所有物品存储在对象池中,取出的时候for循环遍历,查找相同名字时就可以取出。
面试后我查询字典对象池才明白面试官的意思。
private static Dictionary<string, ArrayList> pool = new Dictionary<string, ArrayList>{ };
通过一个字典维护所有对象池,根据名称种类来直接从分类好的数组列表中取出一个即可。也可以使用队列。
16.协程和线程的区别?
17:栈和堆,谁比较快,为什么
栈:Stack,容量较小,由内存维护,申请速度较快,但不受程序员控制。主要存储代码执行或调用的路径。栈只能从最顶层取。栈中数据被调用完毕后会被清除。
堆: Heap,容量较大,使用方便,申请较慢但容易产生内存碎片。堆负责保存对象和数据的路径。堆可以从任意位置存取。堆的数据被调用完毕后不会被清除,只有系统执行垃圾回收时才会清除没有引用的数据。
值类型数据总是被放在他被声明的地方,比如在类中声明的全局值类型,类是引用类型,会被放在堆中,因此类会被放在堆中,进而值类型也会被被放在引用类型中。而如果是在方法中声明的局部值类型数据则会被放在栈中,因为方法会被放在栈中。
指针,在c#中,引用类型是指此类型数据是通过指正来引用的,指针是它指向引用类型,指针可以被放在栈中或堆中。
转载:https://blog.csdn.net/qq_37724011/article/details/106690433