- 相關推薦
.net基礎面試題
.net技術人員在求職面試中,想要的到面試官的肯定,那么提前做好準備,了解基礎面試題很有必要。下面陽光網小編已經為你們整理了.net基礎面試題,一起來看看吧。
.net基礎面試題一
1.什么是.NET?什么是CLI?什么是CLR?IL是什么?
(1).net用于代碼編譯和執行的集成托管環境,換句話,它管理應用程序運行的方方面面,包括首次運行的編譯,為程序分配內存存儲數據和指令,對于應用程序授予或拒絕相應的權限,并啟動管理應用程序的執行,剩余內存的在分配。由于所有.net應用程序都是在.net framework上面執行,所以開發人員只需考慮與.net framework打交道,而不必關系和底層操作系統上面的實現包括CLR和BCL
(2).CLI(common language infrastructure)公共語言基礎結構,一項國際性的標準,沒有規定標準具體如何實現。相反,它描述了一個CLI平臺在符合標準的前提下應該具有什么行為。包含了:運行時(CLR),公共中間語言(CIL),公共類型系統(CTS),公共語言規范(CLS),元數據(Metadata),框架(framework)
(3)CLR:公共語言運行時,負責加載和運行程序 IL:中間語言,C#編譯器將C#代碼轉換成IL,運行時能夠理解IL,并編譯成機器碼
2.JIT是什么,它是如何工作的?GC是什么,簡述一下GC的工作方式?
JIT:Just in time,C#或者是VB.NET的代碼首先被編譯為IL存儲在本地,當要運行這些代碼的時候,CLR對IL進行第二次編譯轉換成機器碼運行。好處:可移植性,而且IL在加載到內存中時將受到類型安全性方面檢查,這實現了更好的安全性和可靠性。
GC:垃圾回收(garbage collection),是根據程序的需要自動分配和回收內存的`過程。垃圾回收器處理的是引用對象,而且只回收堆上的內存。這意味著假如維持對一個對象的引用,就會阻止GC重用對象使用的內存。在.NET中,垃圾回收器采用的是mark-and-compact算法。在一次垃圾回收周期開始的時候,它要識別對象的所有跟引用,根據這個引用可以遍歷每個根引用所標識的一個樹形結構,并遞歸確定所有引用指向的對象。這樣一來,垃圾回收器就可以識別所有可達的對象,在執行回收的時候,GC不是枚舉所有訪問不到的對象,相反,通過壓縮所有相鄰的可達的對象來執行垃圾回收。不可訪問的對象就會被覆蓋。垃圾回收的宗旨是提高內存的利用率,它并不是用來清理文件句柄,和數據庫連接字符串,端口或者其他有限的資源(終接器finalizer,不能被顯示調用,不能傳遞任何參數,即不能被重載,只有垃圾回收器才能調用終接器,使用Using語句進行確定性終結
.net基礎面試題二
1.類(class)和結構(struct)的區別是什么?它們對性能有影響嗎?
01. 值類型與引用類型
結構是值類型:值類型在棧上分配地址,所有的基類型都是結構類型,例如:int 對應System.int32 結構,通過使用結構可以創建更多的值類型
類是引用類型:引用類型在堆上分配地址堆棧的執行效率要比堆的執行效率高,可是堆棧的資源有限,不適合處理大的邏輯復雜的對象。所以結構處理作為基類型對待的小對象,而類處理某個商業邏輯因為結構是值類型所以結構之間的賦值可以創建新的.結構,而類是引用類型,類之間的賦值只是復制引用
注:1).雖然結構與類的類型不一樣,可是他們的基類型都是對象(object),c#中所有類型的基類型都是object
2).雖然結構的初始化也使用了New 操作符可是結構對象依然分配在堆棧上而不是堆上,如果不使用“新建”(new),那么在初始化所有字段之前,字段將保持未賦值狀態,且對象不可用
02.繼承性
結構:不能從另外一個結構或者類繼承,本身也不能被繼承,雖然結構沒有明確的用sealed聲明,可是結構是隱式的sealed .
類:完全可擴展的,除非顯示的聲明sealed 否則類可以繼承其他類和接口,自身也能被繼承注:雖然結構不能被繼承 可是結構能夠繼承接口,方法和類繼承接口一樣
03.內部結構:
結構: 沒有默認的構造函數,但是可以添加構造函數沒有析構函數沒有 abstract 和 sealed(因為不能繼承)不能有protected 修飾符可以不使用new 初始化在結構中初始化實例字段是錯誤的
類: 有默認的構造函數 有析構函數 可以使用 abstract 和 sealed 有protected 修飾符必須使用new 初始化
2..NET BCL里有哪些是類(結構),為什么它們不是結構(類)?
結構:System.Boolean Byte Char Decimal Double Int32
堆棧的空間有限,對于大量的邏輯的對象,創建類要比創建結構好一些 大多數情況下該類型只是一些數據時,結構是最佳的選擇
類:String Object Delegate 接口 等等 包含了大量的邏輯對象,表現抽象
.net基礎面試題三
1.在自定義類型時,您如何選擇是類還是結構?
1). 堆棧的空間有限,對于大量的邏輯的對象,創建類要比創建結構好一些
2). 結構表示如點、矩形和顏色這樣的輕量對象,例如,如果聲明一個含有 1000 個點對象的數組,則將為引用每個對象分配附加的內存。在此情況下,結構的成本較低。
3). 在表現抽象和多級別的對象層次時,類是最好的選擇
4). 大多數情況下該類型只是一些數據時,結構時最佳的選擇
2.在.NET程序運行過程中,什么是堆,什么是棧?
棧通常保存著我們代碼執行的步驟,而堆上存放的則多是對象,數據等。我們可以把棧想象成一個接著一個疊放在一起的盒子。當我們使用的'時候,每次從最頂部取走一個盒子。棧也是如此,當一個方法(或類型)被調用完成的時候,就從棧頂取走(called a Frame,譯注:調用幀),接著下一個。堆則不然,像是一個倉庫,儲存著我們使用的各種對象等信息,跟棧不同的是他們被調用完畢不會立即被清理掉。
棧內存無需我們管理,也不受GC管理。當棧頂元素使用完畢,立馬釋放。而堆則需要GC(Garbage collection:垃圾收集器)清理
3.什么情況下會在堆(棧)上分配數據?它們有性能上的區別嗎?“結構”對象可能分配在堆上嗎?什么情況下會發生,有什么需要注意的嗎?
1)值類型一般分配在對上面,引用類型分配在堆上面。棧的效率要高于堆。
2)可能,當在類中定義一個結構類型時,該結構就分配在堆上
4.泛型的作用是什么?它有什么優勢?它對性能有影響嗎?它在執行時的行為是什么?
作用:為了促進代碼的重用,尤其是算法的重用
優勢:(1)可重用性(2)類型安全,在參數化的類中只有成員明確希望的數據類型才可以使用(3)性能:避免了從Object的強制轉換和值類型的裝箱(4)減小了內存消耗:避免裝箱也就不在需要消耗堆上的內存。
執行時的行為:泛型也是對象,泛型類的“類型參數”變成了元數據;CLR會在需要的時候構造利用它們的類。一個泛型類經過編譯好之后和普通的類并沒有什么區別。編譯的結果只有元數據和CIL;谥殿愋偷姆盒蛯嵗篊LR會講指定的類型參數放到CIL中合適的位置,從而創建一個具體化的泛型類型。所以CLR會為沒個新的參數值創建具體的泛型類型基于引用類型的實例化:CLR會創建一個具體化的泛型類型。以后,每次用一個引用類型參數來說實例化一個構造好的類型時,并在CIL中用Object引用替換類型參數,CLR都會重用以前生成好的泛型版本
5..NET BCL中有哪些泛型類型?舉例說明平時編程中您定義的泛型類型。
List<T>:通過索引訪問強類型的列表
Dictionary<T>:表示鍵值對的集合
Queue<T>:隊列 Stack<T>: 棧
購物車用Dictionary模擬,OA中獲取員工列表等數據的時候,返回值是泛型的
【.net基礎面試題】相關文章:
.net經典面試題04-08
.net面試題及答案04-08
.net開發工程師面試題04-08
.net軟件工程師面試題04-06
java基礎面試題04-04
php基礎面試題04-09
.net軟件工程師面試題及答案04-02
.net高級工程師面試題04-08
net高級工程師面試題12-09