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區別
介面和類的區別
執行緒池相關