.net 基礎知識(面試用)

C# .NET 基本概念

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


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


3. override與overload的區別?
  override 表示重寫,overload 表示重載。
  override是子類和父類之間的關係,是垂直關係;overload是同一個類中方法之間的關係,是水平關係。
  override只能由一個方法,或只能由一對方法產生關係;overload是多個方法之間的關係。
  override要求參數列表相同;overload要求參數列表不同。
  override關係中,調用那個方法體,是根據對象的類型(對象對應存儲空間類型)來決定;overload關係,是根據調用時的實參表與形參表來選擇方法體的。


4. 描述一下C#中索引器的實現過程,是否只能根據數字進行索引?
  <return type> this[type index]
  {
     get{…}
     set{…}
  }
  不是隻能根據數字進行索引,可以用任意類型。


5. 用.net做B/S結構的系統,大多數用幾層結構來開發,每一層之間的關係以及爲什麼要這樣分層?
  一般爲3層,數據訪問層,業務層,表示層。
  數據訪問層對數據庫進行增刪查改。
  業務層一般分爲二層,業務表觀層實現與表示層的溝通,業務規則層實現用戶密碼的安全等。
  表示層爲了與用戶交互例如用戶添加表單。
  優點:分工明確,條理清晰,易於調試,而且具有可擴展性。
  缺點:增加成本。


6. 什麼叫應用程序域?
  應用程序域爲隔離正在運行的應用程序提供了一種靈活而安全的方法。
  應用程序域通常由運行庫宿主創建和操作。
  應用程序域使應用程序以及應用程序的數據彼此分離,有助於提高安全性。
  下面的代碼示例創建一個新的應用程序域,然後加載並執行以前生成的程序集 HelloWorld.exe。
  static void Main()
  {
      // Create an Application Domain:
      System.AppDomain newDomain = System.AppDomain.CreateDomain("NewApplicationDomain");

      // Load and execute an assembly:
      newDomain.ExecuteAssembly(@"c:/HelloWorld.exe");

      // Unload the application domain:
      System.AppDomain.Unload(newDomain);
  }


7. CTS、CLS、CLR分別作何解釋?
  CTS:公共類型系統。
  CLS:通用語言規範。
  CLR:公共語言運行庫。


8. 什麼是裝箱和拆箱?
  裝箱:從值類型轉換到引用類型。
  拆箱:從引用類型轉換到值類型。


9. 什麼是受管制的代碼?什麼是非受管制的代碼?
  在CLR虛擬機中運行的代碼是受管制的代碼;不經過CLR運行的代碼是非受管制的代碼。


10. 什麼是強類型系統?
  運行時類型識別(RTTI)(Run-Time Type Information)


11. 什麼是Code-Behind技術?
     代碼分離技術;aspx,resx和cs三個後綴的文件,就是所謂的代碼分離,它可以使你的程序顯得更加有條理、可讀性更強。實現了HTML代碼和服務器代碼分離.方便代碼編寫和整理。


12. 常用的調用WebService的方法有哪些?
  使用WSDL.exe命令行工具
  使用VS.NET中的Add Web Reference菜單選項


13. 在C#中,String str = null 與 String str = “”的區別。 
  String str = null 不給分配內存空間,而String str = ""分配長度爲空字符串的內存空間。


14. 請詳述在.NET中類(class)與結構(struct)的異同?
  結構是值類型:值類型在棧上分配空間;
  類是引用類型:引用類型在堆棧上分配空間;
  雖然結構與類的類型不一樣,可是他們的基類型都是對象(object),c#中所有類型的基類型都是object;
  雖然結構的初始化也使用了new 操作符,可是結構對象依然分配在棧上而不是堆上,如果不使用“新建”(new),那麼在初始化所有字段之前,字段將保持未賦值狀態,且對象不可用。
  結構:不能從另外一個結構或者類繼承,本身也不能被繼承,雖然結構沒有明確的用sealed聲明,可是結構是隱式的sealed;
  類:完全可擴展的,除非顯示的聲明sealed,否則類可以繼承其他類和接口,自也能被繼承雖然結構不能被繼承,可是結構能夠
  繼承接口,方法和類繼承接口一樣;
  結構:
  沒有默認的構造函數,但是可以添加構造函數
      Structs cannot contain explicit parameterless constructors
    沒有析構函數
  沒有 abstract 和 sealed(因爲不能繼承)
  不能有protected 修飾符
  可以不使用new 初始化
  在結構中初始化實例字段是錯誤的
      public struct myStruct
      {
          public Int32 i = 0;  //error
      }
  類:
  有默認的構造函數
  有析構函數
  可以使用 abstract 和 sealed
  有protected 修飾符
  必須使用new 初始化


15. 簡要談一下您對微軟.NET 構架下remoting和webservice兩項技術的理解以及實際中的應用。
WebService的特點是:
平臺獨立性(Platform-independent)、跨語言(只要能支持XML的語言都可以)以及穿透企業防火牆;webservice是基於http的是無狀態的;
缺點:需要部署一臺Web Server;而且速度比較慢;

net Remoting的特點是:
優點是用戶既可以使用TCP信道進行二進制流方式通信,也可以使用HTTP信道進行SOAP格式的通信,效率相對WebService要高不少;remoting可以用於有狀態的情況;
缺點:.net remoting只能應用於MS的.net framework之下。

使用場合:
如果互動雙方都是支持.NET技術的環境,並且在操作系統上能提供一致的驗證機制,而且很重視溝通雙方作業的效率,就是.NET Remoting上場的時機。相反的,如果溝通雙方是異質環境,又或溝通的模式就是無狀態的情況,持續進行的互動作業前後是沒有關聯的,Web Service就是理想選擇了。


16. 寫出一條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 * from A where rownum <=10 and rowid not in (select rowid from A where rownum<=30 )


17. 面向對象的語言具有_____性、______性、_____性
  封裝、繼承、多態。


18. 能用foreach遍歷訪問的對象需要實現 ______接口或聲明_____方法的類型。
  IEnumerable 、GetEnumerator。


19. GC是什麼? 爲什麼要有GC?
  GC是垃圾收集器。程序員不用擔心內存管理,因爲垃圾收集器會自動進行管理。
  要請求垃圾收集,可以通過:System.GC.Collect(); 
  在C#中不能直接實現Finalize方法,而是在析構函數中調用基類的Finalize()方法


20. 接口是否可繼承接口? 抽象類是否可實現(implements)接口? 抽象類是否可繼承實體類(concrete class)?
  接口可以繼承接口;抽象類可以實現(implements)接口;抽象類是否可繼承實體類,但前提是實體類必須有明確的構造函數。


21. 構造器Constructor是否可被override?
  構造器Constructor不能被繼承,因此不能重寫overrid,但可以被重載overload。


22. 是否可以繼承String類?
  String類是密封(sealed)類,故不可以繼承。


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


24. 兩個對象值相同(x.equals(y) == true),但卻可有不同的hash code,這句話對不對?
  不對,有相同的hash code。

25. swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?
  switch語句表達式的值必須爲下列類型中的一種:sbyte、byte、short、ushort、int、uint、long、ulong、char、string。


26. 當一個線程進入一個對象的一個synchronized方法後,其它線程是否可進入此對象的其它方法?
  不能,一個對象的一個synchronized方法只能由一個線程訪問。


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


28. Session有什麼重大BUG,微軟提出了什麼方法加以解決?
  是IIS中由於有進程回收機制,系統繁忙的話Session會丟失;
  可以用Sate server或SQL Server數據庫的方式存儲Session,不過這種方式比較慢,而且無法捕獲Session的END事件。


29. 進程和線程的區別?
  進程是系統進行資源分配和調度的單位;
  線程是CPU調度和分派的單位,一個進程可以有多個線程,這些線程共享這個進程的資源。


30. 堆和棧的區別?
  棧:由編譯器自動分配、釋放。在函數體中定義的變量通常在棧上。
  堆:一般由程序員分配釋放。用new、malloc等分配內存函數分配得到的就是在堆上。


31. ASP.NET與ASP相比,主要有哪些進步?
  asp解釋型,aspx編譯型,性能提高,有利於保護源碼。


32. 請說明在.net中常用的幾種頁面間傳遞參數的方法,並說出他們的優缺點。
  session(viewstate)     簡單,但易丟失
  application                全局
  cookie                      簡單,但可能不支持,可能被僞造
  input type="hidden"  簡單,可能被僞造
  url參數                     簡單,顯示於地址欄,長度有限
  數據庫                      穩定,安全,但性能相對弱


33. 請指出GAC的含義?
  全稱是Global Assembly Cache,全局程序集緩存。
  作用:可以存放一些有很多程序都要用到的公共集合,很多程序就可以從GAC裏面取得Assembly,而不需要再把所有要用到的Assembly都拷貝到應用程序的執行目錄下面。


34.DataReader與Dataset有什麼區別?
  前者是隻能向前的只讀遊標,後者是內存中的表。


35.軟件開發過程一般有幾個階段?每個階段的作用?
1)問題定義
      問題定義階段必須回答的關鍵問題:“要解決的問題是什麼?”如果不知道問題是什麼就試圖解決這個問題,顯然是盲目的,只會白白浪費時間和金錢,最終得出的結果很可能是毫無意義的。儘管確切地定義問題的必要性是十分明顯的,但是在實踐中它卻可能是最容易被忽視的一個步驟。
2)可行性研究
      這個階段要回答的關鍵問題:“對於上一個階段所確定的問題有行得通的解決辦法嗎?”爲了回答這個問題,系統分析員需要進行一次大大壓縮和簡化了的系統分析和設計的過程,也就是在較抽象的高層次上進行的分析和設計的過程。
3)需求分析
     這個階段的任務仍然不是具體地解決問題,而是準確地確定“爲了解決這個問題,目標系統必須做什麼”,主要是確定目標系統必須具備哪些功能。
4)總體設計
      這個階段必須回答的關鍵問題是:“概括地說,應該如何解決這個問題?”
5)詳細設計
      總體設計階段以比較抽象概括的方式提出瞭解決問題的辦法。詳細設計階段的任務就是把解法具體化,也就是回答下面這個關鍵問題:“應該怎樣具體地實現這個系統呢?”
通常用HIPO圖(層次圖加輸入/處理/輸出圖)或PDL語言(過程設計語言)描述詳細設計的結果。
6)編碼和單元測試
      這個階段的關鍵任務是寫出正確的容易理解、容易維護的程序模塊。
      程序員應該根據目標系統的性質和實際環境,選取一種適當的高級程序設計語言(必要時用彙編語言),把說細設計的結果翻譯成用選定的語言書寫的程序,並且仔細測試編寫出的每一個模塊。
7)綜合測試
      這個階段的關鍵任務是通過各種類型的測試(及相應的調試)使軟件達到預定的要求。
      最基本的測試是集成測試和驗收測試。所謂集成測試是根據設計的軟件結構,把經過單元測試檢驗的模塊按某種選定的策略裝配起來,在裝配過程中對程序進行必要的測試。所謂驗收測試則是按照規格說明書的規定(通常在需求分析階段確定),由用戶(或在用戶積極參加下)對目標系統進行驗收。
必要時還可以再通過現場測試或平行運行等方法對目標系統進一步測試檢驗。
爲了使用戶能夠積極參加驗收測試,並且在系統投入生產性運行以後能夠正確有效地使用這個系統,通常需要以正式的或非正式的方式對用戶進行培訓。
通過對軟件測試結果的分析可以預測軟件的可靠性;反之,根據對軟件可靠性的要求也可以決定測試和調試過程什麼時候可以結束。
應該用正式的文檔資料把測試計劃、詳細測試方案以及實際測試結果保存下來,做爲軟件配置的一個組成成分。
8)軟件維護
      維護階段的關鍵任務是,通過各種必要的維護活動使系統持久地滿足用戶的需要。
通常有四類維護活動:改正性維護,也就是診斷和改正在使用過程中發現的軟件錯誤;適應性維護,即修改軟件以適應環境的變化;完善性維護,即根據用戶的要求改進或擴充軟件使它更完善;預防性維護,即修改軟件爲將來的維護活動預先做準備。


36. 在c#中using和new這兩個關鍵字有什麼意義,請寫出你所知道的意義? 
  using 引入命名空間或者使用非託管資源
  new 新建實例或者隱藏父類方法


37. 什麼叫做SQL注入,如何防止?請舉例說明。
  利用sql關鍵字對網站進行攻擊;過濾關鍵字等。


38. 列舉一下你所瞭解的XML技術及其應用
  XML用於配置,用於保存靜態數據類型.接觸XML最多的是web Services和config。

 

39. 什麼是SOAP,有哪些應用?
  SOAP(Simple Object Access Protocol )簡單對象訪問協議是在分散或分佈式的環境中交換信息並執行遠程過程調用的協議,是一個基於XML的協議。使用SOAP,不用考慮任何特定的傳輸協議(最常用的還是HTTP協議),可以允許任何類型的對象或代碼,在任何平臺上,以任何一直語言相互通信。這種相互通信採用的是XML格式的消息。
  SOAP也被稱作XMLP,爲兩個程序交換信息提供了一種標準的工作機制。在各類機構之間通過電子方式相互協作的情況下完全有必要爲此制定相應的標準。
  SOAP描述了把消息捆綁爲XML的工作方式。它還說明了發送消息的發送方、消息的內容和地址以及發送消息的時間。
  SOAP是Web Service的基本通信協議。SOAP規範還定義了怎樣用XML來描述程序數據(ProgramData),怎樣執行RPC(Remote Procedure Call)。
  大多數SOAP解決方案都支持RPC-style應用程序。
  SOAP還支持 Document-style應用程序(SOAP消息只包含XML文本信息)。
  最後SOAP規範還定義了HTTP消息是怎樣傳輸SOAP消息的。MSMQ、SMTP、TCP/IP都可以做SOAP的傳輸協議。
  SOAP 是一種輕量級協議,用於在分散型、分佈式環境中交換結構化信息。 
  SOAP 利用 XML 技術定義一種可擴展的消息處理框架,它提供了一種可通過多種底層協議進行交換的消息結構。 這種框架的設計思想是要獨立於任何一種特定的編程模型和其他特定實現的語義。

  SOAP 定義了一種方法以便將 XML 消息從 A 點傳送到 B 點。 爲此,它提供了一種基於 XML 且具有以下特性的消息處理框架: 
  (1) 可擴展 (2) 可通過多種底層網絡協議使用 (3) 獨立於編程模型。

 

40. C#中 property 與 attribute的區別,他們各有什麼用處,這種機制的好處在哪裏?
  一個是屬性,用於存取類的字段;一個是特性,用來標識類,方法等的附加性質。property是類成員級的;attribute是類級的。


41. public static const int A=1;這段代碼有錯誤麼?是什麼?
  const不能用static修飾。


42. 利用operator聲明且僅聲明瞭==,有什麼錯誤麼?
  要同時修改Equale和GetHash(),重載了"==" 就必須重載 "!="


43. 大概描述一下ASP.NET服務器控件的生命週期
(1)初始化  在此階段中,主要完成兩項工作:一、初始化在傳入Web請求生命週期內所需的設置;二、跟蹤視圖狀態。
(2)加載視圖狀態  此階段的主要任務是檢查服務器控件是否存在以及是否需要將其狀態恢復到它在處理之前的請求結束的狀態。
(3)處理回發數據
(4)加載  至此階段開始,控件樹中的服務器控件已創建並初始化、狀態已還原並且窗體控件反映了客戶端的數據。
(5)發送回發更改通知  在此階段,服務器控件通過引發事件作爲一種信號,表明由於回發而發生的控件狀態變化(因此該階段僅用於回發過程)。
(6)處理回發事件  該階段處理引起回發的客戶端事件。
(7)預呈現  該階段完成在生成控件之前所需要的任何工作。
(8)保存狀態
(9)呈現  表示向HTTP輸出流中寫入標記文本的過程。
(10)處置  在此階段中,通過重寫Dispose ()方法完成釋放對昂貴資源的引用,如數據庫鏈接等。
(11)卸載  完成的工作與"處置"階段相同,但是,開發人員通常在Dispose()方法中執行清除,而不處理Unload事件。


44. error和exception有什麼區別?
  error 表示恢復不是不可能但很困難的情況下的一種嚴重問題。比如說內存溢出。不可能指望程序能處理這樣的情況。
  exception 表示一種設計或實現問題。也就是說,它表示如果程序運行正常,從不會發生的情況。


45. <%# %> 和 <% %> 有什麼區別?
  <%# %>表示綁定的數據源
  <% %>是服務器端代碼塊


46. protected internal 被訪問範圍是:同一程序集的所有類及所有程序集的子類。


47. COM是Component Object Model(組件對象模型)的縮寫.
      COM組件是以WIN32動態鏈接庫(DLL)或可執行文件(EXE)形式發佈的可執行代碼組成。
     COM+並不是COM的新版本,我們可以把它理解爲COM的新發展,或者爲COM更高層次上的應用。COM+不再侷限於COM的組件技術,它更加註重於分佈式網絡應用的設計和實現,COM+緊緊地與操作系統結合起來,通過系統服務爲應用程序提供全面的服務。


48. 靜態變量和非靜態變量的區別?
靜態變量:
  靜態變量使用 static 修飾符進行聲明;
  在所屬類被裝載時創建;
  通過類進行訪問;
  所屬類的所有實例的同一靜態變量都是同一個值;

非靜態變量:
  不帶有 static 修飾符聲明的變量稱做非靜態變量;
  在類被實例化時創建;
  通過對象進行訪問;
  同一個類的不同實例的同一非靜態變量可以是不同的值。


49. const 和 static readonly 區別?
const
  用 const 修飾符聲明的成員叫常量,是在編譯期初始化並嵌入到客戶端程序
static readonly
  用 static readonly 修飾符聲明的成員依然是變量,只不過具有和常量類似的使用方法:通過類進行訪問、初始化後不可以修改。但與常量不同的是這種變量是在運行時初始化。


50. extern 是什麼意思?
      extern 修飾符用於聲明由程序集外部實現的成員函數,經常用於系統API函數的調用(通過 DllImport )。注意,和DllImport一起使用時要加上 static 修飾符,
也可以用於對於同一程序集不同版本組件的調用(用 extern 聲明別名),不能與 abstract 修飾符同時使用。
example:
        //注意DllImport是一個Attribute Property,在System.Runtime.InteropServices命名空間中定義
        //extern與DllImport一起使用時必須再加上一個static修飾符
        [DllImport("User32.dll")]
        public static extern int MessageBox(int Handle, string Message, string Caption, int Type);

51. abstract 是什麼意思?
  abstract 修飾符可以用於類、方法、屬性、事件和索引指示器(indexer),表示其爲抽象成員;
  abstract 不可以和 static 、virtual 、override 一起使用;
  聲明爲abstract 成員可以不包括實現代碼,但只有類中還有未實現的抽象成員,該類就不可以被實例化,通常用於強制繼承類必須實現某一成員。

 

52. internal 修飾符起什麼作用?
  internal 修飾符可以用於類型或成員,使用該修飾符聲明的類型或成員只能在同一程序集內訪問,接口的成員不能使用 internal 修飾符。


53. sealed 修飾符是幹什麼的?
  sealed 修飾符表示密封;
  用於類時,表示該類不能再被繼承,不能和 abstract 同時使用,因爲這兩個修飾符在含義上互相排斥;
  用於方法和屬性時,表示該方法或屬性不能再被繼承,必須和 override 關鍵字一起使用,因爲使用 sealed 修飾符的方法或屬性肯定是基類中相應的虛成員;
  通常用於實現第三方類庫時不想被客戶端繼承,或用於沒有必要再繼承的類以防止濫用繼承造成層次結構體系混亂;
  恰當的利用 sealed 修飾符也可以提高一定的運行效率,因爲不用考慮繼承類會重寫該成員。

 

54. this 關鍵字的含義?
      this 是一個保留字,僅限於構造函數和方法成員中使用;
      在類的構造函數中出現表示對正在構造的對象本身的引用,在類的方法中出現表示對調用該方法的對象的引用,在結構的構造上函數中出現表示對正在構造的結構的引用,在結構的方法中出現表示對調用該方法的結果的引用;
      this 保留字不能用於靜態成員的實現裏,因爲這時對象或結構並未實例化;
      在 C# 系統中,this 實際上是一個常量,所以不能使用 this++ 這樣的運算;
      this 保留字一般用於限定同名的隱藏成員、將對象本身做爲參數、聲明索引訪問器、判斷傳入參數的對象是否爲本身。


55. 如果基類中的虛屬性只有一個屬性訪問器,那麼繼承類重寫該屬性後可以有幾個屬性訪問器?如果基類中有get 和set 兩個呢?
     如果基類中的虛屬性只有一個屬性訪問器,那麼繼承類重寫該屬性後也應只有一個。如果基類中有get 和set 兩個屬性訪問器,那麼繼承類中可以只有一個也可以同時有兩個屬性訪問器。


56. 接口可以包含哪些成員?
接口可以包含屬性、方法、索引指示器和事件,但不能包含常量、域、操作符、構造函數和析構函數,而且也不能包含任何靜態成員。


57. 接口的多繼承會帶來哪些問題?
C# 中的接口與類不同,可以使用多繼承,即一個子接口可以有多個父接口。但如果兩個父成員具有同名的成員,就產生了二義性(這也正是 C# 中類取消了多繼承的原因之一),這時在實現時最好使用顯式的聲明。


58. 抽象類和接口的區別?
抽象類(abstract class)可以包含功能定義和實現,接口(interface)只能包含功能定義;
抽象類是從一系列相關對象中抽象出來的概念,因此反映的是事物的內部共性;
接口是爲了滿足外部調用而定義的一個功能約定, 因此反映的是事物的外部特性。


59. 如何釋放非託管資源?
     .NET 平臺在內存管理方面提供了GC(Garbage Collection),負責自動釋放託管資源和內存回收的工作,但它無法對非託管資源進行釋放,這時我們必須自己提供方法來釋放對象內分配的非託管資源,比如你在對象的實現代碼中使用了一個COM對象最簡單的辦法,可以通過實現protected void Finalize()(析構函數會在編譯時變成這個方法)來釋放非託管資源,因爲GC在釋放對象時會檢查該對象是否實現了 Finalize() 方法,如果是則調用它。但是這種方法會降低效率。
     有一種更好的方法,那就是通過實現一個接口顯式的提供給客戶調用端手工釋放對象的方法,而不是等着GC來釋放我們的對象(何況效率又那麼低)System 命名空間內有一個 IDisposable 接口,拿來做這事非常合適,就省得我們自己再聲明一個接口了。
      另外補充一句,這種實現並不一定要使用了非託管資源後才用,如果你設計的類會在運行時有大些的實例,爲了優化程序性能,你也可以通過實現該接口讓客戶調用端在確認不需要這些對象時手工釋放它們。


60. P/Invoke是什麼?
      在受控代碼與非受控代碼進行交互時會產生一個事務(transaction) ,這通常發生在使用平臺調用服務(Platform Invocation Services),即P/Invoke。如調用系統的 API 或與 COM 對象打交道,通過 System.Runtime.InteropServices 命名空間。
      雖然使用 Interop 非常方便,但據估計每次調用事務都要執行 10 到 40 條指令,算起來開銷也不少,所以我們要儘量少調用事務。如果非用不可,建議本着一次調用執行多個動作,而不是多次調用每次只執行少量動作的原則。

 

61. StringBuilder 和 String 的區別?
      String 雖然是一個引用類型,但在賦值操作時會產生一個新的對象,而 StringBuilder 則不會;所以在大量字符串拼接或頻繁對某一字符串進行操作時最好使用StringBuilder,不要使用 String。


62. explicit 和 implicit 的含義?
  explicit 和 implicit 屬於轉換運算符,如用這兩者可以讓我們自定義的類型支持相互交換。
  explicti 表示顯式轉換,如從 A -> B 必須進行強制類型轉換(B = (B)A)。
  implicit 表示隱式轉換,如從 B -> A 只需直接賦值(A = B)。
  隱式轉換可以讓我們的代碼看上去更漂亮、更簡潔易懂,所以最好多使用 implicit 運算符。
  不過!如果對象本身在轉換時會損失一些信息(如精度),那麼我們只能使用 explicit 運算符,以便在編譯期就能警告客戶調用端。

 

63. params 有什麼用?
  params 關鍵字在方法成員的參數列表中使用,爲該方法提供了參數個數可變的能力,它在參數列表只能出現一次並且不能在其後再有參數定義。

 

64. 什麼是反射?
  反射,Reflection,通過它我們可以在運行時獲得各種信息,如程序集、模塊、類型、字段、屬性、方法和事件。通過對類型動態實例化後,還可以對其執行操作。

 

65. abstract class和interface有什麼區別?
  聲明方法的存在而不去實現它的類被叫做抽像類(abstract class)
  它用於要創建一個體現某些基本行爲的類,併爲該類聲明方法,但不能在該類中實現該類的情況。
  不能創建abstract 類的實例。
  然而可以創建一個變量,其類型是一個抽像類,並讓它指向具體子類的一個實例。
  不能有抽像構造函數或抽像靜態方法。
  Abstract 類的子類爲它們父類中的所有抽像方法提供實現,否則它們也是抽像類。
  取而代之,在子類中實現該方法。
  知道其行爲的其它類可以在類中實現這些方法。

  接口(interface)是抽像類的變體。
  在接口中,所有方法都是抽像的。
  多繼承性可通過實現這樣的接口而獲得。
  接口中的所有方法都是抽像的,沒有一個有程序體。
  接口只可以定義static final成員變量。
  接口的實現與子類相似,除了該實現類不能從接口定義中繼承行爲。
  當類實現特殊接口時,它定義(即將程序體給予)所有這種接口的方法。
  然後,它可以在實現了該接口的類的任何對像上調用接口的方法。
  由於有抽像類,它允許使用接口名作爲引用變量的類型。通常的動態聯編將生效。
  引用可以轉換到接口類型或從接口類型轉換,instanceof 運算符可以用來決定某對象的類是否實現了接口。
  接口可以繼承接口。
  抽像類可以實現(implements)接口
  抽像類是否可繼承實體類(concrete class),但前提是實體類必須有明確的構造函數。

 

66. .net Remoting 的工作原理是什麼?
      服務器端向客戶端發送一個進程編號,一個程序域編號,以確定對象的位置。
      什麼是Remoting,簡而言之,我們可以將其看作是一種分佈式處理方式。從微軟的產品角度來看,可以說Remoting就是DCOM的一種升級,它改善了很多功能,並極好的融合到.Net平臺下。Microsoft .NET Remoting 提供了一種允許對象通過應用程序域與另一對象進行交互的框架。這也正是我們使用Remoting的原因。爲什麼呢?在Windows操作系統中,是將應用程序分離爲單獨的進程。這個進程形成了應用程序代碼和數據周圍的一道邊界。如果不採用進程間通信(RPC)機
制,則在一個進程中執行的代碼就不能訪問另一進程。這是一種操作系統對應用程序的保護機制。然而在某些情況下,我們需要跨過應用程序域,與另外的應用程序域進行通信,即穿越邊界。


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


68. 活動目錄的作用
  Active Directory存儲了有關網絡對象的信息,並且讓管理員和用戶能夠輕鬆地查找和使用這些信息。
  Active Directory使用了一種結構化的數據存儲方式,並以此作爲基礎對目錄信息進行合乎邏輯的分層組織。


69. 如何理解.net中的垃圾回收機制?
  .NET Framework 的垃圾回收器管理應用程序的內存分配和釋放。
  每次您使用 new 運算符創建對象時,運行庫都從託管堆爲該對象分配內存。
  只要託管堆中有地址空間可用,運行庫就會繼續爲新對象分配空間。
  但是,內存不是無限大的。最終,垃圾回收器必須執行回收以釋放一些內存。
  垃圾回收器優化引擎根據正在進行的分配情況確定執行回收的最佳時間。
  當垃圾回收器執行回收時,它檢查託管堆中不再被應用程序使用的對象並執行必要的操作來回收它們佔用的內存。

 

70. final, finally, finalize的區別。
  final:修飾符(關鍵字)如果一個類被聲明爲final,意味着它不能再派生出新的子類,不能作爲父類被繼承。
  因此 一個類不能既被聲明爲 abstract的,又被聲明爲final的。
  將變量或方法聲明爲final,可以保證它們在使用中不被改變。
  被聲明爲final的變量必須在聲明時給定初值,而在以後的引用中只能讀取,不可修改。
  被聲明爲 final的方法也同樣只能使用,不能重載
  finally:在異常處理時提供 finally 塊來執行任何清除操作。
  如果拋出一個異常,那麼相匹配的 catch 子句就會執行.
  然後控制就會進入 finally 塊(如果有的話)。
  finalize:方法名。
  這個方法是由垃圾收集器在確定這個對象沒有被引用時對這個對象調用的。
  它是在 Object 類中定義的 ,因此所有的類都繼承了它。
  子類覆蓋 finalize() 方法以整理系統資源或者執行其他清理工作。
  finalize() 方法是在垃圾收集器刪除對像之前對這個對象調用的。

 

71. UDP連接和TCP連接的異同
      TCP  傳輸控制協議,提供的是面向連接、可靠的字節流服務。當客戶和服務器彼此交換數據前,必須先在雙方之間建立一個TCP連接,
之後才能傳輸數據。TCP提供超時重發,丟棄重複數據,檢驗數據,流量控制等功能,保證數據能從一端傳到另一端。
      UDP  用戶數據報協議,是一個簡單的面向數據報的運輸層協議。UDP不提供可靠性,它只是把應用程序傳給IP層的數據報發送出去,
但是並不能保證它們能到達目的地。由於UDP在傳輸數據報前不用在客戶和服務器之間建立一個連接,且沒有超時重發等機制,故而傳輸
速度很快。


72. 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。


73. 請問進程調度中產生死鎖的必要條件是什麼?解決死鎖有幾種辦法
產生死鎖的四個必要條件:
(1)互斥條件:一個資源每次只能被一個進程使用。
(2)請求與保持條件:一個進程因請求資源而阻塞時,對已獲得的資源保持不放。
(3)不剝奪條件:進程已獲得的資源,在末使用完之前,不能強行剝奪。
(4)循環等待條件:若干進程之間形成一種頭尾相接的循環等待資源關係。
這四個條件是死鎖的必要條件,只要系統發生死鎖,這些條件必然成立,而只要上述條件之一不滿足,就不會發生死鎖。

死鎖排除的方法:
(1)撤消陷於死鎖的全部進程;
(2)逐個撤消陷於死鎖的進程,直到死鎖不存在;
(3)從陷於死鎖的進程中逐個強迫放棄所佔用的資源,直至死鎖消失。
(4)從另外一些進程那裏強行剝奪足夠數量的資源分配給死鎖進程,以解除死鎖狀態。


74.  解釋一下UDDI、WSDL的意義及其作用
      UDDI是統一描述集成協議,是一套基於Web的,分佈式的,爲WEB服務提供的信息註冊的實現標準規範,同時爲也是爲企業本身提供的Web服務註冊以讓別的企業能夠發現並訪問的協議標準。提供了基於標準的規範,用於描述和發現服務,還提供了一組基於因特網的實現。
      WSDL這是一個基於XML的描述WEB服務的接口。

 

75. DOM優點和缺點

      Document Object Model,文檔對象模型。

      DOM的優勢主要表現在:易用性強,使用DOM時,將把所有的XML文檔信息都存於內存中,並且遍歷簡單,支持XPath,增強了易用性。

  DOM的缺點主要表現在:效率低,解析速度慢,內存佔用量過高,對於大文件來說幾乎不可能使用。另外效率低還表現在大量的消耗時間,因爲使用DOM進行解析時,將爲文檔的每個element、attribute、processing-instrUCtion和comment都創建一個對象,這樣在DOM機制中所運用的大量對象的創建和銷燬無疑會影響其效率。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章