C#面試常見題目

來源:互聯網
上載者:User

標籤:nal   ted   能力   man   url   它的   .net   this   net   

1、在dotnet中類(class)與結構(struct)的異同?

Class可以被執行個體化,屬於參考型別,是分配在記憶體的堆上的。類是引用傳遞的。

Struct屬於實值型別,是分配在記憶體的棧上的。結構體是複製傳遞的。

2、GC是什麼? 為什麼要有GC?

GC是垃圾收集器。程式員不用擔心記憶體管理,因為垃圾收集器會自動進行管理。GC只能處理託管記憶體資源的釋放,對於非託管資源則不能使用GC進行回收,必須由程式員手工回收,一個例子就是FileStream或者SqlConnection需要程式員調用Dispose進行資源的回收。

要請求垃圾收集,可以調用下面的方法:GC.Collection()一般不需要手動調用GC.Collection()。

3、new 關鍵字用法

new 運算子 用於建立對象和調用建構函式。

new 修飾符 用於向基類成員隱藏繼承成員。

new 約束 用於在泛型聲明中約束可能用作型別參數的參數的類型。

4、C# ref與out區別: 

1、使用ref型參數時,傳入的參數必須先被初始化。對out而言,必須在方法中對其完成初始化。

2、使用ref和out時,在方法的參數和執行方法時,都要加Ref或Out關鍵字。以滿足匹配。

3、out適合用在需要retrun多個傳回值的地方,而ref則用在需要被調用的方法修改調用者的引用的時候。

5、概述反射和序列化

反射:程式集包含模組,而模組包含類型,類型又包含成員。反射則提供了封裝程式集、模組和類型的對象。您可以使用反射動態地建立類型的執行個體,將類型綁定到現有對象,或從現有對象中擷取類型。然後,可以調用類型的方法或訪問其欄位和屬性。

序列化:序列化是將對象轉換為容易傳輸的格式的過程。例如,可以序列化一個對象,然後使用 HTTP 通過 Internet 在用戶端和伺服器之間傳輸該對象。在另一端,還原序列化將從該流重新構造對象。

6、簡述 private、 protected、 public、 internal、protected internal 訪問修飾符和存取權限

private : 私人成員, 在類的內部才可以訪問。

protected : 保護成員,該類內部和繼承類中可以訪問。

public : 公用成員,完全公開,沒有訪問限制。

internal: 當前程式集內可以訪問。

protected internal: 訪問僅限於當前程式集或從包含類派生的類型。

不帶修飾符的類是預設internal。

7、ADO.NET中的五個主要對象

Connection:主要是開啟程式和資料庫之間的串連。沒有利用連線物件將資料庫開啟,是無法從資料庫中取得資料的。Close和Dispose的區別,Close以後還可以Open,Dispose以後則不能再用。

Command:主要可以用來對資料庫發出一些指令,例如可以對資料庫下達查詢、新增、修改、刪除資料等指令,以及調用存在資料庫中的預存程序等。這個對象是架構在Connection 對象上,也就是Command: 對象是通過在Connection對象串連到資料來源。

DataAdapter:主要是在資料來源以及DataSet 之間執行資料轉送的工作,它可以透過Command 對象下達命令後,並將取得的資料放入DataSet 對象中。這個對象是架構在Command對象上,並提供了許多配合DataSet 使用的功能。

DataSet:這個對象可以視為一個暫存區(Cache),可以把從資料庫中所查詢到的資料保留起來,甚至可以將整個資料庫顯示出來,DataSet是放在記憶體中的。DataSet 的能力不只是可以儲存多個Table 而已,還可以透過DataAdapter對象取得一些例如主鍵等的資料表結構,並可以記錄資料表間的關聯。DataSet 對象可以說是ADO.NET 中重量級的對象,這個對象架構在DataAdapter對象上,本身不具備和資料來源溝通的能力;也就是說我們是將DataAdapter對象當做DataSet 對象以及資料來源間傳輸資料的橋樑。DataSet包含若干DataTable、DataTableTable包含若干DataRow。

DataReader:當我們只需要循序的讀取資料而不需要其它操作時,可以使用DataReader 對象。DataReader對象只是一次一次向下循序的讀取資料來源中的資料,這些資料是存在資料庫伺服器中的,而不是一次性載入到程式的記憶體中的,只能(通過遊標)讀取當前行的資料,而且這些資料是唯讀,並不允許作其它的操作。因為DataReader 在讀取資料的時候限制了每次唯讀取一條,而且只能唯讀,所以使用起來不但節省資源而且效率很好。使用DataReader 對象除了效率較好之外,因為不用把資料全部傳回,故可以降低網路的負載。

ADO.NET 使用Connection 對象來串連資料庫,使用Command 或DataAdapter對象來執行SQL語句,並將執行的結果返回給DataReader 或 DataAdapter ,然後再使用取得的DataReader 或DataAdapter 對象操作資料結果。

 

8、列舉ASP.NET 頁面之間傳遞值的幾種方式和優缺點

1)使用QueryString, 如....?id=1; response. Redirect():  傳遞的參數會顯示在url中,不安全並且不能傳遞數組或對象。

2)使用Session變數:簡單,但易丟失 作用於使用者個人,過量的儲存會導致伺服器記憶體資源的耗盡。

3)使用Server.Transfer:流程從當前頁面引導到另一個頁面中,新的頁面使用前一個頁面的應答流,資料庫穩定,安全,但效能相對弱。

4)Cookie傳值:簡單,但可能不支援,可能被偽造 Cookie是存放在用戶端的,而session是存放在伺服器端的。而且Cookie的使用要配合ASP.NET內建對象Request來使用

5)Application傳值:對象的作用範圍是整個全域,也就是說對所有使用者都有效。其常用的方法用Lock和UnLock 

6)PreviosPage:這個一般比較少用。

Server.Transfer和Response.Redirect的區別:Server.Transfer是伺服器內部的轉接,瀏覽器不知道;Response.Redirect是有瀏覽器參與的,所以在地址欄中可以看到地址的變化。

 

9、C#中的委託是什嗎?事件是不是一種委託?事件和委託的關係

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

委託可以理解為指向一個函數的指標。

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

10、System.String 和System.StringBuilder有什麼區別?
   答:System.String是不可變的字串。System.StringBuilder存放了一個可變的字串,並提供一些對這個字串修改的方法。

11、在c#中,using和new這兩個關鍵字有什麼意義?
   答:using 引入名稱空間或者使用非託管資源。
   new 建立執行個體或者隱藏父類方法。

12、const和readonly有什麼區別?
   答:const關鍵字用來聲明編譯時間常量。
     readonly用來聲明運行時常量。

 

13.什麼是預存程序?有什麼優點?

答:預存程序是一組予編譯的SQL語句

    它的優點:1.允許模組化程式設計,就是說只需要建立一次過程,以後在程式中就可以調用該過程任意次。

              2.允許更快執行,如果某操作需要執行大量SQL語句或重複執行,預存程序比SQL語句執行的要快。

               3.減少網路流量,例如一個需要數百行的SQL代碼的操作有一條執行陳述式完成,不需要在網路中發送數百行代碼。

        4.更好的安全機制,對於沒有許可權執行預存程序的使用者,也可授權他們執行預存程序。

 

14、類成員有_____種可訪問形式?

答:this.; newClass().Method;

 

15、請簡述物件導向的多態的特性及意義!

答:物件導向的編程使用了派生繼承以及虛函數機制.一個本來指向基類的對象指標可以指向其衍生類別的.並訪問從基類繼承而來的成員變數和函數.而虛函數是專門為這個特性設計的,這個函數在每個基類的衍生類別中都是同一個名字,但函數體卻並不一定相同,衍生類別往往為實現自己的功能而修改這個虛函數.這樣用一個指標就能夠實現對多種不同的衍生類別的訪問, 並實現其衍生類別的特定功能(代碼 )

16、NEW和Using的區別是什嗎?

new有兩種用法:1.執行個體化一個對象 2.聲明隱藏方法
using兩種用法;1.調用命名空間 2.聲明一個生存區間,在區間之外,區間內聲明的變數自動消亡,被回收

17、寫出一條Sql語句:取出表A中第31到第40記錄(SQLServer,以自動成長的id作為主鍵,注意:id可能不是連續的。)

答:解1: select top 10 * from A where id not in (select top 30 id from A)

解2: select top 10 * from A where id > (select max(id) from (select top 30 id from A )as A)

解3:select id,row_number() over (order by id) as rowNum from A where rowNum between 31 and 40(推薦)

 

C#面試常見題目

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.