2020年Unity面試題總結

之前面試的時候看了網上的unity面試題,考的時候一個都沒考到,考的巨難,工資還低。這幾天又開始面試,結果發現考的又是網上流傳的unity面試題了,但是我又沒記,考的大部分都看過相關的知識,沒有牢記,考的時候就說的模糊不清。。面了兩三家才發現之前那家是個奇葩。。還是好好複習unity的基礎吧。

哇我好後悔啊啊啊啊!!!

================================================================================================

 

1.TCP和UDP的區別

TCP和UDP是TCP/IP協議簇中傳輸層的傳輸協議

Tcp是面向連接的,可靠地的,面向字節流的傳輸。TCP在連接時需要三次回收,在斷開時需要四次揮手。TCP的鏈接是點到點的鏈接。Tcp收到的數據保證順序,TCP有着擁塞控制,超時重發,丟棄重複數據,檢驗數據等機制。

UDP是面向數據包的,不可靠,包頭簡單,傳輸速度快。可以一對一,一對多,多對多,多對一發送,無需建立鏈接,沒有擁塞控制,即使網絡擁塞了也會不斷的發送數據。目前在實時應用中,如遊戲直播等,雖然UDP不可靠,但是得益於網速的提升以及可以自己編寫重傳機制來保證UDP的可靠性。

2.Http和Https的區別

簡單來說,Http屬於明文傳輸,不安全,https屬於加密傳輸,較安全。

http是無狀態的連接,通過銘文傳輸,信息可能被攔截,篡改等等。HTTPS是HTTP的安全加強版,HTTPS 協議是由 SSL+HTTP 協議構建的可進行加密傳輸、身份認證的網絡協議,比 http 協議安全。

https://www.leiue.com/http-vs-https

3.Animation和Animator的區別

Animation需要通過代碼手動控制動畫的播放和遷移。而Animator擁有有動畫狀態機,可以通過動畫狀態機來設置動畫之間的狀態,並且可以爲單個動畫設置腳本代碼來控制事件。

4.MonoBehaviour的生命週期

基礎的生命週期有

Rest->Awake->OnEnable->OnStart->Update->FixedUpdate->LateUpdate->OnDrawGizomo-OnGUI->OnDisable->OnDestroy->OnApplicationQuit

5.類和結構體的區別?使用環境?

結構體是值類型,類是引用類型。結構體存儲在棧中,類存儲在堆中,棧的空間小但是訪問快,堆的空間大但是訪問速度較慢。

結構體不能繼承,不能創建默認構造函數和析構函數。結構成員不能指定爲 abstract、virtual 或 protected。結構體的構造函數必須爲所有值賦初值。

結構體一般存儲較爲輕量的數據,類一般存儲具有較爲複雜邏輯結構的數據。

使用環境:

(1)當堆棧的空間很有限,且有大量的邏輯對象時,創建類要比創建結構好一些;

(2)對於點、矩形和顏色這樣的輕量對象,假如要聲明一個含有許多個顏色對象的數組,則CLR需要爲每個對象分配內存,在這種情況下,使用結構的成本較低;

(3)在表現抽象和多級別的對象層次時,類是最好的選擇,因爲結構不支持繼承。

   引用:https://www.cnblogs.com/lvqiang/archive/2019/09/18/11539599.html

6.有一本牛津詞典,現在輸入一串字母組成一個單詞,怎麼樣快速查詢詞典中是否有這個單詞。

使用樹結構來存儲詞典的單詞,以字母爲順序分別放在相應的子樹中。然後根據輸入將字母從左到右分級並根據樹的結構依次查詢。

引用:https://www.jianshu.com/p/bcbdae8cc250

7.在一段文本中,有許多"{}"和"[]"和"()",判斷這段文本中的括號是否使用正確?

if(sss){

asaasdasdas}是合法的。

if(asa

{}是非法的。

使用棧的結構進判斷,將所有括號依次入棧,當一次入棧是右括號時判斷之前的棧頂是否是對應的左括號,如果是說明合法,將之前的左括號和現在入棧的右括號都出棧。然後繼續將新的括號依次入棧,當有一次入棧非法即可判定非法,或者知道最後全部判定合法則判定該文本合法。

9.棧和堆誰比較快?爲什麼?

面試官問區別還答出來了,問誰比較快的原因就懵了。。

(1)棧有專門的寄存器,堆是隨機內存。

(2)棧是在一級緩存上運行的,而堆是在二級緩存上運行的。

(3)訪問棧上的數據只需一次,而訪問堆上的數據需要兩次,先訪問棧,再訪問堆。

引用:https://zhidao.baidu.com/question/559387653310081364.html

10抽象類和接口的區別?

抽象類和接口都不能實例化。

抽象類可以有抽象的的方法和未抽象的的方法,可以通過子類來重寫。抽象類主要是子類的通用結構。

常量、字段、運算符、實例構造函數、析構函數或
類型、不能包含靜態成員。接口不能有實現的方法。接口主要是作爲規範來使用。

11.值類型和引用類型的區別?

 

12.Update和FixedUpdate的區別?

13.常用的數據結是?

14.對象池使用什麼數據結構構建?

15.我回答用List後面試官就不幹了,非要問我爲什麼不用字典。。(當時的想法:人家Unity官方大會都用的List,你非要我用字典。。)

然後問:List和隊列的區別?

隊列從隊尾,隊首和中間出隊的區別是什麼??

先說字典,其實本意上是差不多的,我的想法是在輕量級的對象池情況下,直接將所有物品存儲在對象池中,取出的時候for循環遍歷,查找相同名字時就可以取出。

面試後我查詢字典對象池才明白麪試官的意思。

private static Dictionary<string, ArrayList> pool = new Dictionary<string, ArrayList>{ };

通過一個字典維護所有對象池,根據名稱種類來直接從分類好的數組列表中取出一個即可。也可以使用隊列。

16.協程和線程的區別?

 

17:棧和堆,誰比較快,爲什麼

棧:Stack,容量較小,由內存維護,申請速度較快,但不受程序員控制。主要存儲代碼執行或調用的路徑。棧只能從最頂層取。棧中數據被調用完畢後會被清除。

堆: Heap,容量較大,使用方便,申請較慢但容易產生內存碎片。堆負責保存對象和數據的路徑。堆可以從任意位置存取。堆的數據被調用完畢後不會被清除,只有系統執行垃圾回收時纔會清除沒有引用的數據。

值類型數據總是被放在他被聲明的地方,比如在類中聲明的全局值類型,類是引用類型,會被放在堆中,因此類會被放在堆中,進而值類型也會被被放在引用類型中。而如果是在方法中聲明的局部值類型數據則會被放在棧中,因爲方法會被放在棧中。

指針,在c#中,引用類型是指此類型數據是通過指正來引用的,指針是它指向引用類型,指針可以被放在棧中或堆中。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章