日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

.NET面试经典问答

發(fā)布時間:2025/5/22 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 .NET面试经典问答 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

用.net做B/S結(jié)構(gòu)的系統(tǒng),您是用幾層結(jié)構(gòu)來開發(fā),每一層之間的關(guān)系以及為什么要這樣分層?
答:
從下至上分別為:數(shù)據(jù)訪問層、業(yè)務(wù)邏輯層(又或成為領(lǐng)域?qū)?#xff09;、表示層
數(shù)據(jù)訪問層:有時候也稱為是持久層,其功能主要是負(fù)責(zé)數(shù)據(jù)庫的訪問
業(yè)務(wù)邏輯層:是整個系統(tǒng)的核心,它與這個系統(tǒng)的業(yè)務(wù)(領(lǐng)域)有關(guān)
表示層:是系統(tǒng)的UI部分,負(fù)責(zé)使用者與整個系統(tǒng)的交互。?
優(yōu)點:? 分工明確,條理清晰,易于調(diào)試,而且具有可擴(kuò)展性。
缺點:? 增加成本。

分層式結(jié)構(gòu)究竟其優(yōu)勢何在?
1、開發(fā)人員可以只關(guān)注整個結(jié)構(gòu)中的其中某一層;
2、可以很容易的用新的實現(xiàn)來替換原有層次的實現(xiàn);
3、可以降低層與層之間的依賴;
4、有利于標(biāo)準(zhǔn)化;
5、利于各層邏輯的復(fù)用。
概括來說,分層式設(shè)計可以達(dá)至如下目的:分散關(guān)注、松散耦合、邏輯復(fù)用、標(biāo)準(zhǔn)定義。

分層式結(jié)構(gòu)也不可避免具有一些缺陷:
1、降低了系統(tǒng)的性能。這是不言而喻的。如果不采用分層式結(jié)構(gòu),很多業(yè)務(wù)可以直接造訪數(shù)據(jù)庫,以此獲取相應(yīng)的數(shù)據(jù),如今卻必須通過中間層來完成。
2、有時會導(dǎo)致級聯(lián)的修改。這種修改尤其體現(xiàn)在自上而下的方向。如果在表示層中需要增加一個功能,為保證其設(shè)計符合分層式結(jié)構(gòu),可能需要在相應(yīng)的業(yè)務(wù)邏輯層和數(shù)據(jù)訪問層中都增加相應(yīng)的代碼。

MVC模式

MVC(Model-View-Controller)把交互系統(tǒng)的組成分解成模型、視圖、控制器三種部件

mvc的優(yōu)點:

1.通過把項目分成model view和controller,使得復(fù)雜項目更加容易維護(hù)。

2.沒有使用view state和服務(wù)器表單控件,可以更方便的控制應(yīng)用程序的行為

3.應(yīng)用程序通過controller來控制程序請求,可以提供豐富的url重寫。

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

5.在團(tuán)隊開發(fā)模式下表現(xiàn)更出眾

MVC的不足:

(1)增加了系統(tǒng)結(jié)構(gòu)和實現(xiàn)的復(fù)雜性。對于簡單的界面,嚴(yán)格遵循MVC,使模型、視圖與控制器分離,會增加結(jié)構(gòu)的復(fù)雜性,并可能產(chǎn)生過多的更新操作,降低運行效率。???
(2)視圖與控制器間的過于緊密的連接。視圖與控制器是相互分離,但確實聯(lián)系緊密的部件,視圖沒有控制器的存在,其應(yīng)用是很有限的,反之亦然,這樣就妨礙了他們的獨立重用。???
(3)視圖對模型數(shù)據(jù)的低效率訪問。依據(jù)模型操作接口的不同,視圖可能需要多次調(diào)用才能獲得足夠的顯示數(shù)據(jù)。對未變化數(shù)據(jù)的不必要的頻繁訪問,也將損害操作性能。

asp.net如何實現(xiàn)MVC模式,舉例說明!

web/business/dataaccess



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

請說明在.net中常用的幾種頁面間傳遞參數(shù)的方法,并說出他們的優(yōu)缺點。
QueryString? 傳遞一個或多個安全性要求不高或是結(jié)構(gòu)簡單的數(shù)值。但是對于傳遞數(shù)組或?qū)ο蟮脑?#xff0c;就不能用這個方法了
session(viewstate) 簡單,但易丟失 作用于用戶個人,過量的存儲會導(dǎo)致服務(wù)器內(nèi)存資源的耗盡。?
application 對象的作用范圍是整個全局,也就是說對所有用戶都有效。其常用的方法用Lock和UnLock
cookie 簡單,但可能不支持,可能被偽造 Cookie是存放在客戶端的,而session是存放在服務(wù)器端的。而且Cookie的使用要配合ASP.NET內(nèi)置對象Request來使用
input ttype="hidden" 簡單,可能被偽造
url參數(shù)簡單,顯示于地址欄,長度有限
Server.Transfer? 把流程從當(dāng)前頁面引導(dǎo)到另一個頁面中,新的頁面使用前一個頁面的應(yīng)答流
數(shù)據(jù)庫穩(wěn)定,安全,但性能相對弱

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

ViewState用來保存頁面狀態(tài),就是說提交之后我們還可以看到文本框里面的內(nèi)容就是ViewState保存的功勞。
ViewState只維護(hù)當(dāng)前頁面的狀態(tài),不同頁面之間不能共享,Session可以。
ViewState你可以理解為一個隱藏控件。

ASP.Net頁面生命周期

每個頁面的生命周期為用戶的每一次訪問,也就是說每一次客戶端與服務(wù)器之間的一個往返過程.全局變量的生命周期在此之間.

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??????? 打開數(shù)據(jù)庫連接
Command??????????? 執(zhí)行數(shù)據(jù)庫命令
DataAdapter??????? 連接數(shù)據(jù),執(zhí)行數(shù)據(jù)庫命令,填充DataSet
DataSet??????????? 數(shù)據(jù)在內(nèi)存中的緩存,數(shù)據(jù)結(jié)構(gòu)
DataReader??????? 只讀向前的讀取數(shù)據(jù)庫

DataReader和DataSet的異同
DataReader使用時始終占用SqlConnection,在線操作數(shù)據(jù)庫..任何對SqlConnection的操作都會引發(fā)DataReader的異常..因為DataReader每次只在內(nèi)存中加載一條數(shù)據(jù),所以占用的內(nèi)存是很小的..因為DataReader的特殊性和高性能.所以DataReader是只進(jìn)的..你讀了第一條后就不能再去讀取第一條了..
DataSet則是將數(shù)據(jù)一次性加載在內(nèi)存中.拋棄數(shù)據(jù)庫連接..讀取完畢即放棄數(shù)據(jù)庫連接..因為DataSet將數(shù)據(jù)全部加載在內(nèi)存中.所以比較消耗內(nèi)存...但是確比DataReader要靈活..可以動態(tài)的添加行,列,數(shù)據(jù).對數(shù)據(jù)庫進(jìn)行回傳更新操作...



存儲過程和sql語句的優(yōu)缺點

優(yōu)點:
1.提高性能,減少網(wǎng)絡(luò)傳輸,節(jié)約時間 。

2.減少網(wǎng)絡(luò)流量??? 存儲過程位于服務(wù)器上,調(diào)用的時候只須傳遞存儲過程的名稱以及參數(shù),不用每次訪問都傳遞很長的sql 語句。

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

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

缺點:

1.交互性差 。

2.可移植性差



說出你所了解的數(shù)據(jù)庫訪問組件(例如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





什么是面向?qū)ο?
萬物都是對象,其主要特征:封裝、繼承、多態(tài)


怎樣實現(xiàn)多態(tài)?

1.通過對象直接調(diào)用成員函數(shù)時,始終默認(rèn)使用該對象的類的成員函數(shù)(除非用::顯示指定類名)。

2.通過指向?qū)ο蟮闹羔樆蛞谜{(diào)用成員函數(shù)時:如果該函數(shù)是實函數(shù),則調(diào)用該指針或引用的類的成員函數(shù);如果該函

數(shù)是虛函數(shù),則調(diào)用該指針或引用指向的對象的類的成員函數(shù)。


面向?qū)ο?/span>的思想主要包括什么?
答:任何事物都可以理解為對象,其主要特征: 繼承。封裝。多態(tài)。特點:代碼好維護(hù),安全,隱藏信息


什么是裝箱和拆箱?
答:從值類型接口轉(zhuǎn)換到引用類型裝箱。從引用類型轉(zhuǎn)換到值類型拆箱。裝箱(boxing)是將值類型的數(shù)據(jù)轉(zhuǎn)化成引用類型,int i=3; object o = i ;便是裝箱過程,而拆箱(unboxing)是將飲用類型數(shù)據(jù)轉(zhuǎn)換值類型,比如int j = (int)o;屬于拆箱

?

什么是Interface?它與Abstract Class有什么區(qū)別?

接口(Interface)是用來定義行為規(guī)范的,不會有具體實現(xiàn),而抽象類除定義行為規(guī)范外,可以有部分實現(xiàn),但一

個類能實現(xiàn)多個接口,但只能繼承一個父類??


什么時候使用抽象類,什么時候用接口

接口用于規(guī)范,抽象類用于共性。接口中只能聲明方法,屬性,事件,索引器。而抽象類中可以有方法的實

現(xiàn),也可以定義非靜態(tài)的類變量。抽象類是類,所以只能被單繼承,但是接口卻可以一次實現(xiàn)多個。抽象類可以

提供某些方法的部分實現(xiàn),接口不可以.抽象類的實例是它的子類給出的。接口的實例是實現(xiàn)接口的類給出的。

再抽象類中加入一個方法,那么它的子類就同時有了這個方法。而在接口中加入新的方法,那么實現(xiàn)它的類就要

重新編寫(這就是為什么說接口是一個類的規(guī)范了)。接口成員被定義為公共的,但抽象類的成員也可以是私有

的、受保護(hù)的、內(nèi)部的或受保護(hù)的內(nèi)部成員(其中受保護(hù)的內(nèi)部成員只能在應(yīng)用程序的代碼或派生類中訪問)。

此外接口不能包含字段、構(gòu)造函數(shù)、析構(gòu)函數(shù)、靜態(tài)成員或常量。



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

象類的抽象方法后才能被實例化。

何時必須聲明一個類為抽象類?
當(dāng)這個類中包含抽象方法時,或是該類并沒有完全實現(xiàn)父類的抽象方法時。

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

為什么不能指定接口中方法的修飾符?
接口中的方法用來定義對象之間通信的契約,指定接口中的方法為私有或保護(hù)沒有意義。他們默認(rèn)為公有方法。

可以繼承多個接口么?
當(dāng)然。

那么如果這些接口中有重復(fù)的方法名稱呢?
這種情況中你可以決定如何實現(xiàn)。當(dāng)然需要特別得小心。但是在編譯環(huán)節(jié)是沒有問題的。

接口和抽象類的區(qū)別是什么?
接口中所有方法必須是抽象的,并且不能指定方法的訪問修飾符。抽象類中可以有方法的實現(xiàn),也可以指

定方法的訪問修飾符。






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

類是引用類型,可以繼承類、接口和被繼承,有默認(rèn)的構(gòu)造函數(shù),有析構(gòu)函數(shù),可以使用abstract和sealed,有protected修飾符,必須使用new初始化。
結(jié)構(gòu)是值類型,只能繼承接口,不能被繼承,沒有默認(rèn)的構(gòu)造函數(shù),可以創(chuàng)建,沒有析構(gòu)函數(shù),不可以用abstract和sealed,沒有protected修飾符,可以不用new初始化。


如何選擇結(jié)構(gòu)還是類
1. 堆棧的空間有限,對于大量的邏輯的對象,創(chuàng)建類要比創(chuàng)建結(jié)構(gòu)好一些
2. 結(jié)構(gòu)表示如點、矩形和顏色這樣的輕量對象
例如,如果聲明一個含有 1000 個點對象的數(shù)組,則將為引用每個對象分配附加的內(nèi)存。
在此情況下,結(jié)構(gòu)的成本較低。
3. 在表現(xiàn)抽象和多級別的對象層次時,類是最好的選擇
4. 大多數(shù)情況下該類型只是一些數(shù)據(jù)時,結(jié)構(gòu)時最佳的選擇


C#中的接口和類有什么異同。?
異:
不能直接實例化接口。
接口不包含方法的實現(xiàn)。
接口、類和結(jié)構(gòu)可從多個接口繼承。但是C# 只支持單繼承:類只能從一個基類繼承實現(xiàn)。
類定義可在不同的源文件之間進(jìn)行拆分。
同:
接口、類和結(jié)構(gòu)可從多個接口繼承。
接口類似于抽象基類:繼承接口的任何非抽象類型都必須實現(xiàn)接口的所有成員。
接口可以包含事件、索引器、方法和屬性。
一個類可以實現(xiàn)多個接口。



const和readonly有什么區(qū)別?
const關(guān)鍵字用來聲明編譯時常量,readonly用來聲明運行時常量。

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

遠(yuǎn)不會有任何派生類,所以對密封類的實例的虛擬函數(shù)成員的調(diào)用可以轉(zhuǎn)換為非虛擬調(diào)用來處理。


虛函數(shù)的用法
答:
1)virtual指明一成員函數(shù)為虛函數(shù),而virtual僅用于類的定義里,在類外可不加此關(guān)鍵字.
2)一個類的成員函數(shù)被定義為虛函數(shù)時,子類該函數(shù)仍保持虛函數(shù)特征.
3)子類覆蓋此函數(shù)時,定義里可不加virtual關(guān)鍵字,但函數(shù)聲明要和基類的完全一致!且此聲明是必須的.
4)不是純虛函數(shù)時,父類的虛函數(shù)必須要實現(xiàn); 而若將父類的虛函數(shù)設(shè)定為純虛函數(shù)時,子類必需要覆蓋之而且必須要實現(xiàn)之!


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


重載和覆寫有什么區(qū)別?
答:重載是方法的名稱相同,不同的參數(shù)類型,不同的參數(shù)個數(shù),不同的參數(shù)順序。覆寫提供了子類中改變父類方法行為的實現(xiàn)(是進(jìn)行基類中函數(shù)的重寫)。


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


能夠?qū)⒎庆o態(tài)的方法覆寫成靜態(tài)方法嗎?
答:不能,覆寫方法的簽名必須與被覆寫方法的簽名保持一致,除了將virtual改為override。


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


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


能夠?qū)崿F(xiàn)允許某個類別繼承,但不允許其中的某個方法被覆寫嗎?
答:可以,標(biāo)記這個類為public,并標(biāo)記這個方法為sealed。


如何區(qū)別重載方法?
不同的參數(shù)類型,不同的參數(shù)個數(shù),不同的參數(shù)順序




c#繼承:

base 表示當(dāng)前對象基類的實例(使用base關(guān)鍵字可以調(diào)用基類的成員)this表示當(dāng)前類的實例在靜態(tài)方法中不可以使用base和this關(guān)鍵字派生類會繼承基類所有的成員但是構(gòu)造函數(shù)和析構(gòu)函數(shù)不會被繼承注意如果派生類的方法和基類的方法同名則基類中的方法將會被隱藏如果需要隱藏則可以使用關(guān)鍵字new來隱藏如果不寫new關(guān)鍵字默認(rèn)處理為隱藏雖然基類中同名的方法被隱藏了但是還是可以通過base關(guān)鍵字來調(diào)用//如果子類方法的方法名和基類的方法名相同時,系統(tǒng)將隱藏基類同名方法,自動調(diào)用子類的同名方法//派生類會繼承基類所有的成員,但是不能顯示調(diào)用基類的是有成員//在派生類中不可以調(diào)用基類的是有成員,如num1,num2,但是可以實現(xiàn)調(diào)用基類方法virtual 用在基類中指定一個虛方法屬性表示這個方法屬性可以重寫override 用在派生類中表示對基類虛方法屬性的重寫不能重寫非虛方法或靜態(tài)方法重寫的基方法必須是 virtualabstract 或 override 的為什么 override 也可以重寫呢因為基類中的 override 實際上是對基類的基類進(jìn)行的重寫由于繼承可傳遞所以也可以對基類中 override 的方法進(jìn)行重寫override 聲明不能更改 virtual 方法的可訪問性override 方法和 virtual 方法必須具有相同的訪問級別修飾符不能使用修飾符 newstaticvirtual 或 abstract 來修改 override 方法重寫屬性聲明必須指定與繼承屬性完全相同的訪問修飾符類型和名稱并且被重寫的屬性必須是 virtualabstract 或 override 的標(biāo)記允許被重寫修飾靜態(tài)方法中不允許使用virtual關(guān)鍵字成員變量允許使用virtual關(guān)鍵字屬性可以被聲明為虛屬性(使用virtual關(guān)鍵字)重寫基類的方法(重寫同名的方法中有virtual關(guān)鍵字的方法)重寫和隱藏的區(qū)別隱藏(new關(guān)鍵字)是給子類的同名方法分配新的內(nèi)存空間重寫(override關(guān)鍵字)是子類的同名方法放在基類同名方法的原來所在位置基類的同名方法位置向后移屬性也可以重寫virtual關(guān)鍵字和override關(guān)鍵字是成對出現(xiàn)的否則是語法錯誤派生類可以通過將重寫聲明為 sealed 來停止虛擬繼承這需要在類成員聲明中的 override 關(guān)鍵字前面放置 sealed 關(guān)鍵字在子類中重寫基類中的虛方法時可以使用base關(guān)鍵字調(diào)用基類中的虛方法//使用base關(guān)鍵可以在子類中訪問基類同名的方法//父類的引用指向子類的實例Test ts = new Test2();父類的引用指向子類的實例(調(diào)用的是子類的方法)父類的引用只認(rèn)識父類的方法不認(rèn)識子類的新方法可以用來調(diào)用被子類覆蓋的父類的方法父類的引用依然到父類方法位置去調(diào)用如果基類方法被聲明為virtual并且在子類中被override結(jié)果訪問到的是被子類override的方法



C#中的委托是什么?事件是不是一種委托??????
委托可以把一個方法作為參數(shù)代入另一個方法。委托可以理解為指向一個函數(shù)的引用。是,是一種特殊的委托??


C#中的堆和棧

棧(Stack)由系統(tǒng)管理生存期,存儲代碼執(zhí)行和調(diào)用路徑,執(zhí)行或調(diào)用完畢即從棧中清除;
堆(Heap)中保存值和對象,調(diào)用完畢之后依然存在,由垃圾回收器查找棧中有無指向該值或?qū)ο蟮囊?#xff0c;無則從堆中刪除



C# ref與out區(qū)別:

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

2、使用ref和out時,在方法的參數(shù)和執(zhí)行方法時,都要加Ref或Out關(guān)鍵字。以滿足匹配。

3、out適合用在需要retrun多個返回值的地方,而ref則用在需要被調(diào)用的方法修改調(diào)用者的引用的時候。









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

泛型:通過參數(shù)化類型來實現(xiàn)在同一份代碼上操作多種數(shù)據(jù)類型。利用“參數(shù)化類型”將類型抽象化,從而實現(xiàn)靈活的復(fù)用
好處是——類型安全和減少裝箱、拆箱。提高性能、類型安全和質(zhì)量,減少重復(fù)性的編程任務(wù)


C#中所有對象共同的基類是什么?
System.Object.


如何在C#中實現(xiàn)繼承?
在類名后加上一個冒號,再加上基類的名稱。


C#支持多重繼承嗎?
不支持。可以用接口來實現(xiàn)。


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


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


C#提供一個默認(rèn)的無參構(gòu)造函數(shù),當(dāng)我實現(xiàn)了另外一個有一個參數(shù)的構(gòu)造函數(shù)時,還想保留這個無參數(shù)的構(gòu)

造函數(shù)。這樣我應(yīng)該寫幾個構(gòu)造函數(shù)?
答:兩個,一旦你實現(xiàn)了一個構(gòu)造函數(shù),C#就不會再提供默認(rèn)的構(gòu)造函數(shù)了,所以需要手動實現(xiàn)那個無參構(gòu)造

函數(shù)。


?
?

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


new的兩種用法
答:實例話對象,隱藏基類方法。

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

第二種:覆蓋方法

public new XXXX(){}

第三種:new 約束指定泛型類聲明中的任何類型參數(shù)都必須有公共的無參數(shù)構(gòu)造函數(shù)。


3.datagrid.datasouse可以連接什么數(shù)據(jù)源 [dataset,datatable,dataview]

dataset,datatable,dataview , IList


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

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





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



傳入某個屬性的SET方法的隱含參數(shù)的名稱是什么?
答:value,它的類型和屬性所聲明的類型相同。


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

引用類型


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

stringBuilder比string更節(jié)約內(nèi)存,所以stringBuilder更快

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

在內(nèi)存中創(chuàng)建一個新的字符串對象,這就需要為該新對象分配新的空間。而 StringBuilder 則不會。在需要對字

符串執(zhí)行重復(fù)修改的情況下,與創(chuàng)建新的 String 對象相關(guān)的系統(tǒng)開銷可能會非常昂貴。如果要修改字符串而不

創(chuàng)建新的對象,則可以使用 System.Text.StringBuilder 類。例如,當(dāng)在一個循環(huán)中將許多字符串連接在一起時

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





在C#中,string str = null 與 string str = “” 請盡量使用文字或圖象說明其中的區(qū)別。
答:string str = null 是不給他分配內(nèi)存空間,而string str = "" 給它分配長度為空字符串的內(nèi)存空間。



ASP.net的身份驗證方式有哪些?分別是什么原理?
答:Windwos(默認(rèn))????? 用IIS...From(窗體)????? 用帳戶....Passport(密鑰)

Session有什么重大BUG,微軟提出了什么方法加以解決?
答:是iis中由于有進(jìn)程回收機(jī)制,系統(tǒng)繁忙的話Session會丟失,可以用Sate server或SQL Server數(shù)據(jù)庫的方式存儲Session不過這種方式比較慢,而且無法捕獲Session的END事件


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


.能用foreach遍歷訪問的對象需要實現(xiàn)() 接口或聲明 ( GetEnumerator)方法的類型。


.<%# %> 和 <% %> 有什么區(qū)別?

<%# %>表示綁定的數(shù)據(jù)源 <% %>是服務(wù)器端代碼塊 常量


在.net(C# or vb.net)中如何獲得當(dāng)前窗體或控件的句柄,特別是控件本身的句柄(請列舉)

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


.C#可否對內(nèi)存進(jìn)行直接的操作?

在.net下,.net引用了垃圾回收(GC)功能,它替代了程序員 不過在C#中,不能直接實現(xiàn)Finalize方法,而是在析構(gòu)函數(shù)中調(diào)用基類的Finalize()方法


DateTime是否可以為null? 不能,因為其為Struct類型,而結(jié)構(gòu)屬于值類型,值類型不能為null,只有引用類型才能被賦值null


DateTime.Parse(myString); 這行代碼有什么問題?

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



net的錯誤處理機(jī)制是:

采用try->catch->finally結(jié)構(gòu),


為什么不提倡catch(Exception)
try..catch在出現(xiàn)異常的時候影響性能; 應(yīng)該捕獲更具體得異常,比如IOExeception,OutOfMemoryException等


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

將發(fā)生的異常對象拋出,另一個只是拋出異常,并沒有拋出原異常對象)


error和exception區(qū)別:

error 表示恢復(fù)不是不可能但很困難的情況下的一種嚴(yán)重問題。比如說內(nèi)存溢出。不可能指望程序能處理這樣的情況。

exception 表示一種設(shè)計或?qū)崿F(xiàn)問題。也就是說,它表示如果程序運行正常,從不會發(fā)生的情況。



GET與POST的區(qū)別
在FORM提交的時候,如果不指定Method,則默認(rèn)為GET請求,Form中提交的數(shù)據(jù)將會附加在url之后,以?分開與url分開。字母數(shù)字字符原樣發(fā)送,但空格轉(zhuǎn)換為“+“號,其它符號轉(zhuǎn)換為%XX,其中XX為該符號以16進(jìn)制表示的ASCII(或ISO Latin-1)值。GET請求請?zhí)峤坏臄?shù)據(jù)放置在HTTP請求協(xié)議頭中,而POST提交的數(shù)據(jù)則放在實體數(shù)據(jù)中;

在使用 POST 方法的情況下,傳輸數(shù)據(jù)時不會將數(shù)據(jù)作為 URL 的一部分;它們會作為一個獨立的實體來傳輸。因此,POST 方法更安全,你也可以用這個方法傳輸更多的數(shù)據(jù)。而且用 POST 傳輸?shù)臄?shù)據(jù)不一定要是文本,用 GET 方法傳輸?shù)膮s一定要是文本。

(1)get是從服務(wù)器上獲取數(shù)據(jù),post是向服務(wù)器傳送數(shù)據(jù)。

(1)在客戶端,Get方式在通過URL提交數(shù)據(jù),數(shù)據(jù)在URL中可以看到;POST方式,數(shù)據(jù)放置在HTML HEADER內(nèi)提交。

(2)對于get方式,服務(wù)器端用Request.QueryString獲取變量的值,對于post方式,服務(wù)器端用Request.Form獲取提交的數(shù)據(jù)。

(2)GET方式提交的數(shù)據(jù)最多只能有1024字節(jié),而POST則沒有此限制。

(3)安全性問題。正如在(1)中提到,使用 Get 的時候,參數(shù)會顯示在地址欄上,而 Post 不會。所以,如果這些數(shù)據(jù)是中文數(shù)據(jù)而且是非敏感數(shù)據(jù),那么使用 get;如果用戶輸入的數(shù)據(jù)不是中文字符而且包含敏感數(shù)據(jù),那么還是使用 post為好。


Bind和Eval函數(shù)的區(qū)別

????? 綁定表達(dá)式
??????? <%# Eval("字段名") %>
?????? <%# Bind("字段名") %>
1? Eval 單向綁定:數(shù)據(jù)是只讀的
??? Bind 雙向綁定:數(shù)據(jù)可以更改,并返回服務(wù)器端,服務(wù)器可以處理更改后的數(shù)據(jù),如存入數(shù)據(jù)庫.
2.當(dāng)對次表達(dá)式操作時候,必須用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文件請求--->服務(wù)器執(zhí)行--->遇到Response.Redirect語句->服務(wù)器發(fā)送Response.Redirect后面的地址給客戶機(jī)端的瀏覽器--->瀏覽器請求執(zhí)行新的地址
2)瀏覽器aspx文件請求->服務(wù)器執(zhí)行->遇到Server.Transfer語句->服務(wù)器轉(zhuǎn)向新的文件
可以見Server.Transfer比Response.Redirect少了一次服務(wù)器發(fā)送回來和客戶端再請求的過程.
跳轉(zhuǎn)對象:
1)Response.Redirect可以切換到任何存在的網(wǎng)頁。
2)Server.Transfer只能切換到同目錄或者子目錄的網(wǎng)頁.
數(shù)據(jù)保密:
1、Response.Redirect后地址會變成跳轉(zhuǎn)后的頁面地址。
2、Server.Transfer后地址不變,隱藏了新網(wǎng)頁的地址及附帶在地址后邊的參數(shù)值。具有數(shù)據(jù)保密功能。
傳遞的數(shù)據(jù)量(網(wǎng)址后附帶的參數(shù)):
1、Response.Redirect能夠傳遞的數(shù)據(jù)以2KB(也就是地址欄中地址的最大的長度)為限。
2、傳遞的數(shù)據(jù)超過2KB時,務(wù)必使用Server.Transfer。



Server.UrlEncode、HttpUtility.UrlDecode的區(qū)別
Server.UrlEncode的編碼方式是按照本地程序設(shè)置的編碼方式進(jìn)行編碼的,而HttpUtility.UrlEncode是默認(rèn)的按照.net的utf-8格式進(jìn)行編碼的。



Static 和 非Static的區(qū)別:
一、用Static聲明的方法和變量,不需要實例化該類就調(diào)用;

二、Static的,就一定要用實例化的對象來調(diào)用,即用new來實例化。

舉例說:

如果有一個類People,有一個Static的方法MiaoShu(), 調(diào)用方法就是 People.MisoShu()

有一個非Static的方法getName(), 調(diào)用方法就是 People p= new People(); p.getName();



如何實現(xiàn)連接池

確保你每一次的連接使用相同的連接字符串(和連接池相同);只有連接字符串相同時連接池才會工作。如果連接字符串不相同,應(yīng)用程序就不會使用連接池而是創(chuàng)建一個新的連接。

優(yōu)點

使用連接池的最主要的優(yōu)點是性能。創(chuàng)建一個新的數(shù)據(jù)庫連接所耗費的時間主要取決于網(wǎng)絡(luò)的速度以及應(yīng)用程序和數(shù)據(jù)庫服務(wù)器的(網(wǎng)絡(luò))距離,而且這個過程通常是一個很耗時的過程。而采用數(shù)據(jù)庫連接池后,數(shù)據(jù)庫連接請求可以直接通過連接池滿足而不需要為該請求重新連接、認(rèn)證到數(shù)據(jù)庫服務(wù)器,這樣就節(jié)省了時間。

缺點

數(shù)據(jù)庫連接池中可能存在著多個沒有被使用的連接一直連接著數(shù)據(jù)庫(這意味著資源的浪費)。

技巧和提示

1. 當(dāng)你需要數(shù)據(jù)庫連接時才去創(chuàng)建連接池,而不是提前建立。一旦你使用完連接立即關(guān)閉它,不要等到垃圾收集器來處理它。

2. 在關(guān)閉數(shù)據(jù)庫連接前確保關(guān)閉了所有用戶定義的事務(wù)。

3. 不要關(guān)閉數(shù)據(jù)庫中所有的連接,至少保證連接池中有一個連接可用。如果內(nèi)存和其他資源是你必須首先考慮的問題,可以關(guān)閉所有的連接,然后在下一個請求到來時創(chuàng)建連接池。

連接池FAQ

1. 何時創(chuàng)建連接池?

當(dāng)?shù)谝粋€連接請求到來時創(chuàng)建連接池;連接池的建立由數(shù)據(jù)庫連接的連接字符創(chuàng)來決定。每一個連接池都與一個不同的連接字符串相關(guān)。當(dāng)一個新的連接請求到來時如果連接字符串和連接池使用的字符串相同,就從連接池取出一個連接;如果不相同,就新建一個連接池。

2. 何時關(guān)閉連接池?

當(dāng)連接池中的所有連接都已經(jīng)關(guān)閉時關(guān)閉連接池。

3. 當(dāng)連接池中的連接都已經(jīng)用完,而有新的連接請求到來時會發(fā)生什么?

當(dāng)連接池已經(jīng)達(dá)到它的最大連接數(shù)目時,有新的連接請求到來時,新的連接請求將放置到連接隊列中。當(dāng)有連接釋放給連接池時,連接池將新釋放的連接分配給在隊列中排隊的連接請求。你可以調(diào)用close和dispose將連接歸還給連接池。

4. 我應(yīng)該如何允許連接池?

對于.NET應(yīng)用程序而言,默認(rèn)為允許連接池。(這意味著你可以不必為這件事情做任何的事情)當(dāng)然,如果你可以在SQLConnection對象的連接字符串中加進(jìn)Pooling=true;確保你的應(yīng)用程序允許連接池的使用。

5. 我應(yīng)該如何禁止連接池?

ADO.NET默認(rèn)為允許數(shù)據(jù)庫連接池,如果你希望禁止連接池,可以使用如下的方式:

1) 使用SQLConnection對象時,往連接字符串加入如下內(nèi)容:Pooling=False;

2) 使用OLEDBConnection對象時,往連接字符串加入如下內(nèi)容:OLE DB Services=-4;



提高.NET的性能
1 使用異步方式調(diào)用Web服務(wù)和遠(yuǎn)程對象

只要有可能就要避免在請求的處理過程中對Web服務(wù)和遠(yuǎn)程對象的同步調(diào)用,因為它占用的是的ASP.NET 線程池中的工作線程,這將直接影響Web服務(wù)器響應(yīng)其它請求的能力。

2 使用適當(dāng)?shù)腃aching策略來提高性能

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

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

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

4 頁面優(yōu)化

5 用完馬上關(guān)閉數(shù)據(jù)庫連接
6 盡量使用存儲過程,并優(yōu)化查詢語句
7 只讀數(shù)據(jù)訪問用SqlDataReader,不要使用DataSet

……….



.UDP連接和TCP連接的異同
答:前者只管傳,不管數(shù)據(jù)到不到,無須建立連接.后者保證傳輸?shù)臄?shù)據(jù)準(zhǔn)確,須要連結(jié).


請解釋轉(zhuǎn)發(fā)與跳轉(zhuǎn)的區(qū)別
轉(zhuǎn)發(fā)就是服務(wù)端的跳轉(zhuǎn)A頁面提交數(shù)據(jù)到B頁面,B頁面進(jìn)行處理然后從服務(wù)端跳轉(zhuǎn)到其它頁面
跳轉(zhuǎn)就是指客戶端的跳轉(zhuǎn)

簡述你對XML Web Service的原理的認(rèn)識?
答:利用SOAP(簡單對象訪問協(xié)議)在http上執(zhí)行遠(yuǎn)程方法的調(diào)用,也可以使用WSDL(Web服務(wù)描述語言)來

完成完整的描述Web服務(wù),然后用UDDI注冊各個服務(wù)提供商提供的服務(wù),以便共享他們。

什么叫應(yīng)用程序域?
答:應(yīng)用程序域可以理解為一種輕量級進(jìn)程。起到安全的作用。占用資源小。

CTS、CLS、CLR分別作何解釋?
答:CTS:通用語言系統(tǒng)。CLS:通用語言規(guī)范。CLR:公共語言運行庫。

什么是受管制的代碼?
答:unsafe:非托管代碼。不經(jīng)過CLR運行。

什么是強(qiáng)類型系統(tǒng)?
答:RTTI:類型識別系統(tǒng)。

什么是code-behind技術(shù)
codebehind是指代碼和用戶界面分開
aspx and cs
在.net中,配件的意思是?
答:程序集。(中間語言,源數(shù)據(jù),資源,裝配清單)

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

net Remoting 的工作原理是什么?
答:服務(wù)器端向客戶端發(fā)送一個進(jìn)程編號,一個程序域編號,以確定對象的位置。

O/R Mapping 的原理
答:利用反射,配置將對象和數(shù)據(jù)庫表映射
remoting和webservice兩項技術(shù)的理解以及實際中的應(yīng)用。
答:WS主要是可利用HTTP,穿透防火墻。而Remoting可以利用TCP/IP,二進(jìn)制傳送提高效率。

out保留字怎么使用,什么時候使用
答:有時為了從一個函數(shù)中返回多個值,我們需要使用out關(guān)鍵字,把輸出值賦給通過引用傳遞給方法的變量(也就是參數(shù))。但C#要求變量再被引用的前必須初始化。在調(diào)用該方法時,還需要添加out關(guān)鍵字

PDB是什么東西? 在調(diào)試中它應(yīng)該放在哪里?

PDB是用于保存調(diào)試和項目狀態(tài)信息的文件,在debug的時候?qū)a(chǎn)生pdb文件,調(diào)試的時候應(yīng)該放在和對應(yīng)應(yīng)用

程序集相同目錄。



使用ASMX的XML Web服務(wù)與使用SOAP的.NET Remoting的區(qū)別?

Web服務(wù)使用的消息機(jī)制,而Remoting采用的RPC. Web Service能用于不同平臺,不同語言,Remoting只適用

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

類型系統(tǒng)是由XMLSchema表示的嗎?CLS是XMLSchema表示的嗎?

不清楚

從概念上闡述前期綁定(early-binding)和后期綁定(late-binding)的區(qū)別?

這個就像是強(qiáng)弱類型的比較相似,前期綁定是在編譯的時候就確定了要綁定的數(shù)據(jù),而后期綁定是在運行的時候

才填充數(shù)據(jù)。所以前期綁定如果失敗,會在編譯時報編譯錯誤,而后期綁定失敗只有在運行時的時候才發(fā)生

調(diào)用Assembly.Load算靜態(tài)引用還是動態(tài)引用?

動態(tài)

列舉一下你所了解的XML技術(shù)及其應(yīng)用
答:保存配置,站與站之間的交流,WEB SERVICE。以及與數(shù)據(jù)庫的數(shù)據(jù)交互等地方都要用它.
7.如何理解委托?
答:
相當(dāng)于函數(shù)指針,定義了委托就可以在不調(diào)用原方法名稱的情況下調(diào)用那個方法.
委托具有以下特點:
委托類似于 C++ 函數(shù)指針,但它是類型安全的。
委托允許將方法作為參數(shù)進(jìn)行傳遞。
委托可用于定義回調(diào)方法。
委托可以鏈接在一起;例如,可以對一個事件調(diào)用多個方法。
方法不需要與委托簽名精確匹配。有關(guān)更多信息,請參見協(xié)變和逆變。
C# 2.0 版引入了匿名方法的概念,此類方法允許將代碼塊作為參數(shù)傳遞,以代替單獨定義的方法。





概述反射和序列化

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

象。您可以使用反射動態(tài)地創(chuàng)建類型的實例,將類型綁定到現(xiàn)有對象,或從現(xiàn)有對象中獲取類型。然后,

可以調(diào)用類型的方法或訪問其字段和屬性

序列化:序列化是將對象轉(zhuǎn)換為容易傳輸?shù)母袷降倪^程。例如,可以序列化一個對象,然后使用 HTTP 通

過 Internet 在客戶端和服務(wù)器之間傳輸該對象。在另一端,反序列化將從該流重新構(gòu)造對象。

11)? XmlSerializer是如何工作的?使用這個類的進(jìn)程需要什么ACL權(quán)限?

我只知道XmlSerializer是將對象的屬性和字段進(jìn)行序列化和反序列化的,序列化成為xml數(shù)據(jù),反序列化再將xml

轉(zhuǎn)換成對象。應(yīng)該至少需要ACL權(quán)限中的讀權(quán)限.

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

只序列化有用的數(shù)據(jù),而不是序列化整個對象。實現(xiàn)沒必要的數(shù)據(jù)冗余,和提升序列化時的性能。



26.根據(jù)委托(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))
{
//請在以下補(bǔ)齊代碼用來調(diào)用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;
以上代碼執(zhí)行完后,i= j=
答:i=13,j=10

28.SQLSERVER服務(wù)器中,給定表 table1 中有兩個字段 ID、LastUpdateDate,ID表示更新的事務(wù)號,

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

29.根據(jù)線程安全的相關(guān)知識,分析以下代碼,當(dāng)調(diào)用test方法時i>10時是否會引起死鎖?并簡要說明理由。
public void test(int i)
{
?? lock(this)
{
?? if (i>10)
?? {
???? i--;
???? test(i);
?? }
}
}
答:不會發(fā)生死鎖,(但有一點int是按值傳遞的,所以每次改變的都只是一個副本,因此不會出現(xiàn)死鎖。但如果

把int換做一個object,那么死鎖會發(fā)生)

3) 什么叫圈復(fù)雜度(cyclomatic complexity)?為什么它很重要?

不知道,望指教 ?

4) 寫一個標(biāo)準(zhǔn)的lock(),在訪問變量的前后創(chuàng)建臨界區(qū),要有"雙重檢查",

lock的使用
? public void LockTest()
??????? {
??????????? Object lockObj = new Object();
??????????? lock (lockObj)
??????????? {
??????????????? //
??????????? }
??????? }

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

FullTrust完全信任。放入GAC中的Assembly是否FullTrust我的理解不是。我理解FullTrust是可以通過代碼設(shè)定的

6) 代碼加上需要安全權(quán)限的特性有什么好處?

可以更加靈活的設(shè)置對代碼的訪問權(quán)限,實現(xiàn)代碼級保護(hù)。?這點不是特清楚,有明白的給講解下

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

全局程序集緩存中如果有Corillian就更新該程序集,沒有就安裝

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

顯示程序集foo.dll的公鑰標(biāo)記

9) DCOM需要防火墻打開哪些端口?端口135是干嘛用的?

135端口,因為DCOM的端口號是隨機(jī)分配的,默認(rèn)情況下,會分配1024以上的端口號,所以默認(rèn)情況下,DCOM

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

調(diào)用(RPC)的默認(rèn)端口

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

我想OOP和SOA應(yīng)該沒有對比性吧。OOP是一種編程模型,強(qiáng)調(diào)將復(fù)雜的邏輯分解出小的模塊,特性是繼承,封

裝和多態(tài) 。而SOA是一個技術(shù)框架,技術(shù)框架和編程模型應(yīng)該說不是一碼事吧?SOA的思想是將業(yè)務(wù)邏輯封裝

成服務(wù)或者中間件提供給應(yīng)用程序來調(diào)用,當(dāng)然其組件化思想是繼承和發(fā)揚(yáng)了OOP的優(yōu)點。



13)Debug.Write和Trace.Write有什么不同?何時應(yīng)該使用哪一個?

Debug.Write是調(diào)試的時候向跟蹤窗口輸出信息。當(dāng)編譯模式為debug的時候才有效,為release的時

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

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

Debug會產(chǎn)生pdb文件,release不會。Debug用于開發(fā)時的調(diào)試,不能要于部署,而release用于部署.debug編

譯一些特殊代碼,比如#IFDEBUG Debug.Write等,而Release則會將那些特殊標(biāo)記省略

15)JIT是以assembly為單位發(fā)生還是以方法為單位發(fā)生?這對于工作區(qū)有何影響?

方法,道理很簡單,因為對于一次運行,很可能只用到一個程序集中極少數(shù)類型和對象,而大部分可能并不會被

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

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

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

18)在對象比較中,對象一致和對象相等分別是指什么?

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

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

實現(xiàn)IClonable接口

20)請解釋一下IClonable

IClonable方法是實現(xiàn)深度復(fù)制的接口,實現(xiàn)它應(yīng)該能深度復(fù)制一個對象出來。深度復(fù)制的特征的調(diào)用對象的構(gòu)造

方法,創(chuàng)建新的對象,包括創(chuàng)建對象中嵌套的引用對象的新實例。而Shadow復(fù)制則不同,是淺表復(fù)制,不重新

創(chuàng)建新實例。淺表復(fù)制的實現(xiàn)是Object.MemberWiseClone().

深度復(fù)制(Deep Copy)與淺表復(fù)制(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 = "jillzhang@126.com";
??????????? 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)為什么不應(yīng)該在.NET中使用out參數(shù)?它究竟好不好?

我挺喜歡用out參數(shù)的,特別是當(dāng)函數(shù)需要有多于1個返回的時候,我比較愿意用out,至于它好不好沒研究過 ?

25)特性能夠放到某個方法的參數(shù)上?如果可以,這有什么用?

可以,作用可以對參數(shù)有進(jìn)一步限定,比如輸入?yún)?shù)為int類型,可以通過允許AttributeTargets=ParameterInfo

的Attribute自定義實現(xiàn)來限定輸入?yún)?shù)的大小,比如當(dāng)輸入?yún)?shù)小于100的時候便抱錯。

對方法的參數(shù)設(shè)置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.執(zhí)行下面代碼后:

String strTemp ="abcdefg 某某某";

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

Int j = strTemp.Length;

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

i=(14 ) ;j=(11 ) 中文兩個字節(jié)

12.概述.NET里對 remoting 和 webservice 兩項技術(shù)的理解和實際中的應(yīng)用。

遠(yuǎn)程邏輯調(diào)用,remoing接口只能用在.net中



9.? 如何給服務(wù)器端控件增加客戶端腳本。
答:控件的Attributes

6. 私有程序集與共享程序集有什么區(qū)別?
一個私有程序集通常為單個應(yīng)用程序所使用,并且存儲于這個應(yīng)用程序所在的目錄之中,或此目錄下面的一個子

目錄中。共享程序集通常存儲在全局程序集緩存(Global Assembly Cache)之中,這是一個由.NET運行時所維

護(hù)的程序集倉庫。共享程序集通常是對許多應(yīng)用程序都有用的代碼庫,比如.NET Framework類。

10 .請解釋ASP.NET中以什么方式進(jìn)行數(shù)據(jù)驗證
Aps.net 中有非空驗證,比較驗證,取值范圍驗證,正則表達(dá)式驗證及客戶自定義驗證五大控件,另還有一個集

中驗證信息處理控件

11.WEB控件可以激發(fā)服務(wù)端事件,請談?wù)劮?wù)端事件是怎么發(fā)生并解釋其原理?自動傳回是什么?為什么要

使用自動傳回。
在web控件發(fā)生事件時,客戶端采用提交的形式將數(shù)據(jù)交回服務(wù)端,服務(wù)端先調(diào)用Page_Load事件,然后根據(jù)傳

回的狀態(tài)信息自動調(diào)用服務(wù)端事件自動傳回是當(dāng)我們在點擊客戶端控件時,采用提交表單的形式將數(shù)據(jù)直接傳回

到務(wù)端
只有通過自動傳回才能實現(xiàn)服務(wù)端事件的機(jī)制,如果沒有自動回傳機(jī)制就只能調(diào)用客戶端事件,而不能調(diào)用服務(wù)

端事件

13.? 請解釋web.config文件中的重要節(jié)點
appSettings包含自定義應(yīng)用程序設(shè)置。
system.web 系統(tǒng)配置
compilation動態(tài)調(diào)試編譯設(shè)置
customErrors自定義錯誤信息設(shè)置
authentication身份驗證,此節(jié)設(shè)置應(yīng)用程序的身份驗證策略。
authorization授權(quán), 此節(jié)設(shè)置應(yīng)用程序的授權(quán)策略.

14.? 請解釋ASP。NET中的web頁面與其隱藏類之間的關(guān)系?
一個ASP.NET頁面一般都對應(yīng)一個隱藏類,一般都在ASP.NET頁面的聲明中指定了隱藏類例如一個頁面Tst1.aspx

的頁面聲明如下
<%@ Page language="c#" Codebehind="Tst1.aspx.cs" AutoEventWireup="false" Inherits="T1.Tst1" %>
Codebehind="Tst1.aspx.cs" 表明經(jīng)編譯此頁面時使用哪一個代碼文件
Inherits="T1.Tst1" 表用運行時使用哪一個隱藏類

15.? 什么是viewstate,能否禁用?是否所用控件都可以禁用?
Viewstate是保存狀態(tài)的一種機(jī)制,EnableViewState屬性設(shè)置為false即可禁用

16.? 當(dāng)發(fā)現(xiàn)不能讀取頁面上的輸入的數(shù)據(jù)時很有可能是什么原因造成的?怎么解決?
很有可能是在Page_Load中數(shù)據(jù)處理時沒有進(jìn)行Page的IsPostBack屬性判斷

17.? 請解釋什么是上下文對象,在什么情況下要使用上下文對象
上下文對象是指HttpContext類的Current 屬性,當(dāng)我們在一個普通類中要訪問內(nèi)置對

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


16、解釋一下ajax及實現(xiàn)原理
答:Ajax的核心是JavaScript對象XmlHttpRequest,它使您可以使用JavaScript向服務(wù)器提出請求并處理響應(yīng), 而不阻塞用戶,異步請求。



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

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

3、base這個關(guān)鍵字有哪幾種語法?override呢?

答案:base兩個語法,分別是調(diào)用基類構(gòu)造函數(shù)和調(diào)用基類方法,override用于重寫基類方法。

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

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

答案:沒有的關(guān)鍵字:import、final、Const、signed、String

5、在循環(huán):for( int i = 0; i < 100; i++ ) Console.WriteLine( i );中,請指出i++的執(zhí)行時機(jī)。

答案:在Console.WriterLine( i );執(zhí)行之后

6、試說明continue關(guān)鍵字的用處。

答案:馬上開始下一次循環(huán),忽略循環(huán)體余下的語句

7、object是C#的關(guān)鍵字嗎?請指出C#中有哪些類型關(guān)鍵字,如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>標(biāo)簽用于描述什么?<param>標(biāo)簽?zāi)?#xff1f;

答案:<summary>用于某個元素的概要說明,<param>用于某個方法的參數(shù)概要說明。

9、我們知道[]是數(shù)組和索引器的訪問操作符,但它還有一個語法,是什么?

答案:特性(Attribute)

18.請敘述屬性與索引器的區(qū)別。
屬性 索引器????
? 通過名稱標(biāo)識。 通過簽名標(biāo)識。????
? 通過簡單名稱或成員訪問來訪問。 通過元素訪問來訪問。????
? 可以為靜態(tài)成員或?qū)嵗蓡T。 必須為實例成員。????
? 屬性的?? get?? 訪問器沒有參數(shù)。 索引器的?? get?? 訪問器具有與索引器相同的形參表。????
? 屬性的?? set?? 訪問器包含隱式?? value?? 參數(shù)。 除了?? value?? 參數(shù)外,索引器的?? set?? 訪問器還具有與索引

器相同的形參表。

1) 描述線程與進(jìn)程的區(qū)別?

線程(Thread)與進(jìn)程(Process)二者都定義了某種邊界,不同的是進(jìn)程定義的是應(yīng)用程序與應(yīng)用程序之間的邊

界,不同的進(jìn)程之間不能共享代碼和數(shù)據(jù)空間,而線程定義的是代碼執(zhí)行堆棧和執(zhí)行上下文的邊界。一個進(jìn)程可

以包括若干個線程,同時創(chuàng)建多個線程來完成某項任務(wù),便是多線程。而同一進(jìn)程中的不同線程共享代碼和數(shù)據(jù)

空間。用一個比喻來說,如果一個家庭代表一個進(jìn)程,在家庭內(nèi)部,各個成員就是線程,家庭中的每個成員都有

義務(wù)對家庭的財富進(jìn)行積累,同時也有權(quán)利對家庭財富進(jìn)行消費,當(dāng)面對一個任務(wù)的時候,家庭也可以派出幾個

成員來協(xié)同完成,而家庭之外的人則沒有辦法直接消費不屬于自己家庭的財產(chǎn)。

2) 什么是Windows服務(wù),它的生命周期與標(biāo)準(zhǔn)的EXE程序有什么不同

Windows服務(wù)是運行在windows后臺指定用戶下(默認(rèn)System)的應(yīng)用程序,它沒有標(biāo)準(zhǔn)的UI界面,想比標(biāo)準(zhǔn)

的EXE程序,Windows服務(wù)是在服務(wù)開始的時候創(chuàng)建,而在服務(wù)結(jié)束的時候銷毀,而且可以設(shè)置服務(wù)是否與操作

系統(tǒng)一起啟動,一起關(guān)閉。它支持三種方式:1)自動方式 2)手動方式 3)禁用 。自動方式的時

候,windows服務(wù)將在OS啟動后自動啟動運行,而手動方式則必須手工啟動服務(wù),禁用的情況下服務(wù)將不能被

啟動。另外標(biāo)準(zhǔn)的EXE默認(rèn)使用的當(dāng)前登錄的用戶,而windows服務(wù)則默認(rèn)使用System用戶,這在對系統(tǒng)資源訪

問的時候特別需要注意。

3)? Windows單個進(jìn)程所能訪問的最大內(nèi)存量是多少?它與系統(tǒng)的最大虛擬內(nèi)存一樣嗎?這對于系統(tǒng)設(shè)計有什么

影響?

這個需要針對硬件平臺,公式為單個進(jìn)程能訪問的最大內(nèi)存量=2的處理器位數(shù)次方/2,比如通常情況下,32位

處理器下,單個進(jìn)程所能訪問的最大內(nèi)存量為:232 /2 = 2G 。單個進(jìn)程能訪問的最大內(nèi)存量是最大虛擬內(nèi)存

的1/2,因為要分配給操作系統(tǒng)一半虛擬內(nèi)存。

4)? 什么是強(qiáng)類型,什么是弱類型?哪種更好些?為什么?

強(qiáng)類型是在編譯的時候就確定類型的數(shù)據(jù),在執(zhí)行時類型不能更改,而弱類型在執(zhí)行的時候才會確定類型。沒有

好不好,二者各有好處,強(qiáng)類型安全,因為它事先已經(jīng)確定好了,而且效率高。一般用于編譯型編程

言,如c++,java,c#,pascal等,弱類型相比而言不安全,在運行的時候容易出現(xiàn)錯誤,但它靈活,多用于解釋型編

程語言,如javascript,vb等

5)? PID是什么?在做系統(tǒng)的故障排除時如何使用它?

PID是進(jìn)程編號,在系統(tǒng)發(fā)現(xiàn)故障的時候,可以根據(jù)它尋找故障所發(fā)生的具體進(jìn)程,并且可通過visual studio.net

等ide將故障進(jìn)程附加到進(jìn)程中進(jìn)行調(diào)試(debug)

6)? 單個TCP/IP端口上能夠被多少個進(jìn)程偵聽?

1個

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

Gloal Assembly Cache,全局應(yīng)用程序集緩存。它解決了幾個程序共享某一個程序集的問題。不必再將那個被共

享的程序集拷貝到應(yīng)用程序目錄了,其實這道理很簡單,.net應(yīng)用程序在加載的時候,會首先查看全局應(yīng)用程序

集緩存,如果有就可以直接使用,沒有再到應(yīng)用程序目錄進(jìn)行查找。

1.白盒測試和黑盒測試
答:黑盒測試:已知產(chǎn)品的功能設(shè)計規(guī)格,可以進(jìn)行測試證明每個實現(xiàn)了的功能是否符合要求。

白盒測試:已知產(chǎn)品的內(nèi)部工作過程,可以通過測試證明每種內(nèi)部操作是否符合設(shè)計規(guī)格要求,所有內(nèi)部成

分是否以經(jīng)過檢查。

軟件的黑盒測試意味著測試要在軟件的接口處進(jìn)行。這種方法是把測試對象看做一個黑盒子,測試人員完全

不考慮程序內(nèi)部的邏輯結(jié)構(gòu)和內(nèi)部特性,只依據(jù)程序的需求規(guī)格說明書,檢查程序的功能是否符合它的功能說明

。因此黑盒測試又叫功能測試或數(shù)據(jù)驅(qū)動測試。黑盒測試主要是為了發(fā)現(xiàn)以下幾類錯誤:

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

2、在接口上,輸入是否能正確的接受?能否輸出正確的結(jié)果?

3、是否有數(shù)據(jù)結(jié)構(gòu)錯誤或外部信息(例如數(shù)據(jù)文件)訪問錯誤?

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

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

軟件的白盒測試是對軟件的過程性細(xì)節(jié)做細(xì)致的檢查。這種方法是把測試對象看做一個打開的盒子,它允許

測試人員利用程序內(nèi)部的邏輯結(jié)構(gòu)及有關(guān)信息,設(shè)計或選擇測試用例,對程序所有邏輯路徑進(jìn)行測試。通過在不

同點檢查程序狀態(tài),確定實際狀態(tài)是否與預(yù)期的狀態(tài)一致。因此白盒測試又稱為結(jié)構(gòu)測試或邏輯驅(qū)動測試。白盒

測試主要是想對程序模塊進(jìn)行如下檢查:

1、對程序模塊的所有獨立的執(zhí)行路徑至少測試一遍。

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

3、在循環(huán)的邊界和運行的界限內(nèi)執(zhí)行循環(huán)體。

4、測試內(nèi)部數(shù)據(jù)結(jié)構(gòu)的有效性,等等。

請簡述一下用Socket進(jìn)行同步通訊編程的詳細(xì)步驟
1、在應(yīng)用程序和遠(yuǎn)程設(shè)備中使用協(xié)議和網(wǎng)絡(luò)地址初始化套接字
2、在應(yīng)用程序中通過指定端口和地址建立監(jiān)聽
3、遠(yuǎn)程設(shè)備發(fā)出連接請求
4、應(yīng)用程序接受連接產(chǎn)生通信scoket
5、應(yīng)用程序和遠(yuǎn)程設(shè)備開始通訊(在通訊中應(yīng)用程序?qū)炱鹬钡酵ㄓ嵔Y(jié)束)
6、通訊結(jié)束,關(guān)閉應(yīng)用程序和遠(yuǎn)程設(shè)備的Socket回收資源

OSI網(wǎng)絡(luò)結(jié)構(gòu)的七層模型及其核心思想是什么
第七層:應(yīng)用層?
???? 定義了用于在網(wǎng)絡(luò)中進(jìn)行通信和數(shù)據(jù)傳輸?shù)慕涌?- 用戶程式;?
???? 提供標(biāo)準(zhǔn)服務(wù),比如虛擬終端、文件以及任務(wù)的傳輸和處理;
第六層:表示層
??? 掩蓋不同系統(tǒng)間的數(shù)據(jù)格式的不同性;
??? 指定獨立結(jié)構(gòu)的數(shù)據(jù)傳輸格式;
??? 數(shù)據(jù)的編碼和解碼;加密和解密;壓縮和解壓縮
第五層:會話層
??? 管理用戶會話和對話;
??? 控制用戶間邏輯連接的建立和掛斷;
??? 報告上一層發(fā)生的錯誤
第四層:傳輸層
??? 管理網(wǎng)絡(luò)中端到端的信息傳送;
??? 通過錯誤糾正和流控制機(jī)制提供可靠且有序的數(shù)據(jù)包傳送;
??? 提供面向無連接的數(shù)據(jù)包的傳送;
第三層:網(wǎng)絡(luò)層
??? 定義網(wǎng)絡(luò)設(shè)備間如何傳輸數(shù)據(jù);
??? 根據(jù)唯一的網(wǎng)絡(luò)設(shè)備地址路由數(shù)據(jù)包;
??? 提供流和擁塞控制以防止網(wǎng)絡(luò)資源的損耗
第二層:數(shù)據(jù)鏈路層?
??? 定義操作通信連接的程序;?
??? 封裝數(shù)據(jù)包為數(shù)據(jù)幀;?
??? 監(jiān)測和糾正數(shù)據(jù)包傳輸錯誤
第一層:物理層?
??? 定義通過網(wǎng)絡(luò)設(shè)備發(fā)送數(shù)據(jù)的物理方式;?
??? 作為網(wǎng)絡(luò)媒介和設(shè)備間的接口;
??? 定義光學(xué)、電氣以及機(jī)械特性。



2 幾十上百萬行,如何快速查詢出表數(shù)據(jù)
答:用分頁存儲過程
/*
? 函數(shù)名稱: GetRecordFromPage
? 函數(shù)功能: 獲取指定頁的數(shù)據(jù)
? 參數(shù)說明: @tblName????? 包含數(shù)據(jù)的表名
?????????? @fldName????? 關(guān)鍵字段名
?????????? @PageSize???? 每頁記錄數(shù)
?????????? @PageIndex??? 要獲取的頁碼
?????????? @OrderType??? 排序類型, 0 - 升序, 1 - 降序
?????????? @strWhere???? 查詢條件 (注意: 不要加 where)
*/
CREATE PROCEDURE GetRecordFromPage
??? @tblName????? varchar(255),?????? -- 表名
??? @fldName????? varchar(255),?????? -- 字段名
??? @PageSize???? int = 10,?????????? -- 頁尺寸
??? @PageIndex??? int = 1,??????????? -- 頁碼
??? @OrderType??? bit = 0,??????????? -- 設(shè)置排序類型, 非 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

三、數(shù)據(jù)庫查詢優(yōu)化:
1、多態(tài)性,多種數(shù)據(jù)庫兼容;
2、支持翻頁,支持查詢總數(shù),頁碼顯示;
3、能處理100萬以上數(shù)據(jù)量;
答:
CREATE?? PROCEDURE?? dbo.LSP_SP_SelectElementByPage??????
? @SelectFields?? varchar(200),/*要查詢的字段列表*/??
? @Condition?? varchar(300),/*查詢條件*/??
? @PageSize?? int?? =20,/*頁面大小,默認(rèn)為20*/??
? @PageNumber?? int?? =1/*頁號,默認(rèn)為第一頁*/??
? /*@PageCount?? int?? out返回滿足條件的總頁數(shù)*/??
? 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.兩個表,寫查詢語句,根據(jù)兩個字段一個是升序,一個將序。
答:select * from a,b where a.字段1 = b.字段1 order by a.字段2 asc,b.字段2 desc
2.根據(jù)第一題,每頁面顯示10條記錄,在第25頁時怎樣顯示
答:
/*
? 函數(shù)名稱: GetRecordFromPage
? 函數(shù)功能: 獲取指定頁的數(shù)據(jù)
? 參數(shù)說明: @tblName????? 包含數(shù)據(jù)的表名
?????????? @fldName????? 關(guān)鍵字段名
?????????? @PageSize???? 每頁記錄數(shù)
?????????? @PageIndex??? 要獲取的頁碼
?????????? @OrderType??? 排序類型, 0 - 升序, 1 - 降序
?????????? @strWhere???? 查詢條件 (注意: 不要加 where)
*/
CREATE PROCEDURE GetRecordFromPage
??? @tblName????? varchar(255),?????? -- 表名
??? @fldName????? varchar(255),?????? -- 字段名
??? @PageSize???? int = 10,?????????? -- 頁尺寸
??? @PageIndex??? int = 1,??????????? -- 頁碼
??? @OrderType??? bit = 0,??????????? -- 設(shè)置排序類型, 非 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可能不是連續(xù)的。)
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() {;} } 解釋第一個構(gòu)造函數(shù)中發(fā)生了什么?這個構(gòu)造函數(shù)有什么用?
(第一個構(gòu)造函數(shù)調(diào)用了第二個構(gòu)造函數(shù),這個構(gòu)造函數(shù)構(gòu)造了一個c對象的實例。)

4.一個長度為10000的字符串,通過隨機(jī)從a-z中抽取10000個字符組成。請用c#語言編寫主要程序來實現(xiàn)。
答:
?????? 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.產(chǎn)生一個int數(shù)組,長度為100,并向其中隨機(jī)插入1-100,并且不能重復(fù)。
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復(fù)制到ArrayList里
答:
foreach( object o in array )arrayList.Add(o);

8.用C#寫一段選擇排序算法,要求用自己的編程風(fēng)格。
答: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.寫一個函數(shù)計算當(dāng)參數(shù)為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個字母,密碼中的單詞從左向右排列,密碼單詞必須遵循如下規(guī)則 :
(1) 密碼單詞的最小長度是兩個字母,可以相同,也可以不同
(2) K不可能是單詞的第一個字母
(3) 如果L出現(xiàn),則出現(xiàn)次數(shù)不止一次
(4) M不能使最后一個也不能是倒數(shù)第二個字母
(5) K出現(xiàn),則N就一定出現(xiàn)
(6) O如果是最后一個字母,則L一定出現(xiàn)
問題一:下列哪一個字母可以放在LO中的O后面,形成一個3個字母的密碼單詞?
A) K B)L C) M D) N
答案:B
問題二:如果能得到的字母是K、L、M,那么能夠形成的兩個字母長的密碼單詞的總數(shù)是多少?
A)1個 B)3個 C)6個 D)9個
答案:A
問題三:下列哪一個是單詞密碼?
A) KLLN B) LOML C) MLLO D)NMKO
答案:C

62-63=1 等式不成立,請移動一個數(shù)字(不可以移動減號和等于號),使得等式成立,如何移動?
答案: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;????? // 取得節(jié)點值
XML.prototype.getNodeslength=getNodeslength;?? // 最得節(jié)點下的子節(jié)點的個數(shù)
XML.prototype.getNode=getNode;?????? // 取得指定節(jié)點
XML.prototype.delNode=delNode;?????? // 刪除指定節(jié)點,如果節(jié)點相同,則刪除最前面的節(jié)點.
XML.prototype.getNodeAttrib=getNodeAttrib;??? // 取得節(jié)點的指定屬性值.
XML.prototype.InsertBeforeChild=InsertBeforeChild;? // 在指定節(jié)點之前插入一個節(jié)點.
XML.prototype.InsertChild=InsertChild;???? // 在指定節(jié)點下插入節(jié)點.
XML.prototype.setAttrib=setAttrib;????? //? 設(shè)置指定屬性的值.
XML.prototype.setNodeValue=setNodeValue;??? //? 設(shè)置指定節(jié)點的值.
XML.prototype.CreateNodeS=CreateNodeS;???? //? 創(chuàng)建一個指定名的節(jié)點.
XML.prototype.addAttrib=addAttrib;????? //? 為指定節(jié)點添加指定屬性,并設(shè)置初值.
XML.prototype.FindString=FindString;???? // 在指定節(jié)點下查找字符串.

給定以下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 );
}
}

6.C#代碼實現(xiàn),確保windows程序只有一個實例(instance)
??????? ///<summary>
??????? ///應(yīng)用程序的主入口點。
??????? ///</summary>
??????? [STAThread]
??????? staticvoid Main()
??????? {
??????????? //防止程序多次運行
??????????? if(!OneInstance.IsFirst("GetPayInfo"))
??????????? {
??????????????? MessageBox.Show ("警告:程序正在運行中! 請不要重復(fù)打開程序!可在右下角系統(tǒng)欄找到!","程序錯誤提

示:",MessageBoxButtons.OK,MessageBoxIcon.Stop);
??????????????? return;
??????????? }
??????????? Application.Run(new Form1());
??????? }
??????? // ******************* 防止程序多次執(zhí)行 **************************
??????? publicabstractclass OneInstance
??????? {
??????????? ///<summary>
??????????? ///判斷程序是否正在運行
??????????? ///</summary>
??????????? ///<param name="appId">程序名稱</param>
??????????? ///<returns>如果程序是第一次運行返回True,否則返回False</returns>
??????????? publicstaticbool IsFirst(string appId)
??????????? {
??????????????? bool ret=false;
??????????????? if(OpenMutex(0x1F0001,0,appId)==IntPtr.Zero)
??????????????? {
??????????????????? CreateMutex(IntPtr.Zero,0,appId);
??????????????????? ret=true;
??????????????? }
??????????????? return ret;
??????????? }?
??????????? [DllImport("Kernel32.dll",CharSet=CharSet.Auto)]
??????????? privatestaticextern IntPtr OpenMutex(
??????????????? uint dwDesiredAccess, // access
??????????????? int bInheritHandle,??? // inheritance option
??????????????? string lpName????????? // object name
??????????????? );
??????????? [DllImport("Kernel32.dll",CharSet=CharSet.Auto)]
??????????? privatestaticextern IntPtr CreateMutex(
??????????????? IntPtr lpMutexAttributes, // SD
??????????????? int bInitialOwner,?????????????????????? // initial owner
??????????????? string lpName??????????????????????????? // object name
??????????????? );
??????? }?

轉(zhuǎn)載于:https://www.cnblogs.com/TwilightSnow/p/4194612.html

總結(jié)

以上是生活随笔為你收集整理的.NET面试经典问答的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。