【春秋招必看】Unity相关笔试面试题(内有完整答案)第三期

欢迎来到光光的奇妙冒险,我是你们的煎饼光子老师。

今天是我们的第三期笔试面试题总结。


C#部分:

1、泛型的约束有哪几种?

答案:
1.值类型约束 T:struct
2.引用类型约束 T:class
3.公共无参构造约束 T:new()
4.类约束 T:类名
5.接口约束 T:接口名
6.另一个泛型约束 T:U

2、什么是闭包?可以举例说明

答案:
闭包是指有权访问另一个函数作用域中的变量的函数
所以闭包一般都是指的一个函数
创建这种特殊闭包函数的方式往往是在一个函数中创建另一个函数

3、内存泄漏指什么?常见的内存泄漏有哪些?

答案:
内存泄漏指的就是对象超过生命周期后而不能被GC回收,一般指不会再使用的引用对象由于某些操作而不能被GC垃圾回收,而一直占用着内存

更风趣通俗一点的说就是:没用的家伙没有被当成垃圾回收

常见的内存泄漏有:
1.静态引用
2.不使用的引用对象没有置null,一直被引用
3.文件操作时,没有使用using或者没有进行Dispose()
4.委托或事件注册后没有解除注册(有加就有减)
等等

4、序列化是什么?常见的序列化方式有哪些?什么时候我们会用到序列化?

答案:
序列化是将程序中数据对象转换为可以存储或传输的形式 的过程。
举例:
比如我们常见的序列化方式 xml、Json、2进制等。就是将内存中的数据按照我们自己定义的规则进行序列化,序列化之后就可以用于存储和传输,当读取和接受数据时,只需要按照对应规则进行反序列化便可得到原始数据

所谓的存储读取和传输接受,其实一般指的就是数据持久化和网络通讯
所以我们经常会在这两块知识点看到序列化反序列化这两个关键词

5、请问A、B、C 三处打印结果分别为多少?为什么?

答案:
A是10,B和C为100

Test1处参数传递进去后,函数内部的形参value是在栈上重新开辟的空间,将传入参数的值拷贝到了该空间中,和传入参数没有关系

Test2处参数是指针类型,指针是用于存储内存地址的变量,我们传入的是值得地址&test2Value,在函数内部改变的是地址中存储的值,所以外部的test2Value会随之改变

Test3处ref关键字,底层逻辑中是将value作为test3Value的一个别名,他们指向的空间一致,所以value改变后,外部的test3Value也会改变


Unity部分:

1、transform.forward和Vector3.forword的区别

答案:
Vector3.forword始终时(0,0,1)
可以认为是世界坐标系的Z轴朝向

transform.forword是当前物体的局部坐标系的Z轴在世界坐标系下的朝向
可以认为是物体自己的Z轴朝向

2、Unity中如何解决过多创建和删除对象带来的卡顿问题?

答案:
可以通过协同程序,分时分步创建或删除
原理是避免一帧中处理太多对象

3、游戏中的成就系统,我们一般会使用设计模式中的哪种模式来制作?为什么?

答案:
观察者模式

4、请简述热更新的流程

答案:

第一步:客户端到服务器端获取资源服务器地址

第二步:在资源服务器中下载资源对比文件,通过资源对比文件把远程的AB包和本地的AB包进行一个对比,然后更新

5、我们应该如何优化UI(基于UGUI)

答案:
性能上
1.打图集,将同一画面的图片放入一个图集中,目的是减少DrawCall
2.面板中的图片和文字尽量不要交叉,因为这样会产生多余的DrawCall
3.取消勾选不必要的射线检测,UI组件上的
4.减少透明图片的重叠使用
等等

内存上
1.大图尽量使用9宫格缩放,让美术设计UI面板底图时不要过于复杂
尽量是有规律的纹理和颜色变化
2.图片的RGBA通道分离
等等

猜你喜欢

转载自blog.csdn.net/Blueberry124/article/details/142437268