1. 程式人生 > 實用技巧 >面試常問概念類問題

面試常問概念類問題

用.net做B/S結構的系統,您是用幾層結構來開發,每一層之間的關係以及為什麼要這樣分層?
答:

從下至上分別為:資料訪問層、業務邏輯層(又或成為領域層)、表示層
資料訪問層:有時候也稱為是持久層,其功能主要是負責資料庫的訪問
業務邏輯層:是整個系統的核心,它與這個系統的業務(領域)有關
表示層:是系統的UI部分,負責使用者與整個系統的互動。
優點: 分工明確,條理清晰,易於除錯,而且具有可擴充套件性。
缺點: 增加成本。

分層式結構究竟其優勢何在?
1、開發人員可以只關注整個結構中的其中某一層;
2、可以很容易的用新的實現來替換原有層次的實現;
3、可以降低層與層之間的依賴;
4、有利於標準化;
5、利於各層邏輯的複用。

概括來說,分層式設計可以達至如下目的:分散關注、鬆散耦合、邏輯複用、標準定義。

分層式結構也不可避免具有一些缺陷:
1、降低了系統的效能。這是不言而喻的。如果不採用分層式結構,很多業務可以直接造訪資料庫,以此獲取相應的資料,如今卻必須通過中間層來完成。
2、有時會導致級聯的修改。這種修改尤其體現在自上而下的方向。如果在表示層中需要增加一個功能,為保證其設計符合分層式結構,可能需要在相應的業務邏輯層和資料訪問層中都增加相應的程式碼。

MVC模式

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

mvc的優點:

1.通過把專案分成model view和controller,使得複雜專案更加容易維護。

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

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

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

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

MVC的不足:

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

asp.net如何實現MVC模式,舉例說明!

web/business/dataaccess

列舉ASP.NET 頁面之間傳遞值的幾種方式。
1.使用QueryString, 如....?id=1; response. Redirect()....
2.使用Session變數
3.使用Server.Transfer

請說明在.net中常用的幾種頁面間傳遞引數的方法,並說出他們的優缺點。
QueryString 傳遞一個或多個安全性要求不高或是結構簡單的數值。但是對於傳遞陣列或物件的話,就不能用這個方法了
session(viewstate) 簡單,但易丟失 作用於使用者個人,過量的儲存會導致伺服器記憶體資源的耗盡。
application 物件的作用範圍是整個全域性,也就是說對所有使用者都有效。其常用的方法用Lock和UnLock
cookie 簡單,但可能不支援,可能被偽造 Cookie是存放在客戶端的,而session是存放在伺服器端的。而且Cookie的使用要配合ASP.NET內建物件Request來使用
input ttype="hidden" 簡單,可能被偽造
url引數簡單,顯示於位址列,長度有限
Server.Transfer 把流程從當前頁面引導到另一個頁面中,新的頁面使用前一個頁面的應答流
資料庫穩定,安全,但效能相對弱


什麼是Viewstate?它有什麼作用?

ViewState用來儲存頁面狀態,就是說提交之後我們還可以看到文字框裡面的內容就是ViewState儲存的功勞。
ViewState只維護當前頁面的狀態,不同頁面之間不能共享,Session可以。
ViewState你可以理解為一個隱藏控制元件。

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;

ADO.net中常用的物件有哪些?分別描述一下。
答:
Connection 開啟資料庫連線
Command 執行資料庫命令
DataAdapter 連線資料,執行資料庫命令,填充DataSet
DataSet 資料在記憶體中的快取,資料結構
DataReader 只讀向前的讀取資料庫

DataReader和DataSet的異同
DataReader使用時始終佔用SqlConnection,線上操作資料庫..任何對SqlConnection的操作都會引發DataReader的異常..因為DataReader每次只在記憶體中載入一條資料,所以佔用的記憶體是很小的..因為DataReader的特殊性和高效能.所以DataReader是隻進的..你讀了第一條後就不能再去讀取第一條了..
DataSet則是將資料一次性載入在記憶體中.拋棄資料庫連線..讀取完畢即放棄資料庫連線..因為DataSet將資料全部載入在記憶體中.所以比較消耗記憶體...但是確比DataReader要靈活..可以動態的新增行,列,資料.對資料庫進行回傳更新操作...

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

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

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

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

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

缺點:

1.互動性差。

2.可移植性差

說出你所瞭解的資料庫訪問元件(例如ADO,至少4種)
答:ADO,ADO.Net,MDAC(Microsoft Data Access Components),Microsoft SQL Server OLE DB Provider,

Microsoft Jet OLE DB Provider,Desktop Database Drivers ODBC Driver,Visual FoxPro ODBC Driver

什麼是面向物件
萬物都是物件,其主要特徵:封裝、繼承、多型

怎樣實現多型

1.通過物件直接呼叫成員函式時,始終預設使用該物件的類的成員函式(除非用::顯示指定類名)。

2.通過指向物件的指標或引用呼叫成員函式時:如果該函式是實函式,則呼叫該指標或引用的類的成員函式;如果該函

數是虛擬函式,則呼叫該指標或引用指向的物件的類的成員函式。

面向物件的思想主要包括什麼?
答:任何事物都可以理解為物件,其主要特徵: 繼承。封裝。多型。特點:程式碼好維護,安全,隱藏資訊

什麼是裝箱和拆箱?
答:從值型別介面轉換到引用型別裝箱。從引用型別轉換到值型別拆箱。裝箱(boxing)是將值型別的資料轉化成引用型別,int i=3; object o = i ;便是裝箱過程,而拆箱(unboxing)是將飲用型別資料轉換值型別,比如int j = (int)o;屬於拆箱


什麼是Interface?它與Abstract Class有什麼區別?

介面(Interface)是用來定義行為規範的,不會有具體實現,而抽象類除定義行為規範外,可以有部分實現,但一

個類能實現多個介面,但只能繼承一個父類

什麼時候使用抽象類,什麼時候用介面

介面用於規範,抽象類用於共性。介面中只能宣告方法,屬性,事件,索引器。而抽象類中可以有方法的實

現,也可以定義非靜態的類變數。抽象類是類,所以只能被單繼承,但是介面卻可以一次實現多個。抽象類可以

提供某些方法的部分實現,介面不可以.抽象類的例項是它的子類給出的。介面的例項是實現介面的類給出的。

再抽象類中加入一個方法,那麼它的子類就同時有了這個方法。而在介面中加入新的方法,那麼實現它的類就要

重新編寫(這就是為什麼說介面是一個類的規範了)。介面成員被定義為公共的,但抽象類的成員也可以是私有

的、受保護的、內部的或受保護的內部成員(其中受保護的內部成員只能在應用程式的程式碼或派生類中訪問)。

此外介面不能包含欄位、建構函式、解構函式、靜態成員或常量。

什麼是抽象類(abstract class)?
一種不可以被例項化的類。抽象類中一般含有抽象方法,當然也可有具體實現。繼承類只有實現過所有抽

象類的抽象方法後才能被例項化。

何時必須宣告一個類為抽象類?
當這個類中包含抽象方法時,或是該類並沒有完全實現父類的抽象方法時。

口(interface)是什麼?
只含有共有抽象方法(public abstract method)的類。這些方法必須在子類中被實現。

為什麼不能指定介面中方法的修飾符?
介面中的方法用來定義物件之間通訊的契約,指定介面中的方法為私有或保護沒有意義。他們預設為公有方法。

可以繼承多個介面麼?
當然。

那麼如果這些介面中有重複的方法名稱呢?
這種情況中你可以決定如何實現。當然需要特別得小心。但是在編譯環節是沒有問題的。

介面和抽象類的區別是什麼?
介面中所有方法必須是抽象的,並且不能指定方法的訪問修飾符。抽象類中可以有方法的實現,也可以指

定方法的訪問修飾符。

詳述.NET裡class和struct的異同!

類是引用型別,可以繼承類、介面和被繼承,有預設的建構函式,有解構函式,可以使用abstract和sealed,有protected修飾符,必須使用new初始化。
結構是值型別,只能繼承介面,不能被繼承,沒有預設的建構函式,可以建立,沒有解構函式,不可以用abstract和sealed,沒有protected修飾符,可以不用new初始化。

如何選擇結構還是類
1. 堆疊的空間有限,對於大量的邏輯的物件,建立類要比建立結構好一些
2. 結構表示如點、矩形和顏色這樣的輕量物件
例如,如果宣告一個含有 1000 個點物件的陣列,則將為引用每個物件分配附加的記憶體。
在此情況下,結構的成本較低。
3. 在表現抽象和多級別的物件層次時,類是最好的選擇
4. 大多數情況下該型別只是一些資料時,結構時最佳的選擇

C#中的介面和類有什麼異同。
異:
不能直接例項化介面。
介面不包含方法的實現。
介面、類和結構可從多個介面繼承。但是C# 只支援單繼承:類只能從一個基類繼承實現。
類定義可在不同的原始檔之間進行拆分。
同:
介面、類和結構可從多個介面繼承。
介面類似於抽象基類:繼承介面的任何非抽象型別都必須實現介面的所有成員。
介面可以包含事件、索引器、方法和屬性。
一個類可以實現多個介面。

const和readonly有什麼區別?
const關鍵字用來宣告編譯時常量,readonly用來宣告執行時常量。

用sealed修飾的類有什麼特點
sealed 修飾符用於防止從所修飾的類派生出其它類。如果一個密封類被指定為其他類的基類,則會發生編譯時錯誤。
密封類不能同時為抽象類。
sealed 修飾符主要用於防止非有意的派生,但是它還能促使某些執行時優化。具體說來,由於密封類永

遠不會有任何派生類,所以對密封類的例項的虛擬函式成員的呼叫可以轉換為非虛擬呼叫來處理。

虛擬函式的用法
答:
1)virtual指明一成員函式為虛擬函式,而virtual僅用於類的定義裡,在類外可不加此關鍵字.
2)一個類的成員函式被定義為虛擬函式時,子類該函式仍保持虛擬函式特徵.
3)子類覆蓋此函式時,定義裡可不加virtual關鍵字,但函式宣告要和基類的完全一致!且此宣告是必須的.
4)不是純虛擬函式時,父類的虛擬函式必須要實現; 而若將父類的虛擬函式設定為純虛擬函式時,子類必需要覆蓋之而且必須要實現之!

解釋virtual、sealed、override和abstract的區別
virtual申明虛方法的關鍵字,說明該方法可以被重寫
sealed說明該類不可被繼承
override重寫基類的方法
abstract申明抽象類和抽象方法的關鍵字,抽象方法不提供實現,由子類實現,抽象類不可例項化。

過載和覆寫有什麼區別?
答:過載是方法的名稱相同,不同的引數型別,不同的引數個數,不同的引數順序。覆寫提供了子類中改變父類方法行為的實現(是進行基類中函式的重寫)。

在方法定義中,virtual有什麼含義?
答:被virtual修飾的方法可以被子類覆寫

能夠將非靜態的方法覆寫成靜態方法嗎?
答:不能,覆寫方法的簽名必須與被覆寫方法的簽名保持一致,除了將virtual改為override。

可以覆寫私有的虛方法嗎?
答:不可以,甚至子類中無法訪問父類中的私有方法

能夠阻止某一個類被其他類繼承嗎?
答:可以,使用關鍵字sealed

能夠實現允許某個類別繼承,但不允許其中的某個方法被覆寫嗎?
答:可以,標記這個類為public,並標記這個方法為sealed。

如何區別過載方法?
不同的引數型別,不同的引數個數,不同的引數順序

c#繼承:

base表示當前物件基類的例項(使用base關鍵字可以呼叫基類的成員)this表示當前類的例項

在靜態方法中不可以使用base和this關鍵字

派生類會繼承基類所有的成員但是建構函式和解構函式不會被繼承

注意如果派生類的方法和基類的方法同名則基類中的方法將會被隱藏如果需要隱藏則可以使用關鍵字new來隱藏如果不寫new關鍵字預設處理為隱藏雖然基類中同名的方法被隱藏了但是還是可以通過base關鍵字來呼叫

//如果子類方法的方法名和基類的方法名相同時,系統將隱藏基類同名方法,自動呼叫子類的同名方法

//派生類會繼承基類所有的成員,但是不能顯示呼叫基類的是有成員

//在派生類中不可以呼叫基類的是有成員,如num1,num2,但是可以實現呼叫基類方法

virtual用在基類中指定一個虛方法屬性表示這個方法屬性可以重寫

override用在派生類中表示對基類虛方法屬性的重寫

不能重寫非虛方法或靜態方法重寫的基方法必須是 virtualabstract 或override的為什麼override也可以重寫呢因為基類中的override實際上是對基類的基類進行的重寫由於繼承可傳遞所以也可以對基類中override的方法進行重寫

override宣告不能更改virtual方法的可訪問性override方法和virtual方法必須具有相同的訪問級別修飾符

不能使用修飾符 newstaticvirtual 或abstract來修改override方法

重寫屬性宣告必須指定與繼承屬性完全相同的訪問修飾符型別和名稱並且被重寫的屬性必須是 virtualabstract 或override的

標記允許被重寫修飾靜態方法中不允許使用virtual關鍵字成員變數允許使用virtual關鍵字

屬性可以被宣告為虛屬性(使用virtual關鍵字)

重寫基類的方法(重寫同名的方法中有virtual關鍵字的方法)

重寫和隱藏的區別隱藏(new關鍵字)是給子類的同名方法分配新的記憶體空間重寫(override關鍵字)是子類的同名方法放在基類同名方法的原來所在位置基類的同名方法位置向後移

屬性也可以重寫

virtual關鍵字和override關鍵字是成對出現的否則是語法錯誤

派生類可以通過將重寫宣告為sealed來停止虛擬繼承這需要在類成員宣告中的override關鍵字前面放置sealed關鍵字

在子類中重寫基類中的虛方法時可以使用base關鍵字呼叫基類中的虛方法

//使用base關鍵可以在子類中訪問基類同名的方法

//父類的引用指向子類的例項

Test ts =newTest2();

父類的引用指向子類的例項(呼叫的是子類的方法)

父類的引用只認識父類的方法不認識子類的新方法可以用來呼叫被子類覆蓋的父類的方法

父類的引用依然到父類方法位置去呼叫如果基類方法被宣告為virtual並且在子類中被override結果訪問到的是被子類override的方法

C#中的委託是什麼?事件是不是一種委託?
委託可以把一個方法作為引數代入另一個方法。委託可以理解為指向一個函式的引用。是,是一種特殊的委託

C#中的堆和棧

棧(Stack)由系統管理生存期,儲存程式碼執行和呼叫路徑,執行或呼叫完畢即從棧中清除;
堆(Heap)中儲存值和物件,呼叫完畢之後依然存在,由垃圾回收器查詢棧中有無指向該值或物件的引用,無則從堆中刪除

C# ref與out區別:

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

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

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

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

泛型:通過引數化型別來實現在同一份程式碼上操作多種資料型別。利用“引數化型別”將型別抽象化,從而實現靈活的複用
好處是——型別安全和減少裝箱、拆箱。提高效能、型別安全和質量,減少重複性的程式設計任務

C#中所有物件共同的基類是什麼?
System.Object.

如何在C#中實現繼承?
在類名後加上一個冒號,再加上基類的名稱。

C#支援多重繼承嗎?
不支援。可以用介面來實現。

被protected修飾的屬性/方法在何處可以訪問?
在繼承或間接繼承與這個類的子類中可以訪問。

私有成員會被繼承麼?
會,但是不能被訪問。所以看上去他們似乎是不能被繼承的,但實際上確實被繼承了。

C#提供一個預設的無參建構函式,當我實現了另外一個有一個引數的建構函式時,還想保留這個無引數的構

造函式。這樣我應該寫幾個建構函式?
答:兩個,一旦你實現了一個建構函式,C#就不會再提供預設的構造函數了,所以需要手動實現那個無參構造

函式。


簡述 private、 protected、 public、 internal 修飾符的訪問許可權。
private : 私有成員, 在類的內部才可以訪問。
protected : 保護成員,該類內部和繼承類中可以訪問。
public : 公共成員,完全公開,沒有訪問限制。
internal: 在同一名稱空間內可以訪問。

new的兩種用法
答:例項話物件,隱藏基類方法。

.new有幾種用法
第一種:new Class();

第二種:覆蓋方法

public new XXXX(){}

第三種:new 約束指定泛型類宣告中的任何型別引數都必須有公共的無引數建構函式。

3.datagrid.datasouse可以連線什麼資料來源 [dataset,datatable,dataview]

dataset,datatable,dataview , IList

類成員有( )種可訪問形式

可訪問性:public ,protected ,private,internal

委託與事件的用法
答:public delegate void handels();//返回值是void,沒有引數
public event handels eventHandels;
his.eventHandels = new handels(fun);
public void fun()
{ }

傳入某個屬性的SET方法的隱含引數的名稱是什麼?
答:value,它的型別和屬性所宣告的型別相同。

string是值型別還是引用型別?

引用型別

String類與StringBuilder類有什麼區別?為什麼在.Net類庫中要同時存在這2個類?(簡答)

stringBuilder比string更節約記憶體,所以stringBuilder更快

String 物件是不可改變的。每次使用 System.String 類中的方法之一或進行運算時(如賦值、拼接等)時,都要

在記憶體中建立一個新的字串物件,這就需要為該新物件分配新的空間。而 StringBuilder 則不會。在需要對字

符串執行重複修改的情況下,與建立新的 String 物件相關的系統開銷可能會非常昂貴。如果要修改字串而不

建立新的物件,則可以使用 System.Text.StringBuilder 類。例如,當在一個迴圈中將許多字串連線在一起時

,使用 StringBuilder 類可以提升效能。

在C#中,string str = null 與 string str = “” 請儘量使用文字或圖象說明其中的區別。
答:string str = null 是不給他分配記憶體空間,而string str = "" 給它分配長度為空字串的記憶體空間。

ASP.net的身份驗證方式有哪些?分別是什麼原理?
答:Windwos(預設) 用IIS...From(窗體) 用帳戶....Passport(金鑰)


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

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

c#中的三元運算子是?:

.能用foreach遍歷訪問的物件需要實現()介面或宣告 (GetEnumerator)方法的型別。

.<%# %> 和 <% %> 有什麼區別?

<%# %>表示繫結的資料來源<% %>是伺服器端程式碼塊 常量

在.net(C# or vb.net)中如何獲得當前窗體或控制元件的控制代碼,特別是控制元件本身的控制代碼(請列舉)

this(C#) Me(vb.net).

.C#可否對記憶體進行直接的操作?

在.net下,.net引用了垃圾回收(GC)功能,它替代了程式設計師 不過在C#中,不能直接實現Finalize方法,而是在解構函式中呼叫基類的Finalize()方法

DateTime是否可以為null?不能,因為其為Struct型別,而結構屬於值型別,值型別不能為null,只有引用型別才能被賦值null

DateTime.Parse(myString); 這行程式碼有什麼問題?

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

net的錯誤處理機制是:

採用try->catch->finally結構,

為什麼不提倡catch(Exception)
try..catch在出現異常的時候影響效能; 應該捕獲更具體得異常,比如IOExeception,OutOfMemoryException等

catch(Exception e){throw e;}和catch(Exception e){throw;}的區別

將發生的異常物件丟擲,另一個只是丟擲異常,並沒有丟擲原異常物件)

error和exception區別:

error表示恢復不是不可能但很困難的情況下的一種嚴重問題。比如說記憶體溢位。不可能指望程式能處理這樣的情況。

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

GET與POST的區別
在FORM提交的時候,如果不指定Method,則預設為GET請求,Form中提交的資料將會附加在url之後,以?分開與url分開。字母數字字元原樣傳送,但空格轉換為“+“號,其它符號轉換為%XX,其中XX為該符號以16進製表示的ASCII(或ISO Latin-1)值。GET請求請提交的資料放置在HTTP請求協議頭中,而POST提交的資料則放在實體資料中;

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

(1)get是從伺服器上獲取資料,post是向伺服器傳送資料。

(1)在客戶端,Get方式在通過URL提交資料,資料在URL中可以看到;POST方式,資料放置在HTML HEADER內提交。

(2)對於get方式,伺服器端用Request.QueryString獲取變數的值,對於post方式,伺服器端用Request.Form獲取提交的資料。

(2)GET方式提交的資料最多隻能有1024位元組,而POST則沒有此限制。

(3)安全性問題。正如在(1)中提到,使用 Get 的時候,引數會顯示在位址列上,而 Post 不會。所以,如果這些資料是中文資料而且是非敏感資料,那麼使用 get;如果使用者輸入的資料不是中文字元而且包含敏感資料,那麼還是使用 post為好。

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>

Response.Redirect和Server.Transfer
請求的過程:
1)瀏覽器aspx檔案請求--->伺服器執行--->遇到Response.Redirect語句->伺服器傳送Response.Redirect後面的地址給客戶機端的瀏覽器--->瀏覽器請求執行新的地址
2)瀏覽器aspx檔案請求->伺服器執行->遇到Server.Transfer語句->伺服器轉向新的檔案
可以見Server.Transfer比Response.Redirect少了一次伺服器傳送回來和客戶端再請求的過程.
跳轉物件:
1)Response.Redirect可以切換到任何存在的網頁。
2)Server.Transfer只能切換到同目錄或者子目錄的網頁.
資料保密:
1、Response.Redirect後地址會變成跳轉後的頁面地址。
2、Server.Transfer後地址不變,隱藏了新網頁的地址及附帶在地址後邊的引數值。具有資料保密功能。
傳遞的資料量(網址後附帶的引數):
1、Response.Redirect能夠傳遞的資料以2KB(也就是位址列中地址的最大的長度)為限。
2、傳遞的資料超過2KB時,務必使用Server.Transfer。

Server.UrlEncode、HttpUtility.UrlDecode的區別
Server.UrlEncode的編碼方式是按照本地程式設定的編碼方式進行編碼的,而HttpUtility.UrlEncode是預設的按照.net的utf-8格式進行編碼的。

Static 和 非Static的區別:
一、用Static宣告的方法和變數,不需要例項化該類就呼叫;

二、Static的,就一定要用例項化的物件來呼叫,即用new來例項化。

舉例說:

如果有一個類People,有一個Static的方法MiaoShu(), 呼叫方法就是 People.MisoShu()

有一個非Static的方法getName(), 呼叫方法就是 People p= new People(); p.getName();

如何實現連線池

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

優點

使用連線池的最主要的優點是效能。建立一個新的資料庫連線所耗費的時間主要取決於網路的速度以及應用程式和資料庫伺服器的(網路)距離,而且這個過程通常是一個很耗時的過程。而採用資料庫連線池後,資料庫連線請求可以直接通過連線池滿足而不需要為該請求重新連線、認證到資料庫伺服器,這樣就節省了時間。

缺點

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

技巧和提示

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

2. 在關閉資料庫連線前確保關閉了所有使用者定義的事務。

3. 不要關閉資料庫中所有的連線,至少保證連線池中有一個連線可用。如果記憶體和其他資源是你必須首先考慮的問題,可以關閉所有的連線,然後在下一個請求到來時建立連線池。

連線池FAQ

1.何時建立連線池?

當第一個連線請求到來時建立連線池;連線池的建立由資料庫連線的連線字元創來決定。每一個連線池都與一個不同的連線字串相關。當一個新的連線請求到來時如果連線字串和連線池使用的字串相同,就從連線池取出一個連線;如果不相同,就新建一個連線池。

2.何時關閉連線池?

當連線池中的所有連線都已經關閉時關閉連線池。

3.當連線池中的連線都已經用完,而有新的連線請求到來時會發生什麼?

當連線池已經達到它的最大連線數目時,有新的連線請求到來時,新的連線請求將放置到連線佇列中。當有連線釋放給連線池時,連線池將新釋放的連線分配給在佇列中排隊的連線請求。你可以呼叫close和dispose將連線歸還給連線池。

4.我應該如何允許連線池?

對於.NET應用程式而言,預設為允許連線池。(這意味著你可以不必為這件事情做任何的事情)當然,如果你可以在SQLConnection物件的連線字串中加進Pooling=true;確保你的應用程式允許連線池的使用。

5.我應該如何禁止連線池?

ADO.NET預設為允許資料庫連線池,如果你希望禁止連線池,可以使用如下的方式:

1) 使用SQLConnection物件時,往連線字串加入如下內容:Pooling=False;

2) 使用OLEDBConnection物件時,往連線字串加入如下內容:OLE DB Services=-4;

提高.NET的效能
1 使用非同步方式呼叫Web服務和遠端物件

只要有可能就要避免在請求的處理過程中對Web服務和遠端物件的同步呼叫,因為它佔用的是的ASP.NET 執行緒池中的工作執行緒,這將直接影響Web伺服器響應其它請求的能力。

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

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

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

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

4 頁面優化

5 用完馬上關閉資料庫連線
6 儘量使用儲存過程,並優化查詢語句
7 只讀資料訪問用SqlDataReader,不要使用DataSet

……….

.UDP連線和TCP連線的異同
答:前者只管傳,不管資料到不到,無須建立連線.後者保證傳輸的資料準確,須要連結.

請解釋轉發與跳轉的區別
轉發就是服務端的跳轉A頁面提交資料到B頁面,B頁面進行處理然後從服務端跳轉到其它頁面
跳轉就是指客戶端的跳轉

簡述你對XML Web Service的原理的認識?
答:利用SOAP(簡單物件訪問協議)在http上執行遠端方法的呼叫,也可以使用WSDL(Web服務描述語言)來

完成完整的描述Web服務,然後用UDDI註冊各個服務提供商提供的服務,以便共享他們。

什麼叫應用程式域?
答:應用程式域可以理解為一種輕量級程序。起到安全的作用。佔用資源小。

CTS、CLS、CLR分別作何解釋?
答:CTS:通用語言系統。CLS:通用語言規範。CLR:公共語言執行庫。

什麼是受管制的程式碼?
答:unsafe:非託管程式碼。不經過CLR執行。

什麼是強型別系統?
答:RTTI:型別識別系統。

什麼是code-behind技術
codebehind是指程式碼和使用者介面分開
aspx and cs

在.net中,配件的意思是?
答:程式集。(中間語言,源資料,資源,裝配清單)

常用的呼叫WebService的方法有哪些?
答:1.使用WSDL.exe命令列工具。
2.使用VS.NET中的Add Web Reference選單選項

net Remoting 的工作原理是什麼?
答:伺服器端向客戶端傳送一個程序編號,一個程式域編號,以確定物件的位置。

O/R Mapping 的原理
答:利用反射,配置將物件和資料庫表對映

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

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

PDB是什麼東西? 在除錯中它應該放在哪裡?

PDB是用於儲存除錯和專案狀態資訊的檔案,在debug的時候將產生pdb檔案,除錯的時候應該放在和對應應用

程式集相同目錄。

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

Web服務使用的訊息機制,而Remoting採用的RPC. Web Service能用於不同平臺,不同語言,Remoting只適用

於.Net。效率上Remoting高於Xml Web Service

型別系統是由XMLSchema表示的嗎?CLS是XMLSchema表示的嗎?

不清楚

從概念上闡述前期繫結(early-binding)和後期繫結(late-binding)的區別?

這個就像是強弱型別的比較相似,前期繫結是在編譯的時候就確定了要繫結的資料,而後期繫結是在執行的時候

才填充資料。所以前期繫結如果失敗,會在編譯時報編譯錯誤,而後期繫結失敗只有在執行時的時候才發生

呼叫Assembly.Load算靜態引用還是動態引用?

動態

列舉一下你所瞭解的XML技術及其應用
答:儲存配置,站與站之間的交流,WEB SERVICE。以及與資料庫的資料互動等地方都要用它.
7.如何理解委託?
答:
相當於函式指標,定義了委託就可以在不呼叫原方法名稱的情況下呼叫那個方法.
委託具有以下特點:
委託類似於 C++ 函式指標,但它是型別安全的。
委託允許將方法作為引數進行傳遞。
委託可用於定義回撥方法。
委託可以連結在一起;例如,可以對一個事件呼叫多個方法。
方法不需要與委託簽名精確匹配。有關更多資訊,請參見協變和逆變。
C# 2.0 版引入了匿名方法的概念,此類方法允許將程式碼塊作為引數傳遞,以代替單獨定義的方法。

概述反射和序列化

反射:程式集包含模組,而模組包含型別,型別又包含成員。反射則提供了封裝程式集、模組和型別的對

象。您可以使用反射動態地建立型別的例項,將型別繫結到現有物件,或從現有物件中獲取型別。然後,

可以呼叫型別的方法或訪問其欄位和屬性

序列化:序列化是將物件轉換為容易傳輸的格式的過程。例如,可以序列化一個物件,然後使用 HTTP 通

過 Internet 在客戶端和伺服器之間傳輸該物件。在另一端,反序列化將從該流重新構造物件。

11) XmlSerializer是如何工作的?使用這個類的程序需要什麼ACL許可權?

我只知道XmlSerializer是將物件的屬性和欄位進行序列化和反序列化的,序列化成為xml資料,反序列化再將xml

轉換成物件。應該至少需要ACL許可權中的讀許可權.

23)XmlSerializer使用的針對屬性的模式有什麼好處?解決了什麼問題?

只序列化有用的資料,而不是序列化整個物件。實現沒必要的資料冗餘,和提升序列化時的效能。

26.根據委託(delegate)的知識,請完成以下使用者控制元件中程式碼片段的填寫:
namespace test
{
public delegate void OnDBOperate();
public class UserControlBase : System.Windows.Forms.UserControl
{
public event OnDBOperate OnNew;
privatevoidtoolBar_ButtonClick(objectsender,System.Windows.Forms.ToolBarButtonClickEventArgs e)
{
if(e.Button.Equals(BtnNew))
{
//請在以下補齊程式碼用來呼叫OnDBOperate委託簽名的OnNew事件。
}
}
}
答:if( OnNew != null )
OnNew( this, e );

27.分析以下程式碼,完成填空
string strTmp = "abcdefg某某某";
int i= System.Text.Encoding.Default.GetBytes(strTmp).Length;
int j= strTmp.Length;
以上程式碼執行完後,i= j=
答:i=13,j=10

28.SQLSERVER伺服器中,給定表 table1 中有兩個欄位 ID、LastUpdateDate,ID表示更新的事務號,

LastUpdateDate表示更新時的伺服器時間,請使用一句SQL語句獲得最後更新的事務號
答:Select ID FROM table1 Where LastUpdateDate = (Select MAX(LastUpdateDate) FROM table1)

29.根據執行緒安全的相關知識,分析以下程式碼,當呼叫test方法時i>10時是否會引起死鎖?並簡要說明理由。
public void test(int i)
{
lock(this)
{
if (i>10)
{
i--;
test(i);
}
}
}
答:不會發生死鎖,(但有一點int是按值傳遞的,所以每次改變的都只是一個副本,因此不會出現死鎖。但如果

把int換做一個object,那麼死鎖會發生)

3) 什麼叫圈複雜度(cyclomatic complexity)?為什麼它很重要?

不知道,望指教 ?

4) 寫一個標準的lock(),在訪問變數的前後建立臨界區,要有"雙重檢查",

見:評論回覆

5) 什麼叫FullTrust?放入GAC的assembly是否是FullTrust的?

FullTrust完全信任。放入GAC中的Assembly是否FullTrust我的理解不是。我理解FullTrust是可以通過程式碼設定的

6) 程式碼加上需要安全許可權的特性有什麼好處?

可以更加靈活的設定對程式碼的訪問許可權,實現程式碼級保護。?這點不是特清楚,有明白的給講解下

7) gacutil /l | find /i "Corillian" 這句命令的作用是什麼?

全域性程式集快取中如果有Corillian就更新該程式集,沒有就安裝

8) sn -t foo.dll 這句命令是幹嘛的?

顯示程式集foo.dll的公鑰標記

9) DCOM需要防火牆開啟哪些埠?埠135是幹嘛用的?

135埠,因為DCOM的埠號是隨機分配的,預設情況下,會分配1024以上的埠號,所以預設情況下,DCOM

不能穿越防火牆。因為根本不曉得開哪個埠。但有解決辦法可以使DCOM分配的埠號固定,135是遠端過程

呼叫(RPC)的預設埠

10)對比OOP和SOA,它們的目的分別是什麼?

我想OOP和SOA應該沒有對比性吧。OOP是一種程式設計模型,強調將複雜的邏輯分解出小的模組,特性是繼承,封

裝和多型 。而SOA是一個技術框架,技術框架和程式設計模型應該說不是一碼事吧?SOA的思想是將業務邏輯封裝

成服務或者中介軟體提供給應用程式來呼叫,當然其元件化思想是繼承和發揚了OOP的優點。

13)Debug.Write和Trace.Write有什麼不同?何時應該使用哪一個?

Debug.Write是除錯的時候向跟蹤視窗輸出資訊。當編譯模式為debug的時候才有效,為release的時

候Debug.Write在編譯的時候會忽略,而Trace則是在debug和release兩種模式下均可以向跟蹤視窗輸出資訊。

14)Debug Build和Release Build的區別,是否會有明顯的速度變化?請說明理由。

Debug會產生pdb檔案,release不會。Debug用於開發時的除錯,不能要於部署,而release用於部署.debug編

譯一些特殊程式碼,比如#IFDEBUG Debug.Write等,而Release則會將那些特殊標記省略

15)JIT是以assembly為單位發生還是以方法為單位發生?這對於工作區有何影響?

方法,道理很簡單,因為對於一次執行,很可能只用到一個程式集中極少數型別和物件,而大部分可能並不會被

使用,此時CLR傻乎乎的給整個程式集都給Compile了,CLR不是傻瘋了麼

17)a.Equals(b)和a == b一樣嗎?

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

18)在物件比較中,物件一致和物件相等分別是指什麼?

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

19)在.NET中如何實現深拷貝(deep copy)?

實現IClonable介面

20)請解釋一下IClonable

IClonable方法是實現深度複製的介面,實現它應該能深度複製一個物件出來。深度複製的特徵的呼叫物件的構造

方法,建立新的物件,包括建立物件中巢狀的引用物件的新例項。而Shadow複製則不同,是淺表複製,不重新

建立新例項。淺表複製的實現是Object.MemberWiseClone().

深度複製(Deep Copy)與淺表複製(Shadow Copy)的比較
public class Name
{
public string FirstName;
public string LastName;
}
public class Person:ICloneable
{
public Name PersonName;
public string Email;
/**//// <summary>
/// Deep Copy的例子
/// </summary>
/// <returns></returns>
public Object Clone()
{
Person p = new Person();
p.Email = this.Email;
p.PersonName = new Name();
p.PersonName.FirstName = this.PersonName.FirstName;
p.PersonName.LastName = this.PersonName.LastName;
return p;
}

public void ChangLastName(string lastName)
{
this.PersonName.LastName = lastName;
}
public static void Main()
{
Person p = new Person();
p.PersonName = new Name();
p.PersonName.LastName = "jill";
p.PersonName.FirstName = "zhang";
p.Email = "[email protected]";
Person sameNamePerson = p.Clone() as Person;
sameNamePerson.ChangLastName("clr_");
Console.WriteLine(p.PersonName.LastName);
Console.WriteLine(sameNamePerson.PersonName.LastName);

Person samePerson = p.MemberwiseClone() as Person;
samePerson.ChangLastName("Shadow");

Console.WriteLine(p.PersonName.LastName);
Console.WriteLine(sameNamePerson.PersonName.LastName);
Console.Read();
}
}

24)為什麼不應該在.NET中使用out引數?它究竟好不好?

我挺喜歡用out引數的,特別是當函式需要有多於1個返回的時候,我比較願意用out,至於它好不好沒研究過 ?

25)特效能夠放到某個方法的引數上?如果可以,這有什麼用?

可以,作用可以對引數有進一步限定,比如輸入引數為int型別,可以通過允許AttributeTargets=ParameterInfo

的Attribute自定義實現來限定輸入引數的大小,比如當輸入引數小於100的時候便抱錯。

對方法的引數設定Attribute的例子
[AttributeUsage(AttributeTargets.Parameter)]
public class ParameterAtt : Attribute
{
public int Min = 100;
}

public class AttributeTest
{
public void TestMethod([ParameterAtt(Min = 100)] int par1)
{
ParameterInfo para = MethodInfo.GetCurrentMethod().GetParameters()[0];
ParameterAtt att = ParameterAtt.GetCustomAttribute(para, typeof(ParameterAtt)) as

ParameterAtt;
if (att.Min > par1)
{
throw new Exception("要求para1最小為" + att.Min);
}
}
}

9.執行下面程式碼後:

String strTemp ="abcdefg 某某某";

Int i System.Text.Encoding.Default.GetBytes(strTemp).Length;

Int j = strTemp.Length;

問:i=(14 ) ;j=(11 )

i=(14 ) ;j=(11 ) 中文兩個位元組

12.概述.NET裡對 remoting 和 webservice 兩項技術的理解和實際中的應用。

遠端邏輯呼叫,remoing介面只能用在.net中

9. 如何給伺服器端控制元件增加客戶端指令碼。
答:控制元件的Attributes

6. 私有程式集與共享程式集有什麼區別?
一個私有程式集通常為單個應用程式所使用,並且儲存於這個應用程式所在的目錄之中,或此目錄下面的一個子

目錄中。共享程式集通常儲存在全域性程式集快取(Global Assembly Cache)之中,這是一個由.NET執行時所維

護的程式集倉庫。共享程式集通常是對許多應用程式都有用的程式碼庫,比如.NET Framework類。

10 .請解釋ASP.NET中以什麼方式進行資料驗證
Aps.net 中有非空驗證,比較驗證,取值範圍驗證,正則表示式驗證及客戶自定義驗證五大控制元件,另還有一個集

中驗證資訊處理控制元件

11.WEB控制元件可以激發服務端事件,請談談服務端事件是怎麼發生並解釋其原理?自動傳回是什麼?為什麼要

使用自動傳回。
在web控制元件發生事件時,客戶端採用提交的形式將資料交回服務端,服務端先呼叫Page_Load事件,然後根據傳

回的狀態資訊自動呼叫服務端事件自動傳回是當我們在點選客戶端控制元件時,採用提交表單的形式將資料直接傳回

到務端
只有通過自動傳回才能實現服務端事件的機制,如果沒有自動回傳機制就只能呼叫客戶端事件,而不能呼叫服務

端事件

13. 請解釋web.config檔案中的重要節點
appSettings包含自定義應用程式設定。
system.web 系統配置
compilation動態除錯編譯設定
customErrors自定義錯誤資訊設定
authentication身份驗證,此節設定應用程式的身份驗證策略。
authorization授權, 此節設定應用程式的授權策略.

14. 請解釋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" 表用執行時使用哪一個隱藏類

15. 什麼是viewstate,能否禁用?是否所用控制元件都可以禁用?
Viewstate是儲存狀態的一種機制,EnableViewState屬性設定為false即可禁用

16. 當發現不能讀取頁面上的輸入的資料時很有可能是什麼原因造成的?怎麼解決?
很有可能是在Page_Load中資料處理時沒有進行Page的IsPostBack屬性判斷

17. 請解釋什麼是上下文物件,在什麼情況下要使用上下文物件
上下文物件是指HttpContext類的Current 屬性,當我們在一個普通類中要訪問內建對

象(Response,Request,Session,Server,Appliction等)時就要以使用此物件

16、解釋一下ajax及實現原理
答:Ajax的核心是JavaScript物件XmlHttpRequest,它使您可以使用JavaScript向伺服器提出請求並處理響應, 而不阻塞使用者,非同步請求。

1、delegate是引用型別還是值型別?enum、int[]和string呢(難度係數40%)?

答案:delegate引用型別,enum值型別,int[]引用型別,string引用型別。

3、base這個關鍵字有哪幾種語法?override呢?

答案:base兩個語法,分別是呼叫基類建構函式和呼叫基類方法,override用於重寫基類方法。

4、請指出C#中是否有下列關鍵字?virtual、sealed、abstract、import、as、in、goto、final、Const、signed、

String(提示,僅指出C#中沒有的即可)(難度係數50%)。

答案:沒有的關鍵字:import、final、Const、signed、String

5、在迴圈:for( int i = 0; i < 100; i++ ) Console.WriteLine( i );中,請指出i++的執行時機。

答案:在Console.WriterLine( i );執行之後

6、試說明continue關鍵字的用處。

答案:馬上開始下一次迴圈,忽略迴圈體餘下的語句

7、object是C#的關鍵字嗎?請指出C#中有哪些型別關鍵字,如int、float。(提示,寫得越多越好)。

答案:是,object、int、uint、long、ulong、short、ushort、byte、sbyte、char、float、double、decimal、boo

l,如回答:enum、struct、class、delegate也算對。

8、C#的XML文件註釋中(以///開頭的註釋),<summary>標籤用於描述什麼?<param>標籤呢?

答案:<summary>用於某個元素的概要說明,<param>用於某個方法的引數概要說明。

9、我們知道[]是陣列和索引器的訪問操作符,但它還有一個語法,是什麼?

答案:特性(Attribute)

18.請敘述屬性與索引器的區別。
屬性 索引器
通過名稱標識。 通過簽名標識。
通過簡單名稱或成員訪問來訪問。 通過元素訪問來訪問。
可以為靜態成員或例項成員。 必須為例項成員。
屬性的 get 訪問器沒有引數。 索引器的 get 訪問器具有與索引器相同的形參表。
屬性的 set 訪問器包含隱式 value 引數。 除了 value 引數外,索引器的 set 訪問器還具有與索引

器相同的形參表。

1) 描述執行緒與程序的區別?

執行緒(Thread)與程序(Process)二者都定義了某種邊界,不同的是程序定義的是應用程式與應用程式之間的邊

界,不同的程序之間不能共享程式碼和資料空間,而執行緒定義的是程式碼執行堆疊和執行上下文的邊界。一個程序可

以包括若干個執行緒,同時建立多個執行緒來完成某項任務,便是多執行緒。而同一程序中的不同執行緒共享程式碼和資料

空間。用一個比喻來說,如果一個家庭代表一個程序,在家庭內部,各個成員就是執行緒,家庭中的每個成員都有

義務對家庭的財富進行積累,同時也有權利對家庭財富進行消費,當面對一個任務的時候,家庭也可以派出幾個

成員來協同完成,而家庭之外的人則沒有辦法直接消費不屬於自己家庭的財產。

2) 什麼是Windows服務,它的生命週期與標準的EXE程式有什麼不同

Windows服務是執行在windows後臺指定使用者下(預設System)的應用程式,它沒有標準的UI介面,想比標準

的EXE程式,Windows服務是在服務開始的時候建立,而在服務結束的時候銷燬,而且可以設定服務是否與操作

系統一起啟動,一起關閉。它支援三種方式:1)自動方式 2)手動方式 3)禁用 。自動方式的時

候,windows服務將在OS啟動後自動啟動執行,而手動方式則必須手工啟動服務,禁用的情況下服務將不能被

啟動。另外標準的EXE預設使用的當前登入的使用者,而windows服務則預設使用System使用者,這在對系統資源訪

問的時候特別需要注意。

3) Windows單個程序所能訪問的最大記憶體量是多少?它與系統的最大虛擬記憶體一樣嗎?這對於系統設計有什麼

影響?

這個需要針對硬體平臺,公式為單個程序能訪問的最大記憶體量=2的處理器位數次方/2,比如通常情況下,32位

處理器下,單個程序所能訪問的最大記憶體量為:232 /2 = 2G 。單個程序能訪問的最大記憶體量是最大虛擬記憶體

的1/2,因為要分配給作業系統一半虛擬記憶體。

4) 什麼是強型別,什麼是弱型別?哪種更好些?為什麼?

強型別是在編譯的時候就確定型別的資料,在執行時型別不能更改,而弱型別在執行的時候才會確定型別。沒有

好不好,二者各有好處,強型別安全,因為它事先已經確定好了,而且效率高。一般用於編譯型程式設計語

言,如c++,java,c#,pascal等,弱型別相比而言不安全,在執行的時候容易出現錯誤,但它靈活,多用於解釋型編

程語言,如javascript,vb等

5) PID是什麼?在做系統的故障排除時如何使用它?

PID是程序編號,在系統發現故障的時候,可以根據它尋找故障所發生的具體程序,並且可通過visual studio.net

等ide將故障程序附加到程序中進行除錯(debug)

6) 單個TCP/IP埠上能夠被多少個程序偵聽?

1個

7) 什麼是GAC?它解決了什麼問題?

Gloal Assembly Cache,全域性應用程式集快取。它解決了幾個程式共享某一個程式集的問題。不必再將那個被共

享的程式集拷貝到應用程式目錄了,其實這道理很簡單,.net應用程式在載入的時候,會首先檢視全域性應用程式

集快取,如果有就可以直接使用,沒有再到應用程式目錄進行查詢。

1.白盒測試和黑盒測試
答:黑盒測試:已知產品的功能設計規格,可以進行測試證明每個實現了的功能是否符合要求。

白盒測試:已知產品的內部工作過程,可以通過測試證明每種內部操作是否符合設計規格要求,所有內部成

分是否以經過檢查。

軟體的黑盒測試意味著測試要在軟體的介面處進行。這種方法是把測試物件看做一個黑盒子,測試人員完全

不考慮程式內部的邏輯結構和內部特性,只依據程式的需求規格說明書,檢查程式的功能是否符合它的功能說明

。因此黑盒測試又叫功能測試或資料驅動測試。黑盒測試主要是為了發現以下幾類錯誤:

1、是否有不正確或遺漏的功能?

2、在介面上,輸入是否能正確的接受?能否輸出正確的結果?

3、是否有資料結構錯誤或外部資訊(例如資料檔案)訪問錯誤?

4、效能上是否能夠滿足要求?

5、是否有初始化或終止性錯誤?

軟體的白盒測試是對軟體的過程性細節做細緻的檢查。這種方法是把測試物件看做一個開啟的盒子,它允許

測試人員利用程式內部的邏輯結構及有關資訊,設計或選擇測試用例,對程式所有邏輯路徑進行測試。通過在不

同點檢查程式狀態,確定實際狀態是否與預期的狀態一致。因此白盒測試又稱為結構測試或邏輯驅動測試。白盒

測試主要是想對程式模組進行如下檢查:

1、對程式模組的所有獨立的執行路徑至少測試一遍。

2、對所有的邏輯判定,取“真”與取“假”的兩種情況都能至少測一遍。

3、在迴圈的邊界和執行的界限內執行迴圈體。

4、測試內部資料結構的有效性,等等。

請簡述一下用Socket進行同步通訊程式設計的詳細步驟
1、在應用程式和遠端裝置中使用協議和網路地址初始化套接字
2、在應用程式中通過指定埠和地址建立監聽
3、遠端裝置發出連線請求
4、應用程式接受連線產生通訊scoket
5、應用程式和遠端裝置開始通訊(在通訊中應用程式將掛起直到通訊結束)
6、通訊結束,關閉應用程式和遠端裝置的Socket回收資源

OSI網路結構的七層模型及其核心思想是什麼
第七層:應用層
定義了用於在網路中進行通訊和資料傳輸的介面 - 使用者程式;
提供標準服務,比如虛擬終端、檔案以及任務的傳輸和處理;
第六層:表示層
掩蓋不同系統間的資料格式的不同性;
指定獨立結構的資料傳輸格式;
資料的編碼和解碼;加密和解密;壓縮和解壓縮
第五層:會話層
管理使用者會話和對話;
控制使用者間邏輯連線的建立和結束通話;
報告上一層發生的錯誤
第四層:傳輸層
管理網路中端到端的資訊傳送;
通過錯誤糾正和流控制機制提供可靠且有序的資料包傳送;
提供面向無連線的資料包的傳送;
第三層:網路層
定義網路裝置間如何傳輸資料;
根據唯一的網路裝置地址路由資料包;
提供流和擁塞控制以防止網路資源的損耗
第二層:資料鏈路層
定義操作通訊連線的程式;
封裝資料包為資料幀;
監測和糾正資料包傳輸錯誤
第一層:物理層
定義通過網路裝置傳送資料的物理方式;
作為網路媒介和裝置間的介面;
定義光學、電氣以及機械特性。

2 幾十上百萬行,如何快速查詢出表資料
答:用分頁儲存過程

/* 函式名稱:GetRecordFromPage 函式功能:獲取指定頁的資料 引數說明:@tblName包含資料的表名 @fldName關鍵欄位名 @PageSize每頁記錄數 @PageIndex要獲取的頁碼 @OrderType排序型別,0-升序,1-降序 @strWhere查詢條件(注意:不要加where) */ CREATEPROCEDUREGetRecordFromPage @tblNamevarchar(255),--表名 @fldNamevarchar(255),--欄位名 @PageSizeint=10,--頁尺寸 @PageIndexint=1,--頁碼 @OrderTypebit=0,--設定排序型別,非0值則降序 @strWherevarchar(2000)=''--查詢條件(注意:不要加where) AS declare@strSQLvarchar(6000)--主語句 declare@strTmpvarchar(1000)--臨時變數 declare@strOrdervarchar(500)--排序型別 if@OrderType!=0 begin set@strTmp='<(selectmin' set@strOrder='orderby['+@fldName+']desc' end else begin set@strTmp='>(selectmax' set@strOrder='orderby['+@fldName+']asc' end set@strSQL='selecttop'+str(@PageSize)+'*from[' +@tblName+']where['+@fldName+']'+@strTmp+'([' +@fldName+'])from(selecttop'+str((@PageIndex-1)*@PageSize)+'[' +@fldName+']from['+@tblName+']'+@strOrder+')astblTmp)' +@strOrder if@strWhere!='' set@strSQL='selecttop'+str(@PageSize)+'*from[' +@tblName+']where['+@fldName+']'+@strTmp+'([' +@fldName+'])from(selecttop'+str((@PageIndex-1)*@PageSize)+'[' +@fldName+']from['+@tblName+']where'+@strWhere+'' +@strOrder+')astblTmp)and'+@strWhere+''+@strOrder if@PageIndex=1 begin set@strTmp='' if@strWhere!='' set@strTmp='where('+@strWhere+')' set@strSQL='selecttop'+str(@PageSize)+'*from[' +@tblName+']'+@strTmp+''+@strOrder end exec(@strSQL) GO

三、資料庫查詢優化:
1、多型性,多種資料庫相容;
2、支援翻頁,支援查詢總數,頁碼顯示;
3、能處理100萬以上資料量;
答:
CREATE PROCEDURE dbo.LSP_SP_SelectElementByPage
@SelectFields varchar(200),/*要查詢的欄位列表*/
@Condition varchar(300),/*查詢條件*/
@PageSize int =20,/*頁面大小,預設為20*/
@PageNumber int =1/*頁號,預設為第一頁*/
/*@PageCount int out返回滿足條件的總頁數*/
AS
begin
declare @count int
select @count =count(*) from lsp_t_elementInfo
if(@count %@PageSize=0)
set @count = @count/@PageSize
else
set @count = @count/@PageSize +1
select @count PageCount
select IDENTITY(int,1,1) as iid,ElementName,Type into #temptable from LSP_T_ElementInfo
select * from #temptable where iid between @PageSize * (@PageNumber -1) and @PageSize * @PageNumber
end
GO

1.兩個表,寫查詢語句,根據兩個欄位一個是升序,一個將序。
答:select * from a,b where a.欄位1 = b.欄位1 order by a.欄位2 asc,b.欄位2 desc
2.根據第一題,每頁面顯示10條記錄,在第25頁時怎樣顯示
答:
/*
函式名稱: GetRecordFromPage
函式功能: 獲取指定頁的資料
引數說明: @tblName 包含資料的表名
@fldName 關鍵欄位名
@PageSize 每頁記錄數
@PageIndex 要獲取的頁碼
@OrderType 排序型別, 0 - 升序, 1 - 降序
@strWhere 查詢條件 (注意: 不要加 where)
*/
CREATE PROCEDURE GetRecordFromPage
@tblName varchar(255), -- 表名
@fldName varchar(255), -- 欄位名
@PageSize int = 10, -- 頁尺寸
@PageIndex int = 1, -- 頁碼
@OrderType bit = 0, -- 設定排序型別, 非 0 值則降序
@strWhere varchar(2000) = '' -- 查詢條件 (注意: 不要加 where)
AS

declare @strSQL varchar(6000) -- 主語句
declare @strTmp varchar(1000) -- 臨時變數
declare @strOrder varchar(500) -- 排序型別

if @OrderType != 0
begin
set @strTmp = '<(select min'
set @strOrder = ' order by [' + @fldName + '] desc'
end
else
begin
set @strTmp = '>(select max'
set @strOrder = ' order by [' + @fldName +'] asc'
end

set @strSQL = 'select top ' + str(@PageSize) + ' * from ['
+ @tblName + '] where [' + @fldName + ']' + @strTmp + '(['
+ @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
+ @fldName + '] from [' + @tblName + ']' + @strOrder + ') as tblTmp)'
+ @strOrder

if @strWhere != ''
set @strSQL = 'select top ' + str(@PageSize) + ' * from ['
+ @tblName + '] where [' + @fldName + ']' + @strTmp + '(['
+ @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
+ @fldName + '] from [' + @tblName + '] where ' + @strWhere + ' '
+ @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrder

if @PageIndex = 1
begin
set @strTmp = ''
if @strWhere != ''
set @strTmp = ' where (' + @strWhere + ')'

set @strSQL = 'select top ' + str(@PageSize) + ' * from ['
+ @tblName + ']' + @strTmp + ' ' + @strOrder
end

exec (@strSQL)

GO

2.寫出一條Sql語句: 取出表A中第31到第40記錄(SQLServer, 以自動增長的ID作為主鍵, 注意:ID可能不是連續的。)
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.public class c{ public c(string a) : this() {;}; public c() {;} } 解釋第一個建構函式中發生了什麼?這個建構函式有什麼用?
(第一個建構函式呼叫了第二個建構函式,這個建構函式構造了一個c物件的例項。)

4.一個長度為10000的字串,通過隨機從a-z中抽取10000個字元組成。請用c#語言編寫主要程式來實現。
答:
using System.Text;
StringBuilder sb = new StringBuilder(0, 10000);
string strABC = "a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z";
string[] ABC = strABC.Split(',');
int len = ABC.Length;
Random rd = new Random();
for (int i = 0; i < 10000; i++)
{
sb.Append(ABC[rd.Next(len)]);
}

5.產生一個int陣列,長度為100,並向其中隨機插入1-100,並且不能重複。
int[] intArr=new int[100];
ArrayList myList=new ArrayList();
Random rnd=new Random();
while(myList.Count<100)
{
int num=rnd.Next(1,101);
if(!myList.Contains(num))
myList.Add(num);
}
for(int i=0;i<100;i++)
intArr[i]=(int)myList[i];

2.如何把一個Array複製到ArrayList裡
答:
foreach( object o in array )arrayList.Add(o);

8.用C#寫一段選擇排序演算法,要求用自己的程式設計風格。
答:private int min;
public void xuanZhe(int[] list)//選擇排序
{
for (int i = 0; i < list.Length - 1; i++)
{
min = i;

for (int j = i + 1; j < list.Length; j++)
{
if (list[j] < list[min])

min = j;

}

int t = list[min];

list[min] = list[i];

list[i] = t;

}
}

4.寫一個函式計算當引數為N的值:1-2+3-4+5-6+7……+N
答:public int returnSum(int n)
{
int sum = 0;
for (int i = 1; i <= n; i++)
{
int k = i;
if (i % 2 == 0)
{
k = -k;
}
sum = sum + k;
}
return sum;
}

public int returnSum1(int n)
{
int k = n;
if (n == 0)
{
return 0;
}
if (n % 2 == 0)
{
k = -k;
}
return aaa(n - 1) + k;
}

7. 某一密碼僅使用K、L、M、N、O共5個字母,密碼中的單詞從左向右排列,密碼單詞必須遵循如下規則 :
(1) 密碼單詞的最小長度是兩個字母,可以相同,也可以不同
(2) K不可能是單詞的第一個字母
(3) 如果L出現,則出現次數不止一次
(4) M不能使最後一個也不能是倒數第二個字母
(5) K出現,則N就一定出現
(6) O如果是最後一個字母,則L一定出現
問題一:下列哪一個字母可以放在LO中的O後面,形成一個3個字母的密碼單詞?
A) K B)L C) M D) N
答案:B
問題二:如果能得到的字母是K、L、M,那麼能夠形成的兩個字母長的密碼單詞的總數是多少?
A)1個 B)3個 C)6個 D)9個
答案:A
問題三:下列哪一個是單詞密碼?
A) KLLN B) LOML C) MLLO D)NMKO
答案:C

62-63=1 等式不成立,請移動一個數字(不可以移動減號和等於號),使得等式成立,如何移動?
答案:62移動成2的6次方

17、列出常用的使用javascript操作xml的類包
答:
XML.prototype.xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
XML.prototype.InitXML=InitXML;
XML.prototype.getFirstChild=getFirstChild;
XML.prototype.getLastChild=getLastChild;
XML.prototype.getChild=getChild; // 取得節點值
XML.prototype.getNodeslength=getNodeslength; // 最得節點下的子節點的個數
XML.prototype.getNode=getNode; // 取得指定節點
XML.prototype.delNode=delNode; // 刪除指定節點,如果節點相同,則刪除最前面的節點.
XML.prototype.getNodeAttrib=getNodeAttrib; // 取得節點的指定屬性值.
XML.prototype.InsertBeforeChild=InsertBeforeChild; // 在指定節點之前插入一個節點.
XML.prototype.InsertChild=InsertChild; // 在指定節點下插入節點.
XML.prototype.setAttrib=setAttrib; // 設定指定屬性的值.
XML.prototype.setNodeValue=setNodeValue; // 設定指定節點的值.
XML.prototype.CreateNodeS=CreateNodeS; // 建立一個指定名的節點.
XML.prototype.addAttrib=addAttrib; // 為指定節點新增指定屬性,並設定初值.
XML.prototype.FindString=FindString; // 在指定節點下查詢字串.

給定以下XML檔案,完成演算法流程圖<FileSystem>
< DriverC >
<Dir DirName=”MSDOS622”>
<File FileName =” Command.com” ></File>
</Dir>
<File FileName =”MSDOS.SYS” ></File>
<File FileName =” IO.SYS” ></File>
</DriverC>
</FileSystem>
請畫出遍歷所有檔名(FileName)的流程圖(請使用遞迴演算法)。
答:
void FindFile( Directory d )
{
FileOrFolders = d.GetFileOrFolders();
foreach( FileOrFolder fof in FileOrFolders )
{
if( fof is File )
You Found a file;
else if ( fof is Directory )
FindFile( fof );
}
}