哈嘍大家好,你的橙哥突然出現~
本系列博客地址:傳送門

關注橙哥的小老弟們都知道,我常說的一句話就是,好東西是吸引來的,而不是去追來的,作業也是,
所以大家開始越來越重視提高自身價值這件事了,
這本來是一件好事,橙哥也感到挺欣慰的,
但是有一說一啊,用力方向也要選對,否則有時候往往會起反效果啊,
有個小老弟跟我說,我已經抓緊一切機會在面試官面前展示自己了呀,看網上教程能背的都背了,怎么感覺他反而有點兒冷淡,不那么熱情呢?到底是哪里出了問題?
那今天借著“堆、堆疊”這個機會,盤一盤怎樣讓面試官眼前一亮,
一起來看看吧,

一、面試是提供對方想要的
首先我們要知道,面試是提供給對方價值,而不是索求價值,
曾經我用了兩周的時間,做了一個手工品當位元組日禮物,
手磨起了泡,對方卻從沒有戴過
有次對方生日,我用了幾十塊錢,挑了一個對方喜歡的玩具,
結果對方發了朋友圈,并把玩具擺在展示柜😳
橙哥幾周的打磨竟然比不上淘寶的幾十塊錢,就離譜

由此可見想讓對方眼前一亮,提供對方喜歡的才是關鍵,
那面試官為什么要問堆、堆疊呢?
二、了解你的基礎知識儲備量
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)
和我聊一聊你的故事🧡
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/286703.html
標籤:其他
上一篇:陣列游戲——三子棋
