程序員級別鑑定書(.NET面試問答集錦)

做爲一個.NET程序員,應該知道的不只僅是拖拽一個控件到設計時窗口中。就像一個賽車手,必定要了解他的愛車 – 能作什麼不能作什麼。javascript

本文參考Scott Hanselman給出的.NET問題列表,整理以下。包括WinForms,ASP.NET,XML以及C#和.NET基礎相關的問題,有興趣的自我檢測一下吧~html

參考答案另附在文章末尾,因爲水平有限,不免有謬誤,歡迎指正。java

 

全部號稱會寫代碼的人

  • 進程和線程之間的區別?
  • 什麼是Windows服務,它的生命週期與標準的EXE程序有什麼不一樣?
  • Windows單進程可尋址的最大內存是多少? 他們如何影響系統應用軟件設計?
  • EXE 和DLL之間的區別?
  • 強類型和弱類型的區別,以及其優缺點?
  • 什麼是PID, 在解決系統問題時有用嗎?
  • 一個TCP/IP端口能夠被多少個進程分享?
  • 什麼是 GAC?使用 GAC 給咱們帶來哪些好處?

中級.NET開發者

  • 面向接口、面向對象和麪向方面編程的區別
  • 接口和類的區別?
  • 什麼是反射?
  • XML web service 跟 .NET Remoting 的不一樣。
  • early-binding 和late-binding 的區別是什麼?
  • Assembly.Load是靜態引用仍是動態引用?
  • Assembly.LoadFrom和Assembly.LoadFile,2者使用的時機有何不一樣?
  • 什麼是Assembly Qualified Name? 一個文件名嗎? 有何不一樣?

這裏問的是強名稱概念。Assembly.Load("foo.dll")加載程序集的方法是否正確?node

  • 強簽名的程序集與非強簽名的程序集有何不一樣?
  • DateTime 能夠爲null嗎?
  • 什麼是 JIT?什麼是 NGEN?分別的優點和劣勢是什麼?
  • 如何在.NET CLR的分代垃圾收集器管理對象的生命週期?什麼是不肯定性的終結?
  • Finalize()和Dispose()的區別?
  • Using()模式有用嗎? IDisposable是什麼? 它如何支持肯定性的終結?
  • tasklist /m "mscor*" 命令行的做用是?
  • in-proc 和 out-of-proc 之間的區別是什麼?
  • out-of-proc是基於什麼技術實現的?
  • 當你在ASP.NET中運行一個組件時,它在Windows XP, Windows 2000, Windows 2003上分別跑在哪一個進程裏面?

高級開發者及架構師

  • DateTime.Parse(myString)是否正確?
  • PDBs是什麼? 什麼場景下爲了調試須要加載它?
  • 什麼是圈複雜度,以及爲何它很重要?
  • 寫一個標準的 lock() 編碼方法,以及 「雙重檢查」代碼
  • 什麼是FullTrust? GAC下的程序集擁有FullTrust嗎?
  • 代碼加上須要安全權限的特性有什麼好處?
  • gacutil /l | find /i "Corillian" 做用是?
  • 這行命令的功能sn -t foo.dll
  • DCOM穿過防火牆,哪些端口須要打開? 135端口的目的是什麼?
  • 對比OOP和SOA。各有什麼原則?
  • XmlSerializer工做原理是什麼?當進程使用它時須要什麼ACL權限?
  • 爲什麼catch(Exception)的使用一般都不是一個好辦法?
  • Debug.Write 和 Trace.Write 的區別是什麼? 應在何時使用它們?
  • Debug和Release編譯有何不一樣? 對於程序運行速度而言是否有明顯區別?爲何用,或爲何不用它?
  • JIT是以assembly爲單位發生仍是以方法爲單位發生?這對於工做區有何影響?
  • 抽象基類(abstract base class)和接口(interface)對比
  • a.Equals(b) 與 a == b 的區別?
  • 在對象比較中,對象一致和對象相等分別是指什麼?
  • 如何實現.NET中的深複製操做?
  • 對IClonable接口的理解應爲?
  • 什麼是拆箱和裝箱操做?
  • string 是值類型仍是引用類型?
  • XmlSerializer所使用的「PropertySpecified」模式的意義是什麼?它試圖要解決什麼問題?
  • 爲何說out參數是.NET的敗筆?它究竟怎麼樣?
  • 能夠把特性(attributes)放在方法的具體參數中嗎?這有什麼用?

C# 控件開發者

  • Override關鍵詞new的含義? 有何反作用?
  • 解釋virtual, sealed, override, 和 abstract關鍵字。
  • 解釋一下這個字符串中的各個部分:Foo.Bar, Version=2.0.205.0, Culture=neutral, PublicKeyToken=593777ae2d274679d。
  • public, protected, private 和 internal 之間的區別?
  • 使用Primary Interop Assembly (PIA)有什麼好處?
  • NUnit採用何種機制進行單元測試?
  • catch(Exception e){throw e;} 和catch(Exception e){throw;}的區別?
  • typeof(foo) 和 myFoo.GetType()之間的區別?
  • 解釋一下第一個構造函數的調用順序:

public class c{ public c(string a) : this() {;}; public c() {;} } 這個構造函數有用嗎?程序員

  • This是什麼?能夠在靜態方法中調用 this 嗎?

ASP.NET (UI) 開發者

  • 描述一下如何使用基於Form表單Post提交模擬Button1_OnClick操做。
  • 什麼是PostBack?

· 什麼叫做ViewState?是什麼編碼?加密了嗎?究竟是誰在使用ViewState?web

  • <machinekey>元素是作什麼的?它在 ASP.NET下是作什麼用的?
  • 說出ASP.NET中三種Session State提供程序及優缺點。
  • ASP.NET會重用多個請求之間的線程嗎?是否每一個HttpRequest都有本身的線程?你是否應該用ASP.NET的Thread Local存儲?
  • 可否舉例說明如何利用HttpHandler檢查客戶端上傳圖片格式。
  • HttpModule訂閱的是什麼類型的事件? 這對於實現有何影響?若是不打算從新編譯ASP.NE應用程序,應該怎麼作?
  • 簡述從任意客戶端請求路由到ASP.NET的過程。
  • 簡述cookies是如何工做的,給出一個cookies濫用的例子。
  • 解釋HttpRequest.ValidateInput()的重要意義?
  • 那些數據是經過Http Header傳遞的?
  • 說出Head 中的GET和POST的區別。
  • 說出至少6個狀態碼的名稱及其含義
  • If-not-modified-since是如何工做的,如何實現?
  • VaryByCustom是如何工做的?

使用XML的開發者

  • XML Namespaces的做用是什麼?
  • DOM適合的使用場景是什麼?是否有尺寸限制?
  • 什麼是WS-I基本配置,以及爲何它很重要?
  • 寫一個使用默認命名空間和限定(前綴)命名空間一個小的XML文檔。包括從兩個命名空間的元素。
  • 什麼是元素和屬性之間的根本區別?
  • 格式無缺的XML和有效的XML之間的區別是什麼?
  • 使用.NET你會如何驗證XML?
  • 爲何這句代碼一般是很差的?何時好?
  • 和 eventing-readers (Sax) 這二者間的異同。
  • XPathDocument中和的XmlDocument之間有什麼區別?詳細說明,其中一個應該被使用在其餘情形。
  • 「XML片段」與「XML文檔」有什麼區別
  • 規範化形式的XML ,這是什麼意思?
  • XML InfoSet規範與Xml DOM有什麼不一樣? InfoSet是要解決什麼問題?
  • 比較DTD和XSD,它們的類似點與區別分別是什麼?哪一個更好些?爲何?
  • System.Xml 支持DTDs嗎? 怎麼支持?
  • XML Schema可以表示爲對象圖?對象圖可以表示爲XML Schema?

 

------------------------------------------------------------------------------------------------------------------------編程

下面是參考答案

------------------------------------------------------------------------------------------------------------------------瀏覽器

 

全部號稱會寫代碼的人(參考答案)

  • 進程和線程之間的區別?

一個程序至少有一個進程,一個進程至少有一個線程。線程的劃分尺度小於進程,使得多線程程序的併發性高。緩存

這個解釋很形象:連接安全

  • 什麼是Windows服務,它的生命週期與標準的EXE程序有什麼不一樣?

Windows服務能夠在計算機啓動時自動啓動,能夠暫停和從新啓動並且不顯示任何用戶界面。

EXE 可執行程序一般有一個用戶界面,Console或 GUI,一般由用戶來啓動或中止。

  • Windows單進程可尋址的最大內存是多少? 他們如何影響系統應用軟件設計?

以32位操做系統爲例,最大尋址是4G(含虛擬內存),是經過2的32次方計算的; 當物理內存小於4G時,進程訪問的內存量隨着虛擬內存的增長而增長,直到4G; 4GB內存實際上包含了程序的全部部分--包括可執行代碼,代碼加載的全部dll,以及程序運行時使用的全部變量的內容。這個4GB內存稱爲虛擬地址空間,或虛擬內存。

對設計有明顯影響的有2點:

在.NET中區別最明顯的是int的使用,在32位下和64位下存儲的數據不同(int  4個字節32位, 8個字節64位);另一個是編譯的程序爲X86則可在3二、64位下同時運行。

  • EXE 和DLL之間的區別?

DLL中雖然包含了可執行代碼卻不能單獨執行,而應由Windows應用程序直接或間接調用。EXE就不用說了吧~

  • 強類型和弱類型的區別,以及其優缺點?

強類型是指儘可能早的檢查變量的類型, 一般在編譯的時候就檢查.

弱類型是指儘可能推後對變量類型的檢查, 一般在運行時檢查。

到底哪一個好? 其實各有各的好, 像ruby, javascript, 都屬於week-typing, 好處是寫代碼的時候比較快. C#屬於strong-typing, 好處是若是變量類型不對的話, 編譯不會經過, Visual Studio 還會有提示. 至於寫代碼的速度上講, 自從C# 3.0以來, 使用var來定義變量, 簡單了不少。

  • 什麼是PID, 在解決系統問題時有用嗎?

PID全稱是 Process Identifier, 就是進程的一個號碼, 一般當系統哪一個程序不聽使喚的時候, 能夠用它來把這個程序關閉. 並且Debug的時候, 也有用。

  • 一個TCP/IP端口能夠被多少個進程分享?

TCP/IP端口能夠被多少個進程分享

複製代碼
Socket socket1 = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
Socket socket2 = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
socket1.Bind(new IPEndPoint(IPAddress.Parse(」127.0.0.1″),8235));
socket1.Listen(10);
socket2.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
socket2.Bind(new IPEndPoint(IPAddress.Parse(」127.0.0.1″), 8235));
socket2.Listen(10);
Console.Read();
複製代碼

 

  • 什麼是 GAC?使用 GAC 給咱們帶來哪些好處?

GAC 是指 Global Assembly Cache, 用處是放在這裏的程序集能夠被多個程序共同調用, .NET 中的大部分程序集都在這裏. 解決的問題是節省硬盤空間以及防止Dll Hell。

中級.NET開發者(參考答案)

  • 面向接口、面向對象和麪向方面編程的區別

面向接口:定義要實現某類功能應該遵循的統一規範,而具體實現過程由實現該接口的類型決定。

面向對象:強調對具備相同行爲和屬性事物的封裝,更注重封裝的完整性和功能的完整性。

面向方面:主要提供與業務邏輯無關的操做。好比系統中有多個地方都用到文件上傳功能,可使用面向方面的思想在全部上傳文件以前對文件的大小、格式等信息進行過濾操做,而不是在每處上傳代碼裏面完成對這些信息的過濾。

  • 接口和類的區別?

接口(Interface): 不能實列化,本身沒有狀態,方法也沒有具體的實現,被繼承時,繼承類須要實現接口的全部方法。接口就像租房時網上下載的一個租房合同模板。

類 (Class): 能夠被實例化,有狀態,被繼承時,繼承類也不須要從新實現被繼承類中的方法。可是若是被繼承類的方法中有abstract修飾的,繼承類則須要實現這個方法。類像是已經被填上內容的租房合同的模板。

  • 什麼是反射?

代碼在運行過程當中動態獲取程序集的信息,對象的信息,或者直接調用對象的方法或屬性。 e.g. var i = 100; i.GetType(); 輸出System.Int32。

  • XML web service 跟 .NET Remoting 的不一樣。

XML Web service: 是開放標準,使用Http/SOAP協議交互。 
.NET Remoting: 是微軟本身的技術,只能在.NET裏面使用。

  • early-binding 和late-binding 的區別是什麼?

early-binding: 是指編譯的時候綁定,late-binding是指運行時綁定。

  • Assembly.Load是靜態引用仍是動態引用?

動態引用。

  • Assembly.LoadFrom和Assembly.LoadFile,2者使用的時機有何不一樣?

Assembly.LoadFile只載入相應的dll文件,其餘文件並不會被載入。

Assembly.LoadFrom會載入dll文件及其引用的其餘dll

  • 什麼是Assembly Qualified Name? 一個文件名嗎? 有何不一樣?

這裏問的是強名稱概念。

它不是一個文件名,相比文件名,Assembly Qualified Name更能肯定一個程序集,它包含文件名,但同時包含版本,公鑰,和區域。由於一樣一個名稱的文件可能有不一樣的版本和區域,此時單獨靠文件名稱,可能會形成不能肯定程序集的正確性。

  • Assembly.Load("foo.dll")加載程序集的方法是否正確?

不對,正確方式爲:Assembly.Load("foo, Version=1.0.2004.0, Culture=neutral, PublicKeyToken=8744b20f8da049e3")

  • 強簽名的程序集與非強簽名的程序集有何不一樣?

經過簽發具備強簽名的程序集合,能夠確保名稱的全局惟一性!由於強名稱是依賴於惟一的密鑰對來確保名稱的惟一性,其餘人不會生成與你相同的程序集名稱(不一樣的私鑰產生的名稱不一樣)。強名稱保護程序集的版本沿襲,由於強名稱的惟一性可以確保沒有其餘人可以生成你的程序集的後續版本。強名稱提供可靠的完整性檢查,經過.NET Framework安全檢查後,能夠確保程序集內容在生成後未被更改過!

  • DateTime 能夠爲null嗎?

DateTime 不能爲null。由於其爲Struct,屬於值類型,值類型不能爲null,只有引用類型才能被賦值null。

  • 什麼是 JIT?什麼是 NGEN?分別的優點和劣勢是什麼?

JIT(Just In Time),這是咱們經過.NET編譯器生成的應用程序最終面向機器的編譯器

本機映像生成器 (Ngen) 是一種提升託管應用程序性能的工具。 Ngen.exe 建立本機映像(包含經編譯的特定於處理器的機器代碼的文件),並將它們安裝到本地計算機上的本機映像緩存中。運行時可從緩存中使用本機映像,而沒必要使用實時 (JIT) 編譯器編譯原始程序集。

因爲 JIT 編譯器會在調用程序集中定義的單個方法時將該程序集的 MSIL 轉換爲本機代碼,於是一定會對運行時的性能形成影響。在大多數狀況下,這種性能影響是能夠接受的。更爲重要的是,由 JIT 編譯器生成的代碼會綁定到觸發編譯的進程上。它沒法在多個進程之間進行共享。爲了能在多個應用程序調用或共享一組程序集的多個進程之間共享生成的代碼,公共語言運行庫支持一種提早編譯模式。此提早編譯模式使用本機映像生成器 (Ngen.exe) 將 MSIL 程序集轉換爲本機代碼,其做用與 JIT 編譯器極爲類似。可是,Ngen.exe 的操做與 JIT 編譯器的操做有三點不一樣:

· 它在應用程序運行以前而不是運行過程當中執行從 MSIL 到本機代碼的轉換。

· 它一次編譯一個完整的程序集,而不是一次編譯一個方法。

· 它將本機映像緩存中生成的代碼以文件的形式持久保存在磁盤上。

  • 如何在.NET CLR的分代垃圾收集器管理對象的生命週期?什麼是不肯定性的終結?

.NET的垃圾回收分爲3代,可經過GC.Collect強制處理。

一個對象實例沒有被任何地方引用時就稱爲垃圾,當內存不夠是GC就會將該對象實例佔用的空間清理出來

  • Finalize()和Dispose()的區別?

Finalize只釋放非託管資源;

Dispose釋放託管和非託管資源

Finalize和Dispose共享相同的資源釋放策略,所以他們之間也是沒有衝突的。

  • Using()模式有用嗎? IDisposable是什麼? 它如何支持肯定性的終結?

有用,限定資源做用域並自動釋放。

IDisposable是一個接口,有一個方法Dispose(),能夠在對象出做用域的時候調用,如在Using出界後調用這個接口。

  • tasklist /m "mscor*" 命令行的做用是?

列出全部使用符合引號內pattern的dll的進程.

  • in-proc 和 out-of-proc 之間的區別是什麼?

In-proc 發生在一個進程以內, Out-of-proc 發生在不一樣進程之間。

  • out-of-proc是基於什麼技術實現的?

.NET remoting

  • 當你在ASP.NET中運行一個組件時,它在Windows XP, Windows 2000, Windows 2003上分別跑在哪一個進程裏面?

Xp : aspnet_Wp.exe

Windows 2000 : inetinfo.exe

Windows 2003 : w3wp.exe

高級開發者及架構師(參考答案)

  • DateTime.Parse(myString)是否正確?

通常使用DateTime.TryParse解析。

  • PDBs是什麼? 什麼場景下爲了調試須要加載它?

PDBs是源碼編譯文件-全稱Program Database,這個文件主要會存儲對應模塊(dll或者exe)內部的全部符號,以及符號對應的地址、文件名和行號。調試的時候應用程序和源文件之間的一個橋樑。

  • 什麼是圈複雜度,以及爲何它很重要?

一種代碼複雜度的衡量標準。

能夠用來衡量一個模塊斷定結構的複雜程度,數量上表現爲獨立現行路徑條數,也可理解爲覆蓋全部的可能狀況最少使用的測試用例數。圈複雜度大說明程序代碼的判斷邏輯複雜,可能質量低且難於測試和維護。程序的潛在風險和高的圈複雜度有着很大關係。

  • 寫一個標準的 lock() 編碼方法,以及 「雙重檢查」代碼

lock 關鍵字可確保當一個線程位於代碼的臨界區時,另外一個線程不會進入該臨界區。 若是其餘線程試圖進入鎖定的代碼,則它將一直等待(即被阻止),直到該對象被釋放。

複製代碼
public class MySingleton {

private static object myLock = new object();

private static volatile MySingleton mySingleton = null;

private MySingleton() {

}

public static MySingleton GetInstance() {

if (mySingleton == null) { //第一次檢查

lock (myLock) {

if (mySingleton == null) { // 第二次檢查

mySingleton = new MySingleton();

}

}

}

return mySingleton;

}

}
複製代碼

 

  • 什麼是FullTrust? GAC下的程序集擁有FullTrust嗎?

FullTrust即爲徹底信任,也稱爲盲目信任.

GAC:有FullTrust權限

  • 代碼加上須要安全權限的特性有什麼好處?

更加靈活的設置對代碼的訪問權限,實現代碼級保護,防止被移動代碼惡意利用

  • gacutil /l | find /i "Corillian" 做用是?

全局程序集緩存中若是有Corillian就更新該程序集,沒有就安裝。

  • 這行命令的功能sn -t foo.dll

顯示程序集的公鑰標記。

  • DCOM穿過防火牆,哪些端口須要打開? 135端口的目的是什麼?

因DCOM的端口號是隨機分配的,默認狀況下,會分配1024以上的端口號,因此默認狀況下,DCOM不能穿越防火牆。

135是遠程過程調用(RPC)的默認端口

  • 對比OOP和SOA。各有什麼原則?

OOP是一種編程模型,將複雜的邏輯分解出小的模塊,特性是繼承,封裝和多態。而SOA是一個技術框架。 SOA的思想是將業務邏輯封裝成服務或者中間件提供給應用程序來調用,固然其組件化思想是繼承和發揚了OOP的優勢。

  • XmlSerializer工做原理是什麼?當進程使用它時須要什麼ACL權限?

XmlSerializer是將對象的屬性和字段進行序列化和反序列化的,序列化成爲xml數據,反序列化再將xml轉換成對象。應該至少須要ACL權限中的讀權限。

  • 爲什麼catch(Exception)的使用一般都不是一個好辦法?

由於try-catch有性能損失,在性能要求高的場景下,頻繁使用效果不好。同時,catch(Exception)後,可能會破壞程序的正常執行邏輯,致使閱讀、調試代碼難度增大。

Catch的時候應該捕捉具體的Exception類型,而不是通用的Exception

  • Debug.Write 和 Trace.Write 的區別是什麼? 應在何時使用它們?

Debug只在debug狀態下會輸出,Trace在release下也會輸出,在release下Debug的內容會消失。Debug會產生pdb文件,release不會。

  • Debug和Release編譯有何不一樣? 對於程序運行速度而言是否有明顯區別?爲何用,或爲何不用它?

Debug和Release編譯產出物不同,Release下無調試信息,如Assert沒法使用。對程序運行速度而言,無明顯區別。建議在開發環境下用Debug編譯,發佈環境下用Release,爲了使用Assert斷言。

  • JIT是以assembly爲單位發生仍是以方法爲單位發生?這對於工做區有何影響?

方法,因對於一次運行,極可能只用到一個程序集中極少數類型和對象,而大部分可能並不會被使用。

  • 抽象基類(abstract base class)和接口(interface)對比

接口(Interface)是用來定義行爲規範的,不會有具體實現,而抽象類除定義行爲規範外,能夠有部分實現,但一個類能實現多個接口,但只能繼承一個基類。接口是是一種契約,定義了繼承它的類必須聲明接口中的方法。

區別:

接口只有方法、屬性、事件和索引符;類除了這四種成員以外還能夠別的成員(如字段)。接口沒有構造函數,類有構造函數。

接口不能進行運算符的重載,類能夠進行運算符重載。

接口的成員沒有任何修飾符,其成員老是公共的,而類的成員則能夠有修飾符。派生於接口的類必須實現接口中全部成員的執行方式,而從類派生的則否則。

  • a.Equals(b) 與 a == b 的區別?

equals:比較兩個變量的內容是否相等

==操做比較的是兩個變量的值是否相等,對於引用型變量表示的是兩個變量在堆中存儲的地址是否相同,即棧中的內容是否相同。

  • 在對象比較中,對象一致和對象相等分別是指什麼?

對象一致指的是引用相同。對象相等指的是內容相等。

  • 如何實現.NET中的深複製操做?

深複製將會在新對象中建立引用類型字段引用的全部對象,改變新對象中引用的任何對象,不會影響到原來的對象中對應字段的內容。

  • 對IClonable接口的理解應爲?

ICloneable 接口能夠提供建立現有對象中複製的自定義實現。

  • 什麼是拆箱和裝箱操做?

拆箱就是引用類型轉換爲值類型,一般伴隨着從堆中複製對象實例的操做

裝箱就是值類型數據轉換爲Object類型的引用對象

  • string 是值類型仍是引用類型?

引用類型

  • XmlSerializer所使用的「PropertySpecified」模式的意義是什麼?它試圖要解決什麼問題?

把不參與序列化的對象標註出來,只序列化有用的數據,而不是序列化整個對象。去除不必的數據冗餘,和提高序列化時的性能。

  • 爲何說out參數是.NET的敗筆?它究竟怎麼樣?

之因此說out參數很差,是由於經過out參數傳值,間接了破壞了封裝性和函數的可讀性。但筆者認爲有的時候仍是很實用很方便的。

  • 能夠把特性(attributes)放在方法的具體參數中嗎?這有什麼用?

能夠。至少比較省事。

/// <summary>The EnableWindow Function.</summary> 
[DllImport("user32.dll")] 
[return: MarshalAs(UnmanagedType.Bool)] 
public static extern bool EnableWindow(System.IntPtr hWnd, [MarshalAs(UnmanagedType.Bool)]bool enable);

 

C# 控件開發者

  • Override關鍵詞new的含義? 有何反作用?

override new在基類沒有virtual關鍵字的狀況下必須使用。反作用是破壞了繼承關係。

  • 解釋virtual, sealed, override, 和 abstract關鍵字

virtualvirtual 關鍵字用於修飾方法、屬性、索引器或事件聲明,並使它們能夠在派生類中被重寫。例如,此方法可被任何繼承它的類重寫。

sealed當對一個類應用 sealed 修飾符時,此修飾符會阻止其餘類從該類繼承。

override要擴展或修改繼承的方法、屬性、索引器或事件的抽象實現或虛實現,必須使用 override 修飾符。

abstractabstract 修飾符能夠和類、方法、屬性、索引器及事件一塊兒使用。在類聲明中使用 abstract 修飾符以指示某個類只能是其餘類的基類。標記爲抽象或包含在抽象類中的成員必須經過從抽象類派生的類來實現。

  • 解釋一下這個字符串中的各個部分:Foo.Bar, Version=2.0.205.0, Culture=neutral, PublicKeyToken=593777ae2d274679d

Foo.Bar: 程序集名稱

Version=2.0.205.0: 程序集版本

Culture=neutral: 區域

PublicKeyToken: 程序集public密鑰

  • public, protected, private 和 internal 之間的區別?

public:  對任何類和成員都公開, 無限制訪問;

protected: 僅僅對該類以及該類的派生類公開;

private: 僅僅對該類公開;

internal: 只能值包含該類的程序集中訪問該類(只是單獨的項目,而不是整個解決方案)

  • 使用Primary Interop Assembly (PIA)有什麼好處?

主互操做程序集(PIA)指的是官方發佈的互操做程序集,若是電腦中安裝了PIA,當你添加對類庫的引用時,那麼Visual Studio會自動加載PIA,微軟爲Office應用程序提供了PIA,如EXcel PIA就是Microsof.Office.Interop.Excel.dll,其餘應用程序也相似。詳見:http://msdn.microsoft.com/zh-cn/library/aax7sdch(v=vs.110).aspx

  • NUnit採用何種機制進行單元測試?

.NET 反射,爲測試方法加了Attribute

  • catch(Exception e){throw e;} 和catch(Exception e){throw;}的區別?

throw e;   //CLR認爲這裏是異常的起始點

throw;  //CLR不會從新設置異常的起始點

  • typeof(foo) 和 myFoo.GetType()之間的區別?

Typeof()是運算符而GetType是方法

GetType()是基類System.Object的方法,所以只有創建一個實例以後纔可以被調用(初始化之後)

Typeof()的參數只能是int,string,String,自定義類型,且不能是實例

  • 解釋一下第一個構造函數的調用順序:

public class c{ public c(string a) : this() {;}; public c() {;} } 這個構造函數有用嗎?

先調用了this(),即無參構造函數,再調用了自身的有參的構造函數。

由於未對a參數進行處理,故無用。

  • This是什麼?能夠在靜態方法中調用 this 嗎?

This 用於調用當前實例,沒法在 static 方法中調用 this。

ASP.NET (UI) 開發者(參考答案)

  • 描述一下如何使用基於Form表單Post提交模擬Button1_OnClick操做。
複製代碼
aspx

<form method=」post」 action=」test.aspx」>

<input name=」Button1」 type=」submit」 />

</form>

Cs

protected void Page_Load(object sender, EventArgs e)

{

if (Request["Button1"] != null)

{

//Button1_OnClick Function Code

}

}
複製代碼

 

  • 什麼是PostBack?

頁面數據從客戶端經過Form的Post方法傳輸到服務器端的過程叫作PostBack。

· 什麼叫做ViewState?是什麼編碼?加密了嗎?究竟是誰在使用ViewState?

保存服務器控件在PostBack時狀態不變的技術叫作ViewState。這些狀態信息被保存在前臺的hidden元素中。默認爲Base64編碼,默認不會ViewState被加密。在頁面中全部開啓了ViewState的服務器控件會使用到它。 參考

  • <machinekey>元素是作什麼的?它在 ASP.NET下是作什麼用的?

Machinekey是添加在web.config中<system></system>之間的一個標籤。它保證cookies、viewstate加密解密時的數據不會被篡改。參考

  • 說出ASP.NET中三種Session State提供程序及優缺點。

Process:優勢:進程內。速度比較快,但比較難適應大型應用。

ASP.NET State Service: ASP.NET狀態服務。速度,容量上折中。若是使用專用的狀態服務器則能夠擴展。

SQL Server Session State Management: 速度較慢。但可靠性是最強的。並且也有很高的擴展性,適合大型應用。

  • ASP.NET會重用多個請求之間的線程嗎?是否每一個HttpRequest都有本身的線程?你是否應該用ASP.NET的Thread Local存儲?

當使用線程池中的線程進行異步請求操做時,多個請求間的線程是可以重用的。每一個HttpRequest都有本身的線程。當線程重用時,應該使用Thread Local存儲。

  • 可否舉例說明如何利用HttpHandler檢查客戶端上傳圖片格式。

檢查ContentType便可。更安全的作法是解析HttpHandler。

  • HttpModule訂閱的是什麼類型的事件? 這對於實現有何影響?若是不打算從新編譯ASP.NET應用程序,應該怎麼作?
  • 簡述從任意客戶端請求路由到ASP.NET的過程。

用戶輸入URL,路由將該次請求轉到DNS服務器,DNS服務器將請求轉向URL所指向的服務器IP,若是IIS中某個站點包含所請求主機頭信息,則請求成功。

  • 簡述cookies是如何工做的,給出一個cookies濫用的例子。

服務器在告訴客戶端,須要將須要一些服務器必要信息存成cookies保存在客戶端中,而每次客戶端訪問服務器時會將cookies中的信息經過請求發送給服務器。濫用的例子好比:Cookies中保存敏感信息,用戶密碼。

  • 解釋HttpRequest.ValidateInput()的重要意義?

驗證用戶輸入的全部內容,保證服務器的安全性和健壯性。

  • 那些數據是經過Http Header傳遞的?

Header共包括通用頭、請求消息、響應消息及消息實體等數據。

  • 說出Head 中的GET和POST的區別。

Get方法爲URL傳值,POST爲Form表單傳值。

  • 說出至少6個狀態碼的名稱及其含義

200 訪問成功、301 永久重定向、302暫時重定向、304服務器已緩存、404訪問資源不存在、500服務器出錯、504 網關超時。

  • If-not-modified-since是如何工做的,如何實現?

if-not-modified-since及 last-modified是保存在Request http header中的兩個信息,客戶端在訪問資源時,對比兩個信息,就能肯定須要讀取緩存文件仍是更新本地緩存文件。Response.Content.Headers 
Explain <@OutputCache%> and the usage of VaryByParam, VaryByHeader.

  • VaryByCustom是如何工做的?

VaryByCustom,咱們能夠自定義輸出緩存要求的任意文本。除了在OutputCache指令裏面申明該屬性以外,咱們還得在應用程序的 global.asax 文件的代碼聲明塊中,重寫GetVaryByCustomString 方法來爲自定義字符串指定輸出緩存的行爲。

Eg:

<%@ OutputCache VaryByParam="none" VaryByCustom="CategoryPageKey" Location="server" Duration="43200" %>

 

這裏的VaryByCustom定義的爲CategoryPageKey,那麼在global.asax裏面咱們必須定義CategoryPageKey這個字符創輸出緩存的行爲,見下面代碼。

複製代碼
public override string GetVaryByCustomString(HttpContext context, String arg)

{

…

}
複製代碼

 

使用XML的開發者(參考答案)

  • XML Namespaces的做用是什麼?

提供避免元素命名衝突的方法

  • DOM適合的使用場景是什麼?是否有尺寸限制?

DOM是一種與瀏覽器,平臺,語言無關的接口,使你能夠訪問頁面其餘的標準組件。 DOM解決了Netscape的Javascript和Microsoft的Jscript之間的衝突,給予web設計師和開發者一個標準方法,讓他們來訪問他們站點中的數據、腳本和表現層對像。

DOM尺寸不受限制。

  • 什麼是WS-I基本配置,以及爲何它很重要?

它由一組非專有的 Web 服務規範以及對這些旨在促進互操做性的規範的說明和修正組成

爲相關Web服務更好的一塊兒互操做的使用提供了實現的指導方針

  • 寫一個使用默認命名空間和限定(前綴)命名空間一個小的XML文檔。包括從兩個命名空間的元素。
複製代碼
<?xml version="1.0" encoding="UTF-8"?>

<note>
    <to>a</to>
    <from>b</from>
</note>
複製代碼

 

  • 什麼是元素和屬性之間的根本區別?

數據自己應當存儲在元素中,而有關數據的信息(元數據)應當存儲在屬性

屬性不能很好地保持原文的結構

元素容許包括元元數據(有關信息的更深層次的信息)。

每一個人對元數據和非元數據的理解是不同的。

面對之後的變化,元素更具擴展性。

對於很是簡單而且不隨文檔改變其形式的信息,使用屬性較好。特別是樣式信息和連接信息,做爲屬性執行起來很順利

  • 格式無缺的XML和有效的XML之間的區別是什麼?

格式無缺的XML不是有效的xml

不只要格式無缺並且還要遵循必定的順序規則

格式無缺的(well-formed)XML文檔包括:起始標籤和結束標籤應當匹配,結束標籤是必不可少的;大小寫應一致:XML對字母的大小寫是敏感的,和是徹底不一樣的兩個標籤,因此結束標籤在匹配時必定要注意大小寫一致;元素應當正確嵌套:子元素應當徹底包括在父輩元素中。

有效的(valid)XML文檔是指一個遵照XML語法規則,並遵照相應DTD文件規範的XML文檔。

  • 使用.NET你會如何驗證XML?
複製代碼
XmlReaderSettings settings = new XmlReaderSettings();

settings.ValidationEventHandler += new ValidationEventHandler(this.ValidationEventCallBack);

settings.ValidationType = ValidationType.Schema;

settings.Schemas serch= schemaSet;
複製代碼

 

  • 爲何這句代碼一般是很差的?何時好?myXmlDocument.SelectNodes("//mynode");

這個會遞歸搜索所有的Document節點,一般消耗會比較大。除非真的須要檢索全部叫mynode的節點,那就比較好。

  • 描述一下pull-style parsers (XmlReader) 和 eventing-readers (Sax) 這二者間的異同。

XmlReader 是一個只進、只讀的遊標。 它提供了對輸入的快速和非緩存的流式訪問。 它能夠讀取流或文檔。 它使用戶能夠提取數據,並跳過對應用程序沒有意義的記錄。 較大的差別在於 SAX 模型是一個「推送」模型,其中分析器將事件推到應用程序,在每次讀取新節點時通知應用程序,而使用 XmlReader 的應用程序能夠隨意從讀取器提取節點。

  • XPathDocument中和的XmlDocument之間有什麼區別?詳細說明,其中一個應該被使用在其餘情形。

XPathDocument 類讀取 XML 文檔-在內存中的快速只讀表示形式

可編輯的 XmlDocument 類讀取 XML 文檔

  • 「XML片段」與「XML文檔」有什麼區別

XML片斷一般不是一個徹底符合標準的XML文檔,可能沒有根節點,好比:「<foo></foo><bar></bar>」。XML文檔一般有一個根節點和一些由標記組成的內容。好比:「<root><foo></foo><bar></bar></root>」

  • 規範化形式的XML ,這是什麼意思?

規範化形式的XML是XML規範的一個子集。任何XML文檔均可以轉換爲規範化形式的XML,所以將特定類型的微小差別去除卻還是該XML文檔。

  • XML InfoSet規範與XML DOM有什麼不一樣? InfoSet是要解決什麼問題?

XML InfoSet是W3C規範,用於描述一組數據集的抽象數據模型。XML DOM是InfoSet的一個實例。

  • 比較DTD和XSD,它們的類似點與區別分別是什麼?哪一個更好些?爲何?

DTD經過合法元素和屬性列表定義XML文檔的文檔結構。XSD描述XML文檔的文檔結構。

  • System.Xml 支持DTDs嗎? 怎麼支持?

支持。設置XmlReaderSettings.DtdProcessing屬性爲DtdProcessing.Parse。設置XmlReaderSettings.ValidationType屬性爲ValidationType.DTD。

  • XML Schema可以表示爲對象圖?對象圖可以表示爲XML Schema?

是的。

 


葡萄城控件產品網站:http://www.gcpowertools.com.cn/ 
葡萄城技術支持論壇:http://gcdn.grapecity.com/

相關文章
相關標籤/搜索