Unity面试题一日一讲 B站游戏石匠视频讲解 学习笔记

三叶虫也能看懂的Unity面试题一日一讲

求最少需要多少场赛跑,可以求出其中跑的最快的三头猪。
(最少多少场可以百分百保证求出正确结果)
答案: 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)和 ^(逻辑异或)运算符

位运算符和移位运算符(C# 参考)

异或逻辑的关系是:当AB不同时,输出P=1;当AB相同时,输出P=0。

Layer层 位运算
Debug.Log(LayerMask.GetMask("Bank"))

posted @ 2023-03-12 15:46  专心Coding的程侠  阅读(27)  评论(0编辑  收藏  举报