Unity精华☀️ 面试“堆、栈”误区!这样做可能反而会降低吸引力

本文涉及的产品
智能开放搜索 OpenSearch行业算法版,1GB 20LCU 1个月
实时计算 Flink 版,5000CU*H 3个月
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 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<> 实现了游戏回放功能。

1️⃣ 回放演示效果

点击录制后,使用WASD操作cube移动,

点击回放后,cube自动运动,演示回放。

2️⃣ 使用栈的思路

将之前的操作步骤存到栈中,

在回放时,拿出之前存的数据,将这些命令执行到被操作的物体上,完成回放操作。

根据栈的先进后出的特性,我们要知道,

栈的不仅可以应用在回放上,我们也能把它用在:

  • PS的撤销、重做上
  • 画画的撤销、重做上
  • UI页面的上一页、下一页、返回上。。。
相关文章
|
2月前
|
Java
【Java基础面试三十二】、new String(“abc“) 是去了哪里,仅仅是在堆里面吗?
这篇文章解释了Java中使用`new String("abc")`时,JVM会将字符串直接量"abc"存入常量池,并在堆内存中创建一个新的String对象,该对象会指向常量池中的字符串直接量。
|
2月前
|
存储 安全 Java
JVM常见面试题(二):JVM是什么、由哪些部分组成、运行流程,JDK、JRE、JVM关系;程序计数器,堆,虚拟机栈,堆栈的区别是什么,方法区,直接内存
JVM常见面试题(二):JVM是什么、由哪些部分组成、运行流程是什么,JDK、JRE、JVM的联系与区别;什么是程序计数器,堆,虚拟机栈,栈内存溢出,堆栈的区别是什么,方法区,直接内存
JVM常见面试题(二):JVM是什么、由哪些部分组成、运行流程,JDK、JRE、JVM关系;程序计数器,堆,虚拟机栈,堆栈的区别是什么,方法区,直接内存
|
2月前
|
安全 Java
虚拟机栈的五道面试题
这篇文章提供了关于Java虚拟机栈的五个面试问题,涉及栈溢出的情况、栈大小调整、栈内存的分配、垃圾回收与虚拟机栈的关系以及局部变量的线程安全性。
|
3月前
|
存储 Java 程序员
Java面试题:方法区在JVM中存储什么内容?它与堆内存有何不同?
Java面试题:方法区在JVM中存储什么内容?它与堆内存有何不同?
56 10
|
3月前
|
存储 安全 Java
Java面试题:在JVM中,堆和栈有什么区别?请详细解释说明,要深入到底层知识
Java面试题:在JVM中,堆和栈有什么区别?请详细解释说明,要深入到底层知识
56 3
|
3月前
|
存储 缓存 监控
Java面试题:解释堆和栈的OutOfMemoryError通常在什么情况下会发生
Java面试题:解释堆和栈的OutOfMemoryError通常在什么情况下会发生
43 3
|
3月前
|
存储 设计模式 监控
Java面试题:简述JVM的内存结构,包括堆、栈、方法区等。栈内存优化的方法有 哪些?
Java面试题:简述JVM的内存结构,包括堆、栈、方法区等。栈内存优化的方法有 哪些?
36 0
|
3月前
|
Java 开发者
Java面试题:Java内存管理精要与多线程协同策略,Java内存管理:堆内存、栈内存、方法区、垃圾收集机制等,多线程编程的掌握,包括线程创建、同步机制的原理
Java面试题:Java内存管理精要与多线程协同策略,Java内存管理:堆内存、栈内存、方法区、垃圾收集机制等,多线程编程的掌握,包括线程创建、同步机制的原理
31 0
|
3月前
|
算法 Java 开发者
Java面试题:Java内存探秘与多线程并发实战,Java内存模型及分区:理解Java堆、栈、方法区等内存区域的作用,垃圾收集机制:掌握常见的垃圾收集算法及其优缺点
Java面试题:Java内存探秘与多线程并发实战,Java内存模型及分区:理解Java堆、栈、方法区等内存区域的作用,垃圾收集机制:掌握常见的垃圾收集算法及其优缺点
30 0
|
3月前
|
算法 安全 Java
Java面试题:解释JVM中的堆内存分代收集策略,并讨论年轻代和老年代的特点,描述Java中的线程池,并解释线程池的优点,解释Java中的`volatile`关键字的作用和使用场景
Java面试题:解释JVM中的堆内存分代收集策略,并讨论年轻代和老年代的特点,描述Java中的线程池,并解释线程池的优点,解释Java中的`volatile`关键字的作用和使用场景
35 0
下一篇
无影云桌面