Unity精华☀️ 面试“堆栈”误区!这样做可能反而会降低吸引力。
Posted 橙子SKODE
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity精华☀️ 面试“堆栈”误区!这样做可能反而会降低吸引力。相关的知识,希望对你有一定的参考价值。
哈喽大家好,你的橙哥突然出现~
本系列博客地址:传送门
关注橙哥的小老弟们都知道,我常说的一句话就是,好东西是吸引来的,而不是去追来的。工作也是。
所以大家开始越来越重视提高自身价值这件事了。
这本来是一件好事,橙哥也感到挺欣慰的。
但是有一说一啊,用力方向也要选对,否则有时候往往会起反效果啊。
有个小老弟跟我说,我已经抓紧一切机会在面试官面前展示自己了呀,看网上教程能背的都背了,怎么感觉他反而有点儿冷淡,不那么热情呢?到底是哪里出了问题?
那今天借着“堆、栈”这个机会,盘一盘怎样让面试官眼前一亮,
一起来看看吧。
一、面试是提供对方想要的
首先我们要知道,面试是提供给对方价值,而不是索求价值。
曾经我用了两周的时间,做了一个手工品当做节日礼物,
手磨起了泡,对方却从没有戴过
有次对方生日,我用了几十块钱,挑了一个对方喜欢的玩具,
结果对方发了朋友圈,并把玩具摆在展示柜😳
橙哥几周的打磨竟然比不上淘宝的几十块钱,就离谱
由此可见想让对方眼前一亮,提供对方喜欢的才是关键。
那面试官为什么要问堆、栈呢?
二、了解你的基础知识储备量
1、堆、栈是什么
栈:全称是线程堆栈 ,栈空间比较小,但是读取速度快。
堆:全称是托管堆,堆空间比较大,但是读取速度慢。
栈是编译期间就分配好的内存空间,因此你的代码中必须就栈的大小有明确的定义;
堆是程序运行期间动态分配的内存空间,你可以根据程序的运行情况确定要分配的堆内存的大小。
栈是一片连续的内存域,由系统自动分配和维护。存放在栈中时要管确定存储顺序,保持着先进后出的原则。
堆是无序的,它是一片不连续的内存域,由用户自己来控制和释放,如果用户自己不释放的话,当内存达到一定的特定值时,系统将会通过垃圾回收器(GC)来回收。
堆只有一种,表示堆内存
而栈有两种:
- 一种是上面说的与堆对应的栈内存
- 另一种是与队列(Queue)对应的数据结构Stack<T>
2、值类型和引用类型在堆上,还是在栈上?
C#中类型被分为两种:
- 值类型(整数,小数,bool,struct,char )
- 引用类型(string,数组,自定义的类,内置的类)
值类型:
只需要一段内存,用于存储实际的数据,存放在栈上
引用类型:
需要两段内存,第一段存储实际的数据,位于堆中,第二段是一个引用,指向数据在堆中的存放位置。即值存在堆上,栈上存引用
值类型和引用类型赋值的区别:
- 将一个值类型变量赋值给另一个值类型变量时,将赋值包含的值
- 引用类型变量的赋值只复制对象的引用,而不复制对象本身。
三、顺带学一下怎样使用堆栈:Stack类
Stack (栈)是常见的数据结构之一,栈是一种先进后出的结构,即元素从栈的尾部插入,从栈的尾部移除,类似于日常生活中搬家的时候装车,先装上车的东西要后拿下来。
Stack 类的方法和属性
属性 | 描述 |
---|---|
Count | 获取 Stack 中包含的元素个数。 |
下表列出了 Stack 类的一些常用的方法:
序号 | 方法名 & 描述 |
---|---|
1 | public virtual void Clear(); 从 Stack 中移除所有的元素。 |
2 | public virtual bool Contains( object obj ); 判断某个元素是否在 Stack 中。 |
3 | public virtual object Peek(); 返回在 Stack 的顶部的对象,但不移除它。 |
4 | public virtual object Pop(); 移除并返回在 Stack 的顶部的对象。 |
5 | public virtual void Push( object obj ); 向 Stack 的顶部添加一个对象。 |
6 | public virtual object[] ToArray(); 复制 Stack 到一个新的数组中。 |
实例
下面的实例演示了堆栈(Stack)的使用:
void Start()
{
Stack st = new Stack();
st.Push('A');
st.Push('M');
st.Push('G');
print("Current stack: ");
foreach (char c in st)
{
print(c);
}
}
当你在面试时,回答道这儿,
面试官的印象可能会是基础扎实,是个认真的同学
更进一步,要达到惊才艳艳,
那还需要让他觉得,你是他面试过这么多人中,最出色的。
那怎样打败和你竞争的人呢?
那是不是应该给面试官想要的感觉:能干活呢?
- 你用过这个东西,能解决他项目中的问题
- 你流利的的说出来了,表达清晰,有自信,让他感觉这活交给你靠谱
那下面这个栈在Unity项目中的应用,可能会给你带来帮助 👇
四、了解你的项目经验
在《设计模式》“命令模式”一节(传送门),我们使用 Stack<> 实现了游戏回放功能。
回放演示效果如下:
点击录制后,使用WASD操作cube移动,
点击回放后,cube自动运动,演示回放。
我们能看到,使用栈的思路是:
将之前的操作步骤存到栈中,
在回放时,拿出之前存的数据,将这些命令执行到被操作的物体上,完成回放操作。
根据栈的先进后出的特性,我们要知道,
栈的不仅可以应用在回放上,我们也能把它用在:
- PS的撤销、重做上
- 画画的撤销、重做上
- UI页面的上一页、下一页、返回上。。。
感兴趣的同学可以做一下《设计模式》一节的功能哦
好啦,本节分享就到这儿了,有其他问题在下方留言~
如果你有技术上的问题或困扰
都可以加我的vx(skode250)
和我聊一聊你的故事🧡
以上是关于Unity精华☀️ 面试“堆栈”误区!这样做可能反而会降低吸引力。的主要内容,如果未能解决你的问题,请参考以下文章
Unity精华☀️ 哥哥,你会这么多「设计模式」,面试官会心疼你吧
Unity精华☀️ 哥哥,「设计模式」能解决游戏回放呀,你尝一口!
Unity精华☀️到底是什么原因导致“万向锁”?旋转翻车的终极解析!