.NET筆試題集(一)

題目來源於傳智播客和各大互聯網,複習、從新整理貼出來。javascript

一、簡述 private、 protected、 public、 internal、protected internal 訪問修飾符和訪問權限java

private : 私有成員, 在類的內部才能夠訪問。ios

protected : 保護成員,該類內部和繼承類中能夠訪問。c++

public : 公共成員,徹底公開,沒有訪問限制。程序員

internal: 當前程序集內能夠訪問。數據庫

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

不帶修飾符的類是默認internal。c#

 

二、簡述abstract、sealed類修飾符數組

abstract:能夠被指示一個類只能做爲其它類的基類。瀏覽器

sealed:指示一個類不能被繼承。

 

三、簡述C#成員修飾符

abstract:指示該方法或屬性沒有實現。

const:指定域或局部變量的值不能被改動。

event:聲明一個事件。

extern:指示方法在外部實現。

override:對由基類繼承成員的新實現。

readonly:指示一個域只能在聲明時以及相同類的內部被賦值。

static:指示一個成員屬於類型自己,而不是屬於特定的對象。

virtual:指示一個方法或存取器的實現能夠在繼承類中被覆蓋。

 

四、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 對象操做數據結果。

 

五、列舉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是有瀏覽器參與的,因此在地址欄中能夠看到地址的變化。

 

六、C#中的委託是什麼?事件是否是一種委託?事件和委託的關係

委託能夠把一個方法做爲參數代入另外一個方法。

委託能夠理解爲指向一個函數的指針。

委託和事件沒有可比性,由於委託是類型,事件是對象,下面說的是委託的對象(用委託方式實現的事件)和(標準的event方式實現)事件的區別。事件的內部是用委託實現的。由於對於事件來說,外部只能「註冊本身+=、註銷本身-=」,外界不能夠註銷其餘的註冊者,外界不能夠主動觸發事件,所以若是用Delegate就無法進行上面的控制,所以誕生了事件這種語法。事件是用來閹割委託實例的,類比用一個自定義類閹割List。事件只能add、remove本身,不能賦值。事件只能+=、-=,不能= 。加分的補充回答:事件內部就是一個private的委託和add、remove兩個方法。

 

七、重寫(override)與重載(overload)的區別

override 是進行基類中函數的重寫。override是面向對象的概念。override 方法提供從基類繼承的成員的新實現。經過 override 聲明重寫的方法稱爲重寫基方法。重寫的基方法必須與 override 方法具備相同的簽名

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

 

八、C#中索引器是否只能根據數字進行索引?是否容許多個索引器參數?

參數的個數和類型都是任意的。用reflector反編譯能夠看出,索引器的內部本質上就是set_item、get_item方法。

 

九、屬性和public字段的區別是什麼?調用set方法爲一個屬性設值,而後用get方法讀取出來的值必定是set進去的值嗎?

屬性能夠對設值、取值的過程進行非法值控制,好比年齡禁止設值負數,而字段則不能進行這樣的設置。雖然通常狀況下get讀取的值就是set設置的值,可是可讓get讀取的值不是set設置的值的,極端的例子。Public Age{get{return 100;}set{}}。用reflector反編譯能夠看出,屬性內部本質上就是set_***、get_***方法。

class Person
        {
            public int Age
            {
                get
                {
                    return 3;
                }
            }
        }
        static void Main(string[] args)
        {
            Person p1 = new Person();
            p1.Age = 30;
            p1.Age++;
            Console.Write(p1.Age);//輸出3
       Console.ReadKey(); }

 

十、三層架構

一般意義上的三層架構就是將整個業務應用劃分爲:表現層(UI)、業務邏輯層(BLL)、數據訪問層(DAL)。

區分層次的目的即爲了「高內聚,低耦合」的思想。

表現層(UI):通俗講就是展示給用戶的界面,即用戶在使用一個系統的時候的所見所得。

業務邏輯層(BLL):針對具體問題的操做,也能夠說是對數據層的操做,對數據業務邏輯處理。

數據訪問層(DAL):該層所作事務直接操做數據庫,針對數據的增添、刪除、修改、更新、查找等每層之間是一種垂直的關係。

三層結構是N層結構的一種,通常來講,層次之間是向下依賴的,下層代碼未肯定其接口(契約)前,上層代碼是沒法開發的,下層代碼接口(契約)的變化將使上層的代碼一塊兒變化。

優勢: 分工明確,條理清晰,易於調試,並且具備可擴展性。

缺點: 增長成本。

 

十一、MVC模式

MVC(Model View Controller)模型-視圖-控制器

aspx就是View,視圖;Model:DataSet、Reader、對象;Controller:cs代碼。

MVC是典型的平行關係,沒有說誰在上誰在下的關係,模型負責業務領域的事情,視圖負責顯示的事情,控制器把數據讀取出來填充模型後把模型交給視圖去處理。而各類驗證什麼的應該是在模型裏處理了。它強制性的使應用程序的輸入、處理和輸出分開。MVC最大的好處是將邏輯和頁面分離。

 

十二、什麼是裝箱(boxing)和拆箱(unboxing)?

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

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

object obj = null;//引用類型

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

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

 

1三、什麼叫應用程序域(AppDomain) 

一種邊界,它由公共語言運行庫圍繞同一應用程序範圍內建立的對象創建(即,從應用程序入口點開始,沿着對象激活的序列的任何位置)。

應用程序域有助於將在一個應用程序中建立的對象與在其餘應用程序中建立的對象隔離,以使運行時行爲能夠預知。

在一個單獨的進程中能夠存在多個應用程序域。應用程序域能夠理解爲一種輕量級進程。起到安全的做用。佔用資源小。

 

1四、CTS、CLS、CLR分別做何解釋

CTS:Common Type System 通用系統類型。Int3二、Int16→int、String→string、Boolean→bool

CLS:Common Language Specification 通用語言規範。不一樣語言語法的不一樣。

CLR:Common Language Runtime 公共語言運行時,就是.Net提供的那些類

 

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

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

Struct屬於值類型,是分配在內存的棧上的。結構體是複製傳遞的。

 

1六、堆和棧的區別?

棧是編譯期間就分配好的內存空間,所以你的代碼中必須棧的大小有明確的定義;局部值類型變量、值類型參數等都在棧內存中。

堆是程序運行期間動態分配的內存空間,你能夠根據程序的運行狀況肯定要分配的堆內存的大小。

 

1七、能用foreach遍歷訪問的對象的要求

須要實現IEnumerable接口或聲明GetEnumerator方法的類型。

 

1八、GC是什麼? 爲何要有GC?

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

要請求垃圾收集,能夠調用下面的方法:GC.Collection()通常不須要手動調用GC.Collection()。

 

1九、String s = new String("xyz");建立了幾個String Object?

兩個對象,一個是「xyz」,一個是指向「xyz」的引用對象。

 

20、值類型和引用類型的區別?

1.將一個值類型變量賦給另外一個值類型變量時,將複製包含的值。引用類型變量的賦值只複製對對象的引用,而不復制對象自己。

2.值類型不可能派生出新的類型:全部的值類型均隱式派生自 System.ValueType。但與引用類型相同的是,結構也能夠實現接口。

3.值類型不可能包含 null 值:然而,可空類型功能容許將 null 賦給值類型。

4.每種值類型均有一個隱式的默認構造函數來初始化該類型的默認值。

 

2一、C#中的接口和類有什麼異同。

不一樣點:

不能直接實例化接口。

接口不包含方法的實現。

接口能夠多繼承,類只能單繼承。

類定義可在不一樣的源文件之間進行拆分。

相同點:

接口、類和結構均可以從多個接口繼承。

接口相似於抽象基類:繼承接口的任何非抽象類型都必須實現接口的全部成員。

接口和類均可以包含事件、索引器、方法和屬性。

 

2二、abstract class和interface有什麼區別?

相同點:

都不能被直接實例化,均可以經過繼承實現其抽象方法。

不一樣點:

接口支持多繼承;抽象類不能實現多繼承。

接口只能定義行爲;抽象類既能夠定義行爲,還可能提供實現。

接口能夠用於支持回調(CallBack);抽象類不能實現回調,由於繼承不支持。

接口只包含方法(Method)、屬性(Property)、索引器(Index)、事件(Event)的簽名,但不能定義字段和包含實現的方法;

抽象類能夠定義字段、屬性、包含有實現的方法。

接口能夠做用於值類型(Struct)和引用類型(Class);抽象類只能做用於引用類型。例如,Struct就能夠繼承接口,而不能繼承類。

 

2三、是否能夠繼承String類?

String類是sealed類故不能夠繼承。

 

2四、try {}裏有一個return語句,那麼緊跟在這個try後的finally {}裏的code會不會被執行,何時被執行?

會執行,在return前執行。

public int QueryCount()
{
  try
  {
    return cmd.ExecuteScalar();
  }
  finally
  {
    cmd.Dispose();
  }
}

若是C#設計的是先執行cmd.Dispose()再執行return就會出現return執行失敗了,由於cmd已經Dispose了。

 

2五、new 關鍵字用法

new 運算符 用於建立對象和調用構造函數。

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

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

 

2六、如何把一個Array複製到ArrayList裏

實現1 string[] s ={ "111", "22222" }; ArrayList list = new ArrayList(); list.AddRange(s);

實現2 string[] s ={ "111", "22222" }; ArrayList list = new ArrayList(s);

 

2七、描述線程與進程的區別?

1.線程(Thread)與進程(Process)兩者都定義了某種邊界,不一樣的是進程定義的是應用程序與應用程序之間的邊界,不一樣的進程之間不能共享代碼和數據空間,而線程定義的是代碼執行堆棧和執行上下文的邊界。

2.一個進程能夠包括若干個線程,同時建立多個線程來完成某項任務,即是多線程。而同一進程中的不一樣線程共享代碼和數據空間。用一個比喻來講,若是一個家庭表明一個進程,在家庭內部,各個成員就是線程,家庭中的每一個成員都有義務對家庭的財富進行積累,同時也有權利對家庭財富進行消費,當面對一個任務的時候,家庭也能夠派出幾個成員來協同完成,而家庭以外的人則沒有辦法直接消費不屬於本身家庭的財產。

 

2八、什麼是強類型,什麼是弱類型?哪一種更好些?爲何?

C#中

int i=3;

i="a";

不能夠

JavaScript中

var i=3;

i="a";

能夠

強類型是在編譯的時候就肯定類型的數據,在執行時類型不能更改,而弱類型在執行的時候纔會肯定類型。

沒有好很差,兩者各有好處,強類型安全,由於它事先已經肯定好了,並且效率高。弱類型更靈活,可是效率低,並且出錯機率高

通常用於編譯型編程語言,如c++,java,c#,pascal等,弱類型相比而言不安全,在運行的時候容易出現錯誤,但它靈活,多用於解釋型編程語言,如javascript,vb等

 

2九、什麼是反射?

程序集包含模塊,而模塊又包括類型,類型下有成員,反射就是管理程序集,模塊,類型的對象,它可以動態的建立類型的實例,設置現有對象的類型或者獲取現有對象的類型,能調用類型的方法和訪問類型的字段屬性。它是在運行時建立和使用類型實例。

 

30、int、DateTime、string是否能夠爲null?

int、DateTime不能,由於其爲Struct類型,而結構屬於值類型,值類型不能爲null,只有引用類型才能被賦值null。string能夠爲null。

相關文章
相關標籤/搜索