C#面試題整理2(帶答案)


一、C# 理論

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

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

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

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

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

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

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

 

1.2、簡述abstract、sealed類修飾符

abstract:可以被指示一個類只能作為其它類的基類。

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

 

1.3、簡述C#成員修飾符

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

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

event:聲明一個事件。

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

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

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

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

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

 

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

 

1.5、列舉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是有瀏覽器參與的,所以在地址欄中可以看到地址的變化。

 

1.6、C#中的委托是什么?事件是不是一種委托?事件和委托的關系

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

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

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

 

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

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

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

 

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

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

 

1.9、屬性和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();

        }

 

 

 

1.10、三層架構

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

區分層次的目的即為了“高內聚,低耦合”的思想。

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

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

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

三層結構是N層結構的一種,一般來說,層次之間是向下依賴的,下層代碼未確定其接口(契約)前,上層代碼是無法開發的,下層代碼接口(契約)的變化將使上層的代碼一起變化。

優點: 分工明確,條理清晰,易於調試,而且具有可擴展性。

缺點: 增加成本。

 

1.11、MVC模式

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

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

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

 

1.12、什么是裝箱(boxing)和拆箱(unboxing)?

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

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

object obj = null;//引用類型

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

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

 

1.13、什么叫應用程序域(AppDomain) 

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

應用程序域有助於將在一個應用程序中創建的對象與在其他應用程序中創建的對象隔離,以使運行時行為可以預知。

在一個單獨的進程中可以存在多個應用程序域。應用程序域可以理解為一種輕量級進程。起到安全的作用。占用資源小。

 

1.14、CTS、CLS、CLR分別作何解釋

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

CLS:Common Language Specification 通用語言規范。不同語言語法的不同。

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

 

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

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

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

 

1.16、堆和棧的區別?

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

堆是程序運行期間動態分配的內存空間,你可以根據程序的運行情況確定要分配的堆內存的大小。

 

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

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

 

1.18、GC是什么? 為什么要有GC?

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

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

 

1.19、String s = new String("xyz");創建了幾個String Object?

兩個對象,一個是“xyz”,一個是指向“xyz”的引用對象。

 

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

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

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

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

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

 

1.21、C#中的接口和類有什么異同。

不同點:

不能直接實例化接口。

接口不包含方法的實現。

接口可以多繼承,類只能單繼承。

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

相同點:

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

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

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

 

1.22、abstract class和interface有什么區別?

相同點:

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

不同點:

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

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

接口可以用於支持回調(CallBack);抽象類不能實現回調,因為繼承不支持。

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

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

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

 

1.23、是否可以繼承String類?

String類是sealed類故不可以繼承。

 

1.24、try {}里有一個return語句,那么緊跟在這個try后的finally {}里的code會不會被執行,什么時候被執行?

會執行,在return前執行。

 

public int QueryCount()

{

  try

  {

    return cmd.ExecuteScalar();

  }

  finally

  {

    cmd.Dispose();

  }

}

 

 

如果C#設計的是先執行cmd.Dispose()再執行return就會出現return執行失敗了,因為cmd已經Dispose了。

 

1.25、new 關鍵字用法

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

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

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

 

1.26、如何把一個Array復制到ArrayList里

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

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

 

1.27、描述線程與進程的區別?

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

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

 

1.28、什么是強類型,什么是弱類型?哪種更好些?為什么?

C#中

int i=3;

i="a";

不可以

JavaScript中

var i=3;

i="a";

可以

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

沒有好不好,二者各有好處,強類型安全,因為它事先已經確定好了,而且效率高。弱類型更靈活,但是效率低,而且出錯概率高

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

 

1.29、什么是反射?

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

 

1.30、int、DateTime、string是否可以為null?

int、DateTime不能,因為其為Struct類型,而結構屬於值類型,值類型不能為null,只有引用類型才能被賦值null。string可以為null。

 

1.31、傳入某個屬性的set方法的隱含參數的名稱是什么?

value,它的類型和屬性所聲名的類型相同。

 

1.32、C#支持多重繼承么?

類之間不支持,接口之間支持。類對接口叫做實現,不叫繼承。

 

1.33、C#中所有對象共同的基類是什么?

System.Object

 

1.34、通過超鏈接怎樣傳遞中文參數?

答:用URL編碼,通過QueryString傳遞,用urlencode編碼 用urldecode解碼。

 

1.35、string、String;int、Int32;Boolean、bool的區別

String、Int32、Boolean等都屬於.Net中定義的類,而string、int、bool相當於C#中對這些類定義的別名。CTS。

 

1.36、Server.Transfer和Response.Redirect的區別是什么?

: Server.Transfer僅是服務器中控制權的轉向,在客戶端瀏覽器地址欄中不會顯示出轉向后的地址;Response.Redirect則是完全的跳轉,瀏覽器將會得到跳轉的地址,並重新發送請求鏈接。這樣,從瀏覽器的地址欄中可以看到跳轉后的鏈接地址。

Server.Transfer是服務器請求資源,服務器直接訪問目標地址的URL,把那個URL的響應內容讀取過來,然后把這些內容再發給瀏覽器,瀏覽器根本不知道服務器發送的內容是從哪兒來的,所以它的地址欄中還是原來的地址。 這個過程中瀏覽器和Web服務器之間經過了一次交互。

Response.Redirect就是服務端根據邏輯,發送一個狀態碼,告訴瀏覽器重新去請求那個地址,一般來說瀏覽器會用剛才請求的所有參數重新請求。這個過程中瀏覽器和Web服務器之間經過了兩次交互。

 

1.37、不是說字符串是不可變的嗎?string s="abc";s="123"不就是變了嗎?

String是不可變的在這段代碼中,s原先指向一個String對象,內容是 "abc",然后我們將s指向"123",那么s所指向的那個對象是否發生了改變呢?答案是沒有。這時,s不指向原來那個對象了,而指向了另一個 String對象,內容為"123",原來那個對象還存在於內存之中,只是s這個引用變量不再指向它了。

 

1.38、是否可以從一個static方法內部發出對非static方法的調用?

不可以。因為非static方法是要與對象關聯在一起的,必須創建一個對象后,才可以在該對象上進行方法調用,而static方法調用時不需要創建對象,可以直接調用。也就是說,當一個static方法被調用時,可能還沒有創建任何實例對象,如果從一個static方法中發出對非static方法的調用,那個非static方法是關聯到哪個對象上的呢?這個邏輯無法成立,所以,一個static方法內部不能發出對非static方法的調用。

 

1.39、.Net中會存在內存泄漏嗎,請簡單描述。

所謂內存泄露就是指一個不再被程序使用的對象或變量一直被占據在內存中。.Net中有垃圾回收機制,它可以保證一對象不再被引用的時候,即對象變成了孤兒的時候,對象將自動被垃圾回收器從內存中清除掉。雖然.Net可以回收無用的對象,但是.Net仍然存在由於使用不當導致的內存泄露問題。.Net中的內存泄露的情況:長生命周期的對象持有短生命周期對象的引用就很可能發生內存泄露,盡管短生命周期對象已經不再需要,但是因為長生命周期對象持有它的引用而導致不能被回收,這就是.Net中內存泄露的發生場景,通俗地說,就是程序員可能創建了一個對象,以后一直不再使用這個對象,這個對象卻一直被引用,即這個對象無用但是卻無法被垃圾回收器回收的,這就是.Net中可能出現內存泄露的情況,例如,緩存系統,我們加載了一個對象放在緩存中(例如放在一個全局Dictionary對象中),然后一直不再使用它,這個對象一直被緩存引用,但卻不再被使用。擴展:使用弱引用那么即使被引用也可以被回收。

 

1.40、說出一些常用的類、接口,請各舉5個

常用的類:StreamReader、WebClient、Dictionary<K,V>、StringBuilder、SqlConnection、FileStream、File、Regex、List<T>

常用的接口:IDisposable、IEnumerable、IDbConnection、IComparable、ICollection、IList、IDictionary

 

1.41、BS與CS的聯系與區別。

C/SClient/Server的縮寫。客戶端需要安裝專用的客戶端軟件。

B/SBrower/Server的縮寫,客戶機上只要安裝一個瀏覽器。在這種結構下,用戶界面完全通過WWW瀏覽器實現,一部分事務邏輯在前端實現,但是主要邏輯在服務器端實現。瀏覽器通過Web Server 同數據庫進行數據交互。

C/S 與 B/S 區別:

1).硬件環境不同:

  C/S 一般建立在專用的網絡上, 小范圍里的網絡環境, 局域網之間再通過專門服務器提供連接和數據交換服務.

  B/S 建立在廣域網之上的, 不必是專門的網絡硬件環境,例與電話上網, 租用設備. 信息自己管理. 有比C/S更強的適應范圍, 一般只要有操作系統和瀏覽器就行

).對安全要求不同

  C/S 一般面向相對固定的用戶群, 對信息安全的控制能力很強. 一般高度機密的信息系統采用C/S 結構適宜. 可以通過B/S發布部分可公開信息.

  B/S 建立在廣域網之上, 對安全的控制能力相對弱, 可能面向不可知的用戶。

3).處理問題不同

  C/S 程序可以處理用戶面固定, 並且在相同區域, 安全要求高需求, 與操作系統相關. 應該都是相同的系統。C/S的客戶端由於是本地程序,因此和本地硬件、程序的交互性很強,比如可以控制本機的其他程序、可以讀寫本地磁盤文件、可以與硬件交互。

  B/S 建立在廣域網上, 面向不同的用戶群, 分散地域, 這是C/S無法作到的. 與操作系統平台關系最小,正應為如此B/S很難和本地硬件、程序、文件進行交互,比如很難控制本機的其他程序、很難讀寫本地磁盤文件、很難與硬件交互,當然可以用ActiveX技術解決,比如網銀等就是這么解決的,這樣做的問題就是可能會被客戶拒絕,而且只局限於Windows操作系統。

 

C/S也分為兩層架構和三層架構。兩層架構:客戶端程序程序直連數據庫;三層架構:客戶端訪問服務端的服務,主要邏輯代碼寫在服務端的服務中,然后服務端服務再去訪問數據庫,Oracle版分布式呼叫中心,WCF。

 

1.42、編寫一個單例(Singleton)類。

public FileManager

{

     private FileManager(){}

     public static FileManager Instance = new FileManager();

}

 

 

1.43、什么是sql注入?如何避免sql注入?

用戶根據系統的程序構造非法的參數從而導致程序執行不是程序員期望的惡意SQL語句。使用參數化的SQL就可以避免SQL注入。使用參數化Paramter

1' or 1=1

 

1.44、說出一些數據庫優化方面的經驗?

索引內部原理:想象成Dictionary,插入、刪除、更新的速度慢了,加上索引也多占用了空間,查詢的速度快了。加上索引以后速度提升非常明顯。

1)在經常檢索的字段上(select * from Person where Name=@Name)使用索引提高查詢速度。

2)select中只列出必要的字段,而不是*。

3)避免隱式類型轉換造成的全表掃描,在索引上使用函數也會造成全表掃描(因為索引只是為字段建立的,一旦使用表達式或者函數,那么索引就是失效了,當然也可以使用“函數索引”、“表達式索引”解決這個問題),使用索引不一定能提高查詢速度。

4)避免在索引列上使用計算(where Name+'A'=@MyName)

 

1.45、談談ViewState。談談對ASP.Net原理的理解。談談ASP.Net生命周期。

Label、Textbox在禁用ViewState的時候自增的不同表現

Http是無狀態的,WebForm為了實現基於http的“有狀態”從而簡化開發,ViewState用來在兩次請求間保持狀態。頁面返回前將界面的狀態序列化到ViewState中,這樣就將狀態保存在了瀏覽器中,下次頁面提交的時候會順便再將ViewState提交到服務器,這樣服務器就根據ViewState還原了狀態,這樣WebForm開發就像有狀態一樣了。談談自定義AutoInc控件。

 

1.46、post、get的區別

get的參數會顯示在瀏覽器地址欄中,而post的參數不會顯示在瀏覽器地址欄中;

使用post提交的頁面在點擊【刷新】按鈕的時候瀏覽器一般會提示“是否重新提交”,而get則不會;

get的頁面可以被搜索引擎抓取,而用post的則不可以;

post可以提交的數據量非常大,而用get可以提交的數據量則非常小(2k),受限於網頁地址的長度。

post可以進行文件的提交,而用get則不可以。

 

1.47、Http默認的端口號是(80)、Ftp默認的端口號是(21)、SQLServer的默認端口號是(1433)

 

1.48、運算符++a表示(先將a加1,然后表達式的值為a加1后的值),a++表示(表達式的值為a,然后a加1)。

 

1.49、.Net Framework中的類是專門供C#調用的是嗎?

答:錯。VB.Net等語言都可以調用.Net Framework中的類。CTS、CLS。

 

1.50、開放性問題:說出盡可能多的基於.Net Framework的語言。

參考解答:C#、VB.Net、F#、PowerShell、IronPython、J#、Ruby.Net

 

1.51、.Net、ASP.Net、C#、VisualStudio之間的關系是什么?

答:.Net一般指的是.Net Framework,提供了基礎的.Net類,這些類可以被任何一種.Net編程語言調用,.Net Framework還提供了CLR、JIT、GC等基礎功能。

ASP.Net是.Net中用來進行Web開發的一種技術,ASP.Net的頁面部分寫在aspx 文件中,邏輯代碼通常通過Code-behind的方式用C#、VB.Net等支持.Net的語言編寫。

C#是使用最廣泛的支持.Net的編程語言。除了C#還有VB.Net、IronPython等。

VisualStudio是微軟提供的用來進行.Net開發的集成開發環境(IDE),使用VisualStudio可以簡化很多工作,不用程序員直接調用csc.exe等命令行進行程序的編譯,而且VisualStudio提供了代碼自動完成、代碼高亮等功能方便開發。除了VisualStudio,還有SharpDevelop、MonoDevelop等免費、開源的IDE,VisualStudio Express版這個免費版本。

 

1.52、AJAX解決什么問題?如何使用AJAX?AJAX有什么問題需要注意?項目中哪里用到了AJAX?

答:AJAX解決的問題就是“無刷新更新頁面”,用傳統的HTML表單方式進行頁面的更新時,每次都要將請求提交到服務器,服務器返回后再重繪界面,這樣界面就會經歷:提交→變白→重新顯示這樣一個過程,用戶體驗非常差,使用AJAX則不會導致頁面重新提交、刷新。

AJAX最本質的實現是在Javascript中使用XMLHttpRequest進行Http的請求,開發中通常使用UpdatePanel、JQuery等方式簡化AJAX的開發,UpdatePanel的方式實現AJAX最簡單,但是數據通訊量比較大,因為要來回傳整個ViewState,而且不靈活,對於復雜的需求則可以使用JQuery提供的ajax功能。

UpdatePanel的內部原理。

AJAX最重要的問題是無法跨域請求(www.rupeng.com →so.rupeng.com),也就是無法在頁面中向和當前域名不同的頁面發送請求,可以使用在當前頁面所在的域的服務端做代理頁面的方式解決。

 

1.53、NET通過對各語言先編譯成( IL),然后再執行時用( JIT)將其編譯成本地平台代碼,來實現異構平台下對象的互操作。

 

1.54、Application 、Cookie和 Session 兩種會話有什么不同?

答:Application是用來存取整個網站全局的信息,而Session是用來存取與具體某個訪問者關聯的信息。

 

1.55、開放式問題:你經常訪問的技術類的網站是什么?

博客園(www.cnblogs.com)、csdn、codeplex、codeproject、msdn文檔、msdn論壇

 

1.56、你對.net的GC的理解

GC是.Net的垃圾收集器,可以進行內存資源的回收,程序員無需關心資源的回收,當一個對象沒有任何引用的時候就可以被回收了。一個對象可以被回收並不意味着一定會被立即回收,GC會選擇時機進行回收。可以調用GC.Collect()讓GC立即回收。GC不能回收非托管資源,對於非托管資源一般都實現了IDisposable接口,然后使用using關鍵字進行資源的回收。

 

1.57、請寫一個SQL語句:從user表中取出name列中的起始字符是“北京”的全部記錄

select * from [user] wherer name like'北京%'

 

1.58、如果不用VisualStudio,用哪個命令行編譯C#程序?

答:csc.exe。

 

1.59、請你簡單的說明數據庫建立索引的優缺點

使用索引可以加快數據的查詢速度,不過由於數據插入過程中會建索引,所以會降低數據的插入、更新速度,索引還會占磁盤空間。

 

1.60、什么是WEB服務控件?使用WEB服務控件有那些優勢、劣勢?

web服務控件就是可以在服務器執行的控件,優勢在於可以回傳數據(ViewState),帶有事件驅動(doPostBack),簡化了Html標簽的使用,使得開發ASP.net程序可以像開發Winform程序一樣簡單。Web服務控件最終還是被渲染(Render)為Html標簽。使用WEB服務控件的劣勢是會生成一些無用的屬性、ViewState等,不利於SEO,一般在內網系統或者互聯網系統的后台中使用WEB服務控件。如果沒有復雜的服務器交互動作,就不用Web服務器控件。runat=server的HTML控件有什么特點:路徑不用程序員解析,可以使用“~”來虛擬路徑。

 

1.61、開放式問題:如果程序連不上SQLServer數據庫服務器服務器,你會怎么排除這個故障?

參考解答:首先ping一下服務器IP,看是否能夠ping通,如果不能ping通,則看是否網絡有問題;如果能ping通,再telnet一下服務器的1433端口,看是否能夠連通;如果不能連通則可能是SQLServer服務停掉了或者是服務器上的防火牆封掉了1433端口;如果能連通再檢查是不是本地程序的問題、驅動的問題。

 

1.62、Http狀態碼各是什么意思。

301 :重定向

404 :頁面不錯在

500:服務器內部錯誤

 

1.63、MVC模式的優缺點

MVC(Model-View-Controller)把交互系統的組成分解成模型、視圖、控制器三種部件

mvc的優點:

1.通過把項目分成model view和controller,使得復雜項目更加容易維護。

2.沒有使用view state和服務器表單控件,可以更方便的控制應用程序的行為

3.應用程序通過controller來控制程序請求,可以提供豐富的url重寫。

4.對單元測試的支持更加出色

5.在團隊開發模式下表現更出眾

MVC的不足: 

1)增加了系統結構和實現的復雜性。對於簡單的界面,嚴格遵循MVC,使模型、視圖與控制器分離,會增加結構的復雜性,並可能產生過多的更新操作,降低運行效率。    
2)視圖與控制器間的過於緊密的連接。視圖與控制器是相互分離,但確實聯系緊密的部件,視圖沒有控制器的存在,其應用是很有限的,反之亦然,這樣就妨礙了他們的獨立重用。    
3)視圖對模型數據的低效率訪問。依據模型操作接口的不同,視圖可能需要多次調用才能獲得足夠的顯示數據。對未變化數據的不必要的頻繁訪問,也將損害操作性能。

 

1.64、什么是Viewstate?它有什么作用?

ViewState用來保存頁面狀態,就是說提交之后我們還可以看到文本框里面的內容就是ViewState保存的功勞。 

ViewState只維護當前頁面的狀態,不同頁面之間不能共享,Session可以。 

ViewState你可以理解為一個隱藏控件。

 

1.65、ASP.Net頁面生命周期簡單描述

每個頁面的生命周期為用戶的每一次訪問,也就是說每一次客戶端與服務器之間的一個往返過程.全局變量的生命周期在此之間.

1. Page_Init(); 
2. Load ViewState and Postback data; 
3. Page_Load(); 
4. Handle control events; 
5. Page_PreRender(); 
6. Page_Render(); 
7. Unload event; 
8. Dispose method called;

 

1.66、存儲過程和sql語句的優缺點

優點: 
1.提高性能,減少網絡傳輸,節約時間 。

2.減少網絡流量    存儲過程位於服務器上,調用的時候只須傳遞存儲過程的名稱以及參數,不用每次訪問都傳遞很長的sql 語句。

4.安全性     減少sql 注入式攻擊。

5.可維護性高    更新存儲過程通常比更改、測試以及重新部署程序集需要較少的時間和精力。

缺點:

1.交互性差 。

2.可移植性差

 

1.67、什么時候使用抽象類,什么時候用接口 

接口用於規范,抽象類用於共性。

接口中只能聲明方法,屬性,事件,索引器。而抽象類中可以有方法的實現,也可以定義非靜態的類變量。抽象類是類,所以只能被單繼承,但是接口卻可以一次實現多個。抽象類可以提供某些方法的部分實現,接口不可以.抽象類的實例是它的子類給出的。接口的實例是實現接口的類給出的。再抽象類中加入一個方法,那么它的子類就同時有了這個方法。而在接口中加入新的方法,那么實現它的類就要重新編寫(這就是為什么說接口是一個類的規范了)。接口成員被定義為公共的,但抽象類的成員也可以是私有的、受保護的、內部的或受保護的內部成員(其中受保護的內部成員只能在應用程序的代碼或派生類中訪問)。此外接口不能包含字段、構造函數、析構函數、靜態成員或常量。

 

1.68、C#中的堆和棧

棧(Stack)由系統管理生存期,存儲代碼執行和調用路徑,執行或調用完畢即從棧中清除。
堆(Heap)中保存值和對象,調用完畢之后依然存在,由垃圾回收器查找棧中有無指向該值或對象的引用,無則從堆中刪除。

 

1.69、C# ref與out區別: 

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

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

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

 

1.70、你對泛型了解嗎?簡單說明一下泛型的有什么好處?

泛型:通過參數化類型來實現在同一份代碼上操作多種數據類型。利用“參數化類型”將類型抽象化,從而實現靈活的復用 
好處是——類型安全和減少裝箱、拆箱。提高性能、類型安全和質量,減少重復性的編程任務 

 

1.71、new有幾種用法 

第一種:實例化對象,new Class();

第二種:覆蓋基類方法,public new XXXX(){}

第三種:new 約束指定泛型類聲明中的任何類型參數都必須有公共的無參數構造函數。

 

1.72、Session有什么重大BUG,微軟提出了什么方法加以解決? 

答:iis中由於有進程回收機制,系統繁忙的話Session會丟失,可以用Sate server或SQL Server數據庫的方式存儲Session不過這種方式比較慢,而且無法捕獲Session的END事件 

 

1.73、<%# %> 和 <% %> 有什么區別?

<%# %>表示綁定的數據源 <% %>是服務器端代碼塊 常量

 

1.74、DateTime.Parse(myString); 這行代碼有什么問題?

有問題,當myString不能滿足時間格式要求的時候,會引發異常,建議使用DateTime.TryParse() 

 

1.75、為什么不提倡catch(Exception) ,catch(Exception e){throw e;}和catch(Exception e){throw;}的區別,error和exception區別

try..catch在出現異常的時候影響性能; 應該捕獲更具體得異常,比如IOExeception,OutOfMemoryException等 

第一個將發生的異常對象拋出,另一個只是拋出異常,並沒有拋出原異常對象

error 表示恢復不是不可能但很困難的情況下的一種嚴重問題。比如說內存溢出。不可能指望程序能處理這樣的情況。

exception 表示一種設計或實現問題。也就是說,它表示如果程序運行正常,從不會發生的情況。

 

1.76、GET與POST的區別 

FORM提交的時候,如果不指定Method,則默認為GET請求,Form中提交的數據將會附加在url之后,以?分開與url分開。字母數字字符原樣發送,但空格轉換為“+“號,其它符號轉換為%XX,其中X

為該符號以16進制表示的ASCII(或ISO Latin-1)值。GET請求請提交的數據放置在HTTP請求協議頭中,而POST提交的數據則放在實體數據中;

在使用 POST 方法的情況下,傳輸數據時不會將數據作為 URL 的一部分;它們會作為一個獨立的實體來傳輸。因此,POST 方法更安全,你也可以用這個方法傳輸更多的數據。而且用 POST 傳輸的數

據不一定要是文本,用 GET 方法傳輸的卻一定要是文本。

1)get是從服務器上獲取數據,post是向服務器傳送數據。

2)在客戶端,Get方式在通過URL提交數據,數據在URL中可以看到;POST方式,數據放置在HTML HEADER內提交。

3)對於get方式,服務器端用Request.QueryString獲取變量的值,對於post方式,服務器端用Request.Form獲取提交的數據。

4)GET方式提交的數據最多只能有1024字節,而POST則沒有此限制。

5)安全性問題。正如在(1)中提到,使用 Get 的時候,參數會顯示在地址欄上,而 Post 不會。所以,如果這些數據是中文數據而且是非敏感數據,那么使用 get;如果用戶輸入的數據不是中文字符而且包含敏感數據,那么還是使用 post為好。

 

1.77、Bind和Eval函數的區別

綁定表達式 <%# Eval("字段名") %> <%# Bind("字段名") %> 

1. Eval 單向綁定:數據是只讀的 
    Bind 雙向綁定:數據可以更改,並返回服務器端,服務器可以處理更改后的數據,如存入數據庫. 
2.當對次表達式操作時候,必須用Eval 如<%# Eval("字段名").ToString().Trim() %> 
3. 綁定控件的屬性時要用Bind,而Eval則是其它一些。 例如

<asp:TextBox ID="First" RunAt="Server" Text='<%# Bind("FirstName") %>' />

<td><%# Eval("ProductID") %></td>

 

1.78、Server.UrlEncode、HttpUtility.UrlDecode的區別 

Server.UrlEncode的編碼方式是按照本地程序設置的編碼方式進行編碼的,HttpUtility.UrlEncode是默認的按照.net的utf-8格式進行編碼的。

 

1.79、如何實現連接池

確保你每一次的連接使用相同的連接字符串(和連接池相同);只有連接字符串相同時連接池才會工作。如果連接字符串不相同,應用程序就不會使用連接池而是創建一個新的連接。

優點

使用連接池的最主要的優點是性能。創建一個新的數據庫連接所耗費的時間主要取決於網絡的速度以及應用程序和數據庫服務器的(網絡)距離,而且這個過程通常是一個很耗時的過程。而采用數據庫連接池后,數據庫連接請求可以直接通過連接池滿足而不需要為該請求重新連接、認證到數據庫服務器,這樣就節省了時間。

缺點

數據庫連接池中可能存在着多個沒有被使用的連接一直連接着數據庫(這意味着資源的浪費)。

技巧和提示

1.當你需要數據庫連接時才去創建連接池,而不是提前建立。一旦你使用完連接立即關閉它,不要等到垃圾收集器來處理它。

2.在關閉數據庫連接前確保關閉了所有用戶定義的事務。

3.不要關閉數據庫中所有的連接,至少保證連接池中有一個連接可用。如果內存和其他資源是你必須首先考慮的問題,可以關閉所有的連接,然后在下一個請求到來時創建連接池。

 

1.80、提高.NET的性能 

1 使用異步方式調用Web服務和遠程對象

只要有可能就要避免在請求的處理過程中對Web服務和遠程對象的同步調用,因為它占用的是的ASP.NET 線程池中的工作線程,這將直接影響Web服務器響應其它請求的能力。

2 使用適當的Caching策略來提高性能

3 判斷字符串,不要用""比較。

//避免 
if(strABC!=null && strABC!="") 
{}

//推薦 
if(!strABC.IsNullOrEmpty) 
{}

4 頁面優化

5 用完馬上關閉數據庫連接 

6 盡量使用存儲過程,並優化查詢語句 

7 只讀數據訪問用SqlDataReader,不要使用DataSet

……….

 

1.81、簡述你對XML Web Service的原理的認識? 

答:利用SOAP(簡單對象訪問協議)在http上執行遠程方法的調用,也可以使用WSDL(Web服務描述語言)來完成完整的描述Web服務,然后用UDDI注冊各個服務提供商提供的服務,以便共享他們。

 

1.82.什么是受管制的代碼? 

答:unsafe:非托管代碼。不經過CLR運行。

 

1.83.net Remoting 的工作原理是什么? 
答:服務器端向客戶端發送一個進程編號,一個程序域編號,以確定對象的位置。

 

1.84.O/R Mapping 的原理 
答:利用反射,配置將對象和數據庫表映射。

 

1.85.remoting和webservice兩項技術的理解以及實際中的應用。 
答:WS主要是可利用HTTP,穿透防火牆。而Remoting可以利用TCP/IP,二進制傳送提高效率。

 

1.86.out保留字怎么使用,什么時候使用。
答:有時為了從一個函數中返回多個值,我們需要使用out關鍵字,把輸出值賦給通過引用傳遞給方法的變量(也就是參數)。但C#要求變量再被引用的前必須初始化。在調用該方法時,還需要添加out關鍵字。

 

1.87.PDB是什么東西? 在調試中它應該放在哪里?

答:PDB是用於保存調試和項目狀態信息的文件,在debug的時候將產生pdb文件,調試的時候應該放在和對應應用程序集相同目錄。

 

1.88.使用ASMX的XML Web服務與使用SOAP的.NET Remoting的區別?

答:Web服務使用的消息機制,而Remoting采用的RPC. Web Service能用於不同平台,不同語言,Remoting只適用於.Net。效率上Remoting高於Xml Web Service。

 

1.89.從概念上闡述前期綁定(early-binding)和后期綁定(late-binding)的區別?

這個就像是強弱類型的比較相似,前期綁定是在編譯的時候就確定了要綁定的數據,而后期綁定是在運行的時候才填充數據。所以前期綁定如果失敗,會在編譯時報編譯錯誤,而后期綁定失敗只有在運行時的時候才發生。

 

1.90.概述反射和序列化

反射:程序集包含模塊,而模塊包含類型,類型又包含成員。反射則提供了封裝程序集、模塊和類型的對象。您可以使用反射動態地創建類型的實例,將類型綁定到現有對象,或從現有對象中獲取類型。然后,可以調用類型的方法或訪問其字段和屬性。

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

 

1.91.XmlSerializer是如何工作的?使用這個類的進程需要什么ACL權限?

我只知道XmlSerializer是將對象的屬性和字段進行序列化和反序列化的,序列化成為xml數據,反序列化再將xml轉換成對象。應該至少需要ACL權限中的讀權限.

 

1.92.XmlSerializer使用的針對屬性的模式有什么好處?解決了什么問題?

只序列化有用的數據,而不是序列化整個對象。實現沒必要的數據冗余,和提升序列化時的性能。

 

1.93.SQLSERVER服務器中,給定表 table1 中有兩個字段 ID、LastUpdateDate,ID表示更新的事務號,LastUpdateDate表示更新時的服務器時間,請使用一句SQL語句獲得最后更新的事務號

答:Select ID FROM table1 Where LastUpdateDate = (Select MAX(LastUpdateDate) FROM table1)

 

1.94.在對象比較中,對象一致和對象相等分別是指什么?a.Equals(b)和a == b一樣嗎?

對象一致是指兩個對象是同一個對象,引用相同。而對象相等是指兩個對象的值相同,但引用不一定相同。

不一樣。a.Equals(b)表示a與b一致, a==b表示a與b的值相等。

 

1.95.請解釋一下IClonable

IClonable方法是實現深度復制的接口,實現它應該能深度復制一個對象出來。深度復制的特征的調用對象的構造方法,創建新的對象,包括創建對象中嵌套的引用對象的新實例。而Shadow復制則不同,是淺表復制,不重新創建新實例。淺表復制的實現是Object.MemberWiseClone().

深度復制(Deep Copy)與淺表復制(Shadow Copy)

 

1.96.特性能夠放到某個方法的參數上?如果可以,這有什么用?

可以,作用可以對參數有進一步限定,比如輸入參數為int類型,可以通過允許AttributeTargets=ParameterInfo的Attribute自定義實現來限定輸入參數的大小,比如當輸入參數小於100的時候便報錯。

 

1.97.WEB控件可以激發服務端事件,請談談服務端事件是怎么發生並解釋其原理?自動傳回是什么?為什么要使用自動傳回。 

web控件發生事件時,客戶端采用提交的形式將數據交回服務端,服務端先調用Page_Load事件,然后根據傳回的狀態信息自動調用服務端事件自動傳回,當我們在點擊客戶端控件時,采用提交表單的形式將數據直接傳回到務端 只有通過自動傳回才能實現服務端事件的機制,如果沒有自動回傳機制就只能調用客戶端事件,而不能調用服務端事件。

 

1.98.請解釋web.config文件中的重要節點 
appSettings包含自定義應用程序設置。 
system.web 系統配置 
compilation動態調試編譯設置 
customErrors自定義錯誤信息設置 
authentication身份驗證,此節設置應用程序的身份驗證策略 
authorization授權, 此節設置應用程序的授權策略

 

1.99.請解釋什么是上下文對象,在什么情況下要使用上下文對象 
上下文對象是指HttpContext類的Current 屬性,當我們在一個普通類中要訪問內置對象(Response,Request,Session,Server,Appliction等)時就要以使用此對象

 

1.100. 幾十上百萬行,如何快速查詢出表數據 

答:用分頁存儲過程 

 

1.101.數據庫查詢優化: 
1、多態性,多種數據庫兼容; 
2、支持翻頁,支持查詢總數,頁碼顯示; 
3、能處理100萬以上數據量; 

 

1.102.兩個表,寫查詢語句,根據兩個字段一個是升序,一個將序。 

答:select * from a,b where a.字段1 = b.字段1 order by a.字段2 asc,b.字段2 desc

 

 

1.103、string與String的區別

string、int是C#定義的類型,而String、Int32是.net類型即是CTS類型; 
string 是 .NET 框架中 System.String 的別名。 
string在編譯的時候會轉化為String類

 

1.104、虛方法(virtual )和抽象方法(abstract)的區別?

之一:抽象方法僅有聲明,而沒有任何實現,如abstract someMethod();,虛方法卻不能如此
之二:子類繼承父類,可以對父類中的虛方法進行重寫、覆蓋、不處理三種處理(見5),對抽象方法卻必須實現

 

1.105、子類對父類中虛方法的處理有重寫(override)和覆蓋(new),請說明它們的區別?

有父類ParentClass和子類ChildClass、以及父類的虛方法VirtualMethod。有如下程序段:
ParentClass pc = new ChildClass();
pc.VirtualMethod(...);
如果子類是重寫(override)父類的VirtualMethod,則上面的第二行語句將調用子類的該方法
如果子類是覆蓋(new)父類的VirtualMethod,則上面的第二行語句將調用父類的該方法

 

1.106、抽象類(abstract)和接口(interface)的區別

抽象類可以有自己的實現,接口卻僅有聲明,可以有自己的靜態數據字段;
java和C#中可以實現多個接口,卻只能繼承一個抽象類(或者非抽象類)(單繼承,和c++的多繼承不同);

 

1.107.頁面生命周期?

頁面生命周期執行一系列步驟:頁面的初始化、實例化控件、還原和維護狀態、運行事件處理程序代碼、呈現。為了在合適的階段執行所需的代碼,所以要對頁面生命周期非常熟悉。在頁生命周期的各個階段,頁面會逐個引發定義的事件,通過對代碼開發,在頁面的生命事件中執行我們所需要的程序;

1.108.頁面生命周期階段?
1、頁請求:發生在頁面生命周期之前,用戶請求頁時,ASP.NET 將確定是否需要分析和編譯頁,從而確定是否開始頁面的生命周期,或者是否可以在不運行頁面的情況下發送頁面緩存以進行響應;
2、開始:設置頁屬性,如:HttpContext 以及其他屬性;在此階段,頁面需要確定是回發請求還是新請求,並設置 IsPostBack 屬性;設置頁面的 UICulture 屬性;
3、頁面初始化:加載所有主題;控件生成,並設置 UniqueID;
注:ViewState、ControlState中的值還未加載至控件;如果頁面是回發,則回發數據也還未加載;故此時控件可以訪問,但值可能出錯;
4、加載:如果當前請求是回發請求,則為控件加載 ViewState 和 ControlState 中的值;
5、驗證:調用所有驗證程序控件的 Validate 方法,此方法將設置驗證程序控件和頁的 IsValid 屬性;
6、回發事件處理:如果請求是回發請求,則調用所有事件處理程序;
7、呈現:首先對該頁和所有控件進行保存視圖狀態,然后對每個控件調用 Render 方法,它會提供一個文本編寫器,用於將控件的輸入寫入頁的 Response 屬性的 OutputStream 中;
8、卸載:完成呈現,並已將頁發送至客戶端、准備丟棄該頁后,調用卸載。將卸載屬性如:Response和Request等等;

1.109.頁面生命周期事件?大概描述一下ASP.NET服務器控件的生命周期?

1)、PreInit
完成操作:檢查IsPostBack屬性來確定是不是第一次處理該頁;創建或重新創建動態控件;動態設置主控頁;動態設置Theme屬性;讀取或設置配置文件屬性;
注:如果請求是回發請求,則控件的值尚未從視圖狀態恢復,即:不應該在此事件中設置控件屬性。
2)、Init
完成操作:在所有控件都已經初始化並且應用所有外觀設置后引發。使用該事件來讀取和初始化控件屬性;
3)、InitComplete
完成操作:由Page對象引發,使用該事件來處理要求完成所有初始化工作的任務;
4)、PreLoad
完成操作:為頁和所有控件加載視圖狀態,然后處理 Request 實例包括的任何回發數據;
注:如果需要在Load之前對頁或控件進行處理,需要該事件;
5)、Load
完成操作:以遞歸方式加載所有控件;
6)、控件事件
完成操作:處理控件引發的事件;
注:在回發請求中,如果頁包含驗證程序控件,請在執行任何處理之前檢查Page和各個驗證控件的IsValid屬性;
7)、LoadComplete
8)、PreRender
在控件輸出前最后的修改機會;
注:在該事件發生前的操作:Page對所有控件遞歸進行EnsureChildControl操作、設置了DataSourceID屬性的數據綁定控件會調用DataBind方法;
9)、SaveStateComplete
在該事件發生前,已經對控件的ViewState進行了保存。
10)、Render
11)、UnLoad
服務器控件的生命周期初始化、加載視圖狀態、處理回發數據、加載、發送回發更改通知、處理回發事件、預呈現、保存狀態、呈現、處置、卸載;

1.110.應用程序生命周期?
在應用程序的生命周期期間,應用程序會引發可處理的事件並調用可重寫的特定方法。若要處理應用程序事件或方法,可以在應用程序根目錄中創建一個名為 Global.asax 的文件。如果創建了 Global.asax文件,ASP.NET 會將其編譯為從 HttpApplication 類派生的類,然后使用該派生類表示應用程序;
HttpApplication 進程的一個實例每次只處理一個請求。由於在訪問應用程序類中的非靜態成員時不需要將其鎖定,這樣可以簡化應用程序的事件處理過程。這樣還可以將特定於請求的數據存儲在應用程序類的非靜態成員中。例如,可以在 Global.asax 文件中定義一個屬性,然后為該屬性賦一個特定於請求的值;
Application_Start 和 Application_End 方法是不表示 HttpApplication 事件的特殊方法。在應用程序域的生命周期期間,ASP.NET 僅調用這些方法一次,而不是對每個 HttpApplication 實例都調用一次;


1.111.ASP.NET 頁面在什么時候產生?又在什么時候銷毀?
1)、Page_Init() —— 初始化對象
這一過程主要是初始化包括頁面本身的所有控件,每次的頁面載入就會執行一次初試過程,而在這里面訪問到的也是控件的初始值。還有就是可以通過OnInit()來重載初試化事件;
2)、LoadViewState() —— 導入ViewState數據
在初試化事件后,在 LoadViewState 事件中所有控件將獲得他們的第一個屬性 ViewState 屬性,這個屬性最終將被返回給服務器以判斷這個頁面是已經被用戶訪問完畢還是仍然在被用戶所訪問。也可重 LoadViewState 事件對相應的控件進行值設定;
3)、LoadPostData() —— 用 LoadPostData 處理 Postback 數據
Postback數據也可以理解成就是服務器頁面提交的表單數據,每一次表單數據的提交都會觸發執行 IPostBackDataHandler 接口操作的控件;
4)、Page_Load() —— 導入對象
這個過程就比較熟悉了,也是在頁面的每次載入時一定會執行,但是注意和 PageInit() 之間的區別,所有的對象第一次被布置在 DOM 頁面(在ASP.NET中稱控件樹)里了並且可以通過代碼或是相關的位置被引用。這樣,對象就可以很容易的從客戶端獲得諸如寬度、高度、值、可見性等在 HTML中的屬性值。經常會用到的Page.IsPostBack()指示該頁是否正為響應客戶端回發而加載,或者它是否正被首次加載和訪問;
5)、Handle Control Events —— 具體的控件事件
這個過程執行的是相應具體控件事件;
6)、Page_PreRender() —— 預先呈遞對象
預先呈遞對象可以改變對象並將改變保存的最后時刻。可以對控件的屬性、控件樹的結構等做出最后的修改,同時還不用考慮ASP.NET對其作出任何改變,因為此時已經脫離了數據庫調用以及 ViewState 更新了,也可以通過OnPreRender來重載;
7)、Page_Render() —— 呈遞對象呈遞頁面
所有對頁面控件的修改完成后 ViewState就被保存了。運用HTML創建給瀏覽器輸出的頁面的時候Render事件就發生了。在Render事件過程中,頁面調用其中的對象將它們呈遞給HTML。然后,頁面就可以以HTML的形式被用戶的瀏覽器訪問了。當Render事件被重載時,開發者可以編寫自定義的HTML代碼使得原先生成的HTML都無效而按照新的HTML來組織頁面。Render方法將一個 HtmlTextWriter 對象作為參數並用它將HTML在瀏覽器上以網頁的形式顯示。這時仍然可以做一些修改動作,不過它們只是客戶端的一些變化而已了。亦可以重載Render事件;
8)、Unload event —— 卸載對象
當想服務器請求一個對象的時候,就會在內存里生成一個繼承頁面對象,也就是頁面的類,它繼承自System.Web.UI.Page。當頁面對象從內存中卸載時發生,將觸發該事件;
9)、Dispose method called
在呈遞給HTML完成后,所有的對象都應被銷毀。在Dispose事件中,你應該銷毀所有在建立這個頁面時創建的對象。這時所有的處理已經完畢,所以銷毀任何剩下的對象都是不會產生錯誤的,包括頁面對象。你可以重載Dispose事件;

 

1.112、String str=new String("a")和String str = "a"有什么區別?

String str = "a"; 這個只是一個引用,內存中如果有“a"的話,str就指向它,如果沒有才創建如果你以后還用到"a"這個字符串的話並且是這樣用: String str1 = "a"; String str2 = "a"; String str2 = "a"; 這4個變量都共享一個字符串"a" 而String str = new String("a");是根據"a"這個String對象再次構造一個String對象,將新構造出來的String對象的引用賦給str

 

1.113、判斷字符串變量str是否為空的一下三種方法哪個性能更優:a、str=="";b、str==String.Empty;c、str.Length==0;?

答案是c;原因我就不說了。

 

補充:

如果你的簡歷上面寫“熟悉/了解C#”,那么你就應該能夠回答下面的這些基礎問題。

  1. 傳入某個屬性的set方法的隱含參數的名稱是什么?
    value,它的類型和屬性所聲名的類型相同。
  2. 如何在C#中實現繼承?
    在類名后加上一個冒號,再加上基類的名稱。
  3. C#支持多重繼承么?
    不支持。可以用接口來實現。
  4. protected修飾的屬性/方法在何處可以訪問?
    在繼承或間接繼承與這個類的子類中可以訪問。
  5. 私有成員會被繼承么?
    會,但是不能被訪問。所以看上去他們似乎是不能被繼承的,但實際上確實被繼承了。
  6. 請描述一下修飾符protected internal。 
    protected internal修飾的屬性/方法只能在它的在同一個程序集(Assembly)中的子類被訪問。
  7. C#提供一個默認的無參數構造函數,當我實現了另外一個有一個參數的構造函數時候,還想保留這個無參數的構造函數。這樣我應該寫幾個構造函數?
    兩個,一旦你實現了一個構造函數,C#就不會再提供默認的構造函數了,所以需要手動實現那個無參數構造函數。
  8. C#中所有對象共同的基類是什么?
    System.Object.
  9. 重載和覆寫有什么區別?
    重載提供了對一個方法簽名的不同參數調用的實現。覆寫提供了子類中改變父類方法行為的實現。
  10. 在方法定義中,virtual有什么含意? 
    virtual修飾的方法可以被子類覆寫。
  11. 能夠將非靜態的方法覆寫成靜態方法么?
    不能,覆寫方法的簽名必須與被覆寫方法的簽名保持一致,除了將virtual改為override。
  12. 可以覆寫私有的虛方法么?
    不可以,甚至子類中無法訪問父類中的私有方法。
  13. 能夠阻止某一個類被其他類繼承么? 
    可以,使用關鍵字sealed。
  14. 能夠實現允許某個類被繼承,但不允許其中的某個方法被覆寫么? 
    可以,標記這個類為public,並標記這個方法為sealed。
  15. 什么是抽象類(abstract class)?
    一種不可以被實例化的類。抽象類中一般含有抽象方法,當然也可有具體實現。繼承類只有實現過所有抽象類的抽象方法后才能被實例化。
  16. 何時必須聲明一個類為抽象類? 
    當這個類中包含抽象方法時,或是該類並沒有完全實現父類的抽象方法時。
  17. 接口(interface)是什么?
    只含有共有抽象方法(public abstract method)的類。這些方法必須在子類中被實現。
  18. 為什么不能指定接口中方法的修飾符? 
    接口中的方法用來定義對象之間通信的契約,指定接口中的方法為私有或保護沒有意義。他們默認為公有方法。
  19. 可以繼承多個接口么? 
    當然。
  20. 那么如果這些接口中有重復的方法名稱呢? 
    這種情況中你可以決定如何實現。當然需要特別得小心。但是在編譯環節是沒有問題的。
  21. 接口和抽象類的區別是什么? 
    接口中所有方法必須是抽象的,並且不能指定方法的訪問修飾符。抽象類中可以有方法的實現,也可以指定方法的訪問修飾符。
  22. 如何區別重載方法? 
    不同的參數類型,不同的參數個數,不同的參數順序。
  23. const和readonly有什么區別?
    const關鍵字用來聲明編譯時常量,readonly用來聲明運行時常量。
  24. System.String 和System.StringBuilder有什么區別?
    System.String是不可變的字符串。System.StringBuilder存放了一個可變的字符串,並提供一些對這個字符串修改的方法。 

 


如果你的簡歷上面說“精通.NET”,那么下面的問題應該大都可以給出較完美的答案。

注:對於每個判斷是非問題,都要考慮“為什么”與“為什么不”。

  1. Thread和Process之間有什么區別?.NET新引入了Application Domain的概念,這樣他們三個之間有什么區別?引入了Application Domain會帶來一些潛在的問題么?
  2. Windows Service與普通的EXE在執行過程中有什么區別?
  3. 一個進程可以訪問的Windows地址空間有多大?等於系統的虛擬內存大小么?這兩方面將對系統的設計產生什么樣的影響?
  4. EXE和DLL之間的區別是什么?在系統設計中應該如何選擇使用它們?
  5. 普通的EXE與.NET EXE的執行過程有什么不同?
  6. 什么是弱類型,什么是強類型?在系統設計中應該首先考慮使用哪種類型?
  7. PDB文件是作什么用的?里面包含了什么信息?
  8. Cycloramic Complexity是什么?為什么它很重要?
  9. 為創建一個critical section以訪問某個變量書寫一個標准的lock() 並加上double check。
  10. 為某個對象實現標准的Dispose模式。
  11. 什么是FullTrust? 存在於GAC中的 assembly 擁有FullTrust么?
  12. 下面這個命令是做什么的?gacutil /l | find /i “system”
  13. 下面這個命令是作什么的? sn -t something.dll
  14. 跨防火牆的 DCOM必須打開哪個端口?端口135是用來做什么的?
  15. 有什么辦法可以與現有unmanaged code集成?在集成的時候應該考慮什么問題?
  16. 簡要解釋一下OOP與SOA都是用來作什么的?
  17. XmlSerializer是如何工作的?進程運行XmlSerializer時候需要什么樣的ACL權限?
  18. 在系統設計時,何時應該使用try catch?何時需要避免使用?
  19. Debug.Write()和Trace.Write()之間有什么區別?二者分別應該用於何處?
  20. Debug Build和Release Build有什么區別?在執行效率上有什么明顯的區別么?
  21. JIT是針對Assembly還是Method發生的?解釋一下為什么.NET的設計者要這樣做?
  22. 簡要描述一下GC的執行過程。
  23. 應該如何選擇使用abstract class還是interface?
  24. 在設計一個自定義類型時應如何選擇使用Value Type還是Reference Type?
  25. 對於Value Type和Reference Type,a.Equals(b)的默認實現方式有什么不同?
  26. .NET中為什么不提供默認的deep copy?如果需要,要如何實現deep copy?
  27. 相對於.NET 1.1,.NET2.0為了避免過度的boxing/unboxing造成的系統開銷提供了哪些支持?
  28. String是Value Type還是Reference Type?為什么.NET中的String對象被設置成immutable?

 

回到目錄

二、C# 筆試

2.1.using關鍵字有什么用?什么是IDisposable?

using可以聲明namespace的引入,還可以實現非托管資源的釋放,實現了IDisposiable的類在using中創建,using結束后會自動調用該對象的Dispose方法,釋放資源。using其實等價於try……finally,用起來更方便。

 

2.2.Assembly.Load("foo.dll"); 這句話是否正確?

錯誤,正確的應該是Assembly.Load("foo"); 或者Assembly.LoadFrom("foo.dll");

 

2.3.XML 與 HTML 的主要區別

1)XML是區分大小寫字母的,HTML不區分。

2)在HTML中,如果上下文清楚地顯示出段落或者列表鍵在何處結尾,那么你可以省略</p>或者</li>之類的結束 標記。在XML中,絕對不能省略掉結束標記。

HTML:<img src="1.jpg"><br><br>

XML:<img src="1.jpg"></img><br/><br/>

3)在XML中,擁有單個標記而沒有匹配的結束標記的元素必須用一個 / 字符作為結尾。這樣分析器就知道不用 查找結束標記了。

4)在XML中,屬性值必須分裝在引號中。在HTML中,引號是可用可不用的。

5)在HTML中,可以擁有不帶值的屬性名。在XML中,所有的屬性都必須帶有相應的值。

XML是用來存儲和傳輸數據的,HTML是用來顯示數據的

 

2.4.string str = null 與 string str = “”說明其中的區別。

答:string str = null 是不給他分配內存空間,而string str = \"\" 給它分配長度為空字符串的內存空間。 string str = null沒有string對象,string str = “”有一個字符串對象。

 

2.5.寫出一條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(推薦)

 

2.6.面向對象的語言具有________性._________性.________性

答:封裝.繼承.多態。

 

2.7.在.Net中所有可序列化的類都被標記為_____?

答:[serializable]

 

2.8.在.Net托管代碼中我們不用擔心內存漏洞,這是因為有了______?

答:GC。

 

2.9.什么叫應用程序域?什么是受管制的代碼?什么是托管代碼?什么是強類型系統?什么是裝箱和拆箱?什么是重載?CTS.CLS和CLR分別作何解釋?

應用程序域為安全性.可靠性.版本控制以及卸載程序集提供了隔離邊界。應用程序域通常由運行庫宿主創建,運行庫宿主負責在運行應用程序之前引導公共語言運行庫。應用程序域提供了一個更安全.用途更廣的處理單元,公共語言運行庫可使用該單元提供應用程序之間的隔離。

受管制的代碼:.Net環境中運行的任何代碼都是受管制的代碼(managed code),.Net外部的代碼也運行在windows上,這些代碼稱為未受管制的代碼(unmanaged code)。

使用基於公共語言運行庫的語言編譯器開發的代碼稱為托管代碼;托管代碼具有許多優點,例如:跨語言集成.跨語言異常處理.增強的安全性.版本控制和部署支持.簡化的組件交互模型.調試和分析服務等。

強類型語言是能夠禁止任何違反類型系統的代碼的語言,或者說是能夠捕獲所有違反類型系統的錯誤的語言。我們說C++相對於C是強類型的,是因為C++禁止了一些C中的隱式轉換,比如將void*轉換為任意的指針類型。

裝箱和拆箱使值類型能夠被視為對象。對值類型裝箱將把該值類型打包到 Object 引用類型的一個實例中。這使得值類型可以存儲於垃圾回收堆中。拆箱將從對象中提取值類型。

每個類型成員都有一個唯一的簽名。方法簽名由方法名稱和一個參數列表(方法的參數的順序和類型)組成。只要簽名不同,就可以在一種類型內定義具有相同名稱的多種方法。當定義兩種或多種具有相同名稱的方法時,就稱作重載。

CTS通用類型系統 (common type system)

一種確定公共語言運行庫如何定義.使用和管理類型的規范。

CLR公共語言運行庫

.NET Framework 提供了一個稱為公共語言運行庫的運行時環境,它運行代碼並提供使開發過程更輕松的服務。

CLS公共語言規范

要和其他對象完全交互,而不管這些對象是以何種語言實現的,對象必須只向調用方公開那些它們必須與之互用的所有語言的通用功能。為此定義了公共語言規范 (CLS),它是許多應用程序所需的一套基本語言功能。

 

2.10.什么是code-Behind技術。

就是代碼隱藏,在ASP.NET中通過ASPX頁面指向CS文件的方法實現顯示邏輯和處理邏輯的分離,這樣有助於web應用程序的創建。比如分工,美工和編程的可以個干各的,不用再像以前asp那樣都代碼和html代碼混在一起,難以維護。

 

2.11.接口是一種引用類型,在接口中可以聲明方法.屬性.索引器和事件,但不可以聲明公有的域或私有的成員變量。

 

 

2.12. 在ADO.NET中,對於Command對象的ExecuteNonQuery()方法和ExecuteReader()方法,下面敘述錯誤的是(c)。

 a) insert.update.delete等操作的Sql語句主要用ExecuteNonQuery()方法來執行;

b) ExecuteNonQuery()方法返回執行Sql語句所影響的行數。

 c) Select操作的Sql語句只能由ExecuteReader()方法來執行;

 d) ExecuteReader()方法返回一個DataReder對象;

解答:ExecuteScalar→select getdate()。

 

 

2.13.下列關於C#中索引器理解正確的是(c )

 a) 索引器的參數必須是兩個或兩個以上

 b) 索引器的參數類型必須是整數型

 c) 索引器沒有名字

 d) 以上皆非

 

2.14. 要創建多文檔應用程序,需要將窗體的(d )屬性設為true。

a) DrawGrid;

b) ShowInTaskbar;

c) Enabled;

d) IsMdiContainer;

 

2.15.如果設treeView1=new TreeView(),則treeView1.Nodes.Add("根節點")返回的是一個 (a)類型的值。

a) TreeNode;

b) int;

c) string;

d) TreeView;

 

2.16.下面關於XML的描述錯誤的是(d)。

a) XML提供一種描述結構化數據的方法;

b) XML 是一種簡單.與平台無關並被廣泛采用的標准;

c) XML文檔可承載各種信息;

d) XML只是為了生成結構化文檔;

 

2.17.以下的C#代碼,試圖用來定義一個接口:

 

public interface IFile

{int A;int delFile()

{

   A = 3;

}void disFile();

}

 

 

關於以上的代碼,以下描述錯誤的是(d )。

a) 以上的代碼中存在的錯誤包括:不能在接口中定義變量,所以int A代碼行將出現錯誤;

b) 以上的代碼中存在的錯誤包括:接口方法delFile是不允許實現的,所以不能編寫具體的實現函數;

c) 代碼void disFile();聲明無錯誤,接口可以沒有返回值;

d) 代碼void disFile();應該編寫為void disFile(){};空和null不一樣。

 

2.18.在ASP.NET中有Button控件myButton,要是單擊控件時,導航到其他頁面http://www.abc.com, 正確的代碼為( c)。

a) private void myButton_Click(object sender, System.EventArgs e){Redirect(“http://www.abc.com”);}

b) private void myButton_Click(object sender, System.EventArgs e){Request.Redirect(“http://www.abc.com”);}

c) private void myButton_Click(object sender, System.EventArgs e){Reponse.Redirect(“http://www.abc.com”);}

d) private void myButton_Click(object sender, System.EventArgs e){Request.Redirect(“http://www.abc.com”);return true;}

 

2.19.聲明一個委托public delegate int myCallBack(int x); 則用該委托產生的回調方法的原型應該是(b )。

a) void myCallBack(int x) ;

b) int receive(int num) ;

c) string receive(int x) ;

d) 不確定的;

 

2.20.StringBuilder 和 String 的區別?

答:String 在進行運算時(如賦值.拼接等)會產生一個新的實例,而 StringBuilder 則不會。所以在大量字符串拼接或頻繁對某一字符串進行操作時最好使用 StringBuilder,不要使用 String

如果要操作一個不斷增長的字符串,盡量不用String類,改用StringBuilder類。兩個類的工作原理不同:String類是一種傳統的修改字符串的方式,它確實可以完成把一個字符串添加到另一個字符串上的工作沒錯,但是在.NET框架下,這個操作實在是划不來。因為系統先是把兩個字符串寫入內存,接着刪除原來的String對象,然后創建一個String對象,並讀取內存中的數據賦給該對象。這一來二去的,耗了不少時間。而使用System.Text命名空間下面的StringBuilder類就不是這樣了,它提供的Append方法,能夠在已有對象的原地進行字符串的修改,簡單而且直接。當然,一般情況下覺察不到這二者效率的差異,但如果你要對某個字符串進行大量的添加操作,那么StringBuilder類所耗費的時間和String類簡直不是一個數量級的。

 

2.21.請敘述屬性與索引器的區別。 

屬性 索引器

通過名稱標識。 通過簽名標識。

通過簡單名稱或成員訪問來訪問。 通過元素訪問來訪問。

可以為靜態成員或實例成員。 必須為實例成員。

屬性的 get 訪問器沒有參數。 索引器的 get 訪問器具有與索引器相同的形參表。

屬性的 set 訪問器包含隱式 value 參數。 除了 value 參數外,索引器的 set 訪問器還具有與索引器相同的形參表。

 

2.22.請敘述const與readonly的區別。

const 關鍵字用於修改字段或局部變量的聲明。它指定字段或局部變量的值不能被修改。常數聲明引入給定類型的一個或多個常數。

const數據成員的聲明式必須包含初值,且初值必須是一個常量表達式。因為它是在編譯時就需要完全評估。

const成員可以使用另一個const成員來初始化,前提是兩者之間沒有循環依賴。

readonly在運行期評估賦值,使我們得以在確保“只讀訪問”的前提下,把object的初始化動作推遲到運行期進行。

readonly 關鍵字與 const 關鍵字不同: const 字段只能在該字段的聲明中初始化。readonly 字段可以在聲明或構造函數中初始化。因此,根據所使用的構造函數,readonly 字段可能具有不同的值。另外,const 字段是編譯時常數,而 readonly 字段可用於運行時常數。

readonly 只能在聲明時或者構造函數里面初始化,並且不能在 static 修飾的構造函數里面。

參考資料:

http://www.cnblogs.com/royenhome/archive/2010/05/22/1741592.html

http://www.cnblogs.com/jams742003/archive/2010/03/23/1692913.html

http://www.cnblogs.com/wayfarer/archive/2006/04/27/386658.html

 

2.23.請解釋ASP。NET中的web頁面與其隱藏類之間的關系?

一個ASP.NET頁面一般都對應一個隱藏類,一般都在ASP.NET頁面的聲明中指定了隱藏類例如一個頁面Tst1.aspx的頁面聲明如下

<%@ Page language="c#" Codebehind="Tst1.aspx.cs" AutoEventWireup="false" Inherits="T1.Tst1" %>

Codebehind="Tst1.aspx.cs" 表明經編譯此頁面時使用哪一個代碼文件,Inherits="T1.Tst1" 表用運行時使用哪一個隱藏類

 

2.24.什么是viewstate,能否禁用?是否所用控件都可以禁用?

Viewstate是保存狀態的一種機制,EnableViewState屬性設置為false即可禁用。最有力的舉例子:Label.TextBox在禁用ViewState后不同的表現來說明。

 

2.25.你對web service的體會?

答:如果自己寫的一些程序也希望別人可以通過Web服務來使用,也可以把自己編寫的方法貼上標簽[WebMethed]來實現Web 服務。[是當編寫程序時,希望實現一些別的網站已經實現過的,也用Web服務可視成XML語言的編碼。可以使用別人的編碼生成的XML找到自己需要的信息,來實現自己編寫的程序的一些功能。

 

2.26.您在什么情況下會用到虛方法?它與接口有什么不同?

答案:子類重新定義父類的某一個方法時,必須把父類的方法定義為virtual

在定義接口中不能有方法體,虛方法可以。

實現時,子類可以不重新定義虛方法,但如果一個類繼承接口,那必須實現這個接口。

 

2.27.不定項選擇:

(1) 以下敘述正確的是: B C

A. 接口中可以有虛方法。B. 一個類可以實現多個接口。 C. 接口不能被實例化。 D. 接口中可以包含已實現的方法。

 

(2) 從數據庫讀取記錄,你可能用到的方法有:B C D

A. ExecuteNonQuery B. ExecuteScalar C. Fill D. ExecuteReader

 

(3)對於一個實現了IDisposable接口的類,以下哪些項可以執行與釋放或重置非托管資源相關的應用程序定義的任務?(多選) ( ABC )

A.Close B.Dispose C.Finalize D.using E.Quit

 

(4)以下關於ref和out的描述哪些項是正確的?(多選) ( ACD )

A.使用ref參數,傳遞到ref參數的參數必須最先初始化。

B.使用out參數,傳遞到out參數的參數必須最先初始化。

C.使用ref參數,必須將參數作為ref參數顯式傳遞到方法。

D.使用out參數,必須將參數作為out參數顯式傳遞到方法。

 

2.28.單項選擇:

1)下列選項中,(C)是引用類型。

a)enum類型 b)struct類型 c)string類型 d)int類型

 

2).關於ASP.NET中的代碼隱藏文件的描述正確的是(C)

a)Web窗體頁的程序的邏輯由代碼組成,這些代碼的創建用於與窗體交互。編程邏輯唯一與用戶界面不同的文件中。該文件稱作為“代碼隱藏”文件,如果用C#創建,該文件將具有“.ascx.cs”擴展名。

b)項目中所有Web窗體頁的代碼隱藏文件都被編譯成.EXE文件。

c)項目中所有的Web窗體頁的代碼隱藏文件都被編譯成項目動態鏈接庫(.dll)文件。

d)以上都不正確。

 

3).下列描述錯誤的是(D)

a)類不可以多重繼承而接口可以;

b)抽象類自身可以定義成員而接口不可以;

c)抽象類和接口都不能被實例化;

d)一個類可以有多個基類和多個基接口;

 

2.29.DataReader和DataSet的異同?

DataReader使用時始終占用SqlConnection,在線操作數據庫,每次只在內存中加載一條數據,所以占用的內存是很小的,是只進的. 只讀的

DataSet則是將數據一次性加載在內存中.拋棄數據庫連接..讀取完畢即放棄數據庫連接(非連接模式),將數據全部加載在內存中.所以比較消耗內存...但是確比DataReader要靈活..可以動態的添加行,列,數據.對數據庫進行 回傳更新操作(動態操作讀入到內存的數據)

 

2.30.public static const; int A = 1;這段代碼有錯誤么?

錯誤:const不能被修飾為static ;因為定義為常量 (const )后就是靜態的(static )。

 

2.31、下面程序的執行結果是什么?

int i = 10;

Console.WriteLine(i++);

Console.WriteLine(++i);

Console.WriteLine(i=20);

 

答案:

10

12

20

 

2.32、下列哪個名詞和WebService不直接相關?(B)

A、UDDI

B、GUID

C、WSDL

D、SOAP

SOAP和HTTP的關系:SOAP基於Http協議的,和普通網頁不同的是網頁返回HTML,SOAP則是符合SOAP協議的XML數據。

 

 

2.33、下面程序的執行結果是什么?

int i = 10;if (i <=0);

Console.WriteLine("i必須大於0");

Console.WriteLine("ok");

 

答案:

i必須大於0

ok

解答:注意if (i <=0)后面的“;”,由於有了“;”,所以Console.WriteLine("i必須大於0")不再是和if一起的一部分,而是獨立的語句。for循環也是如此。

 

2.34、下面程序的執行結果是什么?

 

static void Main(string[] args)

{

    Console.WriteLine(Calc());

    Console.ReadKey();

}

static int Calc()

{

    int i = 0;

    try

    {

        return i;

    }

    finally

    {

        Console.WriteLine("finally");

        i++;

    }

}

 

 

答案:

finally

0

解答:return先執行,finally后執行,所以return的值是沒有i++之前的0。注意並不是return的時候函數真的就“返回、執行結束”了,return只是標記函數的返回值是0,標記完了還會執行finally中的代碼,只有finally中的代碼執行完成后函數才真正的返回。

 

 2.35、在下述選項時,沒有構成死循環的程序是 (C)

A.int i=100;while (1) { i=i%100+1; if (i>100) break; }

B.for (;;);

C.int k=1000; do { ++k; }while(k>=10000);

D.int s=36; while (s);--s;

 

2.36、下列哪個是和數據庫訪問技術關系不大的技術(C)

A、SQLHelper

B、EnterPrise Library

C、AppDomain

D、Linq

 

2.37、下列哪些說法是錯誤的(AC)

A、將bmp格式的文件修改為jpg是修改圖片格式最簡單的方法

B、將QQ動態表情顯示在網頁上用gif格式比較好

C、將bmp格式的圖片放到網頁中可以優化網站速度

D、png格式用在網頁中可以實現透明的效果。

答案:A、C。A錯誤是因為修改文件的后綴並沒有真的修改文件的格式,要使用Photoshop、mspaint等圖片處理工具進行轉換才可以。C錯誤是因為在網頁中不能使用bmp圖片。

 

2.38、從以下簡寫中任選一個簡單描述

OA(Office Automation):辦公自動化

MIS(Managment Information system):管理信息系統

HRM(Human Resource Managment):人力資源管理,包括員工管理、薪資管理、入職管理、離職管理、報銷管理、請假管理等

CRM(Customer Relation Managment):客戶關系管理系統,包括客戶管理、客戶關懷、客戶回訪、投訴管理、咨詢管理、報修管理等

KM(Knowledge Managment):知識管理

 

2.39、下面程序的執行結果是什么?

 

public struct Point

{

    public int x;

    public int y;

    public Point(int x, int y)

    {

        this.x = x;

        this.y = y;

    }

}

Point p1 = new Point(100, 100);

Point p2 = p1;

p1.x = 200;

Console.WriteLine("{0},{1}", p1.x, p2.x);

 

 

答案:

200,100

解答:結構體是復制傳遞的。

 


免責聲明!

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



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