2020年Unity面试题总结

之前面试的时候看了网上的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->Update->FixedUpdate->LateUpdate->OnDrawGizomo-OnGUI->OnDisable->OnDestroy->OnApplicationQuit

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#中,引用类型是指此类型数据是通过指正来引用的,指针是它指向引用类型,指针可以被放在栈中或堆中。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章