2020年最新 C# .net 面試題,月薪20K+中高級/架構師必看(三)


五十一、字典Dictionary的內部機制是如何實現的?

https://www.cnblogs.com/myprogram/p/4666100.html

五十二、數據庫鎖有哪幾種?

https://www.cnblogs.com/zoro-zero/p/13494534.html

五十三、什么是代碼鎖?應用場景?

五十四、常見的算法和數據結構?

https://www.cnblogs.com/wanghuaijun/p/7302303.html

五十五、請寫一個簡單的冒泡排序程序出來?

五十六、壓力測試用的是什么工具,單台服務器最大的QPS是多少?

五十七、自動化測試工具有用過嗎,請舉例?

五十八、如何檢測數據庫中某條執行很慢的查詢語句?

https://www.cnblogs.com/zhuyalong/p/11335857.html

五十九、什么是T4模板,用它來做什么?

https://www.cnblogs.com/dataadapter/p/3844394.html

六十、你是如何理解敏捷開發模式的?敏捷開發中應該存在哪些角色?

六十一、Cors是如何避免跨域的,還有其他解決跨域的方式嗎?

https://www.cnblogs.com/zoro-zero/p/13491420.html

六十二、什么是Restful?

https://www.cnblogs.com/Lonnn/p/11543863.html

六十三、.net Core相比較Framework有哪些優點?

https://blog.csdn.net/weixin_39730950/article/details/90767418

六十四、cookie和session的區別?還有其他保存數據的方式嗎?

https://www.cnblogs.com/l199616j/p/11195667.html

六十五、char、varchar、nvarchar的區別

https://www.cnblogs.com/carekee/articles/2094676.html

六十六、談談重載和重寫的作用和區別

重載是方法的名稱相同。參數或參數類型不同,進行多次重載以適應不同的需要。重載(overload)是面向過程的概念。

Override 是進行基類中函數的重寫。Override是面向對象的概念

六十七、說一下c#中索引器的實現,是不是只有整型數字能作為索引值?是否允許多個索引器參數?

參數的個數和類型都是任意的。加分的補充回答:用reflector反編譯可以看出,索引器的內部本質上就是set_item、get_item方法。

基礎知識:

索引的語法:

public string this[string s],通過get、set塊來定義取值、賦值的邏輯

索引可以有多個參數、參數類型任意

索引可以重載。

如果只有get沒有set就是只讀的索引。

索引其實就是set_Item、get_Item兩個方法。

六十八、什么是MVC,什么是MVVM?

mvc: model -view-controller

mvvm: model-view-view-model 前端框架

六十九、CTS.CLR.CLS分別說明他們的含義,把英文全稱背過來。

C#和.Net的關系。

C#只是抽象的語言,可以把C#編譯生成Java平台的二進制代碼,也可以把Java代碼編譯生成.Net平台的二進制代碼。所以C#只是提供了if、while、+-*/、定義類、int、string等基礎的語法,而Convert.ToInt32、FileStream、SqlConnection、String.Split等都屬於.Net的東西。深藍色是C#的,淺藍色是.Net的。

C# new→IL:newobj

C# string →.Net中的String

類型的差別:.net中的Int32在C#中是int,在VB.Net中是Integer。String、Int32等公共類型。

語法的差別:IL中創建一個對象的方法是L_0001: newobj instance void 索引.C1::.ctor()

C#中是new C1();VB.net中是 Dim c1 As New C1

CTS:Common Type System 通用類型系統。Int32、Int16→int、String→string、Boolean→bool。每種語言都定義了自己的類型,.Net通過CTS提供了公共的類型,然后翻譯生成對應的.Net類型。

CLS:Common Language Specification 通用語言規范。不同語言語法的不同。每種語言都有自己的語法,.Net通過CLS提供了公共的語法,然后不同語言翻譯生成對應的.Net語法。

CLR:Common Language Runtime 公共語言運行時,就是GC、JIT等這些。有不同的CLR,比如服務器CLR、Linux CLR(Mono)、Silverlight CLR(CoreCLR)。相當於一個發動機,負責執行IL。

七十、說下什么是委托?事件是委托嗎?

委托可以把一個方法作為參數代入另一個方法。

委托可以理解為指向一個函數的指針。

委托和事件沒有可比性,因為委托是類型,事件是對象,下面說的是委托的對象(用委托方式實現的事件)和(標准的event方式實現)事件的區別。事件的內部是用委托實現的。因為對於事件來講,外部只能“注冊自己+=、注銷自己-=”,外界不可以注銷其他的注冊者,外界不可以主動觸發事件,因此如果用Delegate就沒法進行上面的控制,因此誕生了事件這種語法。事件是用來閹割委托實例的,類比用一個自定義類閹割List。事件只能add、remove自己,不能賦值。事件只能+=、-=,不能= 。加分的補充回答:事件內部就是一個private的委托和add、remove兩個方法

 

面試聊:用Reflector查看.Net的類的內部實現,解決問題。

七十一、什么是裝箱(boxing)和拆箱(unboxing)?

Object是引用類型,但是它的子類Int32竟然不能去Object能去的“要求必須是引用類型”

的地方,違反了繼承的原則,所以需要把Int32裝在Object中才能傳遞。

裝箱:從值類型接口轉換到引用類型。

拆箱:從引用類型轉換到值類型。  

            object obj = null;//引用類型

            obj = 1;//裝箱,boxing。把值類型包裝為引用類型。

            int i1 = (int)obj;//拆箱。unboxing

2)下面三句代碼有沒有錯,以inboxing或者unboxing為例,解釋一下內存是怎么變化的

int i=10;

object obj = i;

int j = obj;

分析:在inboxing(裝箱)時是不需要顯式的類型轉換的,不過unboxing(拆箱)需要顯式的類型轉換,所以第三行代碼應該改為:

3 int j = (int)obj;    

要掌握裝箱與拆箱,就必須了解CTS及它的特點:

    NET重要技術和基礎之一的CTS(Common Type System)。CTS是為了實現在應用程序聲明和使用這些類型時必須遵循的規則而存在的通用類型系統。.Net將整個系統的類型分成兩大類 :值類型和引用類型。

CTS中的所有東西都是對象;所有的對象都源自一個基類——System.Object類型。值類型的一個最大的特點是它們不能為null,值類型的變量總有一個值。為了解決值類型不可以為null,引用類型可以為null的問題,微軟在.Net中引入了裝箱和拆箱:裝箱就是將值類型用引用類型包裝起來轉換為引用類型;而從引用類型中拿到被包裝的值類型數據進行拆箱。

七十二、列舉ASP.NET 頁面之間傳遞值的幾種方式。

1.使用QueryString, 如....?id=1; response. Redirect()....

2.使用Session變量

3.使用Server.Transfer

4.Cookie傳值

七十三、什么是Code-Behind技術?

https://www.cnblogs.com/xiaohan170208/p/11291077.html

七十四、class 和struct異同?

Class可以被實例化,屬於引用類型,是分配在內存的堆上的。類是引用傳遞的。

Struct屬於值類型,是分配在內存的棧上的。結構體是復制傳遞的。加分的回答:Int32、Boolean等都屬於結構體

七十五、抽象類abstract class和接口interface有什么區別?

https://blog.csdn.net/ZYM5200/article/details/97425478


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM