通用類型系統(CTS)(Common Type System) 包含在微軟公司提交的 CLI 規範,定義了一個能夠在 CLR 上運行的類型規範。 javascript
公共語言運行庫(CLR)(Common Language Runtime)是一個CLI 的一個實現,包含了.NET 運行引擎和符合 CLI 的類庫。 java
公共語言規範 (Common Language Specification)是 CTS的一個子集,定義了全部面向.NET 的程序所須要符合的最小規範集。程序員
面試題 2 CLR 技術和 COM技術的比較
CLR 和 COM 都定義了組件間交互的規範。COM 並無定義如何描述組件間的依賴性,而且因爲其嚴格的物理約定,形成了不少組件版本升級和控制的問題。CLR 運用元數據和邏輯類型定義等機制,有效地解決了 COM 遺留的一些問題。而且,相較於 COM模型,筆者認爲CLR 更容易理解和學習。面試
面試題 3 JIT是如何工做的
JIT 引擎在編譯中間代碼以前,會尋找方法的本機機器代碼緩存而且判斷其是否可用,若是可用則直接加載,若是不可用,JIT 引擎會查找類型中的方法存根,找到該中間代碼而且進行編譯。算法
面試題 4 怎麼把程序集放入 GAC 中
GAC是一個具備特定目錄結構的文件夾,全部強簽名的程序集均可以被放入GAC中。能夠經過.NET Framework自帶的assembly viewer來簡單地拖動添加一個程序集到 GAC 中,也能夠利用諸如 gacutil.exe等工具使用命令行來添加。總之,任何方法歸根結底,都是根據 GAC 的規範和程序集自己的特性,在GAC目錄下創建相應的子目錄結構。數據庫
面試題 5 值類型和引用類型的區別
全部繼承自System.ValueType 的類型是值類型,而其餘類型都是引用類型。值類型的賦值會產生一個新的數據副本,因此每一個值類型都擁有一個數據副本,而引用類型的賦值則是賦值引用。值類型的對象分配在堆棧上,而引用類型的對象分配在堆上。當比較兩個值類型時,進行的是內容比較,而比較兩個引用類型時,進行的是引用比較。
面試題 6 C#中string 和String 有什麼區別
String 和 string 是同一個類型的兩個名字,相同狀況還有 Object 和 object。除了名稱以外,二者沒有任何區別。
面試題 7 簡述.NET中堆棧和堆的特色和差別 .NET 的程序在進程內存中分配出堆棧、託管堆和非託管堆。全部的值類型對象和引用類型對象的引用都分配在堆棧上,堆棧根據對象的生存週期來依次分配和釋放,堆棧根據一個指向棧尾的指針來分配內存,效率較高。
.NET 全部引用類型對象分配在託管堆上,託管堆連續分配內存,而且受.NET 的垃圾收集機制管理,受託管堆的內存分配和釋放涉及複雜的內存管理,效率相對於堆棧來講低地多。 須要分配堆內存的非託管類型將被分配在非託管堆上,非託管堆不受.NET 垃圾收集機制管理,內存塊徹底由程序員手動申請和釋放。編程
面試題 8 .NET中GC 的運行機制
垃圾回收是指收集釋放託管堆上再也不被使用的對象內存。其過程基本包括:經過算法找到再也不被使用的對象、移動對象使全部仍被使用的對象緊靠託管堆的一邊和調整各個狀態變量。 垃圾回收的運行成本較高,對性能的影響較大。程序員在編寫.NET 代碼時,應該避免沒必要要的內存分配,儘可能減小或避免使用 GC.Collect來執行垃圾回收。數組
面試題 9 簡述 C#中重寫、重載和隱藏的概念
重寫是指用 override 關鍵字從新實現基類中的虛方法,在運行的過程當中,不管經過哪一個類型的引用,真正對象類型的方法將被調用。隱藏是指用 new關鍵字從新實現基類中的方法,在運行的過程當中經過引用的類型判斷應該調用哪一個類型的方法。重載是指多個方法共享同一個名字而且擁有相同的返回值,可是卻能夠擁有不一樣的參數列表。緩存
面試題 10 在 C#中如何聲明一個類不能被繼承
C#中經過關鍵字:sealed能夠申明一個類型不可被繼承,設計中應該爲全部不被做爲基類的類型添加sealed關鍵字,以免各類來自繼承的易產生的錯誤。安全
面試題 11 Int[]是引用類型仍是值類型
數組類型是一族類型,它們都繼承自 System.Array,而System.Array又繼承自System.Object。全部的數組類型都是引用類型。
面試題 12 解釋泛型的基本原理
泛型相似C++中的模板,容許程序員定義更通用的類型和算法,而且在具體使用時再生成具體的封閉類型。全部帶泛型參數的類型都是一個開放式類型,它不能被實例化,但具有全部封閉類型的其餘特性,本質上,它和封閉類型沒有區別。
面試題 13 Serializable 特性有何做用
經過爲類型添加Serialization特性,可使對象申明爲可被序列化,也便是可被諸如BinaryFormmater等類型的對象序列化和反序列化。
面試題 14 如何自定義序列化和反序列化的過程
經過實現 ISerializable 接口中的 GetObjectData 方法能夠實現自定義的序列化,而經過添加帶有SerializationInfo 和StreamingContext的參數的構造方法能夠自定義反序列化的過程。
面試題 15 如何使用 IFormattable 接口實現格式化輸出
IFormattable接口幫助類型實現了多樣式的格式化輸出。IFormattable 的ToString方法接受一個表明格式的字符串參數,經過對這個參數的分析來進行格式化輸出。另外,IFormattable.ToString方法接受一個IFormatProvider類型的參數,以容許類型的使用者提供格式化的方法。
面試題 16 .NET提供了哪幾個定時器類型
.NET 的內建類型中有三個定時器類型,分別是:
面試題 17 在 System.Object 中定義的三個比較方法有何異同
靜態方法 ReferenceEquals 實現了引用比較。靜態 Equals 方法實現了比較高效地調用實例 Equals 方法的功能。實例Equals 方法是一個虛方法,默認的實現是引用比較,類型能夠根據須要重寫實例 Equals方法。值類型的基類ValueType 重寫了Equals方法,實現了內容的比較。
面試題 18 請解釋委託的基本原理
委託是一類繼承自System.Delegate 的類型,每一個委託對象至少包含了一個指向某個方法的指針,該方法能夠是實例方法,也能夠是靜態方法。委託實現了回調方法的機制,可以幫助程序員設計更加簡潔優美的面向對象程序。
面試題 19 委託回調靜態方法和實例方法有何區別
當委託綁定靜態方法時,內部的對象成員變量:_target 將會被設置成null,而當委託綁定實例方法時,_target將會設置成指向該實例方法所屬類型的一個實例對象,當委託被執行時,該對象實例將被用來調用實例方法。
面試題 20 什麼是鏈式委託
鏈式委託是指一個由委託串成的鏈表,當鏈表上的一個委託被回調時,全部鏈表上該委託的後續委託將會被順序執行。
面試題 21 請解釋事件的基本使用方法
事件是一種使對象或類可以提供通知的成員。客戶端能夠經過提供事件處理程序爲相應的事件添加可執行代碼。事件是一種特殊的委託。
面試題 22 請解釋反射的基本原理和其實現的基石
反射是一種動態分析程序集、模塊、類型、字段等目標對象的機制,它的實現依託於元數據。元數據是存儲在PE 文件中的數據塊,它詳細記錄了程序集或模塊內部的結構、引用的類型和程序集和清單。
面試題 23 如何利用反射來實現工廠模式
使用反射能夠實現靈活性較高的工廠模式,其關鍵在於動態地查找產品所包含的全部零件,而不須要經過代碼來逐一分析使用者的需求。反射工廠模式具備靈活性高,運行效率相對較低的特色。
面試題 24 如何以較小的內存代價保存 Type、Field 和 Method 信息
System.RuntimeTypeHandle、System.RuntimeMethodHandle 和 System.RuntimeFieldHandle 三個類型,分別包含了一個指向類型、方法和字段描述的指針,用保存指針的方式來代替保存整個類型、方法和字段的信息描述對象,能夠有效地減小內存的消耗。而在實際須要用到這些信息時,又能夠經過這三個句柄類型對象,分別獲得System.Type、System.Reflection.MethodInfo 和System.Reflection.FieldInfo 類型對象。
面試題 25 什麼是線程
線程是微軟公司提出的輕量級線程的概念,一個線程擁有本身的棧和寄存器狀態。一個線程能夠包含多個線程,和線程由操做系統調度所不一樣的是,線程內線程的調度徹底由程序員本身控制,操做系統的內核徹底不會知道線程的存在。在.NET 架構中,線程的概念不必定和操做系統的線程對應,有些狀況下.NET 中的線程對應一個線程。
面試題 26 如何使用.NET的線程池
System.Threading.ThreaPool 類型封裝了線程池的操做。每一個進程都擁有一個線程池,.NET 提供了線程池管理的機制,用戶只須要把線程需求插入到線程池中,而沒必要再理會後續的工做。全部線程池中的線程都是後臺線程,他們不會阻礙程序的退出。
面試題 27 C#中的 lock 關鍵字有何做用
C#中的lock關鍵字實質是調用 Monitor.Enter 和Monitor.Exit兩個方法的簡化語法,功能上其實現了進入和退出某個對象的同步。一般狀況下,能夠經過 lock一個私有的引用成員變量來完成成員方法內的線程同步,而經過lock一個私有的靜態引用成員變量來完成靜態方法內的線程同步。
面試題 28 請解釋 ASP.NET 以什麼形式運行
ASP.NET 是做爲一個ISAPI 過濾器程序來運行的,同時它是一個.NET CLR的宿主,從而實現了運行託管的服務器代碼的功能。
面試題 29 GET請求和 POST 請求有何區別
HTTP協議中有兩種經常使用的請求:GET 和POST。GET 請求把表單的數據顯示地放在 URI 中,而且對長度和數據值編碼有所限制。POST 請求把表單數據放在 HTTP請求體中,而且沒有長度的限制。
面試題 30 介紹 ASP.NET的頁面生存週期
若是把 ASP.NET 頁面的生存週期步驟作個分類的話,能夠大體分爲四類:
1)初始化
初始化包含上文列出的 PreInit、Init 和 InitComplete 三個步驟,其功能包含了初始化類對象、初始化主題主頁面等特性,判斷是不是第一次訪問頁面等初始功能。
2)加載數據和頁面
這一類型包含了 LoadSate、ProcessPostDate、PreLoad、Load、ProcessPostData(第二次)等步驟。 首先從頁面回傳的數據加載入 ViewState對象,全部的數據都會以 Base64 編碼隨頁面傳入服務器。而後開始處理回傳的數據,也就是把表單中的鍵/值對存入對象之中。隨後就開始加載頁面,程序員一般會在這裏作一些初始化的編程,例如在 OnLoad 事件中編寫頁面初始化代碼。最後會再次執行ProcessPostData,以處理 Load時候新添加的數據。
說明:兩次執行 ProcessPostData一般會讓程序員感到困惑,事實上這兩次數據處理都是必須的。第一次處理保證了在執行頁面加載以前,全部的數據從頁面上被讀入,這樣頁面加載時就能夠訪問這些數據。而第二次ProcessPostData則是爲了使頁面加載時新創建的控件中的數據可以獲得處理。這兩次處理缺一不可。
3)觸發事件
觸發事件包含了 ChangedEvents和PostBackEvent步驟。這裏首先會比較ViewState中的數據和頁面上一次回傳的數據,以爲有哪些事件須要被觸發,這裏事件是逐一被觸發的,但其順序將沒法肯定。而後會查看是否觸發Post Back 事件,該事件也就是頁面提交的事件。
4)保存狀態並呈現頁面
這裏會包含SaveState、SaveStateComplete、Render步驟。首先頁面會編碼保存全部的 ViewState 數據,而後將其嵌入到頁面的一個隱藏控件中。接着轉換全部的控件標籤並生成頁面 HTML,而且發送回客戶端。
注意:上述分類並無包含最終的 Unload 步驟,這是由於這個步驟雖然重要,但從不須要程序員關心,ASP.NET 會負責釋放全部對象的資源。
面試題 31 列舉幾種實現頁面跳轉的方法
幾乎在每一個 ASP.NET 的應用程序中,都會出現頁面跳轉的需求,而實現頁面跳轉也有很是多的方法:
面試題 32 如何防止 SQL注入式攻擊
SQL 注入式攻擊時常見的一種攻擊方法,主要利用的是系統設計的弊端。程序員在設計時須要考慮到注入式攻擊的問題,避免直接使用用戶輸入拼接 SQL 語句,適當使用加密數據進行存儲,而且在合適的場合使用存儲過程。
面試題 33 ADO.NET支持哪幾種數據源
ADO.NET 一共支持四個類別的數據源,分別是:SQL SERVER數據庫、ORACLE 數據庫、OLE DB提供商和 ODBC提供商。
面試題 34 請簡要敘述數據庫鏈接池的機制
ADO.NET 對上層用戶提供了數據庫鏈接池的服務,使用完的數據庫鏈接將被有選擇的保持在數據庫鏈接池中,以供下次使用。當用戶以某個鏈接字符串申請數據庫鏈接時,數據庫鏈接池將嘗試尋找在池中尋找具備相同的鏈接字符串的鏈接,並直接提供給用戶。
面試題 35 一個鏈接字符串能夠包含哪些屬性
鏈接字符串包含了豐富的可選屬性,在進行數據庫操做時,程序員應該對數據庫鏈接字符串進行再三斟酌,不一樣的設置將適合不一樣的實際狀況。詳細的鏈接字符串屬性列表請參考表 1。
面試題 36 什麼是強類型的 DataSet
強類型DataSet 是指那些固定結構的繼承自 DataSet的類型,相較於DataSet而言,強類型的 DataSet具備訪問方便,約束性強的特色,有利於數據訪問層的隔離,也有利於把錯誤提早到編譯階段被發現。
面試題 37 什麼是 XML
XML就是可擴展性標記語言, XML是一種簡單的數據存儲語言,使用一系列簡單的標記描述數據,而這些標記能夠用方便的方式創建,XML極其簡單且易於掌握和使用。
面試題 38 XML 中的命名空間如何使用
命 名 空 間 被 用 來 模 塊 化 XML 文 檔 中 的 元 素 , 它 以 如 下 形 式 定 義 :
xmlns:namespace-prefix="namespace"。當解析器試圖讀取特定命名空間下的節點時,須要指定命名空間的名稱。
面試題 39 .NET中如何驗證一個 XML 文檔的格式
通過 W3C 組織的推薦,XSD 已經成爲了最爲標準和通用的 XML 結構定義語言。在.NET 中,XmsReader支持使用XSD文件來驗證XML文檔是否符合特定的格式,程序員須要作的事爲其設置包含了指定XSD 文件的XmlReaderSetting對象,而且遍歷XML文檔。
面試題 40 什麼是 XSLT,XSLT有何做用
XSLT 是一種對XML文檔進行格式轉換的語言,其經過 XPath來從XML 文檔中提取所需內容,而且依照特定語法組織新的格式。
面試題 41 如何在代碼中使用 XSLT文檔
.NET 中全部支持 XSL 的類型都被定義在 System.Xml.Xsl 命名空間下,可使用XslCompiledTransform來進行指定的格式轉換。另外,在 BS結構系統中,客戶端可使用 javascript腳本調用Microsoft.XMLDOM 類型,並進行格式轉換。
面試題 42 請簡述 SOAP 協議
SOAP 以 XML 形式提供了一個簡單、輕量的用於在分散或分佈環境中交換結構化和類型信息的機制。SOAP協議定義了交互的方式,但並未規定時限協議的環境和技術細節。讀者能夠參考 SOAP協議定義文檔,來獲取全部的協議內容。
面試題 43 如何在.NET中建立 Web Service
在.NET 中,可使用內建類型 WebService 和WebMethod特性來實現Web Service,這種方法使得程序員徹底不須要處理和通訊有關的工做,而將注意力集中在邏輯工做上。爲了得到更大的靈活性,程序員也能夠經過實現IHTTPRequest接口來實現定義的 asmx資源請求處理類型。更進一步的,程序員能夠自定義資源文件和處理程序,來實現徹底自定義的 Web Service,只須要確保全部的返回都符合 SOAP協議。
面試題 44 如何生成 Web Service 代理類型
Web Service 代理類是指負責 SOAP 通訊的代理類型,這容許程序員經過調用本地的 Web Service 代理類型來達到訪問 Web Service 服務器的目的。在.NET 中,能夠經過使用 wsdl.exe 工具或者添加 Web引用來生成 Web Service 代理類型,後者能夠在服務器端有所變更後方便地更新代理類型。
面試題 45 如何提升鏈接池內鏈接的重用率
爲了提升數據庫鏈接池的重用率,惟一的方法就是儘可能保證系統訪問數據庫所使用的鏈接字符串不變。例如創建跳板數據庫,使全部鏈接都首先嚐試訪問跳板數據庫。另外,統一使用超級用戶賬號能夠進一步統一鏈接字符串,但這爲系統帶來了安全上的隱患。
面試題 46 ADO.NET支持哪兩種方式來訪問關係數據庫
ADO.NET 一共支持兩種數據庫訪問方式,分別是鏈接式的和脫機式的。鏈接式的較適合大數據量而且不能準確預測須要讀取多少記錄的狀況,脫機式的更適合進行小數據量的讀取操做。
面試題 47 什麼是關係型數據庫
關係型數據庫是支持採用了關係模型的數據庫,簡單來講,關係模型就是指二維表模型。相對於其餘模型來講,關係型數據庫具備理解更容易、使用更方便、維護更簡單等優勢。
面試題 48 Session有哪幾種存儲方式,之間有何區別,如何進行設置
Session 數據一共有四種存儲方式,分別爲存儲在 IIS進程中、狀態服務器中、SQL Server數據庫中和自定義程序中。除了準備必要的服務外(如 SQL Server數據庫服務器),還須要配置站點的 Web.Config文件進行設置。
說明:能夠在 Web.Config中設置關閉 Session數據,這樣會話的數據就不能獲得保存。
面試題 49 請簡述 ViewState 的功能和實現機制 ViewState 用來存儲頁面範圍內的數據,以保證用戶在離開頁面以前數據的持續性。實現上來講,ViewState被保存在頁面內的一個隱藏控件內,而且在提交到服務器後被提取使用。