C# 面試題 (一)

1、C# 理論

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

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

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

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

internal: 當前程序集內能夠訪問。ios

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

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

 

1.二、簡述abstract、sealed類修飾符web

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

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

 

1.三、簡述C#成員修飾符

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

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

event:聲明一個事件。

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

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

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

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

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

 

1.四、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.五、列舉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.六、C#中的委託是什麼?事件是否是一種委託?事件和委託的關係

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

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

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

 

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

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

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

 

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

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

 

1.九、屬性和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.十、三層架構

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

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

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

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

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

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

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

缺點: 增長成本。

 

1.十一、MVC模式

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

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

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

 

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

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

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

object obj = null;//引用類型

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

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

 

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

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

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

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

 

1.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.1五、在dotnet中類(class)與結構(struct)的異同?

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

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

 

1.1六、堆和棧的區別?

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

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

 

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

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

 

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

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

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

 

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

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

 

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

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

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

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

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

 

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

不一樣點:

不能直接實例化接口。

接口不包含方法的實現。

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

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

相同點:

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

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

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

 

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

相同點:

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

不一樣點:

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

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

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

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

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

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

 

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

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

 

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

會執行,在return前執行。

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

 

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

 

1.2五、new 關鍵字用法

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

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

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

 

1.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);

 

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

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

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

 

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

C#中

int i=3;

i="a";

不能夠

JavaScript中

var i=3;

i="a";

能夠

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

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

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

 

1.2九、什麼是反射?

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

 

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

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

 

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

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

 

1.3二、C#支持多重繼承麼?

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

 

1.3三、C#中全部對象共同的基類是什麼?

System.Object

 

1.3四、經過超連接怎樣傳遞中文參數?

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

 

1.3五、string、String;int、Int32;Boolean、bool的區別

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

 

1.3六、Server.Transfer和Response.Redirect的區別是什麼?

答: Server.Transfer僅是服務器中控制權的轉向,在客戶端瀏覽器地址欄中不會顯示出轉向後的地址;Response.Redirect則是徹底的跳轉,瀏覽器將會獲得跳轉的地址,並從新發送請求連接。這樣,從瀏覽器的地址欄中能夠看到跳轉後的連接地址。

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

Response.Redirect就是服務端根據邏輯,發送一個狀態碼,告訴瀏覽器從新去請求那個地址,通常來講瀏覽器會用剛纔請求的全部參數從新請求。這個過程當中瀏覽器和Web服務器之間通過了兩次交互。

 

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

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

 

1.3八、是否能夠從一個static方法內部發出對非static方法的調用?

不能夠。由於非static方法是要與對象關聯在一塊兒的,必須建立一個對象後,才能夠在該對象上進行方法調用,而static方法調用時不須要建立對象,能夠直接調用。也就是說,當一個static方法被調用時,可能尚未建立任何實例對象,若是從一個static方法中發出對非static方法的調用,那個非static方法是關聯到哪一個對象上的呢?這個邏輯沒法成立,因此,一個static方法內部不能發出對非static方法的調用。

 

1.3九、.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.4一、BS與CS的聯繫與區別。

C/S是Client/Server的縮寫。客戶端須要安裝專用的客戶端軟件。

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

C/S 與 B/S 區別:

1).硬件環境不一樣:

  C/S 通常創建在專用的網絡上, 小範圍裏的網絡環境, 局域網之間再經過專門服務器提供鏈接和數據交換服務.

  B/S 創建在廣域網之上的, 沒必要是專門的網絡硬件環境,例與電話上網, 租用設備. 信息本身管理. 有比C/S更強的適應範圍, 通常只要有操做系統和瀏覽器就行

2).對安全要求不一樣

  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.4二、編寫一個單例(Singleton)類。

public FileManager
{
     private FileManager(){}
     public static FileManager Instance = new FileManager();
}

 

 

1.4三、什麼是sql注入?如何避免sql注入?

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

1' or 1=1

 

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

索引內部原理:想象成Dictionary,插入、刪除、更新的速度慢了,加上索引也多佔用了空間,查詢的速度快了。加上索引之後速度提高很是明顯。

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

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

(3)避免隱式類型轉換形成的全表掃描,在索引上使用函數也會形成全表掃描(由於索引只是爲字段創建的,一旦使用表達式或者函數,那麼索引就是失效了,固然也能夠使用「函數索引」、「表達式索引」解決這個問題),使用索引不必定能提升查詢速度。

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

 

1.4五、談談ViewState。談談對ASP.Net原理的理解。談談ASP.Net生命週期。

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

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

 

1.4六、post、get的區別

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

使用post提交的頁面在點擊【刷新】按鈕的時候瀏覽器通常會提示「是否從新提交」,而get則不會;

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

用post能夠提交的數據量很是大,而用get能夠提交的數據量則很是小(2k),受限於網頁地址的長度。

用post能夠進行文件的提交,而用get則不能夠。

 

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

 

1.4八、運算符++a表示(先將a加1,而後表達式的值爲a加1後的值),a++表示(表達式的值爲a,而後a加1)。

 

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

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

 

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

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

 

1.5一、.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.5二、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.5三、NET經過對各語言先編譯成( IL),而後再執行時用( JIT)將其編譯成本地平臺代碼,來實現異構平臺下對象的互操做。

 

1.5四、Application 、Cookie和 Session 兩種會話有什麼不一樣?

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

 

1.5五、開放式問題:你常常訪問的技術類的網站是什麼?

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

 

1.5六、你對.net的GC的理解

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

 

1.5七、請寫一個SQL語句:從user表中取出name列中的起始字符是「北京」的所有記錄

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

 

1.5八、若是不用VisualStudio,用哪一個命令行編譯C#程序?

答:csc.exe。

 

1.5九、請你簡單的說明數據庫創建索引的優缺點

使用索引能夠加快數據的查詢速度,不過因爲數據插入過程當中會建索引,因此會下降數據的插入、更新速度,索引還會佔磁盤空間。

 

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

web服務控件就是能夠在服務器執行的控件,優點在於能夠回傳數據(ViewState),帶有事件驅動(doPostBack),簡化了Html標籤的使用,使得開發ASP.net程序能夠像開發Winform程序同樣簡單。Web服務控件最終仍是被渲染(Render)爲Html標籤。使用WEB服務控件的劣勢是會生成一些無用的屬性、ViewState等,不利於SEO,通常在內網系統或者互聯網系統的後臺中使用WEB服務控件。若是沒有複雜的服務器交互動做,就不用Web服務器控件。runat=server的HTML控件有什麼特色:路徑不用程序員解析,能夠使用「~」來虛擬路徑。

 

1.6一、開放式問題:若是程序連不上SQLServer數據庫服務器服務器,你會怎麼排除這個故障?

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

 

1.6二、Http狀態碼各是什麼意思。

301 :重定向

404 :頁面不錯在

500:服務器內部錯誤

 

1.6三、MVC模式的優缺點

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

mvc的優勢:

1.經過把項目分紅model view和controller,使得複雜項目更加容易維護。

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

3.應用程序經過controller來控制程序請求,能夠提供豐富的url重寫。

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

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

MVC的不足: 

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

 

1.6四、什麼是Viewstate?它有什麼做用?

ViewState用來保存頁面狀態,就是說提交以後咱們還能夠看到文本框裏面的內容就是ViewState保存的功勞。 

ViewState只維護當前頁面的狀態,不一樣頁面之間不能共享,Session能夠。 

ViewState你能夠理解爲一個隱藏控件。

 

1.6五、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.6六、存儲過程和sql語句的優缺點

優勢: 
1.提升性能,減小網絡傳輸,節約時間 。

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

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

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

缺點:

1.交互性差 。

2.可移植性差

 

1.6七、何時使用抽象類,何時用接口 

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

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

 

1.6八、C#中的堆和棧

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

 

1.6九、C# ref與out區別: 

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

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

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

 

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

泛型:經過參數化類型來實如今同一份代碼上操做多種數據類型。利用「參數化類型」將類型抽象化,從而實現靈活的複用 
好處是——類型安全和減小裝箱、拆箱。提升性能、類型安全和質量,減小重複性的編程任務 

 

1.7一、new有幾種用法 

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

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

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

 

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

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

 

1.7三、<%# %> 和 <% %> 有什麼區別?

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

 

1.7四、DateTime.Parse(myString); 這行代碼有什麼問題?

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

 

1.7五、爲何不提倡catch(Exception) ,catch(Exception e){throw e;}和catch(Exception e){throw;}的區別,error和exception區別

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

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

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

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

 

1.7六、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.7七、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.7八、Server.UrlEncode、HttpUtility.UrlDecode的區別 

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

 

1.7九、如何實現鏈接池

確保你每一次的鏈接使用相同的鏈接字符串(和鏈接池相同);只有鏈接字符串相同時鏈接池纔會工做。若是鏈接字符串不相同,應用程序就不會使用鏈接池而是建立一個新的鏈接。

優勢

使用鏈接池的最主要的優勢是性能。建立一個新的數據庫鏈接所耗費的時間主要取決於網絡的速度以及應用程序和數據庫服務器的(網絡)距離,並且這個過程一般是一個很耗時的過程。而採用數據庫鏈接池後,數據庫鏈接請求能夠直接經過鏈接池知足而不須要爲該請求從新鏈接、認證到數據庫服務器,這樣就節省了時間。

缺點

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

技巧和提示

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.8一、簡述你對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.數據庫查詢優化: 
一、多態性,多種數據庫兼容; 

二、支持翻頁,支持查詢總數,頁碼顯示; 
三、能處理100萬以上數據量; 

 

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

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

 

 

1.10三、string與String的區別

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

 

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

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

 

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

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

 

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

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

 

1.107.頁面生命週期?

頁面生命週期執行一系列步驟:頁面的初始化、實例化控件、還原和維護狀態、運行事件處理程序代碼、呈現。爲了在合適的階段執行所需的代碼,因此要對頁面生命週期很是熟悉。在頁生命週期的各個階段,頁面會逐個引起定義的事件,經過對代碼開發,在頁面的生命事件中執行咱們所須要的程序;

1.108.頁生命週期階段?
一、頁請求:發生在頁面生命週期以前,用戶請求頁時,ASP.NET 將肯定是否須要分析和編譯頁,從而肯定是否開始頁面的生命週期,或者是否能夠在不運行頁面的狀況下發送頁面緩存以進行響應;
二、開始:設置頁屬性,如:HttpContext 以及其餘屬性;在此階段,頁面須要肯定是回發請求仍是新請求,並設置 IsPostBack 屬性;設置頁面的 UICulture 屬性;
三、頁面初始化:加載全部主題;控件生成,並設置 UniqueID;
注:ViewState、ControlState中的值還未加載至控件;若是頁面是回發,則回發數據也還未加載;故此時控件能夠訪問,但值可能出錯;
四、加載:若是當前請求是回發請求,則爲控件加載 ViewState 和 ControlState 中的值;
五、驗證:調用全部驗證程序控件的 Validate 方法,此方法將設置驗證程序控件和頁的 IsValid 屬性;
六、回發事件處理:若是請求是回發請求,則調用全部事件處理程序;
七、呈現:首先對該頁和全部控件進行保存視圖狀態,而後對每一個控件調用 Render 方法,它會提供一個文本編寫器,用於將控件的輸入寫入頁的 Response 屬性的 OutputStream 中;
八、卸載:完成呈現,並已將頁發送至客戶端、準備丟棄該頁後,調用卸載。將卸載屬性如: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.1十二、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.11三、判斷字符串變量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?

 

2、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.3一、下面程序的執行結果是什麼?

int i = 10;
Console.WriteLine(i++);
Console.WriteLine(++i);
Console.WriteLine(i=20);

 

答案:

10

12

20

 

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

A、UDDI

B、GUID

C、WSDL

D、SOAP

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

 

 

2.3三、下面程序的執行結果是什麼?

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.3四、下面程序的執行結果是什麼?

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.3五、在下述選項時,沒有構成死循環的程序是 (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.3六、下列哪一個是和數據庫訪問技術關係不大的技術(C)

A、SQLHelper

B、EnterPrise Library

C、AppDomain

D、Linq

 

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

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

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

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

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

答案:A、C。A錯誤是由於修改文件的後綴並無真的修改文件的格式,要使用Photoshop、mspaint等圖片處理工具進行轉換才能夠。C錯誤是由於在網頁中不能使用bmp圖片。

 

2.3八、從如下簡寫中任選一個簡單描述

OA(Office Automation):辦公自動化

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

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

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

KM(Knowledge Managment):知識管理

 

2.3九、下面程序的執行結果是什麼?

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

解答:結構體是複製傳遞的。

相關文章
相關標籤/搜索