.net 面試專欄

1. C#中 property 與 attribute的區別,他們各有什麼用處,這種機制的好處在哪裏?
===============
property用法 get/set方法。
主要用於類與外部程序之間的數據交互使用。
增加了對類內部數據訪問的安全性和方便性,在編譯期就可以進行類型檢查和訪問權限檢查。

attribute用法
[STAThread]
public void Thrd(){...}
attribute是一個派生自System.Attribute基類的類。
attribute可在反射中被枚舉,查詢。
(當編譯器看到一個屬性被附着給一個類型或成員時,它會搜索具有指定屬性名的System.Attribute派生類。
如果編譯器沒有找到匹配的類,它就在指定的屬性名後面加上Attribute,然後再進行搜索。
因此,常見的使用做法是將屬性類名定義爲以Attribute結尾,在使用時忽略名稱的這一部分。)
使用Attribute可以讓用戶把自定義的信息附屬到實體上,
還可以在運行時動態查詢,
這些信息不僅可以被用戶取出來作爲一種類型的標註,它更可以被編譯器所識別,
作爲編譯時的一種附屬條件參加程序的編譯。
舉例如
[STAThread]和[MTAThread]
線程模式屬性,
通過這兩個屬性可以指定線程是單線程模式還是多線程模式。
(線程模型隻影響使用COM interop的應用程序,將這個屬性應用於不使用COM interop的程序將不會產生任何效果。)
幾個常用的屬性:
AttributeUsage | Class | 指定另一個屬性類的有效使用方式
CLSCompliant | 全部 | 指出程序元素是否與CLS兼容
Conditional | Method | 指出如果沒有定義相關聯的字符串,編譯器就可以忽略對這個方法的任何調用
DllImport | Method | 指定包含外部方法的實現的DLL位置
STAThread | Method(Main) | 指出程序的默認線程模型爲STA
MTAThread | Method(Main) | 指出程序的默認模型爲多線程(MTA)
Obsolete | 除了Assembly、Module、Parameter和Return | 將一個元素標示爲不可用,通知用戶此元素將被從未來的產品
ParamArray| Parameter |允許單個參數被隱式地當作params(數組)參數對待
Serializable| Class、Struct、enum、delegate |指定這種類型的所有公共和私有字段可以被串行化
NonSerialized |Field| 應用於被標示爲可串行化的類的字段,指出這些字段將不可被串行化
StructLayout| Class、struct |指定類或結構的數據佈局的性質,比如Auto、Explicit或sequential
ThreadStatic |Field(靜態) |實現線程局部存儲(TLS)。不能跨多個線程共享給定的靜態字段,每個線程擁有這個靜態字段的副本
=======================================
2. 講一講你理解的web service,在dot net framework中,怎麼很好的結合xml?
   web service是跨網絡提供服務的一項技術的集合,主要通過各種不同的協議來實現一個服務的支持,
   比如http(Hypertext Transfer Protocol) 協議,
         xml(eXtensible Markup Language),
         soap(Simple Object Access Protocol)協議,
         WSDL (Web Services Description Language),
         UDDI (Universal Description, Discovery and Integration)。
         .net framework中提出了xml web service的概念:
          這個概念主要闡述了將xml web service作爲一個英特網上進行分佈式計算的基礎構架。
         開放標準和通信,實現通過人與應用程序的協作,
         通過xml web service整合應用程序來創建一個平臺。
         應用程序從不同的源中經過xml web service來整合實現。
         以下是.net關於xml web service的定義:
        . xml web service通過一個標準的協議向web用戶公佈實用功能。大多數情況下這個協議是SOAP協議。
        . xml web service通過一種方法去描述接口,
           這些信息必須足夠詳細以便用戶能根據這些信息去實現一個客戶應用程序。
         這個描述通常是以一個xml文檔(Web Services Description Language)呈現。
        一旦xml web service被註冊,
        那麼潛在的用戶可以很容易的通過Universal Discovery Description and Integration 找到這些服務。


3.  接口是否可以繼承接口?抽象類是否可以實現接口?抽象類是否可以繼承實體類?
  答:接口是可以繼承接口的,抽象類是可以實現接口的,抽象類可以繼承實體類,
           但是有個條件,條件是,實體類必須要有明確的構造函數。

4.   構造器Constructor是否可以被繼承?是否可以被Override?
  答:Constructor不可以被繼承,因此不能被重寫(Overriding),但可以被重載(Overloading).

5.   是否可以繼承String類?
  答:因爲String類是final類所以不可以繼承string類。

6. 當一個線程進入一個對象的方法後,其它線程是否可以進入該對象的方法?
  答:不可以,一個對象的方法只能由一個線程訪問。
=============
7.  C#是否可以對內存直接進行操作?
   答:這個問題比較難回答,也是個很大的問題。但是可以這樣問答。
          C#是可以對內存進行直接操作的,雖然很少用到指針,但是C#是可以使用指針的,
          在用的時候需要在前邊加unsafe,
          在.net中使用了垃圾回收機制(GC)功能,它替代了程序員,
          不過在C#中不可以直接使用finalize方法,而是在析構函數中調用基類的finalize()方法。
=================
7. 數組有沒有Length()這個方法?string有沒有這個方法?
  答:數組中沒有這個方法,但有這個屬性,string中有這個方法。
8, Error和Exception有是區別?
  答:error表示恢復不是不可能,但是很困難,
           exception表示一種實際或實現問題,它表示程序運行正常不可以發生的。
9,談談final,finally,finallize的區別?
   答:final用於申明屬性、方法、類,表示屬性不可變,方法不可以被覆蓋,類不可以被繼承。
       Finally是異常處理語句結構中,表示總是執行的部分。
       Finallize表示是object類一個方法,在垃圾回收機制中執行的時候會被調用被回收對象的方法。
=======================
10. HashMap和Hashtable區別?
  答:HashMap是Hashtable的輕量級實現,非線程安全的實現。
           他們都實現了map接口,
           主要區別是HashMap鍵值可以爲空null,效率可以高於Hashtable。

11,Collection和Collections的區別?
   答:Collection是集合類的上級接口,Collections是針對集合類的一個幫助類,
            它提供一系列靜態方法來實現對各種集合的搜索,排序,線程安全化操作
========================
12,C#中委託是什麼?事件是不是一種委託?
  答:委託是一種安全的類似與函數指針,但是她比指針要安全的多,
           它可以把方法作爲一個參數傳遞給另一個方法,可以理解爲指向函數的引用。
           事件是一種消息機制,它是一種委託,委託不帶方法體。
=========================
13.  Override, Overload,的區別?
   答:Override是重寫的意思,它表示重寫基類的方法,
           而且方法的名稱,返回類型,參數類型,參數個數要與基類相同。
       Overload是重載是意思,它也表示重寫基類的方法,但是隻要方法名相同,別的可以不同。

14.  在一個BS結構中需要傳遞變量值時,不能使用session,coolke,application,你有幾中方法?
   答:this.server.Transfer,Querystring.
===================
15.  C#中索引器實現過程,是否只能根據數字索引?
     答:不是的,可以是任意類型。
16,New有種用法?
  答:有3種,第一種是,實例化如:New Class()
                  第二種是,public new 隱藏基類的方法
                  第三種是,在泛型類申明中的任何類型參數都必須有公共的無參構造函數。

==================
17.  如何把一個Array複製到Arraylist中?
  答:Foreach (object o in Array), ArrayList.Add (0)
19. Const和ReadOnly?
  答:Const用來申明編程時常量,ReadOnly用來申明運行時常量。
20. public const static readonly int jj=4;有沒有錯誤?
      答:去掉static。
=================
21. UDP和TCP連接有和異同?
  答:TCP是傳輸控制協議,提供的是面向連接的,是可靠的,字節流服務,
           當用戶和服務器彼此進行數據交互的時候,必須在他們數據交互前要進行TCP連接之後才能傳輸數據。
           TCP提供超時重撥,檢驗數據功能。
           UDP是用戶數據報協議,是一個簡單的面向數據報的傳輸協議,是不可靠的連接。


===================
21. 進程和線程分別該怎麼理解?
  答:進程是比線程大的程序運行單元,都是由操作系統所體會的系統運行單元,
           一個程序中至少要有一個進程,一個進程中,至少要有一個線程,
           線程的劃分尺度要比進程要小,
           進程擁有獨立的內存單元,線程是共享內存,
           從而極大的提高了程序的運行效率同一個進程中的多個線程可以併發執行。
====================
22,ASP。NET頁面之間傳遞值的幾種方式?
  答:QueryString,session,cookies,application,server.Transfer,respose.redictor.

23.  什麼叫應用程序域?什麼是託管代碼?
       什麼是強類型系統?什麼是裝箱和拆箱?什麼是重載?CTS、CLS和CLR分別作何解釋?
    答:應用程序域:就是爲安全性,可靠性,隔離性,和版本控制,及卸載程序提供的隔離邊界。
             它通常由運行庫宿主創建,應用程序域提供了一個更安全,用途更廣的處理單元。
          託管代碼:使用CLR編譯語言編輯器開發編寫的代碼就叫託管代碼。
          裝箱和拆箱:是把值類型轉換爲引用類型的過程,是隱式的,相反的過程就是拆箱,是顯式的。
                           CTS是公共類型系統,CLS是公共語言規範,CLR公共語言運行庫。
          強類型系統:每個變量和對象都必須具有申明類型。
=========================
24.值類型和引用類型的區別?
  答:值類型的值是存放在堆棧中的,改變其值,不改變變量原有的值,
           而引用類型的值是存放在棧中的,其引用的地址是存放在堆棧中的,改變其值也就改變了變量原有的值。
           值類型不允許包含null值,然而可空類型可以將null賦值給值類型l。

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

27.什麼是SOAP?
  答:是簡單訪問協議。
           是在分佈式環境中,交換信息並實現遠程調用的協議。
           是一個基於XML的協議。
           使用SOAP,可以不考慮任何傳輸協議,但通常還是HTTP協議,
           可以允許任何類型的對象或代碼,在任何平臺上,以任一種語言相互通信。
           它是一種輕量級協議。
====================
32.能用foreach遍歷訪問的對象需要實現?
  答:需要實現IEnumerable接口和GetEnumerator ()方法。


本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/ziren/archive/2010/03/09/5358703.aspx

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