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

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

value spa 逆轉 無需 自己 傳統 有一個 不用 nbsp

編程語言相關


什麽是面向對象

面向對象三大特性

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

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

多態:指一個類實例的相同方法在不同情形有不同表現形式。多態機制使具有不同內部結構的對象可以共享相同的外部接口。

面向對象五大原則

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

開放封閉原則:對擴展是開放的,對更改是封閉的。

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

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

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


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區別

接口和類的區別

線程池相關

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