.NET牛人應該知道些什麼(轉自周公Blog)

原文地址:http://www.hanselman.com/blog/WhatGreatNETDevelopersOughtToKnowMoreNETInterviewQuestions.aspx

作者:Scott Hanselman

原文標題:What Great .NET Developers Ought To Know

譯者:Tony Qu

前些日子我發了一份ASP.NET面試題 清單. 有一些訪客比較保守,覺得我是沒事找事,裏面都是些很瑣碎的問題。剩下的人則說“蠻不錯的,我得去看一看其中的一些問題” 我更喜歡後者的回覆,我覺得後者纔是正確的態度。 

當然我並不想把.NET軟件開發概括爲一些簡單的小問題,我只是想讓大家多思考。我相信一個真正優秀的ASP.NET(及WinForm)開發人員應該不僅僅會拖放控件到設計器中,也應該掌握更多的東西。一個優秀的賽車比賽選手很瞭解他自己的坐駕,他知道哪些可以做?哪些不能做? 

所以我準備了另外一份清單——一份擴展的清單,供你使用。這是我上個星期在從博伊西去波特蘭的路上寫在一塊板上的,並且我也考慮到了那些覺得我的清單過於瑣碎的意見,試圖把這個清單按節管理。如果你從來沒有深入ASP.NET,你肯定不會知道所有ASP.NET問題的答案。如果你是一個獨立顧問,你可能從來沒有遇到過這些概念。但在我呆在科林斯的這4年中,這些問題我都遇到過。因此,是否全面理解這些問題也許與你是不是一個優秀的開發者沒有關係,但在遇到問題時它的確可以幫你節省不少時間。  

.NET牛人應該知道些什麼? 

任何一個使用.NET的人 

描述線程與進程的區別? 什麼是Windows服務,它的生命週期與標準的EXE程序有什麼不同 Windows上的單個進程所能訪問的最大內存量是多少?它與系統的最大虛擬內存一樣嗎?這對於系統設計有什麼影響? EXE和DLL之間的區別是什麼? 什麼是強類型,什麼是弱類型?哪種更好些?爲什麼? PID是什麼?在做系統的故障排除時如何使用它? 單個TCP/IP端口上能夠偵聽多少個進程? 什麼是GAC?它解決了什麼問題?
 
中級.NET開發人員 

闡述面向接口、面向對象、面向方面編程的區別 什麼是Interface?它與Class有什麼區別? 什麼是反射? 使用ASMX的XML Web服務與使用SOAP的.NET Remoting的區別? 類型系統是由XMLSchema表示的嗎?CLS是XMLSchema表示的嗎? 從概念上闡述前期綁定(early-binding)和後期綁定(late-binding)的區別? 調用Assembly.Load算靜態引用還是動態引用? 何時使用Assembly.LoadFrom?何時使用Assembly.LoadFile? 什麼叫Assembly Qualified Name?它是一個文件名嗎?它有什麼不同? Assembly.Load("foo.dll"); 這句話是否正確? 做強簽名的assembly與不做強簽名的assembly有什麼不同? DateTime是否可以爲null? 什麼叫JIT?什麼是NGEN?它們分別有什麼限制和好處? .NET CLR中一代的垃圾收集器是如何管理對象的生命週期的?什麼叫非確定性終結? Finalize()和Dispose()之間的區別? using() 語法有用嗎?什麼是IDisposable?它是如何實現確定性終結的。 tasklist /m "mscor*" 這句命令是幹嘛的? in-proc和out-of-proc的區別 .NET裏的哪一項技術能夠實現out-of-proc通訊? 當你在ASP.NET中運行一個組件時,它在Windows XP, Windows 2000, Windows 2003上分別跑在哪個進程裏面?
 
高級開發人員/架構師 

DateTime.Parse(myString); 這行代碼有什麼問題? PDB是什麼東西? 在調試中它應該放在哪裏? 什麼叫圈複雜度(cyclomatic complexity)?爲什麼它很重要? 寫一個標準的lock(),在訪問變量的前後創建臨界區,要有"雙重檢查", 什麼叫FullTrust?放入GAC的assembly是否是FullTrust的? 代碼加上需要安全權限的特性有什麼好處? gacutil /l  ¦ find /i "Corillian" 這句命令的作用是什麼? sn -t foo.dll 這句命令是幹嘛的? DCOM需要防火牆打開哪些端口?端口135是幹嘛用的? 對比OOP和SOA,它們的目的分別是什麼? XmlSerializer是如何工作的?使用這個類的進程需要什麼ACL權限? 爲什麼不提倡catch(Exception)? Debug.Write和Trace.Write有什麼不同?何時應該使用哪一個? Debug Build和Release Build的區別,是否會有明顯的速度變化?請說明理由。 JIT是以assembly爲單位發生還是以方法爲單位發生?這對於工作區有何影響? 對比抽象基類和接口的使用 a.Equals(b)和a == b一樣嗎? 在對象比較中,對象一致和對象相等分別是指什麼? 在.NET中如何實現深拷貝(deep copy)? 請解釋一下IClonable 什麼叫裝箱? string是值類型還是引用類型? XmlSerializer使用的針對屬性的模式有什麼好處?解決了什麼問題? 爲什麼不應該在.NET中使用out參數?它究竟好不好? 特性能夠放到某個方法的參數上?如果可以,這有什麼用?
 
C# 組件開發人員 

什麼時候使用override?什麼時候使用new? 什麼叫shadowing? 解釋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是幹嘛用的?能夠用在static方法中?
 
ASP.NET (UI)開發人員 

闡述一個基於瀏覽器的Form POST如何變成一個服務器端的事件,如Button1_OnClick。 什麼是PostBack? 什麼是ViewState? 它是否被編碼過? 是否被加密過?誰會使用ViewState?  <machinekey>元素是幹嘛用的?它用於哪兩項ASP.NET技術? 說出ASP.NET 1.1中的3種Session State提供程序以及它們的優缺點? 什麼叫Web Gardening? 在設計中如何使用它? 假設有一個ASP.NET應用程序,那麼單獨一個進程中允許多少應用程序對象?那兩個進程呢?啓用了Web Gardening的2個進程呢?這對設計有何影響? ASP.NET會重用多個請求之間的線程嗎?是否每個HttpRequest都有自己的線程?你是否應該用ASP.NET的Thread Local存儲? [ThreadStatic]屬性在ASP.NET中有用嗎?它有沒有副作用?是好是壞? 如何使用HttpHandler簡化現有的爲.aspx頁面提供驗證圖片的設計 HttpModule訂閱的是什麼類型的事件? 這對於實現有何影響?如果不打算重新編譯ASP.NE應用程序,應該怎麼做? 說出表示任意一個終端(URL)的方式,以及ASP.NET中把請求路由到那個終點的方式 解釋cookie的工作原理。給出一個濫用Cookie的例子。 解釋HttpRequest.ValidateInput()的重要性? 哪些數據是通過HTTP Header傳遞的? 對比HTTP動詞GET和POST? 什麼是HEAD? 說出至少6個HTTP狀態碼以及它們的含義 if-not-modified-since的工作原理是什麼? 用ASP.NET如何實現它? 解釋  <@OutputCache%>和如何使用VaryByParam、VaryByHeader. VaryByCustom是如何工作的? 如何通過q=? (除了q=5)來實現ASP.NET HTML輸出緩衝和緩衝過期(比如http://localhost/page.aspx?q=5)?
 
XML開發人員 

XML命名空間的作用? 何時適合使用DOM?何時不適合?有沒有尺度限制? 什麼是WS-I基本配置?它重要在哪裏? 寫一個小XML文檔,其中使用的是默認的命名空間,以及一個合法的(前綴)命名空間,其中要有分別屬性這兩個命名空間的元素 元素和特性的基本區別在哪裏? 格式完好的XML和有效的XML有什麼區別? .NET中如何驗證XML? myXmlDocument.SelectNodes("//mynode"); 爲什麼這句代碼不好?什麼時候它是好的? 拉式解析(XmlReader)與事件讀取器(Sax)的區別 XPathDocument和XmlDocument的區別? 在何種情況下應該用哪一個? “XML片斷”與“XML文檔”有什麼區別 什麼叫格式規範的XML? XML InfoSet規範與Xml DOM有什麼不同? InfoSet是要解決什麼問題? 比較DTD和XSD,它們的相似點與區別分別是什麼?哪個更好些?爲什麼? System.Xml支持DTD嗎?如果支持,如何使用? XML Schema能夠表示爲對象圖?對象圖能夠表示爲XML Schema?

 

以下是周公給的部分答案,僅供參考:

任何一個使用.NET的人

1) 描述線程與進程的區別?

線程(Thread)與進程(Process)二者都定義了某種邊界,不同的是進程定義的是應用程序與應用程序之間的邊界,不同的進程之間不能共享代碼和數據空間,而線程定義的是代碼執行堆棧和執行上下文的邊界。一個進程可以包括若干個線程,同時創建多個線程來完成某項任務,便是多線程。而同一進程中的不同線程共享代碼和數據空間。用一個比喻來說,如果一個家庭代表一個進程,在家庭內部,各個成員就是線程,家庭中的每個成員都有義務對家庭的財富進行積累,同時也有權利對家庭財富進行消費,當面對一個任務的時候,家庭也可以派出幾個成員來協同完成,而家庭之外的人則沒有辦法直接消費不屬於自己家庭的財產。

2) 什麼是Windows服務,它的生命週期與標準的EXE程序有什麼不同

Windows服務是運行在windows後臺指定用戶下(默認System)的應用程序,它沒有標準的UI界面,想比標準的EXE程序,Windows服務是在服務開始的時候創建,而在服務結束的時候銷燬,而且可以設置服務是否與操作系統一起啓動,一起關閉。它支持三種方式:1)自動方式 2)手動方式 3)禁用 。自動方式的時候,windows服務將在OS啓動後自動啓動運行,而手動方式則必須手工啓動服務,禁用的情況下服務將不能被啓動。另外標準的EXE默認使用的當前登錄的用戶,而windows服務則默認使用System用戶,這在對系統資源訪問的時候特別需要注意。

3) Windows單個進程所能訪問的最大內存量是多少?它與系統的最大虛擬內存一樣嗎?這對於系統設計有什麼影響?

這個需要針對硬件平臺,公式爲單個進程能訪問的最大內存量=2的處理器位數次方/2,比如通常情況下,32位處理器下,單個進程所能訪問的最大內存量爲:232 /2 = 2G 。單個進程能訪問的最大內存量是最大虛擬內存的1/2,因爲要分配給操作系統一半虛擬內存。

4) 什麼是強類型,什麼是弱類型?哪種更好些?爲什麼?

強類型是在編譯的時候就確定類型的數據,在執行時類型不能更改,而弱類型在執行的時候纔會確定類型。沒有好不好,二者各有好處,強類型安全,因爲它事先已經確定好了,而且效率高。一般用於編譯型編程語言,如c++,java,c#,pascal等,弱類型相比而言不安全,在運行的時候容易出現錯誤,但它靈活,多用於解釋型編程語言,如javascript,vb等

5) PID是什麼?在做系統的故障排除時如何使用它?

PID是進程編號,在系統發現故障的時候,可以根據它尋找故障所發生的具體進程,並且可通過visual studio.net等ide將故障進程附加到進程中進行調試(debug)

6) 單個TCP/IP端口上能夠被多少個進程偵聽?

可以爲多個,多個爲端口複用 (多謝蛙蛙池塘的提醒)
看下面代碼


端口複用
Socket socket1 = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
Socket socket2 = new

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章