這幾道面試題,可以考考自己
選擇幾道主流面試題,讓大家自我檢驗(yàn)一下,理論與實(shí)踐相結(jié)合,才能更容易拿到高薪。
Copy
如何在.NET中做deep copy?
1)使用序列化反序列化對象實(shí)現(xiàn)深度克隆
2)使用反射實(shí)現(xiàn)深度克隆
try catch
try中的return是否先于finally調(diào)用?

輸出結(jié)果如下:

結(jié)論:try中的return語句先于finally中的函數(shù)執(zhí)行所以,返回的結(jié)果是1, 而不是2。
從運(yùn)行結(jié)果可以看出,return語句執(zhí)行后,將把返回結(jié)果放置進(jìn)函數(shù)棧中,此時(shí)函數(shù)并不是馬上返回,它要執(zhí)行finally語句后才真正開始返回。
out與ref
out和ref有什么區(qū)別?
相同點(diǎn):兩者都是按地址傳遞的,使用后都將改變原來參數(shù)的數(shù)值。
不同點(diǎn):ref可以把參數(shù)的數(shù)值傳遞進(jìn)函數(shù),但是out是要把參數(shù)清空,就是說你無法把一個(gè)數(shù)值從out傳遞進(jìn)去的,out進(jìn)去后,參數(shù)的數(shù)值為空,所以你必須初始化一次。這就是這兩個(gè)的區(qū)別,ref是有進(jìn)有出,out是只出不進(jìn)。
this
解釋this關(guān)鍵字?它可以在靜態(tài)方法中使用嗎?
C#中的this主要有4種用途,分別是:
(1)代表當(dāng)前類的實(shí)例對象;
(2)代表當(dāng)前類的無參構(gòu)造函數(shù);
(3)為原始類型定義擴(kuò)展方法,將對象作為參數(shù)傳遞給方法;
(4)申明索引器。
this不可用于靜態(tài)方法中。原因是,this訪問的是類的實(shí)例,也就是對象,而靜態(tài)成員只能由類來訪問,不能由對象來訪問。this關(guān)鍵字只能在實(shí)例構(gòu)造函數(shù)、實(shí)例方法或?qū)嵗L問器中使用。
Parse與TryParse
DateTime.Parse(myString) 這段代碼有什么問題?應(yīng)該怎么寫?
應(yīng)該使用TryParse,因?yàn)槿绻麩o法解析,Parse將會引發(fā)異常。正確寫法:圖片
Exception
為什么catch(Exception)是個(gè)不好的寫法?
catch(Exception):指定出現(xiàn)異常在catch塊要處理,僅知道已引發(fā)異常,但是無法獲取有關(guān)此異常的更多信息。應(yīng)該使用catch(Exception ex),catch(Exception ex) 傳遞引發(fā)的實(shí)際異常的實(shí)例,不但可以捕獲異常并能獲取異常的對象,可以檢索出更多的異常相關(guān)的信息。
CLR
.NET的垃圾回收是怎么管理CLR中的對象的生命周期的?
垃圾回收是.NET中的運(yùn)行時(shí)CLR這個(gè)庫中的一個(gè)核心功能,目的就是為了提高內(nèi)存的利用率。值類型這些變量,用完以后系統(tǒng)就立刻把這個(gè)內(nèi)存銷毀了。
堆里面的內(nèi)存如何被回收釋放?
不確定,一般都是當(dāng)程序需要新內(nèi)存,或者內(nèi)存不夠的時(shí)候開始執(zhí)行回收。當(dāng)然什么對象被回收什么對象不會被回收,垃圾回收機(jī)制它有選擇,當(dāng)這個(gè)對象沒有用的時(shí)候,也就是沒任何地方引用這個(gè)對象的時(shí)候就會被回收。
Equals
a.Equals(b) 和 a==b有什么不同?寫出下列代碼中Console打印出的結(jié)果。

運(yùn)行結(jié)果:

解答:
1、對于值類型:= = 和equals等價(jià),都是比較存儲信息的內(nèi)容是否相等。
2、對于引用類型:= = 比較的是引用類型在棧中的地址,equals方法則比較的是引用類型在堆中的存儲的內(nèi)容是否相等。
Params
C#中Params是什么含義?有何用途?
用parmas修飾的可變參數(shù)數(shù)組必須是一維數(shù)組。
不允許將params修飾符與ref和out修飾符組合起來使用 ,但是可以分開使用,也就是params前一個(gè)參數(shù)可以定義為ref或者out。
傳遞到形參params中的數(shù)據(jù)可以是跟params類型一致的數(shù)組,也可以是任意多個(gè)與該params類型一致的變量。還可以不發(fā)送參數(shù)。如果未發(fā)送任何參數(shù),則 params 列表的長度為零。
params參數(shù)必須是參數(shù)表的最后一個(gè)參數(shù),并且在方法聲明中只允許一個(gè) params 關(guān)鍵字。
若實(shí)參是數(shù)組則按引用傳遞,若實(shí)參是變量或表達(dá)式則按值傳遞。