日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Unity3D丨面试题目

發布時間:2023/12/14 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Unity3D丨面试题目 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

語言


C#

CLR的原理

CLR全稱Common Language Runtime(公共語言運行庫),可以理解為.Net Framework的虛擬機,.Net Framework編譯時不同的語言最終都會被編譯成中間語言IL(Immediate Language),CLR在運行時會用實時編譯器JIT(Just In Time)把IL動態編譯成對應平臺的可執行代碼從而實現跨平臺

GC的原理

GC全稱Garbage Collector(垃圾回收器),負責管理內存堆,當GC進行垃圾回收時,會找出內存堆上沒有任何引用的對象進行清理,并通知內存棧上的指針重新指向地址排序后的對象,GC只能管理托管資源,對于非托管資源像FileStream或SqlConnection需要調用Dispose手動清理

內存棧和內存堆的對比

1.內存棧一般負責跟蹤程序的運行,內存堆一般負責跟蹤程序的數據

2.內存棧空間是連續的,由系統管理,內存堆空間是不連續的,由GC管理

3.值類型的變量和數據以及引用類型的變量一般分配在內存棧上,引用類型的數據一般分配在內存堆上

值類型和引用類型的對比

1.值類型包括struct、enum、int、float、char、bool等,引用類型包括string、class、delegate、interface等

2.值類型一般直接繼承自System.ValueType,引用類型一般直接繼承自System.Object,但值類型和引用類型都最終繼承自System.Object

3.值類型的變量和數據都分配在內存棧上,引用類型的變量和數據分別分配在內存棧上和內存堆上,內存棧由系統管理,內存堆由GC管理

4.值類型作為參數傳遞時不影響自身,引用類型作為參數傳遞時會影響自身

裝箱和拆箱的對比

1.裝箱是將值類型轉換為引用類型,拆箱是將引用類型轉換為值類型

2.裝箱是隱式轉換,拆箱是顯式轉換

重載和重寫的對比

1.重載在同類中,重寫在父子類

2.重載是方法名相同而參數不同,重寫是方法名和參數都相同

3.重載是編譯時多態,重寫是運行時多態

抽象類和接口的對比

1.抽象類是對類的抽象,接口是對類的規范

2.抽象類只能被單一繼承,接口可以被多重實現,但抽象類和接口都不能被實例化

3.抽象類成員必須使用public修飾,接口成員默認使用public且不能用abstract 、override修飾;

4.抽象類可以包含字段、屬性、方法、索引器、事件、構造函數、析構函數,接口只能包含屬性、方法、索引器、事件

委托和事件的對比

1.委托是一種存儲函數引用的類型,事件是一種特殊的委托

2.委托可以在類的內部和外部被調用,事件只能在類的內部被調用

3.委托可以進行=、+=、-=操作,事件只能進行+=、-=操作

反射的原理

反射可以在運行時動態獲取程序集信息,還可以創建實例和調用方法,反射可以讓程序更加靈活,但是會有性能損耗


C++

程序編譯的原理

1.預處理,將帶頭文件預處理命令的源程序文件修改成插入頭文件內容的源程序文件

2.編譯,將源程序文件翻譯成匯編程序文件

3.匯編,將匯編程序文件翻譯成目標程序文件(機器程序文件)

4.鏈接,將當前目標程序文件和調用的其他目標程序文件合并成可執行目標程序文件(可執行文件)

靜態鏈接和動態鏈接的對比

1.靜態鏈接的內容在鏈接時會一起合并成可執行文件,執行速度快,動態鏈接的內容在運行時才會鏈接,執行速度慢

2.靜態鏈接的內容在內存中會有多份,空間利用率低,動態鏈接的內容在內存中只有一份,空間利用率高

3.靜態鏈接每次更新內容都需要重新鏈接,動態鏈接每次更新內容無需重新鏈接

虛函數的原理

帶有虛函數的類,編譯器會為其額外分配一個虛函數表,里面記錄著虛函數的地址,當此類被繼承時,子類如果也寫了虛函數就在子類的虛函數表中將父類的函數地址覆蓋,否則繼承父類的虛函數地址,實例化之后,對象有一個虛函數指針,虛函數指針指向虛函數表,這樣程序運行的時候,通過虛函數指針就能找到對應的虛函數


思想


數據結構

數組和鏈表的對比

1.數組是一種存儲單元上連續的線性表,鏈表是一種存儲單元上非連續的線性表

2.數組通過下標訪問,無需存儲數據元素的邏輯關系,訪問效率高,鏈表通過指針訪問,需要存儲數據元素的邏輯關系,訪問效率低

3.數組長度固定,不支持動態分配,插入和刪除操作需要移動其他數據元素,空間利用率低,鏈表長度不固定,支持動態分配,插入和刪除操作不需要移動其他數據元素,空間利用率高

棧和隊列的對比

1.棧是一種在尾部進行插入和刪除操作的線性表,隊列是一種在尾部進行插入操作和在頭部進行刪除操作的線性表

2.棧的特點是先進后出,隊列的特點是先進先出

棧實現隊列

棧A初始輸入數據,棧B初始沒有數據,數據入棧時正常進入棧A,數據出棧時把棧A的數據依次出棧后再依次進入棧B,棧A的最后一個數據直接出棧不進入棧B,棧B的數據依次出棧后再依次進入棧A,這樣進棧和出棧的數據就實現了隊列先進先出的特點

隊列實現棧

隊列A初始輸入數據,隊列B初始沒有數據,數據入隊列時正常進入隊列A,數據出隊列時把隊列A的數據依次出隊列后再依次進入隊列B,隊列A的最后一個數據直接出隊列不進入隊列B,隊列B的數據依次出隊列后再依次進入隊列A,這樣進隊列和出隊列的數據就實現了棧先進后出的特點

哈希函數構造的方法

直接定址法,數字分析法,平方取中法,折疊法,除留余數法,隨機數法

哈希沖突處理的方法

開放定址法,再哈希函數法,鏈地址法,公共溢出區法

字典的原理

字典主要通過Index數組和Element數組來實現,Element是一種包含HashCode、Next、Key、Value的結構體,當字典添加Key和Value時會先用哈希函數計算Key的HashCode生成一個新的Element,Element會先存儲在Element數組里,然后Index數組會在HashCode對應的下標位置存儲Element在Element數組的下標,每添加一個新的Element后Element數組都會正常增加而不會產生沖突,但Index數組會因為HashCode可能相同而產生沖突,字典采用鏈地址法解決沖突,當Index數組遇到HashCode對應的下標位置已經存在數據時,會讓新的Element的Next等于舊的Element在Element數組的下標,然后Index數組的當前下標位置會存儲新的Element在Element數組的下標,這樣HashCode沖突的位置就會形成一條Element鏈,當字典查找Key時會先找到HashCode對應的Index數組下標位置,如果當前位置有沖突則會遍歷Element鏈對比Key來找到對應的Value


算法分析

排序算法的對比

排序方法平均情況最好情況最壞情況輔助空間是否穩定
冒泡排序O(n^2)O(n)O(n^2)O(1)
選擇排序O(n^2)O(n^2)O(n^2)O(1)
插入排序O(n^2)O(n)O(n^2)O(1)
希爾排序O(nlogn) -?O(n^2)O(n^1.3)O(n^2)O(1)
堆排序O(nlogn)O(nlogn)O(nlogn)O(1)
歸并排序O(nlogn)O(nlogn)O(nlogn)O(n)
快速排序O(nlogn)O(nlogn)O(n^2)O(logn) -?O(n)

快速排序的代碼

public void QuickSort(List<int> list, int low, int high)
{
? ? int middle = 0;

? ? if (low < high)
? ? {
? ? ? ? middle = GetMiddle(list, low, high);
? ? ? ? QuickSort(list, low, middle - 1);
? ? ? ? QuickSort(list, middle + 1, high);
? ? }
}

public int GetMiddle(List<int> list, int low, int high)
{
? ? int middle = list[low];

? ? while (low < high)
? ? {
? ? ? ? while (low < high && list[high] >= middle)
? ? ? ? {
? ? ? ? ? ? high--;
? ? ? ? }

? ? ? ? Swap (list, low, high);

? ? ? ? while (low < high && list[low] <= middle)
? ? ? ? {
? ? ? ? ? ? low++;
? ? ? ? }

? ? ? ? Swap (list, low, high);
? ? }

? ? return low;
}

public void Swap(List<int> list, int low, int high)
{
? ? int temp = 0;

? ? if (low != high)
? ? {
? ? ? ? temp = list[low];
? ? ? ? list[low] = list[high];
? ? ? ? list[high] = temp;
? ? }
}

快速排序的優化

快速排序的中值位置是影響快速排序速度的主要因素,只需要每次快速排序時對當前序列不取第一個數當中值而是進行抽樣取中值即可


設計模式

面向對象的定義

面向對象是一種以對象為核心的程序設計方法,該方法認為現實世界是由對象組成的,類是事物的抽象,包含事物的屬性和行為,對象是類的實例,對象之間通過消息傳遞信息

面向對象的特性

1.封裝,隱藏對象的屬性和行為

2.繼承,子類繼承父類的屬性和行為

3.多態,相同行為有不同的實現方法

面向對象的原則

1.單一職責原則,一個類應該僅有一個引起變化的原因

2.開放封閉原則,類和對象等應該可以擴展,但不可修改

3.里氏替換原則,子類必須能夠替換父類

4.依賴倒置原則,高層模塊不應該依賴底層模塊,兩者都應該依賴其抽象,抽象不應該依賴細節,細節應該依賴抽象

5.接口隔離原則,類之間的依賴應該建立在最小的接口上

6.迪米特法則,對象之間應該保持最小的聯系


理論


組成原理

計算機的組成

控制器,運算器,存儲器,輸入設備,輸出設備

CPU調度的算法

先進先出算法,短進程優先算法,時間片輪轉算法,優先級算法

CPU多級緩存的作用

解決CPU和內存之間訪問速度差異過大的問題,多級緩存的訪問速度介于CPU和內存之間,多級緩存會根據策略存儲內存中最容易訪問的內容,CPU會優先從多級緩存中查找內容,如果沒有再從內存中查找內容,以此來減少CPU和內存之間的速度差異

虛擬內存的作用

1.每個進程都有一塊獨立的虛擬內存地址,每個進程使用的內存都和主存一樣

5.每個進程都有一塊連續的虛擬內存地址,無需關心虛擬內存地址對應的物理內存地址是否連續,可以利用空間碎片

3.每個進程都有一塊可用的虛擬內存地址,當進程真正訪問主存時,會先判斷虛擬內存地址對應的物理內存地址是否可用,如果不可用會把內存中的一部分數據放到硬盤上,給當前進程留出可用的空間

4.每個進程可以共享相同的代碼文件,物理內存地址中只需存儲一份代碼文件,可以節省內存空間


圖形學

渲染流水線的原理

1.應用階段,CPU通過調用DrawCall告訴GPU用什么渲染狀態渲染對應的網格,輸出渲染圖元

2.幾何階段,以CPU輸出的渲染圖元的頂點數據作為輸入,通過多種坐標空間的變換輸出屏幕空間下的頂點數據

3.光柵化階段,以屏幕空間下的頂點數據作為輸入,通過三角形設置和三角形遍歷輸出片元數據,再通過逐片元操作輸出最終的像素數據

坐標空間變換的原理

1.模型空間,物體的模型空間坐標左乘模型縮放旋轉平移構建的變換矩陣(模型矩陣),最終得到物體的世界空間坐標

2.世界空間,物體的世界空間坐標左乘攝像機旋轉平移構建的變換矩陣(觀察矩陣),最終得到物體的觀察空間坐標

3.觀察空間,物體的觀察空間坐標左乘視錐體準備變換為立方體構建的變換矩陣(投影矩陣),最終得到物體的裁剪空間坐標

4.裁剪空間,物體的裁剪空間坐標進行齊次除法后得到物體的齊次裁剪空間坐標(視錐體變換為立方體),最終通過屏幕映射得到物體的屏幕空間坐標

5.屏幕空間,物體的屏幕空間坐標即為坐標空間變換的最終輸出


總結

以上是生活随笔為你收集整理的Unity3D丨面试题目的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。