33條C#、.Net經(jīng)典面試題目及答案
本文集中了多條常見(jiàn)的C#、.Net經(jīng)典面試題目例如“.NET中類和結(jié)構(gòu)的區(qū)別”、“ASP.NET頁(yè)面之間傳遞值的幾種方式?”,并簡(jiǎn)明扼要的給出了答案,希望能對(duì)學(xué)習(xí)C#、.Net的讀者有所幫助。
1, 請(qǐng)你說(shuō)說(shuō).NET中類和結(jié)構(gòu)的區(qū)別?
答:結(jié)構(gòu)和類具有大體的語(yǔ)法,但是結(jié)構(gòu)受到的限制比類要多。結(jié)構(gòu)不能申明有默認(rèn)的構(gòu)造函數(shù),為結(jié)構(gòu)的副本是又編譯器創(chuàng)建和銷毀的,所以不需要默認(rèn)的構(gòu)造函數(shù)和析構(gòu)函數(shù)。結(jié)構(gòu)是值類型,所以對(duì)結(jié)構(gòu)變量所做的改變不會(huì)影響其的原值,而類是應(yīng)用類型,改變其變量的值會(huì)改變其原值。申明結(jié)構(gòu)用Struck關(guān)鍵字,申明類用class關(guān)鍵字,向方法傳遞結(jié)構(gòu)是時(shí)是通過(guò)值傳遞的,而不是通過(guò)引用。與類不同,結(jié)構(gòu)的實(shí)例化可以不使用New關(guān)鍵字。類可以實(shí)現(xiàn)接口。
2, 死鎖的必要條件?怎么克服?
答:系統(tǒng)的資源不足,進(jìn)程的推進(jìn)的順序不合適,資源分配不當(dāng),一個(gè)資源每次只能被一個(gè)進(jìn)程使用,一個(gè)資源請(qǐng)求資源時(shí),而此時(shí)這個(gè)資源已阻塞,對(duì)已獲得資源不放,進(jìn)程獲得資源時(shí),未使用完前,不能強(qiáng)行剝奪。
3, 接口是否可以繼承接口?抽象類是否可以實(shí)現(xiàn)接口?抽象類是否可以繼承實(shí)體類?
答:接口是可以繼承接口的,抽象類是可以實(shí)現(xiàn)接口的,抽象類可以繼承實(shí)體類,但是有個(gè)條件,條件是,實(shí)體類必須要有明確的構(gòu)造函數(shù)。
4, 構(gòu)造器Constructor是否可以被繼承?是否可以被Override?
答:Constructor不可以被繼承,因此不能被重寫(xiě)(Overriding),但可以被重載(Overloading).
5, 當(dāng)一個(gè)線程進(jìn)入一個(gè)對(duì)象的一個(gè)synchronized方法后,其它線程是否可以進(jìn)入該對(duì)象的方法?
答:不可以,一個(gè)對(duì)象的方法只能由一個(gè)線程訪問(wèn)。
6, 用最有效的方法算出等已8對(duì)于幾?
答:2<<3.
7, C#是否可以對(duì)內(nèi)存直接進(jìn)行操作?
答:這個(gè)問(wèn)題比較難回答,也是個(gè)很大的問(wèn)題。但是可以這樣問(wèn)答。C#是可以對(duì)內(nèi)存進(jìn)行直接操作的,雖然很少用到指針,但是C#是可以使用指針的,在用的時(shí)候需要在前邊加unsafe,,在.net中使用了垃圾回收機(jī)制(GC)功能,它替代了程序員,不過(guò)在C#中不可以直接使用finalize方法,而是在析構(gòu)函數(shù)中調(diào)用基類的finalize()方法。
8, Error和Exception有是區(qū)別?
答:error表示恢復(fù)不是不可能,但是很困難,exception表示一種實(shí)際或?qū)崿F(xiàn)問(wèn)題,它表示程序運(yùn)行正常不可以發(fā)生的。
9, 談?wù)刦inal,finally,finallize的區(qū)別?
答:final用于申明屬性,方法和類,表示屬性不可變,方法不可以被覆蓋,類不可以被繼承。
Finally是異常處理語(yǔ)句結(jié)構(gòu)中,表示總是執(zhí)行的部分。
Finallize表示是object類一個(gè)方法,在垃圾回收機(jī)制中執(zhí)行的時(shí)候會(huì)被調(diào)用被回收對(duì)象的方法。
10, HashMap和Hashtable區(qū)別?
答:HashMap是Hashtable的輕量級(jí)實(shí)現(xiàn),非線程安全的實(shí)現(xiàn)他們都實(shí)現(xiàn)了map接口,主要區(qū)別是HashMap鍵值可以為空null,效率可以高于Hashtable。
11,Collection和Collections的區(qū)別?
答:Collection是集合類的上級(jí)接口,Collections是針對(duì)集合類的一個(gè)幫助類,它提供一系列靜態(tài)方法來(lái)實(shí)現(xiàn)對(duì)各種集合的搜索,排序,線程安全化操作。
12,C#中委托是什么?事件是不是一種委托?
答:委托是一種安全的類似與函數(shù)指針,但是她比指針要安全的多,它可以把方法作為一個(gè)參數(shù)傳遞給另一個(gè)方法,可以理解為指向函數(shù)的引用。事件是一種消息機(jī)制,它是一種委托,委托不帶方法體。
13,Override, Overload,的區(qū)別?
答:Override是重寫(xiě)的意思,它表示重寫(xiě)基類的方法,而且方法的名稱,返回類型,參數(shù)類型,參數(shù)個(gè)數(shù)要與基類相同。
Overload是重載是意思,它也表示重寫(xiě)基類的方法,但是只要方法名相同,別的可以不同。
14,在一個(gè)BS結(jié)構(gòu)中需要傳遞變量值時(shí),不能使用session,coolke,application,你有幾中方法?
答:this.server.Transfer,Querystring.
15, C#種索引器實(shí)現(xiàn)過(guò)程,是否只能根據(jù)數(shù)字索引?
答:不是的,可以是任意類型。
16,New有種用法?
答:有3種,第一種是,實(shí)例化如:New Class()
第二種是,public new 隱藏基類的方法
第三種是,在泛型類申明中的任何類型參數(shù)都必須有公共的無(wú)參構(gòu)造函數(shù)。
17,任何把一個(gè)Array復(fù)制到Arraylist中?
答:Foreach (object o in Array), ArrayList.Add (0)
等有好多中種方法。自己想。
18,概述反射和序列化?
答:反射:要給發(fā)射下一個(gè)定義還是比較難的,這里先說(shuō)說(shuō)我的理解。反射提供了封裝程序集,模塊和類型對(duì)象,可以用反射動(dòng)態(tài)地創(chuàng)建類型的實(shí)例,將類型綁定到現(xiàn)有對(duì)象,或者從現(xiàn)有對(duì)象類型里獲取類型,然后調(diào)用類型的方法或訪問(wèn)字段和屬性。
序列化:將對(duì)象轉(zhuǎn)換為另一種媒介傳輸?shù)母袷竭^(guò)程。如,序列化一個(gè)對(duì)象,用Http通過(guò)internet在客戶端和服務(wù)器之間傳遞該對(duì)象,在另一端用反序列化從該流中重新得到對(duì)象。
19,Const和ReadOnly?
答:Const用來(lái)申明編程時(shí)申明常量,ReadOnly用來(lái)申明運(yùn)行時(shí)常量。
20,UDP和TCP連接有和異同?
答:TCP是傳輸控制協(xié)議,提供的是面向連接的,是可靠的,字節(jié)流服務(wù),當(dāng)用戶和服務(wù)器彼此進(jìn)行數(shù)據(jù)交互的時(shí)候,必須在他們數(shù)據(jù)交互前要進(jìn)行TCP連接之后才能傳輸數(shù)據(jù)。TCP提供超時(shí)重?fù)埽瑱z驗(yàn)數(shù)據(jù)功能。UDP是用戶數(shù)據(jù)報(bào)協(xié)議,是一個(gè)簡(jiǎn)單的面向數(shù)據(jù)報(bào)的傳輸協(xié)議,是不可靠的連接。
21,進(jìn)程和線程分別該怎么理解?
答:進(jìn)程是比線程大的程序運(yùn)行單元,都是由操作系統(tǒng)所體會(huì)的系統(tǒng)運(yùn)行單元,一個(gè)程序中至少要有一個(gè)進(jìn)程,有一個(gè)進(jìn)程中,至少要有一個(gè)線程,線程的劃分尺度要比進(jìn)程要小,進(jìn)程擁有獨(dú)立的內(nèi)存單元,線程是共享內(nèi)存,從而極大的提高了程序的運(yùn)行效率同一個(gè)進(jìn)程中的多個(gè)線程可以并發(fā)執(zhí)行。
22,ASP.NET頁(yè)面之間傳遞值的幾種方式?
答:QueryString,session,cookies,application,server.Transfer,respose.redictor.
23. 什么叫應(yīng)用程序域?什么是托管代碼?什么是強(qiáng)類型系統(tǒng)?什么是裝箱和拆箱?什么是重載?CTS、CLS和CLR分別作何解釋?
答:應(yīng)用程序域:就是為安全性,可靠性,隔離性,和版本控制,及卸載程序提供的隔離邊界。它通常由運(yùn)行庫(kù)宿主創(chuàng)建,應(yīng)用程序域提供了一個(gè)更安全,用途更廣的處理單元。
托管代碼:使用CLR編譯語(yǔ)言編輯器開(kāi)發(fā)編寫(xiě)的代碼就叫托管代碼。
裝箱和拆箱:是把值類型轉(zhuǎn)換為引用類型的過(guò)程,是隱式的,相反的過(guò)程就是拆箱,是顯式的。
CTS是公共類型系統(tǒng),CLS是公共語(yǔ)言規(guī)范,CLR公共語(yǔ)言運(yùn)行庫(kù)。
強(qiáng)類型系統(tǒng):每個(gè)變量和對(duì)象都必須具有申明類型。
24. 值類型和引用類型的區(qū)別?
答:值類型的值是存放在堆棧中的,改變其值,不改變變量原有的值,而引用類型的值是存放在棧中的,其引用的地址是存放在堆棧中的,改變其值也就改變了變量原有的值。值類型不允許包含null值,然而可空類型可以將null賦值給值類型l。
25. ASP.net的身份驗(yàn)證方式有哪些?
答:windows,forms,passport
26. 解釋一下UDDI、WSDL的意義及其作用?
答:UDDI是統(tǒng)一描述集成協(xié)議,是一套基于Web的,分布式的,為WEB服務(wù)提供的信息注冊(cè)的實(shí)現(xiàn)標(biāo)準(zhǔn)規(guī)范,同時(shí)為也是為企業(yè)本身提供的Web服務(wù)注冊(cè)以讓別的企業(yè)能夠發(fā)現(xiàn)并訪問(wèn)的協(xié)議標(biāo)準(zhǔn)。提供了基于標(biāo)準(zhǔn)的規(guī)范,用于描述和發(fā)現(xiàn)服務(wù),還提供了一組基于因特網(wǎng)的實(shí)現(xiàn)。
WSDL這是一個(gè)基于XML的描述WEB服務(wù)的接口。
27. 什么是SOAP?
答:是簡(jiǎn)單訪問(wèn)協(xié)議。是在分布式環(huán)境中,交換信息并實(shí)現(xiàn)遠(yuǎn)程調(diào)用的協(xié)議。是一個(gè)基于XML的協(xié)議。使用SOAP,可以不考慮任何傳輸協(xié)議,但通常還是HTTP協(xié)議,可以允許任何類型的對(duì)象或代碼,在任何平臺(tái)上,以任一種語(yǔ)言相互通信。它是一種輕量級(jí)協(xié)議。
28. 如何部署一個(gè)ASP.net頁(yè)面?
答:vs2003,vs2005里邊都有發(fā)表機(jī)制,vs2003可以發(fā)布然后在復(fù)制部署。
Vs2005可以直接部署到對(duì)應(yīng)的位置。
29. 如何理解.net中的垃圾回收機(jī)制?
答:.NET中的垃圾回收機(jī)制是引用程序?qū)?nèi)存的回收和釋放。當(dāng)每次用new關(guān)鍵字創(chuàng)建一個(gè)對(duì)象時(shí),運(yùn)行庫(kù)都要從托管堆中為其分配內(nèi)存,因?yàn)榭臻g是有限的,最終垃圾回收機(jī)制是要回收不用的內(nèi)存的。已釋放內(nèi)存,重新使用。
30. 面向?qū)ο蟮娜蠡驹瓌t?
答:封裝,繼承,多態(tài)。
31. 在.NET中所有類的基類是?
答:object。
32. 能用foreach遍歷訪問(wèn)的對(duì)象需要實(shí)現(xiàn)?
答:需要實(shí)現(xiàn)IEnumerable接口和GetEnumerator ()方法。
33. Heap與stack的差別?
答:Heap是堆,空間是由手動(dòng)操作分配和釋放的,它的存儲(chǔ)區(qū)很大的自由存儲(chǔ)區(qū)。
Stack是棧,是由是操作系統(tǒng)自動(dòng)分配和釋放的,棧上的空間是有限的。程序在編譯期間變量和函數(shù)分配內(nèi)存都是在棧上進(jìn)行的,且在運(yùn)行時(shí)函數(shù)調(diào)用時(shí)的參數(shù)的傳遞也是在棧上進(jìn)行的。
And those he plays never suspect
He doesn't play for the money he wins
He doesn't play for the respect
He deals the cards to find the answer
posted on 2009-04-28 13:28 Leon Reno 閱讀(611) 評(píng)論(1) 收藏 舉報(bào)
浙公網(wǎng)安備 33010602011771號(hào)