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區別
接口和類的區別
線程池相關
Unity3D實習生面試題總結-編程語言相關