中级.NET开发人员
中級(jí).NET開發(fā)人員
1) 闡述面向接口、面向?qū)ο蟆⒚嫦蚍矫婢幊痰膮^(qū)別
面向接口更關(guān)注的是概念,它的原則是先定義好行為規(guī)范,再根據(jù)行為規(guī)范創(chuàng)建實(shí)現(xiàn),嚴(yán)格的來說,面向接口應(yīng)該是面向?qū)ο笾械囊徊糠职?#xff0c;因?yàn)槊嫦驅(qū)ο笠矎?qiáng)調(diào)的是依賴倒置原則,也就是實(shí)現(xiàn)依賴于抽象,而抽象不依賴于具體實(shí)現(xiàn),更具比較的應(yīng)該是面向接口與面向抽象對(duì)象,我的體會(huì)是面向接口更加靈活,但實(shí)現(xiàn)時(shí)候,稍微有些代碼冗余,而面向抽象可以結(jié)合面向接口,先定義接口,再定義抽象類,在抽象類中處理一些公共邏輯,再實(shí)現(xiàn)具體實(shí)現(xiàn)類。面向?qū)ο笫菍?duì)復(fù)雜問題的分解。面向方面的編程是一種新概念,它解決了很多面向?qū)ο鬅o法解決的問題,比如面向?qū)ο蠹夹g(shù)只能對(duì)業(yè)務(wù)相關(guān)的代碼模塊化,而無法對(duì)和業(yè)務(wù)無關(guān)的代碼模塊化。而面向方面正是解決這一問題的方案,它的關(guān)鍵思想是"將應(yīng)用程序中的商業(yè)邏輯與對(duì)其提供支持的通用服務(wù)進(jìn)行分離"。
2) 什么是Interface?它與Abstract Class有什么區(qū)別?
接口(Interface)是用來定義行為規(guī)范的,不會(huì)有具體實(shí)現(xiàn),而抽象類除定義行為規(guī)范外,可以有部分實(shí)現(xiàn),但一個(gè)類能實(shí)現(xiàn)多個(gè)接口,但只能繼承一個(gè)父類
3) 什么是反射?
程序集包含模塊,而模塊又包括類型,類型下有成員,反射就是管理程序集,模塊,類型的對(duì)象,它能夠動(dòng)態(tài)的創(chuàng)建類型的實(shí)例,設(shè)置現(xiàn)有對(duì)象的類型或者獲取現(xiàn)有對(duì)象的類型,能調(diào)用類型的方法和訪問類型的字段屬性。它是在運(yùn)行時(shí)創(chuàng)建和使用類型實(shí)例
4) 使用ASMX的XML Web服務(wù)與使用SOAP的.NET Remoting的區(qū)別?
Web服務(wù)使用的消息機(jī)制,而Remoting采用的RPC. Web Service能用于不同平臺(tái),不同語言,Remoting只適用于.Net。效率上Remoting高于Xml Web Service
5) 類型系統(tǒng)是由XMLSchema表示的嗎?CLS是XMLSchema表示的嗎?
不清楚
6) 從概念上闡述前期綁定(early-binding)和后期綁定(late-binding)的區(qū)別?
這個(gè)就像是強(qiáng)弱類型的比較相似,前期綁定是在編譯的時(shí)候就確定了要綁定的數(shù)據(jù),而后期綁定是在運(yùn)行的時(shí)候才填充數(shù)據(jù)。所以前期綁定如果失敗,會(huì)在編譯時(shí)報(bào)編譯錯(cuò)誤,而后期綁定失敗只有在運(yùn)行時(shí)的時(shí)候才發(fā)生
7) 調(diào)用Assembly.Load算靜態(tài)引用還是動(dòng)態(tài)引用?
動(dòng)態(tài)
8) 何時(shí)使用Assembly.LoadFrom?何時(shí)使用Assembly.LoadFile?
呵呵,這個(gè)比較有意思,相比LoadFile,LoadFrom則顯得不地道,因?yàn)樗⑾眿D的時(shí)候,是讓人家穿上嫁妝,坐上馬車,還得帶著人家的妹妹來,:)用它加載的是程序集,這就要求同時(shí)將此程序集所依賴的程序集加載進(jìn)來。而LoadFile就地道的多,它是加載程序集文件的內(nèi)容,只將傳入?yún)?shù)的文件加載,不考慮程序集依賴,但如果有相同實(shí)現(xiàn),但位置不同的文件用LoadFrom是不能同時(shí)加載進(jìn)來的,而LoadFile卻可以。由于LoadFile加載的是文件,所以調(diào)用它之后,可能因?yàn)槿鄙俦匾囊蕾囋斐蔁o法被執(zhí)行。
9) 什么叫Assembly Qualified Name?它是一個(gè)文件名嗎?它有什么不同?
它不是一個(gè)文件名,相比文件名,Assembly Qualified Name(程序集限定名稱),更能確定一個(gè)程序集,它包含文件名,但同時(shí)包含版本,公鑰,和區(qū)域。因?yàn)橥瑯右粋€(gè)名稱的文件可能有不同的版本和區(qū)域,此時(shí)單獨(dú)靠文件名稱,可能會(huì)造成不能確定程序集的正確性。
10) Assembly.Load("foo.dll"); 這句話是否正確?
錯(cuò)誤,正確的應(yīng)該是Assembly.Load("foo"); 或者Assembly.LoadFrom("foo.dll"); (多謝 Tristan(Guozhijian)的提示更正)
11) 做強(qiáng)簽名的assembly與不做強(qiáng)簽名的assembly有什么不同?
強(qiáng)簽名的程序集可以做成com,而不做強(qiáng)簽名的就不行,同樣強(qiáng)簽名程序集可以安裝到GAC中,而不做強(qiáng)簽名的確不能。
12) DateTime是否可以為null?
不能,因?yàn)槠錇镾truct類型,而結(jié)構(gòu)屬于值類型,值類型不能為null,只有引用類型才能被賦值null
13) 什么叫JIT?什么是NGEN?它們分別有什么限制和好處?
Just In Time 及時(shí)編譯,它是在程序第一次運(yùn)行的時(shí)候才進(jìn)行編譯,而NGEN是所謂的pre-jit,就是說在運(yùn)行前事先就將生成程序集的本機(jī)鏡像,并保存到全局緩存中,適用NGEN可以提高程序集的加載和執(zhí)行速度,因?yàn)樗梢詮谋緳C(jī)映像中還原數(shù)代碼和數(shù)據(jù)結(jié)構(gòu),而不必像jit那樣動(dòng)態(tài)生成它們。感覺和緩存的道理大同小異。
14) Finalize()和Dispose()之間的區(qū)別?
Finalize()用于隱式釋放資源,Dispose()用于顯示釋放資源 (Finalize()的確相當(dāng)于C++中的析構(gòu)函數(shù)(多謝Jeffrey Zhao提示更正)
15) using() 語法有用嗎?什么是IDisposable?它是如何實(shí)現(xiàn)確定性終結(jié)的。
有用,實(shí)現(xiàn)了IDisposiable的類在using中創(chuàng)建,using結(jié)束后會(huì)自定調(diào)用該對(duì)象的Dispose方法,釋放資源。不明白什么是確定性終結(jié)
16) tasklist /m "mscor*" 這句命令是干嘛的?
列出所有使用了以" mscor"作為開頭的dll或者exe的進(jìn)程和模塊信息
17) in-proc和out-of-proc的區(qū)別
in-proc是進(jìn)程內(nèi),進(jìn)程內(nèi)能共享代碼和數(shù)據(jù)塊,out-of-proc是進(jìn)程外,進(jìn)程外的互操作需要用進(jìn)程間通訊來實(shí)現(xiàn)。
18) .NET里的哪一項(xiàng)技術(shù)能夠?qū)崿F(xiàn)out-of-proc通訊?
.Net Remoting技術(shù)或者WCF技術(shù)
19) ASP.NET在Windows XP, Windows 2000, Windows 2003上分別跑在哪個(gè)進(jìn)程里面?
Xp : aspnet_Wp.exe Windows 2000 : aspnet_Wp.exe Windows 2003 : w3wp.exe
轉(zhuǎn)載于:https://www.cnblogs.com/shenyunjun420/archive/2009/01/05/1369395.html
總結(jié)
以上是生活随笔為你收集整理的中级.NET开发人员的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DATABASE类
- 下一篇: C# delegate and even