一些面試題的回答二
此文中所提到的面試題是園子中Tony Qu兄弟翻譯過來的,特此感謝
上一篇: 對一些面試題的回答
高級(jí)開發(fā)人員/架構(gòu)師
1) DateTime.Parse(myString); 這行代碼有什么問題?
有問題,當(dāng)myString不能滿足時(shí)間格式要求的時(shí)候,會(huì)引發(fā)異常,建議使用DateTime.TryParse() ,同時(shí),還需要注意到文化區(qū)域的設(shè)置,如果做代碼規(guī)范檢查,該語句也會(huì)不符合規(guī)范,就是因?yàn)槿鄙傥幕瘏^(qū)域的設(shè)置
2) PDB是什么東西? 在調(diào)試中它應(yīng)該放在哪里?
PDB是用于保存調(diào)試和項(xiàng)目狀態(tài)信息的文件,在debug的時(shí)候?qū)a(chǎn)生pdb文件,調(diào)試的時(shí)候應(yīng)該放在和對應(yīng)應(yīng)用程序集相同目錄。 默認(rèn)的是同一目錄,ide還可以設(shè)置全局pdb symbol文件的地址,這也是vs2008能調(diào)試.net framework source code的方法。還可以為解決方案指定pdb位置
3) 什么叫圈復(fù)雜度(cyclomatic complexity)?為什么它很重要?
不知道,望指教 ?
4) 寫一個(gè)標(biāo)準(zhǔn)的lock(),在訪問變量的前后創(chuàng)建臨界區(qū),要有"雙重檢查"
lock雙重檢查
5) 什么叫FullTrust?放入GAC的assembly是否是FullTrust的?
FullTrust完全信任。放入GAC中的Assembly是否FullTrust我的理解不是。我理解FullTrust是可以通過代碼設(shè)定的
6) 代碼加上需要安全權(quán)限的特性有什么好處?
可以更加靈活的設(shè)置對代碼的訪問權(quán)限,實(shí)現(xiàn)代碼級(jí)保護(hù)。?這點(diǎn)不是特清楚,有明白的給講解下
7) gacutil /l | find /i "Corillian" 這句命令的作用是什么?
全局程序集緩存中如果有Corillian就更新該程序集,沒有就安裝
8) sn -t foo.dll 這句命令是干嘛的?
顯示程序集foo.dll的公鑰標(biāo)記
9) DCOM需要防火墻打開哪些端口?端口135是干嘛用的?
135端口,因?yàn)镈COM的端口號(hào)是隨機(jī)分配的,默認(rèn)情況下,會(huì)分配1024以上的端口號(hào),所以默認(rèn)情況下,DCOM不能穿越防火墻。因?yàn)楦静粫缘瞄_哪個(gè)端口。但有解決辦法可以使DCOM分配的端口號(hào)固定,有關(guān)內(nèi)容我在http://www.rzrgm.cn/jillzhang/archive/2008/02/20/1075057.html 有過一些描述。135是遠(yuǎn)程過程調(diào)用(RPC)的默認(rèn)端口
10)對比OOP和SOA,它們的目的分別是什么?
我想OOP和SOA應(yīng)該沒有對比性吧。OOP是一種編程模型,強(qiáng)調(diào)將復(fù)雜的邏輯分解出小的模塊,特性是繼承,封裝和多態(tài) 。而SOA是一個(gè)技術(shù)框架,技術(shù)框架和編程模型應(yīng)該說不是一碼事吧?SOA的思想是將業(yè)務(wù)邏輯封裝成服務(wù)或者中間件提供給應(yīng)用程序來調(diào)用,當(dāng)然其組件化思想是繼承和發(fā)揚(yáng)了OOP的優(yōu)點(diǎn)。
11) XmlSerializer是如何工作的?使用這個(gè)類的進(jìn)程需要什么ACL權(quán)限?
我只知道XmlSerializer是將對象的屬性和字段進(jìn)行序列化和反序列化的,序列化成為xml數(shù)據(jù),反序列化再將xml轉(zhuǎn)換成對象。應(yīng)該至少需要ACL權(quán)限中的讀權(quán)限.
12)為什么不提倡catch(Exception)?
原因可能有兩點(diǎn):1)try..catch在出現(xiàn)異常的時(shí)候影響性能 2)應(yīng)該捕獲更具體得異常,比如IOExeception,OutOfMemoryException等
13)Debug.Write和Trace.Write有什么不同?何時(shí)應(yīng)該使用哪一個(gè)?
Debug.Write是調(diào)試的時(shí)候向跟蹤窗口輸出信息。當(dāng)編譯模式為debug的時(shí)候才有效,為release的時(shí)候Debug.Write在編譯的時(shí)候會(huì)忽略,而Trace則是在debug和release兩種模式下均可以向跟蹤窗口輸出信息。
14)Debug Build和Release Build的區(qū)別,是否會(huì)有明顯的速度變化?請說明理由。
Debug會(huì)產(chǎn)生pdb文件,release不會(huì)。Debug用于開發(fā)時(shí)的調(diào)試,不能要于部署,而release用于部署.debug編譯一些特殊代碼,比如#IFDEBUG Debug.Write等,而Release則會(huì)將那些特殊標(biāo)記省略
15)JIT是以assembly為單位發(fā)生還是以方法為單位發(fā)生?這對于工作區(qū)有何影響?
方法,道理很簡單,因?yàn)閷τ谝淮芜\(yùn)行,很可能只用到一個(gè)程序集中極少數(shù)類型和對象,而大部分可能并不會(huì)被使用,此時(shí)CLR傻乎乎的給整個(gè)程序集都給Compile了,CLR不是傻瘋了么
16)對比抽象基類和接口的使用
抽象類能有具體實(shí)現(xiàn),而接口只定義行為規(guī)范,不能有具體實(shí)現(xiàn)。一個(gè)類只能繼承一個(gè)父類,但能實(shí)現(xiàn)多個(gè)接口。
17)a.Equals(b)和a == b一樣嗎?
不一樣。多數(shù)情況下,a.Equals(b)表示a與b一致, a==b表示a與b的值相等 。也可以有具體重載(多謝Jeffrey Zhao 的指正)
18)在對象比較中,對象一致和對象相等分別是指什么?
對象一致是指兩個(gè)對象是同一個(gè)對象,引用相同。而對象相等是指兩個(gè)對象的值相同,但引用不一定相同
19)在.NET中如何實(shí)現(xiàn)深拷貝(deep copy)?
實(shí)現(xiàn)IClonable接口
20)請解釋一下IClonable
IClonable方法是實(shí)現(xiàn)深度復(fù)制的接口,實(shí)現(xiàn)它應(yīng)該能深度復(fù)制一個(gè)對象出來。深度復(fù)制的特征的調(diào)用對象的構(gòu)造方法,創(chuàng)建新的對象,包括創(chuàng)建對象中嵌套的引用對象的新實(shí)例。而Shadow復(fù)制則不同,是淺表復(fù)制,不重新創(chuàng)建新實(shí)例。淺表復(fù)制的實(shí)現(xiàn)是Object.MemberWiseClone().
深度復(fù)制(Deep Copy)與淺表復(fù)制(Shadow Copy)的比較
21)什么叫裝箱?
裝箱(boxing)是將值類型的數(shù)據(jù)轉(zhuǎn)化成引用類型,int i=3; object o = i ;便是裝箱過程,而拆箱(unboxing)是將飲用類型數(shù)據(jù)轉(zhuǎn)換值類型,比如int j = (int)o;屬于拆箱
22)string是值類型還是引用類型?
引用類型
23)XmlSerializer使用的針對屬性的模式有什么好處?解決了什么問題?
只序列化有用的數(shù)據(jù),而不是序列化整個(gè)對象。實(shí)現(xiàn)沒必要的數(shù)據(jù)冗余,和提升序列化時(shí)的性能。
24)為什么不應(yīng)該在.NET中使用out參數(shù)?它究竟好不好?
我挺喜歡用out參數(shù)的,特別是當(dāng)函數(shù)需要有多于1個(gè)返回的時(shí)候,我比較愿意用out,至于它好不好沒研究過 ?
25)特性能夠放到某個(gè)方法的參數(shù)上?如果可以,這有什么用?
可以,作用可以對參數(shù)有進(jìn)一步限定,比如輸入?yún)?shù)為int類型,可以通過允許AttributeTargets=ParameterInfo的Attribute自定義實(shí)現(xiàn)來限定輸入?yún)?shù)的大小,比如當(dāng)輸入?yún)?shù)小于100的時(shí)候便抱錯(cuò)。
對方法的參數(shù)設(shè)置Attribute的例子
出處:http://jillzhang.cnblogs.com/
本文版權(quán)歸作者和博客園共有,歡迎轉(zhuǎn)載,但未經(jīng)作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責(zé)任的權(quán)利。





}
}
浙公網(wǎng)安備 33010602011771號(hào)