.net 不錯

.NET求職技術總結

[.NET(C#)]
把attribute翻譯成特性,用來標識類,方法
把property翻譯爲屬性,性質,用於存取類的字段
把markup翻譯成標記,tag還是翻譯成標籤比較好

[.NET(C#)]
.NET Framework的核心是其運行庫的執行環境。
稱爲公共語言運行庫(CLR)或.NET運行庫.
通常將在CLR的控制下運行的代碼稱爲託管代碼(managed code).
在CLR執行開發的源代碼之前,需要編譯它們爲中間語言(IL),CLR再把IL編譯爲平臺專用的代碼。

程序集(assembly)是包含編譯好的,面向.NET Framework的代碼的邏輯單元.
可執行代碼和庫代碼使用相同的程序集結構.
程序集的一個重要特性是它們包含的元數據描述了對應代碼中定義的類型和方法.

[.NET(C#)]
ASP頁面有時顯示比較慢,因爲服務器端代碼是解釋性的不是編譯的.
由於ASP代碼不是結構化的所以難於維護,加上ASP不支持錯誤處理和語法檢查。
而ASP.NET頁面是結構化的。每個頁面都是一個繼承了.NET類System.Web.UI.Page的類。
另外ASP.NET的後臺編碼功能允許進一步採用結構化的方式.
頁面請求是和WEB服務器在編譯後高速緩存ASP.NET頁面。

[.NET(C#)]
覆蓋(override)和重載(overload):
覆蓋是指子類重新定義父類的虛函數的做法。
重載,是指允許存在多個同名函數,而這些函數的參數表不同(或許參數個數不同,或許參數類型不同,或許兩者都不同)。
其實,重載的概念並不屬於“面向對象編程”,
重載的實現是:編譯器根據函數不同的參數表,對同名函數的名稱做修飾
然後這些同名函數就成了不同的函數(至少對於編譯器來說是這樣的)。
如,有兩個同名函數:function    func(p:integer):integer;    和function  func(p:string):integer;。
那麼編譯器做過修飾後的函數名稱可能是這樣的:int_func、str_func。
對於這兩個函數的調用,在編譯器間就已經確定了,是靜態的(記住:是靜態)。
也就是說,它們的地址在編譯期就綁定了(早綁定),
因此,重載和多態無關!真正和多態相關的是“覆蓋”。
當子類重新定義了父類的虛函數後,父類指針根據賦給它的不同的子類指針,動態(記住:是動態!)的調用屬於子類的該函數,
這樣的函數調用在編譯期間是無法確定的(調用的子類的虛函數的地址無法給出)。
因此,這樣的函數地址是在運行期綁定的(晚邦定)。
結論就是:重載只是一種語言特性,與多態無關,與面向對象也無關!

[.NET(C#)]
C#中ref和out的區別:
方法參數上的 out 方法參數關鍵字使方法引用傳遞到方法的同一個變量。
當控制傳遞迴調用方法時,在方法中對參數所做的任何更改都將反映在該變量中。
當希望方法返回多個值時,聲明 out 方法非常有用。
使用 out 參數的方法仍然可以返回一個值。一個方法可以有一個以上的 out 參數。
若要使用 out 參數,必須將參數作爲 out 參數顯式傳遞到方法。out 參數的值不會傳遞到 out 參數。
不必初始化作爲 out 參數傳遞的變量。然而,必須在方法返回之前爲 out 參數賦值。
屬性不是變量,不能作爲 out 參數傳遞。

方法參數上的 ref 方法參數關鍵字使方法引用傳遞到方法的同一個變量。
當控制傳遞迴調用方法時,在方法中對參數所做的任何更改都將反映在該變量中。
若要使用 ref 參數,必須將參數作爲 ref 參數顯式傳遞到方法。
ref 參數的值被傳遞到 ref 參數。 傳遞到 ref 參數的參數必須最先初始化。
將此方法與 out 參數相比,後者的參數在傳遞到 out 參數之前不必顯式初始化。
屬性不是變量,不能作爲 ref 參數傳遞。

兩者都是按地址傳遞的,使用後都將改變原來的數值。
ref可以把參數的數值傳遞進函數,但是out是要把參數清空
就是說你無法把一個數值從out傳遞進去的,out進去後,參數的數值爲空,所以你必須初始化一次。
兩個的區別:ref是有進有出,out是隻出不進。

[.NET(C#)]
ADO和ADO.NET的區別:
ADO使用OLE DB接口並基於微軟的COM技術
而ADO.NET擁有自己的ADO.NET接口並且基於微軟的.NET體系架構。
ADO以Recordset存儲,而ADO.NET則以DataSet表示。
Recordset看起來更像單表,如果讓Recordset以多表的方式表示就必須在SQL中進行多表連接。
反之,DataSet可以是多個表的集合。ADO 的運作是一種在線方式,這意味着不論是瀏覽或更新數據都必須是實時的。
ADO.NET則使用離線方式,在訪問數據的時候ADO.NET會利用XML製作數據的一份幅本
ADO.NET的數據庫連接也只有在這段時間需要在線。
  
由於ADO使用COM技術,這就要求所使用的數據類型必須符合COM規範
而ADO.NET基於XML格式,數據類型更爲豐富並且不需要再做COM編排導致的數據類型轉換,從而提高了整體性能。
ADO.NET爲.NET構架提供了優化的數據訪問模型,和基於COM的ADO是完全兩樣的數據訪問方式。

ado.net與ado存在着比較大的差異:
1.ado.net遵循更通用的原則,不那麼專門面向數據庫。
ado.net集合了所有允許數據處理的類。這些類表示具有典型數據庫功能(如索引,排序和視圖)的數據容器對象。
儘管ado.net是.net數據庫應用程序的權威解決方案
但從總體設計上看,它不像ado數據模型那樣以數據庫爲中心,這是ado.net的一大特點。
2.目前,ado.net提供了兩種數據庫訪問類庫:一種用於sql server 7.0 或更高版本
另一種用於其他所有您可能已經安裝的ole db提供程序。
在這兩種情況下,您分別使用不同的類,但遵循相似的命名規則。
除前綴,名稱都是相同的。前一種情況前綴爲sql,後一種情況則是oledb。
同時,.net框架還提供了odbc .net的數據訪問模式。
odbc .net data provider是 .net 框架的增強組件,它可以訪問原始的 odbc 驅動程序
就像 ole db .net data provider 可以訪問原始的 ole db providers 一樣。
目前它僅在下列驅動程序中測試過:
microsoft sql odbc driver,microsoft odbc driver for oracle,microsoft jet odbc driver。
3.ado.net提供了兩個隊形來處理從數據源中抽取數據,它們是dataset和datareader對象。
前者是記錄在內存中的緩存,您可以從任何方向隨意訪問和修改。
後者是高度優化的對象,專爲以僅向前方式滾動只讀記錄而設計。
4.ado.net統一了數據容器類編程接口,無論您打算編寫何種應用程序,windows窗體,web窗體還是web服務
都可以通過同一組類來處理數據。
不管在後端的數據源數sql server數據庫,ole db,xml文件還是一個數組
您都可以通過相同的方法和屬性來滾動和處理它們的內容。
5.在ado中,xml只不過是輸入和輸出格式。
然而在ado.net中,xml是一種數據格式,提供了操作,組織,共享和傳遞數據的手段。

ADO。NET相對於ADO等主要有什麼改進?
1:ado.net不依賴於ole db提供程序,而是使用.net託管提供的程序,
2:不使用com
3:不在支持動態遊標和服務器端遊
4:,可以斷開connection而保留當前數據集可用
5:強類型轉換
6:xml支持

[.NET(C#)]
new 關鍵字用法
(1)new  運算符  用於創建對象和調用構造函數。
(2)new  修飾符  用於向基類成員隱藏繼承成員。
(3)new  約束  用於在泛型聲明中約束可能用作類型參數的參數的類型。
 指定泛型類聲明中的任何類型參數都必須有公共的無參數構造函數。

[.NET(C#)]
C#中,string str = null 與 string str ="",說明區別。
string str =""初始化對象分配空間
而string str=null初始化對象

[.NET(C#)]
DataGrid的Datasouse可以連接什麼數據源
DataTable DataView  DataSet  DataViewManager 任何實現IListSource接口的組件  任何實現IList接口的組件

[.NET(C#)]
概述反射和序列化
反射:公共語言運行庫加載器管理應用程序域。
 這種管理包括將每個程序集加載到相應的應用程序域以及控制每個程序集中類型層次結構的內存佈局。
 程序集包含模塊,而模塊包含類型,類型又包含成員。
 反射則提供了封裝程序集、模塊和類型的對象。
 您可以使用反射動態地創建類型的實例,將類型綁定到現有對象,或從現有對象中獲取類型。
 然後,可以調用類型的方法或訪問其字段和屬性。

序列化:序列化是將對象狀態轉換爲可保持或傳輸的格式的過程。
 與序列化相對的是反序列化,它將流轉換爲對象。
 這兩個過程結合起來,可以輕鬆地存儲和傳輸數據。

[.NET(C#)]
可訪問性級別有哪幾種
 public 訪問不受限制。
 protected 訪問僅限於包含類或從包含類派生的類型。
 internal 訪問僅限於當前程序集。
 protected internal 訪問僅限於從包含類派生的當前程序集或類型。
 private 訪問僅限於包含類型。

[.NET(C#)]
O/R Mapping 的原理:利用反射,配置將對象和數據庫表映射。

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

[.NET(C#)]
詳述.NET裏class和struct的異同
結構與類共享幾乎所有相同的語法,但結構比類受到的限制更多:
儘管結構的靜態字段可以初始化,結構實例字段聲明還是不能使用初始值設定項。
結構不能聲明默認構造函數(沒有參數的構造函數)或析構函數。
結構的副本由編譯器自動創建和銷燬,因此不需要使用默認構造函數和析構函數。
實際上,編譯器通過爲所有字段賦予默認值(參見默認值表)來實現默認構造函數。
結構不能從類或其他結構繼承。
結構是值類型 -- 如果從結構創建一個對象並將該對象賦給某個變量,變量則包含結構的全部值。
複製包含結構的變量時,將複製所有數據,對新副本所做的任何修改都不會改變舊副本的數據。
由於結構不使用引用,因此結構沒有標識 -- 具有相同數據的兩個值類型實例是無法區分的。
C# 中的所有值類型本質上都繼承自 ValueType,後者繼承自 Object。
編譯器可以在一個稱爲裝箱的過程中將值類型轉換爲引用類型。

結構具有以下特點:
結構是值類型,而類是引用類型。
向方法傳遞結構時,結構是通過傳值方式傳遞的,而不是作爲引用傳遞的。
與類不同,結構的實例化可以不使用 new 運算符。
結構可以聲明構造函數,但它們必須帶參數。
一個結構不能從另一個結構或類繼承,而且不能作爲一個類的基。
所有結構都直接繼承自 System.ValueType,後者繼承自 System.Object。
結構可以實現接口。
在結構中初始化實例字段是錯誤的。

類與結構的差別
1. 值類型與引用類型
結構是值類型:值類型在堆棧上分配地址,所有的基類型都是結構類型
例如:int 對應System.int32 結構,string 對應 system.string 結構 ,通過使用結構可以創建更多的值類型
類是引用類型:引用類型在堆上分配地址 堆棧的執行效率要比堆的執行效率高
可是堆棧的資源有限,不適合處理大的邏輯複雜的對象。
所以結構處理作爲基類型對待的小對象,而類處理某個商業邏輯
因爲結構是值類型所以結構之間的賦值可以創建新的結構,而類是引用類型,類之間的賦值只是複製引用 注:
1.雖然結構與類的類型不一樣,可是他們的基類型都是對象(object),c#中所有類型的基類型都是object
2.雖然結構的初始化也使用了New 操作符可是結構對象依然分配在堆棧上而不是堆上
 如果不使用“新建”(new),那麼在初始化所有字段之前,字段將保持未賦值狀態,且對象不可用
2.繼承性
結構:不能從另外一個結構或者類繼承,本身也不能被繼承
 雖然結構沒有明確的用sealed聲明,可是結構是隱式的sealed .
類:完全可擴展的,除非顯示的聲明sealed 否則類可以繼承其他類和接口,自身也能被繼承
注:雖然結構不能被繼承 可是結構能夠繼承接口,方法和類繼承接口一樣
例如:結構實現接口
interface IImage
{
 void Paint();
}
struct Picture : IImage
{
 public void Paint()
 {
  // painting code goes here
 }
 private int x, y, z; // other struct members
}

3.內部結構:
結構:
沒有默認的構造函數,但是可以添加構造函數
沒有析構函數
沒有 abstract 和 sealed(因爲不能繼承)
不能有protected 修飾符
可以不使用new 初始化
在結構中初始化實例字段是錯誤的
類:
有默認的構造函數
有析構函數
可以使用 abstract 和 sealed
有protected 修飾符
必須使用new 初始化

[.NET(C#)]
如何選擇結構還是類 
1. 堆棧的空間有限,對於大量的邏輯的對象,創建類要比創建結構好一些
2. 結構表示如點、矩形和顏色這樣的輕量對象
 例如,如果聲明一個含有 1000 個點對象的數組,則將爲引用每個對象分配附加的內存。
 在此情況下,結構的成本較低。
3. 在表現抽象和多級別的對象層次時,類是最好的選擇
4. 大多數情況下該類型只是一些數據時,結構時最佳的選擇

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

接口(interface)是抽像類的變體。
在接口中,所有方法都是抽像的。
多繼承性可通過實現這樣的接口而獲得。
接口中的所有方法都是抽像的,沒有一個有程序體。
接口只可以定義static final成員變量。
接口的實現與子類相似,除了該實現類不能從接口定義中繼承行爲。

當類實現特殊接口時,它定義(即將程序體給予)所有這種接口的方法。
然後,它可以在實現了該接口的類的任何對像上調用接口的方法。
由於有抽像類,它允許使用接口名作爲引用變量的類型。通常的動態聯編將生效。
引用可以轉換到接口類型或從接口類型轉換,instanceof 運算符可以用來決定某對象的類是否實現了接口。

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

[.NET(C#)]
什麼叫應用程序域?什麼是託管代碼?什麼是強類型系統?
什麼是裝箱和拆箱?什麼是重載?CTS、CLS和CLR分別作何解釋?

應用程序域:
應用程序域爲安全性、可靠性、版本控制以及卸載程序集提供了隔離邊界。
應用程序域通常由運行庫宿主創建,運行庫宿主負責在運行應用程序之前引導公共語言運行庫。
應用程序域提供了一個更安全、用途更廣的處理單元,公共語言運行庫可使用該單元提供應用程序之間的隔離。
應用程序域可以理解爲一種輕量級進程。起到安全的作用。佔用資源小。

託管代碼:
使用基於公共語言運行庫的語言編譯器開發的代碼稱爲託管代碼;託管代碼具有許多優點,
例如:跨語言集成、跨語言異常處理、增強的安全性、版本控制和部署支持、簡化的組件交互模型、調試和分析服務等。

裝箱和拆箱:
從值類型接口轉換到引用類型:裝箱。
從引用類型轉換到值類型:拆箱。
裝箱和拆箱使值類型能夠被視爲對象。
對值類型裝箱將把該值類型打包到 Object 引用類型的一個實例中。
這使得值類型可以存儲於垃圾回收堆中。
拆箱將從對象中提取值類型。

重載:
每個類型成員都有一個唯一的簽名。
方法簽名由方法名稱和一個參數列表(方法的參數的順序和類型)組成。
只要簽名不同,就可以在一種類型內定義具有相同名稱的多種方法。
當定義兩種或多種具有相同名稱的方法時,就稱作重載。

CTS通用類型系統 (common type system) :
一種確定公共語言運行庫如何定義、使用和管理類型的規範。

CLR公共語言運行庫:
.NET Framework 提供了一個稱爲公共語言運行庫的運行時環境.
它運行代碼並提供使開發過程更輕鬆的服務。

CLS公共語言規範:
要和其他對象完全交互,而不管這些對象是以何種語言實現的.
對象必須只向調用方公開那些它們必須與之互用的所有語言的通用功能。
爲此定義了公共語言規範 (CLS),它是許多應用程序所需的一套基本語言功能。

強類型:
C# 是強類型語言;因此每個變量和對象都必須具有聲明類型。

[.NET(C#)]
值類型和引用類型的區別?
基於值類型的變量直接包含值。
將一個值類型變量賦給另一個值類型變量時,將複製包含的值。
這與引用類型變量的賦值不同,引用類型變量的賦值只複製對對象的引用,而不復制對象本身。

所有的值類型均隱式派生自 System.ValueType。
與引用類型不同,從值類型不可能派生出新的類型。但與引用類型相同的是,結構也可以實現接口。
與引用類型不同,值類型不可能包含 null 值。然而,可空類型功能允許將 null 賦給值類型。
每種值類型均有一個隱式的默認構造函數來初始化該類型的默認值。
值類型主要由兩類組成:結構、枚舉
結構分爲以下幾類:
Numeric(數值)類型、整型、浮點型、decimal、bool、用戶定義的結構。
引用類型的變量又稱爲對象,可存儲對實際數據的引用。
聲明引用類型的關鍵字:class、interface、delegate、內置引用類型: object、string

                     值類型                    引用類型
 
內存分配地點      分配在棧中                   分配在堆中
效率           效率高,不需要地址轉換          效率低,需要進行地址轉換
內存回收        使用完後,立即回收              使用完後,不是立即回收,等待GC回收
賦值操作         進行復制,創建一個同值新對象    只是對原有對象的引用
函數參數與返回值  是對象的複製                  是原有對象的引用,並不產生新的對象
類型擴展   不易擴展    容易擴展,方便與類型擴展

[.NET(C#)]
如何理解委託
委託類似於 C++ 函數指針,但它是類型安全的。
委託允許將方法作爲參數進行傳遞。
委託可用於定義回調方法。
委託可以鏈接在一起;例如,可以對一個事件調用多個方法。
方法不需要與委託簽名精確匹配。有關更多信息,請參見協變和逆變。
C# 2.0 版引入了匿名方法的概念,此類方法允許將代碼塊作爲參數傳遞,以代替單獨定義的方法。

[.NET(C#)]
C#中的接口和類有什麼異同。
異:
不能直接實例化接口。
接口不包含方法的實現。
接口、類和結構可從多個接口繼承。
但是C# 只支持單繼承:類只能從一個基類繼承實現。
類定義可在不同的源文件之間進行拆分。

同:
接口、類和結構可從多個接口繼承。
接口類似於抽象基類:繼承接口的任何非抽象類型都必須實現接口的所有成員。
接口可以包含事件、索引器、方法和屬性。
一個類可以實現多個接口。

[.NET(C#)]
ASP.net的身份驗證方式有哪些
Windows 身份驗證提供程序
提供有關如何將 Windows 身份驗證與 Microsoft Internet 信息服務 (IIS) 身份驗證
結合使用來確保 ASP.NET 應用程序安全的信息。

Forms 身份驗證提供程序
提供有關如何使用您自己的代碼創建應用程序特定的登錄窗體並執行身份驗證的信息。
使用 Forms 身份驗證的一種簡便方法是使用 ASP.NET 成員資格和 ASP.NET 登錄控件
它們一起提供了一種只需少量或無需代碼就可以收集、驗證和管理用戶憑據的方法。

Passport 身份驗證提供程序
提供有關由 Microsoft 提供的集中身份驗證服務的信息,該服務爲成員站點提供單一登錄和核心配置

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

[.NET(C#)]
解釋一下UDDI、WSDL的意義及其作用
UDDI:統一描述、發現和集成協議(UDDI, Universal Description, Discovery and Integration)
是一套基於Web的、分佈式的、爲Web服務提供的信息註冊中心的實現標準規範,
同時也包含一組使企業能將自身提供的Web服務註冊以使得別的企業能夠發現的訪問協議的實現標準。
UDDI 提供了一組基於標準的規範用於描述和發現服務,還提供了一組基於因特網的實現。

WSDL:WSDL描述Web服務的公共接口。
這是一個基於XML的關於如何與Web服務通訊和使用的服務描述;
服務 URL 和命名空間
網絡服務的類型
(可能還包括 SOAP 的函數調用,正像我所說過的,WSDL 足夠自如地去描述網絡服務的廣泛內容)
有效函數列表
每個函數的參數
每個參數的類型
每個函數的返回值及其數據類型

[.NET(C#)]
什麼是SOAP,有哪些應用。
答:SOAP(Simple Object Access Protocol )簡單對象訪問協議
是在分散或分佈式的環境中交換信息並執行遠程過程調用的協議,是一個基於XML的協議。
使用SOAP,不用考慮任何特定的傳輸協議(最常用的還是HTTP協議)
可以允許任何類型的對象或代碼,在任何平臺上,以任何一直語言相互通信。
這種相互通信採用的是XML格式的消息。

SOAP也被稱作XMLP,爲兩個程序交換信息提供了一種標準的工作機制。
在各類機構之間通過電子方式相互協作的情況下完全有必要爲此制定相應的標準。

SOAP描述了把消息捆綁爲XML的工作方式。
它還說明了發送消息的發送方、消息的內容和地址以及發送消息的時間。
SOAP是Web Service的基本通信協議。
SOAP規範還定義了怎樣用XML來描述程序數據(Program Data),怎樣執行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) 獨立於編程模型。

[.NET(C#)]
如何部署一個ASP.net頁面
VS 2005和VS 2003都有發佈機制。
2003可以發佈然後再複製部署。
VS2005基本上可以直接部署到對應位置。

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

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

[.NET(C#)]
列舉ASP.NET 頁面之間傳遞值的幾種方式。 並說出他們的優缺點。
答. 1).使用QueryString, 如....?id=1; response. Redirect()....
    2).使用Session變量
    3).使用Server.Transfer

session(viewstate)  簡單,但易丟失
application   全局
cookie    簡單,但可能不支持,可能被僞造
input ttype="hidden"  簡單,可能被僞造
url   參數 簡單,顯示於地址欄,長度有限數據庫 穩定,安全,但性能相對弱

[.NET(C#)]
C#中索引器的實現過程,可以用任何類型進行索引?(比如數字)

[.NET(C#)]
CTS、CLS、CLR分別作何解釋?
CTS:通用語言系統。
CLS:通用語言規範。
CLR:公共語言運行庫。

[.NET(C#)]
.net中讀寫數據庫需要用到那些類?他們的作用?
DataSet: 數據存儲器。
DataCommand: 執行語句命令。
DataAdapter: 數據的集合,用語填充。

[.NET(C#)]
在.net中,配件的意思是:程序集。(中間語言,源數據,資源,裝配清單)

[.NET(C#)]
常用的調用WebService的方法有哪些?
答:1.使用WSDL.exe命令行工具。
    2.使用VS.NET中的Add Web Reference菜單選項

[.NET(C#)]
微軟.NET 構架下remoting和webservice兩項技術的理解以及實際中的應用。
.net Remoting 的工作原理是:服務器端向客戶端發送一個進程編號,一個程序域編號,以確定對象的位置。
WS主要是可利用HTTP,穿透防火牆。而Remoting可以利用TCP/IP,二進制傳送提高效率。
remoting是.net中用來跨越machine,process,appdomain進行方法調用的技術
對於三成結構的程序,就可以使用remoting技術來構建.
它是分佈應用的基礎技術.相當於以前的DCOM
Web Service是一種構建應用程序的普通模型
並能在所有支持internet網通訊的操作系統上實施。
Web Service令基於組件的開發和web的結合達到最佳

[.NET(C#)]
啓動一個線程是用run()還是start()?
答:啓動一個線程是調用start()方法,使線程所代表的虛擬處理機處於可運行狀態。
這意味着它可以由JVM調度並執行。
這並不意味着線程就會立即運行。
run()方法可以產生必須退出的標誌來停止一個線程。

[.NET(C#)]
構造器Constructor是否可被override?
構造器Constructor不能被繼承,因此不能重寫Overriding,但可以被重載Overloading。

[.NET(C#)]
abstract的method不可同時是static,不可同時是native,不可同時是synchronized

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

[.NET(C#)]
進程和線程的區別:
進程是系統進行資源分配和調度的單位;
線程是CPU調度和分派的單位.
一個進程可以有多個線程,這些線程共享這個進程的資源。

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

[.NET(C#)]
成員變量和成員函數前加static的作用:
它們被稱爲常成員變量和常成員函數,又稱爲類成員變量和類成員函數。
分別用來反映類的狀態。
比如類成員變量可以用來統計類實例的數量,類成員函數負責這種統計的動作。

[.NET(C#)]
在c#中using和new這兩個關鍵字有什麼意義:
using  引入名稱空間或者使用非託管資源
new  新建實例或者隱藏父類方法

[.NET(C#)]
XML即可擴展標記語言。
eXtensible Markup Language.標記是指計算機所能理解的信息符號
通過此種標記,計算機之間可以處理包含各種信息的文章等。
如何定義這些標記,即可以選擇國際通用的標記語言
比如HTML,也可以使用象XML這樣由相關人士自由決定的標記語言,這就是語言的可擴展性。
XML是從SGML中簡化修改出來的。它主要用到的有XML、XSL和XPath等。

[.NET(C#)]
什麼是code-Behind技術。
答:ASPX,RESX和CS三個後綴的文件,這個就是代碼分離.
實現了HTML代碼和服務器代碼分離.方便代碼編寫和整理.

[.NET(C#)]
XML 與 HTML 的主要區別
1. XML是區分大小寫字母的,HTML不區分。
2. 在HTML中,如果上下文清楚地顯示出段落或者列表鍵在何處結尾,
 那麼你可以省略</p>或者</li>之類的結束 標記。
 在XML中,絕對不能省略掉結束標記。
3. 在XML中,擁有單個標記而沒有匹配的結束標記的元素必須用一個 / 字符作爲結尾。
 這樣分析器就知道不用 查找結束標記了。
4. 在XML中,屬性值必須分裝在引號中。在HTML中,引號是可用可不用的。
5. 在HTML中,可以擁有不帶值的屬性名。在XML中,所有的屬性都必須帶有相應的值。

[.NET(C#)]
.net的錯誤處理機制是什麼?
答:.net錯誤處理機制採用try->catch->finally結構.
發生錯誤時,層層上拋,直到找到匹配的Catch爲止。

[.NET(C#)]
Static Nested Class 和 Inner Class的不同:
Static Nested Class是被聲明爲靜態(static)的內部類,它可以不依賴於外部類實例被實例化。
而通常的內部類需要在外部類實例化後才能實例化。

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

[.NET(C#)]
UDP連接和TCP連接的異同:
前者只管傳,不管數據到不到,無須建立連接.後者保證傳輸的數據準確,須要連結.

[.NET(C#)]
C#中所有對象共同的基類是:System.Object. 

[.NET(C#)]
System.String 和System.StringBuilder有什麼區別?
System.String是不可變的字符串。String類是final類故不可以繼承。
System.StringBuilder存放了一個可變的字符串,並提供一些對這個字符串修改的方法。

[.NET(C#)]
const和readonly有什麼區別?
const  可以用於局部常量
readonly 實際是類的initonly字段,顯然不能是局部的。

 

 

1. ASP.NET] 請寫一個ASP.NET的Page, 在這個Page中用一個Tree 控件按層次列出Server端所有的的有效驅動器, 及其每一個驅動器下的目錄和文件,這個Page的用戶可以新建 Folder,Upload 和Download文件, 如果你懂AJAX技術,請用AJAX實現。
2. [ASP.NET+SQL Server] 如果你懂SQL Server, 並選擇了第1題,請在那Page上加入一個功能, 就是用戶可以指定一個Folder, 把這個Folder的所有Sub Folder 和File信息放入數據庫中 (Dump) ,並可以從數據庫中把從新加載回來 (Restore).
請優化你的Dump 和Restore算法。
3. [HTML+DOM] 請寫一個HTML的Page, 在上面實現一個可以移動的Window, 請注意這個Window用DIV實現, 而不是showModalDialog. 如果可以請在這個Window中顯示www.capbayer.com 的Content.
4. [HTML+DOM] 請寫一個HTML的Page, 這個Page中有一個table, 請利用DOM和Javascript實行它的列分割線可以用鼠標移動。
5. [JavaScript] 請描述如何在JavaScript的程序中使用面向對象(OO)的思想 , 請寫一些JavaScript的class作爲你的描述的實例。
6. [算法] 如何檢測一個可能很長很長的 單向鏈表中是否有環, 能否找到辦法去掉呢?
7. [算法] 請實現一個模型去估算中國人口的男女比例。
8. [其他] 爲什麼鏡子中的人左右是反的, 而上下不反

 

private void Page_Load(object sender, System.EventArgs e)
{
if( ! this.IsPostBack)
{
String[] Drives;
Drives=System.IO.Directory.GetLogicalDrives();
for(int i=0;i <Drives.Length-1;i++)
{
System.IO.DirectoryInfo dir=new System.IO.DirectoryInfo(Drives[i]);
TreeNode tn=new TreeNode();
tn.Text=Drives[i];
this.TreeView1.Nodes.Add(tn);
this.bind(dir,tn.Nodes);
}
}
}
void bind(System.IO.DirectoryInfo dirs,TreeNodeCollection nodes)
{
TreeNode node=new TreeNode();
node.Text=dirs.Name;
nodes.Add(node);
System.IO.DirectoryInfo[] dir=dirs.GetDirectories();
foreach (System.IO.DirectoryInfo d in dir)
{
this.bind(d, node.Nodes);
}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章