1. 程式人生 > 實用技巧 >c#面試題二(轉載)

c#面試題二(轉載)

原文地址:https://blog.csdn.net/zfrong/article/details/5634531

1. 重 載(Overload ) 和覆寫(override) 的區別

答:方法過載:當類包含兩個名稱相同但簽名不同( 方 法名相同, 引數列表不相同) 的方法時發生方法過載。用方法過載來提供在語義上完成相同而功能不同的方 法。

覆寫:在類的繼承中使用,通過覆寫子類方法可以改 變父類虛方法的實現。

2. 介面與繼承的區別?什麼時候使用介面,什麼時候使用繼承?

答:

(1 ) 介面定義一個型別需要實現的方法,屬性,索引和事件,包括可能的引數型別和返回值型別,而把具體的實現交由相應的類或結構來做,從而為 元件提供多型能力。

(2 ) 繼承常用於在一個現有父類的基礎上的功能擴充套件,往往是我們將幾個類中相同的成員提取出來放在父類中實現,然後在各自的子類中加以繼承。
(3 ) 介面可以實現多介面繼重,而繼承只能實現單繼承。
(4 ) 實現繼承可繼承父型別的實現,由於介面中沒有定義方法的實現,因此必須實現繼承後該介面的所有方法。
(5 ) 為父型別新增方法可能不影響使用繼承自該型別實現的使用者,而為介面新增方法導致使用者必須為新方法新增實現。
(6 ) 當派生類和基類是is-a 的關係是使用" 繼承" ,典型案例" 蘋果 is-a 水果" ,存在can-do 的關 系時使用" 介面"

3.ado,ado.net 的 區別

答:您可以通過將 ADO.NET 的各項功能與 ActiveX 資料物件 (ADO) 的特定功能進行比較來理解 ADO.NET 的功能。

資料的記憶體中表示形式

在 ADO 中,資料的記憶體中表示形式為記錄 集。在 ADO.NET 中,它為資料集。它們之間有重要的差 異。

表的個數

記錄集看起來像單個表。如果記錄集將包含來自多個數據庫表的資料,則它必須使用 JOIN 查詢,將來自各個資料庫表的資料組合到單個結果表中。

相反,資料集是一個或多個表的集合。資料集內的表稱為資料表;明確地說,它們是 DataTable 物件。如果資料集包含來自多個數據庫表的資料,它通常將包含多個 DataTable

物件。即,每個 DataTable 物件通常對應於單個數據庫表或檢視。這樣,資料集可以模仿基礎資料庫的結構。

資料集通常還包含關係。資料集內的關係類似於資料庫中的外來鍵關係,即它使多個表中的行彼此關聯。例如,如果資料集包含一個有關投資者的表 和另一個有關每個投資者的股票購買情況的表,則資料集可能還包含一個關係來連線投資者表的各個行和購買表的對應行。

由於資料集可以儲存多個獨立的表並維護有關表之間關係的資訊,因此它可以儲存比記錄集豐富得多的資料結構,包括自關聯的表和具有多對多關 系的表。

資料導航和遊標

在 ADO 中,您使用 ADO MoveNext 方法順序掃描記錄集的行。在 ADO.NET 中, 行表示為集合,因此您可以像依次通過任何集合那樣依次通過表,或通過序號索引或主鍵索引訪問特定行。DataRelation 物件維護有關主記錄和詳細資料記錄的資訊,並提供方法使您可以獲取與正在操作的記錄相關的記錄。例如,從 Investor 表的"Nate Sun" 的行開始,可以定 位到 Purchase 表中描述其購買情況的那組行。

" 遊標" 是資料庫元素,它控制記錄導航、更新資料的能力和其他使用者對資料庫所做更 改的可見性。ADO.NET 不具有固有的遊標物件,而是包含 提供傳統遊標功能的資料類。例如,在 ADO.NET DataReader 物件中提供只進、只讀遊標的功能。有關遊標功能的更多資訊,請參見資料訪問技術。

將開啟連線的時間降至最低

在 ADO.NET 中,開啟連線的時間僅足 夠執行資料庫操作,例如" 選擇"(Select) 或" 更新"(Update) 。您可以將行讀入資料集中,然後在不保持與資料來源的連線的情況下使用它們。在 ADO 中,記錄集可以提供不連線的訪問,但 ADO 主要是為連線的訪問設計的。

ADO 和 ADO.NET 中的不連線處理之間存在一個顯著差異。在 ADO 中,通過呼叫 OLE DB 提供程式來與資料庫通訊。但在 ADO.NET 中,您通過資料介面卡(OleDbDataAdapter 、SqlDataAdapter 、OdbcDataAdapter 或 OracleDataAdapter 物件)與資料庫通訊,這將呼叫 OLE DB 提供程式或基礎資料來源提供的 API 。ADO 和 ADO.NET 之 間的主要區別在於:在 ADO.NET 中,資料介面卡允許您 控制將對資料集所做的更改傳輸到資料庫的方式,方法是實現效能優化、執行資料驗證檢查或新增其他任何額外處理。

注意 數 據介面卡、資料連線、資料命令和資料讀取器是組成 .NET Framework 資料提供程式的元件。Microsoft 和第三方供應商可能會提供其它提供程式,這些提供程式也可整合到 Visual Studio 中。有關不同 .NET 資料提供程式的資訊,請參見 .NET 資料提供程式。

在應用程式間共享資料

在應用程式間傳輸 ADO.NET 資料集比 傳輸 ADO 不連線的記錄集要容易得多。若要將 ADO 不連線的記錄集從一個元件傳輸到另一個元件,請使用 COM 封送。若要在 ADO.NET 中傳輸資料,請使用資料集,它可以傳輸 XML 流。

相對於 COM 封送,XML 檔案的傳輸提供以下便利之處:

更豐富的資料型別

COM 封送提供一組有限的資料型別(由 COM 標準定義的那些型別)。由於 ADO.NET 中的資料集傳輸基於 XML 格式,所以對資料型別沒有限制。因此,共享資料集的元件可以使用 這些元件一般會使用的任何豐富的資料型別集。

效能

傳輸大型 ADO 記錄集或大型 ADO.NET 資料集會使用網路資源;隨著資料量的增長,施加於網路的 壓力也在增加。ADO 和 ADO.NET 都使您可以最大限度地降低所傳輸的資料。但 ADO.NET 還提供另一個性能優勢:ADO.NET 不需要資料型別轉換。而需要 COM 封送來在元件間傳輸記錄集的 ADO ,則需要將 ADO 資料型別轉換為 COM 數 據型別。

穿透防火牆

防火牆可以影響試圖傳輸不連線的 ADO 記 錄集的兩個元件。請記住,防火牆通常配置為允許 HTML 文 本通過,但防止系統級請求(如 COM 封送)通過。

因為元件使用 XML 交換 ADO.NET 資料庫,所以防火牆可以允許資料集通過。

4.asp.net 頁 面在什麼時候產生?又在什麼時候銷燬?

答:(1)Page_Init();--- 初 始化物件

這一過程主要是初始化包括頁面本身的所有控 件,每次的頁面載入就會執行一次初試過程,而在這裡面訪問到的也是控制元件的初始值。還有就是可以通過OnInit() 來過載初試化事件。

(2) LoadViewState--- 導 入Viewstate 資料
在初試化事件後,在loadvireState 事件中所有控制元件將獲得他們的第一個屬性ViewState 屬性,這個屬性最終將被返回給伺服器以判斷這個頁面是 已經被使用者訪問完畢還是仍然在被使用者所訪問。也可過載loadvireState 事 件對相應的控制元件進行值設定。

(3)Load Postback data;--- 用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 事件。

5.Session,ViewState,Application,cookie 的 區別?

答:Session:Session 用 於保持狀態的基於 Web 伺服器的方法。Session 允許通過將物件儲存在Web 伺服器的記憶體中在整個使用者會話過程中保持任何物件。主要用於保持代 碼隱藏類中物件的狀態。為每個用建立的, 用於儲存單個使用者, 因為他是相對每個使用者的. 所以可能來取得線上人數等。

ViewState: 主要用於保持 Web 頁上控制元件的狀態。當 Web 頁上的 控制元件被繫結到程式碼隱藏類中的物件。
Application 用於儲存所有使用者都可視的資訊. 所以它儲存的是要讓所有使用者共享的一些資訊. 如總訪問數等;
Cache: 頁面快取。
cookie: 通常我們都把它放在客戶端, 也可以儲存在伺服器端。主要用它儲存使用者的個性設制, 和登陸資訊。

6. 面 向物件的思想主要包括什麼?

答:開發人員應該熟悉面向物件軟體開發(OOP) 基 本概念,熟悉面向物件軟體開發中的類、繼承、封裝、多型等概念,具備良好的面向物件軟體開發思想和設計原則。

7. 什 麼是ASP.net 中的使用者控制元件?

答:使用者控制元件。使用者控制元件是能夠在其中放置標記和 Web 服 務器控制元件的容器。然後,可以將使用者控制元件作為一個單元對待,為其定義屬性和方法。

8. 什 麼叫應用程式域?什麼是受管制的程式碼?什麼是強型別和強型別系統?什麼是裝箱和拆箱?什麼是過載?CTS 、CLS 和CLR 分別作何解釋?

答:(1 )應用程式域為隔離正在執行的應用程式提供了一種靈活而安全的方法。

(2 )受管制的程式碼: 在.NET 環境中執行的任何程式碼都稱為受管制的程式碼(unmanaged code) ,.NET 外部的其他程式碼也執行在Windows 上,這些程式碼稱為未受管制的程式碼(unmanaged code) 。

  (3 )強型別和弱型別的區別在與,在編碼過程中是否要指定資料型別,作為強型別必須指定資料型別,編譯器為其分配相應的 儲存空間(如 c ,pascal ) 否則編譯出 錯。 而弱型別不一定需要指定資料型別,編譯器會用相同的 空間去分配各種型別,除非你指定了(如basic) 。 作為強型別語言,在編譯階段的安全性要高於弱語言型。

強型別系統:RTTI :型別識別系統。

  (4 )裝箱就是隱式的將一個值型轉換為引用型物件。比如:
  int i=0;
  Syste.Object obj=i;
  這 個過程就是裝箱!就是將i 裝箱!
  拆箱就是將一個引用型物件轉換成任意值型!比如:
  int i=0;
  System.Object obj=i;
  int j=(int)obj;
  這 個過程前2 句是將i 裝箱,後一句是將obj 拆箱!
   再寫個程式碼,看看進行了幾次裝拆箱!
  int i=0;
   System.Object obj=i;
  Console.WriteLine(i+","+(int)obj);
   其中共發生了3 次裝箱和一次拆箱!^_^ ,看出來了吧?!
  第一次是將i 裝箱,第2 次是輸出的時候將i 轉換 成 string 型別,而 string 型別為引用型別, 即又是裝箱,第三次裝箱就是 (int)obj 的轉換成 string 型別,裝箱!
  拆箱就是 (int)obj ,將 obj 拆箱!!

  (5 )過載,是指允許存在多個同名函式,而這些函式的引數表不同(或許引數個數不同,或許引數型別不同,或許兩者都不 同)。

  (6 )CLR 的全稱是公共語言執行庫(Common Language Runtime ),讀者可以把CLR 理解為一個包含執行.NET 程式的引擎和一堆符合公共語言基礎結構的類庫的集合。CLR 是一個規範的實現,我們開發的幾乎所有的.NET 程式都基於CLR 的類庫來實現,並且執行在      CLR 提供的執行引擎之上。所謂.NET 框架,指的就是公共語言執行庫。
公共語言基礎(CLI )是微軟公司向ECMA 提交的一份語言和資料格式規範,CLR 是 目前為止唯一一個公共語言基礎的實現版本。
   CTS 的全稱是通用型別系統(Common Type System )。前文已經介紹了公共語言基礎(CLI )的概念,微軟公司提交的CLI 規範,包括了公共型別系統(CTS )、公共中間語言(CIL )、底部檔案格式以及元資料格式等。公共型別系統定義了一個能夠在CLR 上執行的語言規範。儘管有很多語言本身不符合CTS 規範,但是通過加強編譯器,改變語言附加規範等手段,使得許多語言能 夠編寫出能在CLR 上執行的程式。

   一種語言編寫的程式編譯能夠在CLR 上 執行,並不代表這種語言本身完全符合CTS 的規範。例如C++ 語言,仍然保持了其不符合CTS 規範的部分,並且在編譯時把這部分不符合CTS 的程式碼編譯成原始程式碼而非中間程式碼。  
   最後來看一下CLS 的 概念。公共語言規範(CLS )是CTS 的一個子集,它定義了希望編寫在.NET 平臺上執行的程式的語言所需符合的最小規範。正因為.NET 允許由不同語言編寫的程式一起執行,所以才制定出CLS 規範,用以避免不同語言特性產生的錯誤。

9. 列 舉一下你所瞭解的XML 技術及其應用

答: xml 可以用來做網頁(xslt) xml 可 以當作資料庫 xml 可以用來儲存物件的系列化

10. 值 型別和引用型別的區別?寫出C# 的樣例程式碼。

答:值型別包括簡單型別、結構體型別和列舉型別,引用型別包括自定義類、陣列、介面、委託等

11.ADO.net 中 常用的物件有哪些?分別描述一下。

答:ado.net 我直接用 sqlhelper 了 有connection command 還 有引數

12. 如 何理解委託?

答:簡單的說:委託是一種方法容器,裡面可以裝載若干個具有相同簽名的方法引用地址,那麼呼叫委託,就相當於同時呼叫了該容器內的所有方法。

13.C# 中 的介面和類有什麼異同。

答:區別一,兩者表達的概念不一樣。抽象類是一類事物的高度聚合,那麼對於繼承抽象類的子類來說,對於抽象類來說,屬於"是"的關係;而介面是定義行為規範, 因此對於實現介面的子類來說,相對於介面來說,是"行為需要按照介面來完成"。

區別二,抽象類在定義型別方法的時候,可以給出方法的實現部分,也可以不給出;而對於介面來說,其中所定義的方法都不能給出實現部分。
區別三,繼承類對於兩者所涉及方法的 實現是不同的。繼承類對於抽象類所定義的抽象方法,可以不用重寫,也就是說,可以延用抽象類的方法;而對於介面類所定義的方法或者屬性來說,在繼承類中必 須要給出相應的方法和屬性實現。
區別四,在抽象類中,新增一個方法的話,繼承類中可以不用作任何處理;而對於介面來說,則需要修改繼承類,提供新定義的方法。
如下給出兩者的簡單對比表格。

介面

抽象類

多繼承

支援

不支援

型別限制

沒有

有,只能是引用型別

方法實現

繼承型別中必須給出方法實現

繼承類中可以不給 出

擴充套件性

比較麻煩

相對比較靈活

多層繼承

比較麻煩,需要藉助虛擬函式

比較靈活

14..net 中 讀寫資料庫需要用到哪些類?他們的作用

答:(1 )DataSet 用來無連線的儲存多個表的資料,幷包含表與表之間的關聯關 系

(2 )DataTable 用來儲存一個表的資料
(3 )SqlConnection 用來建立一個到資料庫的連線
(4 )SqlCommand 用 來執行SQL 語句
(5 )SqlDataReader 用 來順序讀取資料
(6 )SqlDataAdapter 用來將資料填充到DataSet 或DataTable

15.UDP 連 接和TCP 連線的異同。

答:TCP 是傳輸控制協議,提供的是面向連線的,是可靠的,位元組流服務,當用戶和伺服器彼此進行資料互動的時候,必須在他們資料互動前要進行TCP 連線之後才能傳輸資料。TCP 提供超時重撥,檢驗資料功能。UDP 是使用者資料報協議,是一個簡單的面向資料報的傳輸協議,是不可靠的連 接。

16.ASP.net 的 身份驗證方式有哪些?分別是什麼原理?

答:Windows 身份驗證提供程式:

提供有關如何將 Windows 身份驗證與 Microsoft Internet 資訊服務 (IIS) 身份驗證結合使用來確保 ASP.NET 應用程式安全的資訊。
Forms 身份驗證提供程式 :
提供有關如何使用您自己的程式碼建立應用程式特定的登入窗體並執行身份驗證的資訊。使用 Forms 身份驗證的一種簡便方法是使用 ASP.NET 成員資格和 ASP.NET 登入控制元件,它們一起提供了一種只需少量或無需程式碼就可以 收集、驗證和管理使用者憑據的方法。
Passport 身份驗證提供程式 :
提供有關由 Microsoft 提供的集中身份驗證服務的資訊,該服務為成員站點提供單一登入和核心配置

17. 進 程和執行緒分別怎麼理解?

答:程序是比執行緒大的程式執行單元,都是由作業系統所體會的系統執行單元,一個程 序中至少要有一個程序,有一個程序中,至少要有一個執行緒,執行緒的劃分尺度要比程序要小,程序擁有獨立的記憶體單元,執行緒是共享記憶體,從而極大的提高了程式的 執行效率同一個程序中的多個執行緒可以併發執行。

18. 什 麼是code-Behind 技術。

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

19. 活 動目錄的作用。

20..net 中 讀寫XML 的類都歸屬於哪些名稱空間?

答:System.Xml;

21. 解 釋一下UDDI 、WSDL 的意義及其作用。

答:UDDI

統一描述、發現和整合協議(UDDI , Universal Description, Discovery and Integration) 是一套基於Web 的、分散式的、為Web 服務提供的資訊註冊中心的實現標準規範,同時也包含一組使企業能將自 身提供的Web 服務註冊以使得別的企業能夠發現的訪問協議的實 現標準。UDDI 提供了一組基於標準的規範用於描述和發現服務,還提供了一組基於因特網的實現。

WSDL

WSDL 描 述Web 服務的公共介面。這是一個基於XML 的關於如何與Web 服務通訊和使用的服務描述;

22. 什 麼是SOAP, 有哪些應用。

答:SOAP (Simple Object Access Protocol )簡單對 象訪問協議是在分散或分散式的環境中交換資訊並執行遠端過程呼叫的協議,是一個基於XML 的協議。使用SOAP , 不用考慮任何特定的傳輸協議(最常用的還是HTTP 協議),可 以允許任何型別的物件或程式碼,在任何平臺上,以任何一直語言相互通訊。這種相互通訊採用的是XML 格式的訊息

SOAP 是一種輕量級協議,用於在分散型、分散式環境中交換結構化資訊。 SOAP 利用 XML 技 術定義一種可擴充套件的訊息處理框架,它提供了一種可通過多種底層協議進行交換的訊息結構。 這種框架的設計思想是要獨立於任何一種特定的程式設計模型和其他特定實現的語 義。

23. 如 何部署一個ASP.net 頁面。

答:VS 2005 和VS 2003 都有釋出機制。2003 可以釋出然後再複製部署。

VS2005 基 本上可以直接部署到對應位置。

24. 如 何理解.net 中的垃圾回收機制。

答:NET Framework 的垃圾回收器管理應用程式的記憶體分配和釋放。每次您使用 new 運算子建立物件時,執行庫都從託管堆為該物件分配記憶體。只要託管堆中有地址空間可用,執行庫就會繼續為新對 象分配空間。但是,記憶體不是無限大的。最終,垃圾回收器必須執行回收以釋放一些記憶體。垃圾回收器優化引擎根據正在進行的分配情況確定執行回收的最佳時間。 當垃圾回收器執行回收時,它檢查託管堆中不再被應用程式使用的物件並執行必要的操作來回收它們佔用的記憶體。

25. 常 用的呼叫webservice 方法有哪些?

答:1. 使用WSDL.exe 命令列工具。
2. 使用VS.NET 中的AddWebReference 選單選項

26. 簡 述private 、protected 、public 、internal 修飾符的訪問許可權。
答:private: 私有成員, 在類的內部才可以訪問。

protected: 保護成員,該類內部和繼承類 中可以訪問。
public: 公 共成員,完全公開,沒有訪問限制。
internal: 在 同一名稱空間內可以訪問。

27. 列舉ASP.NET 頁面之間傳遞值的幾種方式。
答.1. 使用QueryString, 如....?id=1;response.Redirect()....

2. 使 用Session 變數
3. 使用Server.Transfer
28. 一列數的規則如下:1 、1 、2 、3 、5 、8 、13 、21 、34...... 求 第30 位數是多少, 用遞迴演算法實現。
答:

public class MainClass 
    { 
        public static void Main()   
        { 
            Console.WriteLine(Foo(30)); 
        } 
        public static int Foo(int i) 
        { 
            if (i <= 0) 
                return 0; 
            else if(i > 0 && i <= 2) 
                return 1; 
            else return Foo(i -1) + Foo(i - 2); 
        } 
    } 

30.C# 中 的委託是什麼?

答 : 委託可以把一個方法作為引數代入另一個方法。委託可以理解為指向一個函式的引用。是,是一種特殊的委託


31.override 與 過載的區別

答 :override 與過載的區別。過載是方法的名稱相同。引數或引數型別不同,進行多次過載以適應不同的需要

Override 是進行基類中函式的重寫。為了適應需要。


32. 如 果在一個B/S 結 構的系統中需要傳遞變數值,但是又不能使用Session 、Cookie 、Application ,您有幾種方法進行處理?
答 :this.Server.Transfer



33. 請程式設計遍歷頁面上所有TextBox 控制元件並給它賦值為string.Empty ?
答:

  foreach (System.Windows.Forms.Control control in this.Controls)
  {
        if (control is System.Windows.Forms.TextBox)
        {
              System.Windows.Forms.TextBox tb = (System.Windows.Forms.TextBox)control ;
              tb.Text = String.Empty ;
        }
  }

34. 請程式設計實現一個氣泡排序演算法?
答:

int [] array = new int [*] ;
int temp = 0 ;
for (int i = 0 ; i < array.Length - 1 ; i++)
{
    for (int j = i + 1 ; j < array.Length ; j++)
    {
            if (array[j] < array[i])
            {
                temp = array[i] ;
                array[i] = array[j] ;
                array[j] = temp ;            
            }
     }
}

35. 描述一下C# 中索引器的實現過程,是否只能根據數字進行索引?
答:不是。可以用任意型別。

36. 求 以下表達式的值,寫出您想到的一種或幾種實現方法:1-2+3-4+……+m
答:

 int Num = this.TextBox1.Text.ToString() ;
     int Sum = 0 ;
     for (int i = 0 ; i < Num + 1 ; i++)
        {
            if((i%2) == 1)
            {
                Sum += i ;
            }
            else
            {
                Sum = Sum  - I ;
            }
        }
    System.Console.WriteLine(Sum.ToString());
    System.Console.ReadLine() ;

37. 用.net 做B/S 結構的系統,您是用幾層結構來開發,每一層之間的關係以及為什麼要這樣分層?
答:一般為3 層
資料訪問層,業務層,表示層。
資料訪問層對資料庫進行增刪查改。
業務層一般分為二層,業務表觀層實現與表示層的溝通,業務規則層實現使用者密碼的安全等。
表示層為了與使用者互動例如使用者新增表單。
優點: 分工明確,條理清晰,易於除錯,而且具有可擴充套件性。
缺點: 增加成 本。

38. 在 下面的例子裡

    using System;
     class A
     {
          public A()
           {
                PrintFields();
           }
          public virtual void PrintFields(){}
    }
    class B:A
    {
         int x=1;
         int y;
         public B()
        {
           y=-1;
        }
        public override void PrintFields()
        {
           Console.WriteLine("x={0},y={1}",x,y);
        }
}

當 使用newB() 建立B 的例項時,產生什麼輸出?
答:X=1,Y=0;x=1y=-1 (疑問諮詢QQ 1163551688)

39.net 中讀寫資料庫 需要用到那些類?他們的作用?
答:DataSet: 資料儲存器。
DataCommand: 執行語句命令。
DataAdapter: 資料的集合,用語填充。

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

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

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

43. 請詳述在dotnet 中類(class) 與結構(struct) 的 異同?
答:Class 可以被例項化, 屬於引用型別, 是分配在記憶體的堆上的,Struct 屬 於值型別, 是分配在記憶體的棧上的.

44. 根 據委託(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);

45. 分析以下程式碼,完成填空

string strTmp = "abcdefg 某 某某"; 
int i= System.Text.Encoding.Default.GetBytes(strTmp).Length; 
int j= strTmp.Length; 

以 上程式碼執行完後,i=j=
答:i=13,j=10

46.SQLSERVER 伺服器中,給定表table1 中 有兩個欄位ID 、LastUpdateDate ,ID 表示更新的事務號,LastUpdateDate 表示更新時的伺服器時間,請使用一句SQL 語句獲得最後更新的事務號
答:SelectIDFROMtable1WhereLastUpdateDate=(SelectMAX(LastUpdateDate)FROMtable1)

47. 根據執行緒安全的相關知識,分析以下程式碼,當呼叫test 方法時i>10 時是否會引起死鎖? 並簡要說明理由。

public void test(int i) 
{ 
   lock(this) 
  { 
    if (i>10) 
    { 
     i--; 
     test(i); 
    } 
  } 
}

答: 不會發生死鎖,(但有一點int 是按值傳遞的,所以每次改變的 都只是一個副本,因此不會出現死鎖。但如果把int 換做一個object ,那麼死鎖會發生) (疑問諮詢QQ 1163551688)

48. 簡 要談一下您對微軟.NET 構 架下remoting 和webservice 兩項技術的理解以及實際中的應用。
答:WS 主要是可利用HTTP ,穿透防火牆。而Remoting 可 以利用TCP/IP ,二進位制傳送提高效率。


49. 公司要求開發一個繼承System.Windows.Forms.ListView 類的元件,要 求達到以下的特殊功能:點選ListView 各列列頭時,能按 照點選列的每行值進行重排檢視中的所有行( 排序的方式如DataGrid 相似) 。根據您的知識,請簡要談一下您的思路
答:根據點選的列頭, 包該列的ID 取出, 按照該ID 排序後, 在給繫結到ListView 中。

50. 給 定以下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 )的流程圖( 請使用遞迴演算法) 。
答:
voidFindFile(Directoryd)
{
FileOrFolders=d.GetFileOrFolders();
foreach(FileOrFolderfofinFileOrFolders)
{
if(fofisFile)
YouFoundafile;
elseif(fofisDirectory)
FindFile(fof);
}
}

51. 寫出一條Sql 語句:取出表A 中第31 到第40 記錄(SQLServer, 以自動增長的ID 作 為主鍵, 注意:ID 可能不是連續的。
答:

解1:selecttop10*fromAwhereidnotin(selecttop30idfromA)

解2:selecttop10*fromAwhereid>(selectmax(id)from(selecttop30idfromA)asA)


52. 面向物件的語言具有________ 性、_________ 性、________ 性
答:封裝、繼承、多型。

53. 能用foreach 遍歷 訪問的物件需要實現________________ 介面或 宣告 ________________ 方法的類 型。
答:IEnumerable 、GetEnumerator 。

54.GC 是 什麼? 為 什麼要有GC?
答:GC 是垃圾收集器。程式設計師不用擔心記憶體管理,因為垃圾收集器會自動進行管 理。要請求垃圾收集,可以呼叫下面的方法之一:
System.gc()
Runtime.getRuntime().gc()

55.Strings=newString("xyz"); 建立了幾個StringObject?
答:兩個 物件,一個是"xyx", 一個是指向"xyx" 的引用物件s 。

56. 啟 動一個執行緒是用run() 還是start()?
答:啟動一個執行緒是呼叫start() 方法,使執行緒所代表的虛擬處理機處於可執行狀態,這意味著 它可以由JVM 排程並執行。這並不意味著執行緒就會立即執行。run() 方法可以產生必須退出的標誌來停止一個執行緒。

57. 接 口是否可繼承介面? 抽 象類是否可實現(implements) 介面? 抽象類是否可繼承實體類(concreteclass)?
答:介面可以繼 承介面。抽象類可以實現(implements) 介面,抽象類 是否可繼承實體類,但前提是實體類必須有明確的建構函式。

58. 構造器Constructor 是否可被override?
答:構造器Constructor 不能被繼承,因此不能重寫Overriding ,但可以被過載Overloading 。

59. 是 否可以繼承String 類?
答:String 類是final 類故不可以繼承。

60.try{} 裡有一個return 語句,那麼緊跟在這個try 後的finally{} 裡的code 會 不會被執行,什麼時候被執行,在return 前還是後?
答:會執行,在return 前執行。

61. 兩個物件值相同(x.equals(y)==true) , 但卻可有不同的hashcode ,這句話對不對?
答:不對,有相同的hashcode 。

62.swtich 是否能作 用在byte 上, 是否能作用在long 上,是否能作用在String 上?
答:switch (expr1 )中,expr1 是一個整數表示式。因此傳遞給switch 和case 語句的引數應該是int 、short 、char 或 者byte 。long,string 都不能作用於swtich 。

63. 當一個執行緒進入一個物件的一個synchronized 方 法後,其它執行緒是否可進入此物件的其它方法?
答: 不能,一個物件的一個synchronized 方法只能由一個 執行緒訪問。

64.abstract 的method 是否可同時是static, 是否可同時是native ,是否可同時是synchronized?
答:都不能。

65.List,Set,Map 是 否繼承自Collection 接 口?
答:List ,Set 是Map 不是

66.Set 裡 的元素是不能重複的,那麼用什麼方法來區分重複與否呢? 是用== 還是equals()? 它 們有何區別?
答:Set 裡的元素是不能重複的,那麼用iterator() 方法來區分重複與否。equals() 是判讀兩個Set 是否相等。
equals() 和== 方 法決定引用值是否指向同一物件equals() 在類中被覆蓋, 為的是當兩個分離的物件的內容和型別相配的話,返回真值。

67. 陣列有沒有length() 這個方法?String 有沒有length() 這個方法?
答:陣列沒有length() 這個方法,有length 的屬性。String 有有length() 這 個方法。

68.sleep() 和wait() 有什麼區別?
答:sleep() 方法是使執行緒停止一段時間的方法。在sleep 時間間隔期滿後,執行緒不一定立即恢復執行。這是因為在那個時 刻,其它執行緒可能正在執行而且沒有被排程為放棄執行,除非(a)" 醒 來" 的執行緒具有更高的優先順序
(b) 正在執行的執行緒因為其它原因而阻塞。
wait() 是執行緒互動時,如果執行緒對一個同步物件x 發出一個wait() 呼叫,該執行緒會暫停執行,被調物件進入等待狀態,直到被喚醒或等待時間到。

69.shorts1=1;s1=s1+1; 有 什麼錯?shorts1=1;s1+=1; 有 什麼錯?
答:shorts1=1;s1=s1+1; 有錯,s1 是short 型,s1+1 是int 型, 不能顯式轉化為short 型。 可修改為s1=(short)(s1+1) 。shorts1=1;s1+=1 正確。

70. 談 談final,finally,finalize 的 區別。
答:
final— 修飾符(關鍵字)如果一個類被宣告為final ,意味著它不能再派生出新的子類,不能作為父類被繼承。因此 一個類不能既被宣告為abstract 的,又被宣告為final 的。將變數或方法宣告為final ,可以保證它們在使用中 不被改變。被宣告為final 的變數必須在宣告時給定初值,而在以後的引用中只能讀取,不可修 改。被宣告為final 的方法也同樣只能使用,不能 過載
finally— 再異常處理時提供finally 塊來執行任何清除操作。如果丟擲一個異常,那麼相匹配 的catch 子句就會 執行,然後控制就會進入finally 塊(如果有的話)。(疑問諮詢QQ 1163551688)
finalize— 方法名。Java 技術允許使用finalize() 方法在垃圾收集器將物件從記憶體中清除出去之前做必 要的清理 工作。這個方法是由垃圾收集器在確定這個對 象沒有被引用時對這個物件呼叫的。它是在Object 類中 定義的 ,因此所有的類都繼承了它。子類覆蓋finalize() 方法以整理系統資源或者執行其他清理工作。finalize() 方法是在垃圾收集器刪除物件之前對這個 物件呼叫的。

71. 如何處理幾十萬條併發資料?
答:用儲存過程或事務。取得最大標識的時候同時更新.. 注意主鍵不是自增量方式這種方法併發的時候是不會有重複主鍵的.. 取得最大標識要有一個儲存過程來獲取.

72.Session 有 什麼重大BUG , 微軟提出了什麼方法加以解決?
答:是iis 中由於有程序回收機制,系統繁忙的話Session 會丟失,可以用Sateserver 或SQLServer 資料庫的方式儲存Session 不過這種方式比較慢,而且無法捕獲Session 的END 事件。

73. 程序和執行緒的區別?
答:程序是系統進行資源分配和排程的單位;執行緒是CPU 排程和分派的單位,一個程序可以有多個執行緒,這些執行緒共享這個程序的 資源。

74. 堆 和棧的區別?
答:
棧:由編譯器自動分配、釋放。在函式體中定義的變數通常 在棧上。
堆:一般由程式設計師分配釋放。用new 、malloc 等分配記憶體函式分配得到的就是在堆上。

75. 成員變數和成員函式前加static 的作 用?
答:它們被稱為常成員變數和常成員 函式,又稱為類成員變數和類成員函式。分別用來反映類的狀態。比如類成員變數可以用來統計類例項的數量,類成員函式負責這種統計的動作。

76.ASP 。NET 與ASP 相比,主要有哪些進步?
答:asp 解釋形,aspx 編譯型,效能提高,有利於保護原始碼。

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