1. 程式人生 > >Unity3D實習生面試題總結-程式語言相關

Unity3D實習生面試題總結-程式語言相關

程式語言相關


什麼是面向物件

面向物件三大特性

封裝:把客觀事物封裝成抽象的類,並且類可以把自己的資料和方法只讓可信的類或者物件操作,對不可信的進行資訊隱藏。

繼承:它可以使用現有類的所有功能,並在無需重新編寫原來的類的情況下對這些功能進行擴充套件。

多型:指一個類例項的相同方法在不同情形有不同表現形式。多型機制使具有不同內部結構的物件可以共享相同的外部介面。

面向物件五大原則

單一職責原則:一個類應該只有一個引起他變化的原因。

開放封閉原則:對擴充套件是開放的,對更改是封閉的。

里氏替換原則:子類可以替換父類並且出現在父類能夠出現的任何地方。

依賴倒置原則:傳統的結構化程式設計中,最上層的模組通常都要依賴下面的子模組來實現,也稱為高層依賴低層。所以依賴倒置原則就是要逆轉這種依賴關係,讓高層模組不要依賴低層模組。

介面隔離原則:使用多個專門的介面比使用單個介面要好的多。

 


C#常用容器及其資料結構

Array

System.Array名稱空間,陣列,在記憶體中是連續儲存的。

ArrayList

屬於System.Collections,不需要指定長度能動態擴容。所插入的資料為object型別,會發生裝箱拆箱。型別不安全。

List<T>

屬於System.Collections.Generic,底層資料結構是陣列,避免了裝箱拆箱,並且型別安全。

LinkedList<T>

屬於System.Collections.Generic,底層資料結構是雙向連結串列,型別安全,因為是連結串列實現的索引不用動態擴容

HashSet<T>

屬於System.Collections.Generic,底層資料結構是雜湊表,不能用索引訪問,值不能重複且沒有順序。

HashTable

屬於System.Collections,底層資料結構是雜湊表,鍵值對均為object型別,發生裝箱拆箱,key通常可用來快速查詢,同時key是區分大小寫;value用於儲存對應於key的值。

Dictionary<T>

屬於System.Collections.Generic,底層資料結構是雜湊表,因為是泛型所以沒有裝箱拆箱。

總結

C#所有泛型容器都在System.Collections.Generic名稱空間下,非泛型容器在System.Collections空間下。


結構體和類的區別

記憶體中的差別

類的例項一定在堆上,結構體的例項一般線上程棧上分配(雖然也可以作為欄位嵌入引用型別的物件中)。

類的變數是例項在堆中的記憶體地址,結構體的變數中包含了例項本身的欄位。這也是值型別和引用型別的區別。

欄位的差別

結構體中不能設定欄位預設值,類可以。

給欄位設定預設值是inline內聯的語法,我覺得這點差別是結構體不支援內聯語法造成的。

預設構造器的差別

結構體和類都有預設的例項構造器,但結構體不能顯式給出。

自定義構造器的差別

自定義的構造器,類定義了後預設的被隱藏,無參構造器就需要自己給出,不需要把所有欄位初始化,結構體必須初始化所有例項欄位和未初始化的非靜態的欄位。

宣告例項時的差別

結構體在宣告的時候就已經為其分配棧上的記憶體了,new只是初始化其欄位,而類需要用new為其分配堆上面的記憶體。

可訪問性的差別

所有值型別都隱式密封,目的是防止將值型別用作其他引用型別或值型別的基型別。

 

過載和重寫區別

 

 

foreach實現

 

 

 

private、protected、public、internal區別

 

介面和類的區別

 

執行緒池相關