.NET必知——.NET面試題及答案

來源:互聯網
上載者:User

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 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();
7)  什麼是GAC?它解決了什麼問題?
Gloal Assembly Cache,全域應用程式集緩衝。它解決了幾個程式共用某一個程式集的問題。不必再將那個被共用的程式集拷貝到應用程式目錄了,其實這道理很簡單,.net應用程式在載入的時候,會首先查看全域應用程式集緩衝,如果有就可以直接使用,沒有再到應用程式目錄進行尋找。

中級.NET開發人員
1)  闡述面向介面、物件導向、面向方面編程的區別
面向介面更關注的是概念,它的原則是先定義好行為規範,再根據行為規範建立實現,嚴格的來說,面向介面應該是物件導向中的一部分吧,因為物件導向也強調的是依賴倒置原則,也就是實現依賴於抽象,而抽象不依賴於具體實現,更具比較的應該是面向介面與面向抽象對象,我的體會是面向介面更加靈活,但實現時候,稍微有些代碼冗餘,而面向抽象可以結合面向介面,先定義介面,再定義抽象類別,在抽象類別中處理一些公用邏輯,再實現具體實作類別。物件導向是對複雜問題的分解。面向方面的編程是一種新概念,它解決了很多物件導向無法解決的問題,比如物件導向技術只能對業務相關的代碼模組化,而無法對和業務無關的代碼模組化。而面向方面正是解決這一問題的方案,它的關鍵思想是"將應用程式中的商業邏輯與對其提供支援的泛型服務進行分離"。
2)  什麼是Interface?它與Abstract Class有什麼區別?
介面(Interface)是用來定義行為規範的,不會有具體實現,而抽象類別除定義行為規範外,可以有部分實現,但一個類能實現多個介面,但只能繼承一個父類
3)  什麼是反射?
程式集包含模組,而模組又包括類型,類型下有成員,反射就是管理程式集,模組,類型的對象,它能夠動態建立類型的執行個體,設定現有對象的類型或者擷取現有對象的類型,能調用類型的方法和訪問類型的欄位屬性。它是在運行時建立和使用類型執行個體
4)  使用ASMX的XML Web服務與使用SOAP的.NET Remoting的區別?
Web服務使用的訊息機制,而Remoting採用的RPC. Web Service能用於不同平台,不同語言,Remoting只適用於.Net。效率上Remoting高於Xml Web Service
5)  類型系統是由XMLSchema表示的嗎?CLS是XMLSchema表示的嗎?
不清楚
6)  從概念上闡述前期綁定(early-binding)和後期綁定(late-binding)的區別?
這個就像是強弱類型的比較相似,前期綁定是在編譯的時候就確定了要繫結資料,而後期綁定是在啟動並執行時候才填充資料。所以前期綁定如果失敗,會在編譯時間報編譯錯誤,而後期綁定失敗只有在運行時的時候才發生
7)  調用Assembly.Load算靜態引用還是動態引用?
動態
8)  何時使用Assembly.LoadFrom?何時使用Assembly.LoadFile?
呵呵,這個比較有意思,相比LoadFile,LoadFrom則顯得不地道,因為它娶媳婦的時候,是讓人家穿上嫁妝,坐上馬車,還得帶著人家的妹妹來,:)用它載入的是程式集,這就要求同時將此程式集所依賴的程式集載入進來。而LoadFile就地道的多,它是載入組件檔的內容,只將傳入參數的檔案載入,不考慮程式集依賴,但如果有相同實現,但位置不同的檔案用LoadFrom是不能同時載入進來的,而LoadFile卻可以。由於LoadFile載入的是檔案,所以調用它之後,可能因為缺少必要的依賴造成無法被執行。
9)  什麼叫Assembly Qualified Name?它是一個檔案名稱嗎?它有什麼不同?
它不是一個檔案名稱,相比檔案名稱,Assembly Qualified Name(組件限定名稱),更能確定一個程式集,它包含檔案名稱,但同時包含版本,公開金鑰,和地區。因為同樣一個名稱的檔案可能有不同的版本和地區,此時單獨靠檔案名稱,可能會造成不能確定程式集的正確性。
10) Assembly.Load("foo.dll"); 這句話是否正確?
錯誤,正確的應該是Assembly.Load("foo"); 或者Assembly.LoadFrom("foo.dll"); (多謝 Tristan(Guozhijian)的提示更正)
11) 做強簽名的assembly與不做強簽名的assembly有什麼不同?
強簽名的程式集可以做成com,而不做強簽名的就不行,同樣強簽名程式集可以安裝到GAC中,而不做強簽名的確不能。
12)  DateTime是否可以為null?
不能,因為其為Struct類型,而結構屬於實值型別,實值型別不能為null,只有參考型別才能被賦值null
13)  什麼叫JIT?什麼是NGEN?它們分別有什麼限制和好處?
Just In Time 及時編譯,它是在程式第一次啟動並執行時候才進行編譯,而NGEN是所謂的pre-jit,就是說在運行前事先就將產生程式集的本機鏡像,並儲存到全域緩衝中,適用NGEN可以提高程式集的載入和執行速度,因為它可以從本機映像中還原數代碼和資料結構,而不必像jit那樣動態產生它們。感覺和緩衝的道理大同小異。
14)  Finalize()和Dispose()之間的區別?
Finalize()用於隱式釋放資源,Dispose()用於顯示釋放資源 (Finalize()的確相當於C++中的解構函式(多謝Jeffrey Zhao提示更正)
15)  using() 文法有用嗎?什麼是IDisposable?它是如何?確定性終結的。
有用,實現了IDisposiable的類在using中建立,using結束後會自定調用該對象的Dispose方法,釋放資源。不明白什麼是確定性終結
16)  tasklist /m "mscor*" 這句命令是幹嘛的?
列出所有使用了以" mscor"作為開頭的dll或者exe的進程和模組資訊
17)  in-proc和out-of-proc的區別
in-proc是進程內,進程內能共用代碼和資料區塊,out-of-proc是進程外,進程外的互操作需要用進程間通訊來實現。
18)  .NET裡的哪一項技術能夠實現out-of-proc通訊?
.Net Remoting技術或者WCF技術
19) ASP.NET在Windows XP, Windows 2000, Windows 2003上分別跑在哪個進程裡面?
Xp : aspnet_Wp.exe
Windows 2000 : aspnet_Wp.exe (多謝 Tristan提示更正)
Windows 2003 : w3wp.exe

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.