[C#,Unity面试题](四)

目录

一、C#

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

2.什么是闭包?

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

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

二、Unity

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

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

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

4.请简述热更新的流程

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


一、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进制等。就是将内存中的数据按照我们自己定义的规则进行序列化,序列化之后就可以用于存储和传输,当读取和接受数据时,只需要按照对应规则进行反序列化便可得到原始数据

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

二、Unity

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

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

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

 

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

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

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

答案:
观察者模式
Unity基础小框架中讲解的 事件中心 就是基于观察者模式的
是一种订阅通知机制

4.请简述热更新的流程

答案:
本地存在资源对比文件和已有资源
1.下载资源服务器中的对比文件
2.将下载下来的远端对比文件和本地的做对比
   记录需要更新的资源和要移除的资源
3.根据第二步中记录的信息,进行资源下载和移除
4.更新本地对比文件,其内容和刚才下载的远端对比文件一致

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

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

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值