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

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

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