Unity面试题一日一讲 B站游戏石匠视频讲解 学习笔记
求最少需要多少场赛跑,可以求出其中跑的最快的三头猪。
(最少多少场可以百分百保证求出正确结果)
答案: 9场。
堆栈问题
有如下一个类
public class Bar
{ public int member;
}
请问,当这个类实例化以后,其成员member,它存储在堆上,还是栈上?
并说明理由。
答案:堆上。
栈上只有临时的东西,持久化的东西在堆上。
如果成员是new的,在栈上的只是引用,成员本体是在堆上的。
GC 垃圾回收,频繁的垃圾回收会降级运行时的性能。
什么时候用到垃圾回收呢? 当我们开辟了内存空间,后来这个引用失效,垃圾回收开始起作用。
知道堆栈的存储位置,有助于进一步了解GC的机制。
如果在运算中可以解决的值,就不要定义为成员变量,直接在运算中 临时算,算完就行了,这些都是值类型,在栈上就消失了。
小型的类可以使用struct而不是class,但是struct的复制是挺慢的,有时候甚至是需要主动的用空间换取时间。
答案:使用泛型更好
可变参数列表的实质是什么?
将传进来的参数 变成一个数组,并传入函数当中。
在此过程中,产生了一个新的数组。
在这个过程中就new了这个数组,new 就需要GC,产生了GC。
使用参数列表,其中还有隐式类型转换。 如把值类型的实际参数传入到obejct(类型形式参数)的时候,其中发生了一个隐式类型转换,在这个过程的时候就发生了装箱boxing,装箱同样产生了GC。 如果使用可变参数列表,就会产生更多GC。
(装箱是将 值类型 转换为 object 类型或由此值类型实现的任何接口类型的过程。 对值类型进行装箱时,必须分配并构造一个新对象。 取消装箱所需的强制转换也需要进行大量的计算,只是程度较轻。)
频繁显示隐藏的情况下,update()和lateUpdate()的消耗本身也难以避免。
通过修改layer 使用相机不再渲染
OnEnable() OnDisable()这两个方法是不会被调用的,位置也不会发生变化。 这两种性能更好。
(状态组合方式 2^23种组合方式)
逻辑非运算符 !
逻辑与运算符 &
逻辑异或运算符 ^
逻辑或运算符 |
条件逻辑与运算符 &&
条件逻辑或运算符 ||
一元 ~(按位求补)运算符
二进制 <<(左移)、>>(右移)和 >>>(无符号右移)运算符
二进制 &(逻辑 AND)、|(逻辑 OR)和 ^(逻辑异或)运算符
异或逻辑的关系是:当AB不同时,输出P=1;当AB相同时,输出P=0。
Layer层 位运算
Debug.Log(LayerMask.GetMask("Bank"))