C#面試題整理(帶答案)
1.維護(hù)數(shù)據(jù)庫(kù)的完整性、一致性、你喜歡用觸發(fā)器還是自寫(xiě)業(yè)務(wù)邏輯?為什么?
答:盡可能用約束(包括CHECK、主鍵、唯一鍵、外鍵、非空字段)實(shí)現(xiàn),這種方式的效率最好;其次用觸發(fā)器,這種方式可以保證無(wú)論何種業(yè)務(wù)系統(tǒng)訪問(wèn)數(shù)據(jù)庫(kù)都能維持?jǐn)?shù)據(jù)庫(kù)的完整性、一致性;最后再考慮用自寫(xiě)業(yè)務(wù)邏輯實(shí)現(xiàn),但這種方式效率最低、編程最復(fù)雜,當(dāng)為下下之策。
2.什么是事務(wù)?什么是鎖?
答:事務(wù)是指一個(gè)工作單元,它包含了一組數(shù)據(jù)操作命令,并且所有的命令作為一個(gè)整體一起向系統(tǒng)提交或撤消請(qǐng)求操作,即這組命令要么都執(zhí)行,要么都不執(zhí)行。
鎖是在多用戶(hù)環(huán)境中對(duì)數(shù)據(jù)的訪問(wèn)的限制。SqlServer自動(dòng)鎖定特定記錄、字段或文件,防止用戶(hù)訪問(wèn),以維護(hù)數(shù)據(jù)安全或防止并發(fā)數(shù)據(jù)操作問(wèn)題,鎖可以保證事務(wù)的完整性和并發(fā)性。
3.什么是索引,有什么優(yōu)點(diǎn)?
答:索引象書(shū)的目錄類(lèi)似,索引使數(shù)據(jù)庫(kù)程序無(wú)需掃描整個(gè)表,就可以在其中找到所需要的數(shù)據(jù),索引包含了一個(gè)表中包含值的列表,其中包含了各個(gè)值的行所存儲(chǔ)的位置,索引可以是單個(gè)或一組列,索引提供的表中數(shù)據(jù)的邏輯位置,合理劃分索引能夠大大提高數(shù)據(jù)庫(kù)性能。
4.視圖是什么?游標(biāo)是什么?
答:視圖是一種虛擬表,虛擬表具有和物理表相同的功能,可以對(duì)虛擬表進(jìn)行增該查操作;
視圖通常是一個(gè)或多個(gè)表的行或列的子集;
視圖的結(jié)果更容易理解(修改視圖對(duì)基表不影響),獲取數(shù)據(jù)更容易(相比多表查詢(xún)更方便),限制數(shù)據(jù)檢索(比如需要隱藏某些行或列),維護(hù)更方便。
游標(biāo)對(duì)查詢(xún)出來(lái)的結(jié)果集作為一個(gè)單元來(lái)有效的處理,游標(biāo)可以定位在結(jié)果集的特定行、從結(jié)果集的當(dāng)前位置檢索一行或多行、可以對(duì)結(jié)果集中當(dāng)前位置進(jìn)行修改、
5.什么是存儲(chǔ)過(guò)程?有什么優(yōu)點(diǎn)?
答:存儲(chǔ)過(guò)程是一組予編譯的SQL語(yǔ)句
它的優(yōu)點(diǎn):1.允許模塊化程序設(shè)計(jì),就是說(shuō)只需要?jiǎng)?chuàng)建一次過(guò)程,以后在程序中就可以調(diào)用該過(guò)程任意次。
2.允許更快執(zhí)行,如果某操作需要執(zhí)行大量SQL語(yǔ)句或重復(fù)執(zhí)行,存儲(chǔ)過(guò)程比SQL語(yǔ)句執(zhí)行的要快。
3.減少網(wǎng)絡(luò)流量,例如一個(gè)需要數(shù)百行的SQL代碼的操作有一條執(zhí)行語(yǔ)句完成,不需要在網(wǎng)絡(luò)中發(fā)送數(shù)百行代碼。
4.更好的安全機(jī)制,對(duì)于沒(méi)有權(quán)限執(zhí)行存儲(chǔ)過(guò)程的用戶(hù),也可授權(quán)他們執(zhí)行存儲(chǔ)過(guò)程。
6.什么是觸發(fā)器?
答:觸發(fā)器是一種特殊類(lèi)型的存儲(chǔ)過(guò)程,出發(fā)器主要通過(guò)事件觸發(fā)而被執(zhí)行的,
觸發(fā)器的優(yōu)點(diǎn):1.強(qiáng)化約束,觸發(fā)器能夠提供比CHECK約束;
2.跟蹤變化,觸發(fā)器可以跟蹤數(shù)據(jù)庫(kù)內(nèi)的操作,從而不允許未經(jīng)允許許可的更新和變化;
3.聯(lián)級(jí)運(yùn)算,比如某個(gè)表上的觸發(fā)器中包含對(duì)另一個(gè)表的數(shù)據(jù)操作,而該操作又導(dǎo)致該表上的觸發(fā)器被觸發(fā)
7.簡(jiǎn)單介紹下ADO.NET和ADO主要有什么改進(jìn)?
答:ADO以Recordset存儲(chǔ),而ADO.NET則以DataSet表示,ADO.NET提供了數(shù)據(jù)集和數(shù)據(jù)適配器,有利于實(shí)現(xiàn)分布式處理,降低了對(duì)數(shù)據(jù)庫(kù)服務(wù)器資源的消耗。
7.1 ASP.NET與ASP相比,主要有哪些進(jìn)步?
答:ASP.NET實(shí)現(xiàn)了面向?qū)ο缶幊?,預(yù)編譯的服務(wù)器端代碼而不像ASP那樣解釋執(zhí)行提高了性能,代碼分離易于管理,可訂制和擴(kuò)展性,功能強(qiáng)大的開(kāi)發(fā)工作,更好的安全機(jī)制。
7.2 C#中的委托是什么?事件是不是一種委托?
答:委托本質(zhì)上是一種“方法接口”,它相當(dāng)于C/C++中的函數(shù)指針,當(dāng)然它比函數(shù)指針安全,在C#中通常用于事件處理。
事件不是委托,不過(guò)由于事件的性質(zhì)決定了處理它的程序邏輯能訪問(wèn)的參數(shù),因此,在C#中處理事件的邏輯都包裝為委托。
8.如何把一個(gè)array復(fù)制到arrayist里
答:foreach( object arr in array)arrayist.Add(arr);
8.1 列舉ADO.NET中的五個(gè)主要對(duì)象,并簡(jiǎn)單描述
答:Connection連接對(duì)象,Command執(zhí)行命令和存儲(chǔ)過(guò)程,DataReader向前只讀的數(shù)據(jù)流,DataAdapter適配器,支持增刪查詢(xún),DataSet數(shù)據(jù)級(jí)對(duì)象,相當(dāng)與內(nèi)存里的一張或多張表。
9.概述三層結(jié)構(gòu)體系
答:表示層(UI),業(yè)務(wù)邏輯層(BLL),數(shù)據(jù)訪問(wèn)層(DAL)
10.什么是裝箱和拆箱?什么是重載?
答:裝箱就是把值類(lèi)型轉(zhuǎn)成引用類(lèi)型,拆箱相反把引用轉(zhuǎn)換成值類(lèi)型。
重載就是指一個(gè)方法名相同,參數(shù)個(gè)數(shù)不相同,返回值可以相同的方法。
11.簡(jiǎn)述WebService
答:WebService服務(wù)可以描述為可以在web上部署并可以被任何應(yīng)用程序或其他服務(wù)調(diào)用的功能。所謂服務(wù)就是系統(tǒng)提供一組接口,并通過(guò)接口使用系統(tǒng)提供的功能,WebService服務(wù)可以提供任何企業(yè)到客戶(hù),企業(yè)到企業(yè),點(diǎn)對(duì)點(diǎn)或部門(mén)對(duì)部門(mén)通訊所需的服務(wù),比如一個(gè)公司可以通過(guò)網(wǎng)絡(luò)連接到另一個(gè)公司的服務(wù),從而直接傳遞訂購(gòu)單。
12.面向?qū)ο蟮乃枷胫饕ㄊ裁矗?/strong>
答:繼承、封裝、多態(tài)
13.列舉一下你所了解的XML技術(shù)及其應(yīng)用
答:xml可以用來(lái)做網(wǎng)頁(yè)(xslt)、可以當(dāng)作數(shù)據(jù)庫(kù)、可以用來(lái)保存對(duì)象的系列化(web服務(wù)好象是基于這個(gè)的)。xml用于配置,用于保存靜態(tài)數(shù)據(jù)類(lèi)型.接觸XML最多的是web Services和config
14.C#中的接口和類(lèi)有什么異同。
答:接口,是可以多繼承,類(lèi)只有單繼承.接口強(qiáng)調(diào)了你必須實(shí)現(xiàn),而沒(méi)有具本實(shí)現(xiàn)的方法和虛類(lèi)有點(diǎn)相似。
15.new 關(guān)鍵字用法
答:(1)new 運(yùn)算符 用于創(chuàng)建對(duì)象和調(diào)用構(gòu)造函數(shù)。
(2)new 修飾符 用于向基類(lèi)成員隱藏繼承成員。
(3)new 約束 用于在泛型聲明中約束可能用作類(lèi)型參數(shù)的參數(shù)的類(lèi)型。
14.DataGrid的Datasouse可以連接什么數(shù)據(jù)源
答:DataTabe,DataView,DataSet,DataViewManager,任何實(shí)現(xiàn)IListSource接口的組件,任何實(shí)現(xiàn)IList接口的組件
15.概述反射和序列化
答:反射:公共語(yǔ)言運(yùn)行庫(kù)加載器管理應(yīng)用程序域。這種管理包括將每個(gè)程序集加載到相應(yīng)的應(yīng)用程序域以及控制每個(gè)程序集中類(lèi)型層次結(jié)構(gòu)的內(nèi)存布局。程序集包含模塊,而模塊包含類(lèi)型,類(lèi)型又包含成員。反射則提供了封裝程序集、模塊和類(lèi)型的對(duì)象。您可以使用反射動(dòng)態(tài)地創(chuàng)建類(lèi)型的實(shí)例,將類(lèi)型綁定到現(xiàn)有對(duì)象,或從現(xiàn)有對(duì)象中獲取類(lèi)型。然后,可以調(diào)用類(lèi)型的方法或訪問(wèn)其字段和屬性。
序列化:序列化是將對(duì)象狀態(tài)轉(zhuǎn)換為可保持或傳輸?shù)母袷降倪^(guò)程。與序列化相對(duì)的是反序列化,它將流轉(zhuǎn)換為對(duì)象。這兩個(gè)過(guò)程結(jié)合起來(lái),可以輕松地存儲(chǔ)和傳輸數(shù)據(jù)。
16.概述O/R Mapping 的原理
答:利用反射,配置將對(duì)象和數(shù)據(jù)庫(kù)表映射。
17.可訪問(wèn)性級(jí)別有哪幾種
答:pubic 訪問(wèn)不受限制。
protected 訪問(wèn)僅限于包含類(lèi)或從包含類(lèi)派生的類(lèi)型。
internal 訪問(wèn)僅限于當(dāng)前程序集。
protected internal 訪問(wèn)僅限于從包含類(lèi)派生的當(dāng)前程序集或類(lèi)型。
private 訪問(wèn)僅限于包含類(lèi)型。
18.sealed修飾符有什么特點(diǎn)
答:sealed 修飾符可以應(yīng)用于類(lèi)、實(shí)例方法和屬性。
密封類(lèi)不能被繼承;
密封方法會(huì)重寫(xiě)基類(lèi)中的方法,但其本身不能在任何派生類(lèi)中進(jìn)一步重寫(xiě)。當(dāng)應(yīng)用于方法或?qū)傩詴r(shí),sealed 修飾符必須始終與 override一起使用。
19.列舉ADO.NET中的共享類(lèi)和數(shù)據(jù)庫(kù)特定類(lèi)
答:共享類(lèi):DataSet,DataTable,DataRow,DataColumn,DataRealtion,Constraint,DataColumnMapping,DataTableMapping
特定類(lèi):(x)Connection,(x)Command,(x)CommandBuilder,(x)DataAdapter,(x)DataReader,(x)Parameter,(x)Transaction
20.C#中,string str = null 與 string str ="",請(qǐng)盡量用文字說(shuō)明區(qū)別
答:string str=""初始化對(duì)象分配空間,而stringstr=null初始化對(duì)象
21.詳述.NET里class和struct的異同
答:結(jié)構(gòu)與類(lèi)共享幾乎所有相同的語(yǔ)法,但結(jié)構(gòu)比類(lèi)受到的限制更多:盡管結(jié)構(gòu)的靜態(tài)字段可以初始化,結(jié)構(gòu)實(shí)例字段聲明還是不能使用初始值設(shè)定項(xiàng)。
結(jié)構(gòu)不能聲明默認(rèn)構(gòu)造函數(shù)(沒(méi)有參數(shù)的構(gòu)造函數(shù))或析構(gòu)函數(shù)。
結(jié)構(gòu)的副本由編譯器自動(dòng)創(chuàng)建和銷(xiāo)毀,因此不需要使用默認(rèn)構(gòu)造函數(shù)和析構(gòu)函數(shù)。實(shí)際上,編譯器通過(guò)為所有字段賦予默認(rèn)值(參見(jiàn)默認(rèn)值表)來(lái)實(shí)現(xiàn)默認(rèn)構(gòu)造函數(shù)。
結(jié)構(gòu)不能從類(lèi)或其他結(jié)構(gòu)繼承。
結(jié)構(gòu)是值類(lèi)型 -- 如果從結(jié)構(gòu)創(chuàng)建一個(gè)對(duì)象并將該對(duì)象賦給某個(gè)變量,變量則包含結(jié)構(gòu)的全部值。復(fù)制包含結(jié)構(gòu)的變量時(shí),將復(fù)制所有數(shù)據(jù),對(duì)新副本所做的任何修改都不會(huì)改變舊副本的數(shù)據(jù)。
由于結(jié)構(gòu)不使用引用,因此結(jié)構(gòu)沒(méi)有標(biāo)識(shí) -- 具有相同數(shù)據(jù)的兩個(gè)值類(lèi)型實(shí)例是無(wú)法區(qū)分的。C# 中的所有值類(lèi)型本質(zhì)上都繼承自ValueType,后者繼承自 Object。編譯器可以在一個(gè)稱(chēng)為裝箱的過(guò)程中將值類(lèi)型轉(zhuǎn)換為引用類(lèi)型。
結(jié)構(gòu)具有以下特點(diǎn):
結(jié)構(gòu)是值類(lèi)型,而類(lèi)是引用類(lèi)型。
向方法傳遞結(jié)構(gòu)時(shí),結(jié)構(gòu)是通過(guò)傳值方式傳遞的,而不是作為引用傳遞的。
與類(lèi)不同,結(jié)構(gòu)的實(shí)例化可以不使用 new 運(yùn)算符。
結(jié)構(gòu)可以聲明構(gòu)造函數(shù),但它們必須帶參數(shù)。
一個(gè)結(jié)構(gòu)不能從另一個(gè)結(jié)構(gòu)或類(lèi)繼承,而且不能作為一個(gè)類(lèi)的基。所有結(jié)構(gòu)都直接繼承自 System.ValueType,后者繼承自 System.Object。
結(jié)構(gòu)可以實(shí)現(xiàn)接口。
在結(jié)構(gòu)中初始化實(shí)例字段是錯(cuò)誤的。
22.什么叫應(yīng)用程序域?什么是托管代碼?什么是強(qiáng)類(lèi)型系統(tǒng)?什么是裝箱和拆箱?什么是重載? CTS、CLS和CLR分別作何解釋?zhuān)?/strong>
答:應(yīng)用程序域:應(yīng)用程序域?yàn)榘踩?、可靠性、版本控制以及卸載程序集提供了隔離邊界。應(yīng)用程序域通常由運(yùn)行庫(kù)宿主創(chuàng)建,運(yùn)行庫(kù)宿主負(fù)責(zé)在運(yùn)行應(yīng)用程序之前引導(dǎo)公共語(yǔ)言運(yùn)行庫(kù)。應(yīng)用程序域提供了一個(gè)更安全、用途更廣的處理單元,公共語(yǔ)言運(yùn)行庫(kù)可使用該單元提供應(yīng)用程序之間的隔離。
托管代碼:使用基于公共語(yǔ)言運(yùn)行庫(kù)的語(yǔ)言編譯器開(kāi)發(fā)的代碼稱(chēng)為托管代碼;托管代碼具有許多優(yōu)點(diǎn),例如:跨語(yǔ)言集成、跨語(yǔ)言異常處理、增強(qiáng)的安全性、版本控制和部署支持、簡(jiǎn)化的組件交互模型、調(diào)試和分析服務(wù)等。
強(qiáng)類(lèi)型:C# 是強(qiáng)類(lèi)型語(yǔ)言;因此每個(gè)變量和對(duì)象都必須具有聲明類(lèi)型。
裝箱和拆箱:裝箱和拆箱使值類(lèi)型能夠被視為對(duì)象。對(duì)值類(lèi)型裝箱將把該值類(lèi)型打包到 Object 引用類(lèi)型的一個(gè)實(shí)例中。這使得值類(lèi)型可以存儲(chǔ)于垃圾回收堆中。拆箱將從對(duì)象中提取值類(lèi)型。
重載:每個(gè)類(lèi)型成員都有一個(gè)唯一的簽名。方法簽名由方法名稱(chēng)和一個(gè)參數(shù)列表(方法的參數(shù)的順序和類(lèi)型)組成。只要簽名不同,就可以在一種類(lèi)型內(nèi)定義具有相同名稱(chēng)的多種方法。當(dāng)定義兩種或多種具有相同名稱(chēng)的方法時(shí),就稱(chēng)作重載。
CTS通用類(lèi)型系統(tǒng) (common type system) :一種確定公共語(yǔ)言運(yùn)行庫(kù)如何定義、使用和管理類(lèi)型的規(guī)范。
CLR公共語(yǔ)言運(yùn)行庫(kù):.NET Framework 提供了一個(gè)稱(chēng)為公共語(yǔ)言運(yùn)行庫(kù)的運(yùn)行時(shí)環(huán)境,它運(yùn)行代碼并提供使開(kāi)發(fā)過(guò)程更輕松的服務(wù)。
CLS公共語(yǔ)言規(guī)范:要和其他對(duì)象完全交互,而不管這些對(duì)象是以何種語(yǔ)言實(shí)現(xiàn)的,對(duì)象必須只向調(diào)用方公開(kāi)那些它們必須與之互用的所有語(yǔ)言的通用功能。為此定義了公共語(yǔ)言規(guī)范 (CLS),它是許多應(yīng)用程序所需的一套基本語(yǔ)言功能。
23.值類(lèi)型和引用類(lèi)型的區(qū)別?
答:基于值類(lèi)型的變量直接包含值。將一個(gè)值類(lèi)型變量賦給另一個(gè)值類(lèi)型變量時(shí),將復(fù)制包含的值。這與引用類(lèi)型變量的賦值不同,引用類(lèi)型變量的賦值只復(fù)制對(duì)對(duì)象的引用,而不復(fù)制對(duì)象本身。
所有的值類(lèi)型均隱式派生自 System.ValueType。與引用類(lèi)型不同,從值類(lèi)型不可能派生出新的類(lèi)型。但與引用類(lèi)型相同的是,結(jié)構(gòu)也可以實(shí)現(xiàn)接口。
與引用類(lèi)型不同,值類(lèi)型不可能包含 null 值。然而,可空類(lèi)型功能允許將null 賦給值類(lèi)型。 每種值類(lèi)型均有一個(gè)隱式的默認(rèn)構(gòu)造函數(shù)來(lái)初始化該類(lèi)型的默認(rèn)值。
值類(lèi)型主要由兩類(lèi)組成:結(jié)構(gòu)、枚舉; 結(jié)構(gòu)分為以下幾類(lèi):Numeric(數(shù)值)類(lèi)型、整型、浮點(diǎn)型、decimal、bool、用戶(hù)定義的結(jié)構(gòu)。
引用類(lèi)型的變量又稱(chēng)為對(duì)象,可存儲(chǔ)對(duì)實(shí)際數(shù)據(jù)的引用。聲明引用類(lèi)型的關(guān)鍵字:class、interface、delegate、內(nèi)置引用類(lèi)型: object、string
24.如何理解委托
答:委托類(lèi)似于 C++ 函數(shù)指針,但它是類(lèi)型安全的。委托允許將方法作為參數(shù)進(jìn)行傳遞。委托可用于定義回調(diào)方法。委托可以鏈接在一起;例如,可以對(duì)一個(gè)事件調(diào)用多個(gè)方法。方法不需要與委托簽名精確匹配。有關(guān)更多信息,請(qǐng)參見(jiàn)協(xié)變和逆變。C# 2.0 版引入了匿名方法的概念,此類(lèi)方法允許將代碼塊作為參數(shù)傳遞,以代替單獨(dú)定義的方法。
25.C#中的接口和類(lèi)有什么異同?
答:異:接口不能直接實(shí)例化。
接口不包含方法的實(shí)現(xiàn)。
接口、類(lèi)和結(jié)構(gòu)可從多個(gè)接口繼承。但是C#類(lèi)只支持單繼承:類(lèi)只能從一個(gè)基類(lèi)繼承實(shí)現(xiàn)。類(lèi)定義可在不同的源文件之間進(jìn)行拆分。
同:接口、類(lèi)和結(jié)構(gòu)可從多個(gè)接口繼承。
接口類(lèi)似于抽象基類(lèi):繼承接口的任何非抽象類(lèi)型都必須實(shí)現(xiàn)接口的所有成員。
接口可以包含事件、索引器、方法和屬性。
26.ASP.net的身份驗(yàn)證方式有哪些?
答:Windows 身份驗(yàn)證提供程序:提供有關(guān)如何將Windows 身份驗(yàn)證與Microsoft Internet 信息服務(wù) (IIS) 身份驗(yàn)證結(jié)合使用來(lái)確保 ASP.NET 應(yīng)用程序安全的信息。
Forms 身份驗(yàn)證提供程序:提供有關(guān)如何使用您自己的代碼創(chuàng)建應(yīng)用程序特定的登錄窗體并執(zhí)行身份驗(yàn)證的信息。使用 Forms 身份驗(yàn)證的一種簡(jiǎn)便方法是使用 ASP.NET 成員資格和 ASP.NET 登錄控件,它們一起提供了一種只需少量或無(wú)需代碼就可以收集、驗(yàn)證和管理用戶(hù)憑據(jù)的方法。
Passport 身份驗(yàn)證提供程序:提供有關(guān)由Microsoft 提供的集中身份驗(yàn)證服務(wù)的信息,該服務(wù)為成員站點(diǎn)提供單一登錄和核心配置
27.活動(dòng)目錄的作用
答:Active Directory存儲(chǔ)了有關(guān)網(wǎng)絡(luò)對(duì)象的信息,并且讓管理員和用戶(hù)能夠輕松地查找和使用這些信息。
Active Directory使用了一種結(jié)構(gòu)化的數(shù)據(jù)存儲(chǔ)方式,并以此作為基礎(chǔ)對(duì)目錄信息進(jìn)行合乎邏輯的分層組織。
28.解釋一下UDDI、WSDL的意義及其作用
答:UDDI:統(tǒng)一描述、發(fā)現(xiàn)和集成協(xié)議(UDDI, Universa Description, Discovery and Integration)是一套基于Web的、分布式的、為Web服務(wù)提供的信息注冊(cè)中心的實(shí)現(xiàn)標(biāo)準(zhǔn)規(guī)范,同時(shí)也包含一組使企業(yè)能將自身提供的Web服務(wù)注冊(cè)以使得別的企業(yè)能夠發(fā)現(xiàn)的訪問(wèn)協(xié)議的實(shí)現(xiàn)標(biāo)準(zhǔn)。UDDI 提供了一組基于標(biāo)準(zhǔn)的規(guī)范用于描述和發(fā)現(xiàn)服務(wù),還提供了一組基于因特網(wǎng)的實(shí)現(xiàn)。
WSDL:WSDL描述Web服務(wù)的公共接口。這是一個(gè)基于XML的關(guān)于如何與Web服務(wù)通訊和使用的服務(wù)描述;
作用: 服務(wù) URL 和命名空間 :網(wǎng)絡(luò)服務(wù)的類(lèi)型(可能還包括SOAP 的函數(shù)調(diào)用,正像我所說(shuō)過(guò)的,WSDL足夠自如地去描述網(wǎng)絡(luò)服務(wù)的廣泛內(nèi)容)。有效函數(shù)列表,每個(gè)函數(shù)的參數(shù),每個(gè)參數(shù)的類(lèi)型 ,每個(gè)函數(shù)的返回值及其數(shù)據(jù)類(lèi)型。
29.什么是SOAP?
答:SOAP(Simpe Object Access Protoco )簡(jiǎn)單對(duì)象訪問(wèn)協(xié)議是在分散或分布式的環(huán)境中交換信息并執(zhí)行遠(yuǎn)程過(guò)程調(diào)用的協(xié)議,是一個(gè)基于XML的協(xié)議。使用SOAP,不用考慮任何特定的傳輸協(xié)議(最常用的還是HTTP協(xié)議),可以允許任何類(lèi)型的對(duì)象或代碼,在任何平臺(tái)上,以任何一直語(yǔ)言相互通信。
SOAP 是一種輕量級(jí)協(xié)議,用于在分散型、分布式環(huán)境中交換結(jié)構(gòu)化信息。 SOAP 利用 XML 技術(shù)定義一種可擴(kuò)展的消息處理框架,它提供了一種可通過(guò)多種底層協(xié)議進(jìn)行交換的消息結(jié)構(gòu)。這種框架的設(shè)計(jì)思想是要獨(dú)立于任何一種特定的編程模型和其他特定實(shí)現(xiàn)的語(yǔ)義。
SOAP 定義了一種方法以便將 XML 消息從 A 點(diǎn)傳送到 B 點(diǎn)。為此,它提供了一種基于 XML且具有以下特性的消息處理框架:1) 可擴(kuò)展,2) 可通過(guò)多種底層網(wǎng)絡(luò)協(xié)議使用,3) 獨(dú)立于編程模型。
30.如何部署一個(gè)ASP.net頁(yè)面?
答:VS 2005和VS 2003都有發(fā)布機(jī)制。2003可以發(fā)布然后再?gòu)?fù)制部署。VS2005基本上可以直接部署到對(duì)應(yīng)位置。
31.如何理解.net中的垃圾回收機(jī)制?
答:.NETFramework 的垃圾回收器管理應(yīng)用程序的內(nèi)存分配和釋放。每次您使用 new 運(yùn)算符創(chuàng)建對(duì)象時(shí),運(yùn)行庫(kù)都從托管堆為該對(duì)象分配內(nèi)存。只要托管堆中有地址空間可用,運(yùn)行庫(kù)就會(huì)繼續(xù)為新對(duì)象分配空間。但是,內(nèi)存不是無(wú)限大的。最終,垃圾回收器必須執(zhí)行回收以釋放一些內(nèi)存。垃圾回收器優(yōu)化引擎根據(jù)正在進(jìn)行的分配情況確定執(zhí)行回收的最佳時(shí)間。當(dāng)垃圾回收器執(zhí)行回收時(shí),它檢查托管堆中不再被應(yīng)用程序使用的對(duì)象并執(zhí)行必要的操作來(lái)回收它們占用的內(nèi)存。
32.概述.NET中的GC機(jī)制。
答:GC的全稱(chēng)是garbage collection,中文名稱(chēng)垃圾回收,是.NET中對(duì)內(nèi)存管理的一種功能。垃圾回收器跟蹤并回收托管內(nèi)存中分配的對(duì)象,定期執(zhí)行垃圾回收以回收分配給沒(méi)有有效引用的對(duì)象的內(nèi)存。當(dāng)使用可用內(nèi)存不能滿(mǎn)足內(nèi)存請(qǐng)求時(shí),GC會(huì)自動(dòng)進(jìn)行。
在進(jìn)行垃圾回收時(shí),垃圾回收器會(huì)首先搜索內(nèi)存中的托管對(duì)象,然后從托管代碼中搜索被引用的對(duì)象并標(biāo)記為有效,接著釋放沒(méi)有被標(biāo)記為有效的對(duì)象并收回內(nèi)存,最后整理內(nèi)存將有效對(duì)象挪動(dòng)到一起
33.GC是什么? 為什么要有GC?
答:GC是垃圾收集器。程序員不用擔(dān)心內(nèi)存管理,因?yàn)槔占鲿?huì)自動(dòng)進(jìn)行管理。要請(qǐng)求垃圾收集,可以調(diào)用下面的方法之一:
System.gc()
Runtime.getRuntime().gc()
33.ASP.NET中常見(jiàn)內(nèi)置對(duì)象?
答:Response、Request、Server、Session、Application、Cookie
34.死鎖的必要條件?怎么克服?
答:系統(tǒng)的資源不足,進(jìn)程的推進(jìn)的順序不合適,資源分配不當(dāng),一個(gè)資源每次只能被一個(gè)進(jìn)程使用,一個(gè)資源請(qǐng)求資源時(shí),而此時(shí)這個(gè)資源已阻塞,對(duì)已獲得資源不放,進(jìn)程獲得資源時(shí),未使用完前,不能強(qiáng)行剝奪。
35.接口是否可以繼承接口?抽象類(lèi)是否可以實(shí)現(xiàn)接口?抽象類(lèi)是否可以繼承實(shí)體類(lèi)?
答:接口是可以繼承接口的,抽象類(lèi)是可以實(shí)現(xiàn)接口的,抽象類(lèi)可以繼承實(shí)體類(lèi),但是有個(gè)條件,條件是,實(shí)體類(lèi)必須要有明確的構(gòu)造函數(shù)。
36.構(gòu)造器Constructor是否可以被繼承?是否可以被Override?
答:Constructor不可以被繼承,因此不能被重寫(xiě)(Overriding),但可以被重載(Overloading).
37.是否可以繼承String類(lèi)?
答:因?yàn)镾tring類(lèi)是final類(lèi)所以不可以繼承string類(lèi)。
38.當(dāng)一個(gè)線程進(jìn)入一個(gè)對(duì)象的方法后,其它線程是否可以進(jìn)入該對(duì)象的方法?
答:不可以,一個(gè)對(duì)象的方法只能由一個(gè)線程訪問(wèn)。
39.用最有效的方法算出2乘以8等于幾?
答:2<<3.
40.C#是否可以對(duì)內(nèi)存直接進(jìn)行操作?
答:C#是可以對(duì)內(nèi)存進(jìn)行直接操作的,雖然很少用到指針,但是C#是可以使用指針的,在用的時(shí)候需要在前邊加unsafe,,在.net中使用了垃圾回收機(jī)制(GC)功能,它替代了程序員,不過(guò)在C#中不可以直接使用finalize方法,而是在析構(gòu)函數(shù)中調(diào)用基類(lèi)的finalize()方法。
41.數(shù)組有沒(méi)有Length()這和方法?string有沒(méi)有這個(gè)方法?
答:數(shù)組中沒(méi)有這個(gè)方法,但有這個(gè)屬性,string中有這個(gè)方法。
42.Error和Exception有是區(qū)別?
答:error表示恢復(fù)不是不可能,但是很困難,exception表示一種實(shí)際或?qū)崿F(xiàn)問(wèn)題,它表示程序運(yùn)行正常不可以發(fā)生的。
43.HashMap和Hashtable區(qū)別?
答:HashMap是Hashtable的輕量級(jí)實(shí)現(xiàn),非線程安全的實(shí)現(xiàn)他們都實(shí)現(xiàn)了map接口,主要區(qū)別是HashMap鍵值可以為空null,效率可以高于Hashtable。
44.Collection和Collections的區(qū)別?
答:Collection是集合類(lèi)的上級(jí)接口,Collections是針對(duì)集合類(lèi)的一個(gè)幫助類(lèi),它提供一系列靜態(tài)方法來(lái)實(shí)現(xiàn)對(duì)各種集合的搜索,排序,線程安全化操作。
45.Override, Overload,的區(qū)別?
答:Override是重寫(xiě)的意思,它表示重寫(xiě)基類(lèi)的方法,而且方法的名稱(chēng),返回類(lèi)型,參數(shù)類(lèi)型,參數(shù)個(gè)數(shù)要與基類(lèi)相同。
Overload是重載是意思,它也表示重寫(xiě)基類(lèi)的方法,但是只要方法名相同,別的可以不同。
46.在一個(gè)BS結(jié)構(gòu)中需要傳遞變量值時(shí),不能使用session,cookie,application,你有幾中方法?
答:this.server.Transfer,Querystring.
47.C#種索引器實(shí)現(xiàn)過(guò)程,是否只能根據(jù)數(shù)字索引?
答:不是的,可以是任意類(lèi)型。
48.Const和ReadOnly?
答:Const用來(lái)申明編程時(shí)申明常量,ReadOnly用來(lái)申明運(yùn)行時(shí)常量。
49.UDP和TCP連接有和異同?
答:TCP是傳輸控制協(xié)議,提供的是面向連接的,是可靠的,字節(jié)流服務(wù),當(dāng)用戶(hù)和服務(wù)器彼此進(jìn)行數(shù)據(jù)交互的時(shí)候,必須在他們數(shù)據(jù)交互前要進(jìn)行TCP連接之后才能傳輸數(shù)據(jù)。TCP提供超時(shí)重?fù)?,檢驗(yàn)數(shù)據(jù)功能。
UDP是用戶(hù)數(shù)據(jù)報(bào)協(xié)議,是一個(gè)簡(jiǎn)單的面向數(shù)據(jù)報(bào)的傳輸協(xié)議,是不可靠的連接。
50.進(jìn)程和線程分別該怎么理解?
答:進(jìn)程是比線程大的程序運(yùn)行單元,都是由操作系統(tǒng)所體會(huì)的系統(tǒng)運(yùn)行單元
一個(gè)程序中至少要有一個(gè)進(jìn)程,一個(gè)進(jìn)程中,至少要有一個(gè)線程,線程的劃分尺度要比進(jìn)程要小,進(jìn)程擁有獨(dú)立的內(nèi)存單元,線程是共享內(nèi)存,從而極大的提高了程序的運(yùn)行效率同一個(gè)進(jìn)程中的多個(gè)線程可以并發(fā)執(zhí)行。
51.在.NET中所有類(lèi)的基類(lèi)是?
答:object。
52.能用foreach遍歷訪問(wèn)的對(duì)象需要實(shí)現(xiàn)?
答:需要實(shí)現(xiàn)IEnumerable接口和GetEnumerator()方法。
53.Heap與stack的差別?
答:Heap是堆,空間是由手動(dòng)操作分配和釋放的,它的存儲(chǔ)區(qū)很大的自由存儲(chǔ)區(qū)。
Stack是棧,是由是操作系統(tǒng)自動(dòng)分配和釋放的,棧上的空間是有限的。程序在編譯期間變量和函數(shù)分配內(nèi)存都是在棧上進(jìn)行的,且在運(yùn)行時(shí)函數(shù)調(diào)用時(shí)的參數(shù)的傳遞也是在棧上進(jìn)行的。
54.請(qǐng)編程遍歷頁(yè)面上所有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 ;
}
}
55.請(qǐng)編程實(shí)現(xiàn)一個(gè)冒泡排序算法?
答:
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 ;
}
}
}
56.求以下表達(dá)式的值,寫(xiě)出您想到的一種或幾種實(shí)現(xiàn)方法: 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 ;
}
}
Console.WriteLine(Sum.ToString());
Console.ReadLine() ;
58.什么是受管制的代碼?
答:unsafe:非托管代碼。不經(jīng)過(guò)CLR運(yùn)行。
59.在.net中,配件的意思是?
答:程序集。(中間語(yǔ)言,源數(shù)據(jù),資源,裝配清單)
60.常用的調(diào)用WebService的方法有哪些?
答:1.使用WSDL.exe命令行工具。
2.使用VS.NET中的Add Web Reference菜單選項(xiàng)
61. .net Remoting 的工作原理是什么?
答:服務(wù)器端向客戶(hù)端發(fā)送一個(gè)進(jìn)程編號(hào),一個(gè)程序域編號(hào),以確定對(duì)象的位置。
62.根據(jù)線程安全的相關(guān)知識(shí),分析以下代碼,當(dāng)調(diào)用test方法時(shí)i>10時(shí)是否會(huì)引起死鎖?并簡(jiǎn)要說(shuō)明理由。
public void test(int i)
{
lock(this)
{
if (i>10)
{
i--;
test(i);
}
}
}
答:不會(huì)發(fā)生死鎖,(但有一點(diǎn)int是按值傳遞的,所以每次改變的都只是一個(gè)副本,因此不會(huì)出現(xiàn)死鎖。但如果把int換做一個(gè)object,那么死鎖會(huì)發(fā)生)
63.簡(jiǎn)要談您對(duì)微軟.NET 構(gòu)架下remoting和webservice兩項(xiàng)技術(shù)的理解以及實(shí)際中的應(yīng)用。
答:WS主要是可利用HTTP,穿透防火墻。而Remoting可以利用TCP/IP,二進(jìn)制傳送提高效率。
remoting是.net中用來(lái)跨越machine,process, appdomain進(jìn)行方法調(diào)用的技術(shù),對(duì)于三層結(jié)構(gòu)的程序,就可以使用remoting技術(shù)來(lái)構(gòu)建.它是分布應(yīng)用的基礎(chǔ)技術(shù).相當(dāng)于以前的DCOM。
Web Service是一種構(gòu)建應(yīng)用程序的普通模型,并能在所有支持internet網(wǎng)通訊的操作系統(tǒng)上實(shí)施。Web Service令基于組件的開(kāi)發(fā)和web的結(jié)合達(dá)到最佳,基于組件的對(duì)象模型。
64.公司要求開(kāi)發(fā)一個(gè)繼承System.Windows.Forms.ListView類(lèi)的組件,要求達(dá)到以下的特殊功能:點(diǎn)擊ListView各列列頭時(shí),能按照點(diǎn)擊列的每行值進(jìn)行重排視圖中的所有行 (排序的方式如DataGrid相似)。根據(jù)您的知識(shí),請(qǐng)簡(jiǎn)要談一下您的思路
答:根據(jù)點(diǎn)擊的列頭,包該列的ID取出,按照該ID排序后,在給綁定到ListView中。
65.給定以下XML文件,完成算法流程圖。
<FileSystem> < DriverC > <Dir DirName=”MSDOS622”> <File FileName =” Command.com”></File> </Dir> <File FileName =”MSDOS.SYS” ></File> <File FileName =” IO.SYS”></File> </DriverC> </FileSystem>
請(qǐng)畫(huà)出遍歷所有文件名(FileName)的流程圖(請(qǐng)使用遞歸算法)。
答:
voidFindFile( 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 );
}
}
方法二
Public void DomDepthFirst(XmlNode currentNode)
{
XmlNode node=currentNode.FirstChild;
while(node!=null)
{
if(node.Name=="File")
{
Console.Write(((XmlElement)node).GetAttribute("FileName")+"\r\n");
}
DomDepthFirst(node);
node=node.NextSibling;
}
}
66.String s = new String("xyz");創(chuàng)建了幾個(gè)String Object?
答:兩個(gè)對(duì)象,一個(gè)是“xyx”,一個(gè)是指向“xyx”的引用對(duì)像s。
67.abstract class和interface有什么區(qū)別?
答:聲明方法的存在而不去實(shí)現(xiàn)它的類(lèi)被叫做抽像類(lèi)(abstract class),它用于要?jiǎng)?chuàng)建一個(gè)體現(xiàn)某些基本行為的類(lèi),并為該類(lèi)聲明方法,但不能在該類(lèi)中實(shí)現(xiàn)該類(lèi)的情況。不能創(chuàng)建abstract 類(lèi)的實(shí)例。然而可以創(chuàng)建一個(gè)變量,其類(lèi)型是一個(gè)抽像類(lèi),并讓它指向具體子類(lèi)的一個(gè)實(shí)例。不能有抽像構(gòu)造函數(shù)或抽像靜態(tài)方法。Abstract 類(lèi)的子類(lèi)為它們父類(lèi)中的所有抽像方法提供實(shí)現(xiàn),否則它們也是抽像類(lèi)為。取而代之,在子類(lèi)中實(shí)現(xiàn)該方法。知道其行為的其它類(lèi)可以在類(lèi)中實(shí)現(xiàn)這些方法。
接口(interface)是抽像類(lèi)的變體。在接口中,所有方法都是抽像的。多繼承性可通過(guò)實(shí)現(xiàn)這樣的接口而獲得。接口中的所有方法都是抽像的,沒(méi)有一個(gè)有程序體。接口只可以定義static final成員變量。接口的實(shí)現(xiàn)與子類(lèi)相似,除了該實(shí)現(xiàn)類(lèi)不能從接口定義中繼承行為。當(dāng)類(lèi)實(shí)現(xiàn)特殊接口時(shí),它定義(即將程序體給予)所有這種接口的方法。然后,它可以在實(shí)現(xiàn)了該接口的類(lèi)的任何對(duì)像上調(diào)用接口的方法。由于有抽像類(lèi),它允許使用接口名作為引用變量的類(lèi)型。通常的動(dòng)態(tài)聯(lián)編將生效。引用可以轉(zhuǎn)換到接口類(lèi)型或從接口類(lèi)型轉(zhuǎn)換,instanceof 運(yùn)算符可以用來(lái)決定某對(duì)象的類(lèi)是否實(shí)現(xiàn)了接口。
68.啟動(dòng)一個(gè)線程是用run()還是start()?
答:?jiǎn)?dòng)一個(gè)線程是調(diào)用start()方法,使線程所代表的虛擬處理機(jī)處于可運(yùn)行狀態(tài),這意味著它可以由JVM調(diào)度并執(zhí)行。這并不意味著線程就會(huì)立即運(yùn)行。
run()方法可以產(chǎn)生必須退出的標(biāo)志來(lái)停止一個(gè)線程。
69.兩個(gè)對(duì)像值相同(x.equals(y)== true),但卻可有不同的hashcode,這句話對(duì)不對(duì)?
答:不對(duì),有相同的hashcode。
70.swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?
答:switch(expr1)中,expr1可以是一個(gè)整型,字符或字符串,因此可以作用在byte和long上,也可以作用在string上。
71.當(dāng)一個(gè)線程進(jìn)入一個(gè)對(duì)象的一個(gè)synchronized方法后,其它線程是否可進(jìn)入此對(duì)象的其它方法?
答:不能,一個(gè)對(duì)象的一個(gè)synchronized方法只能由一個(gè)線程訪問(wèn)。
72.abstract的method是否可同時(shí)是static,是否可同時(shí)是native,是否可同時(shí)是synchronized?
答:都不能。
73.List, Set, Map是否繼承自Collection接口?
答:List,Set是,Map不是
74.Set里的元素是不能重復(fù)的,那么用什么方法來(lái)區(qū)分重復(fù)與否呢? 是用==還是equals()? 它們有何區(qū)別?
答:Set里的元素是不能重復(fù)的,那么用iterator()方法來(lái)區(qū)分重復(fù)與否。equals()是判讀兩個(gè)Set是否相等。
equals()和==方法決定引用值是否指向同一對(duì)像,equals()在類(lèi)中被覆蓋,為的是當(dāng)兩個(gè)分離的對(duì)象的內(nèi)容和類(lèi)型相配的話,返回真值。
75.sleep() 和 wait() 有什么區(qū)別?
答:sleep()方法是將當(dāng)前線程掛起指定的時(shí)間。
wait()釋放對(duì)象上的鎖并阻塞當(dāng)前線程,直到它重新獲取該鎖。
76.short s1 = 1; s1 = s1 + 1;有什么錯(cuò)? short s1 = 1; s1 += 1;有什么錯(cuò)?
答:short s1 =1; s1 = s1 + 1;有錯(cuò),
s1是short型,s1+1是int型,不能顯式轉(zhuǎn)化為short型??尚薷臑閟1=(short)(s1 + 1) 。short s1 = 1;s1 += 1正確。
77.談?wù)刦inal,finally, finalize的區(qū)別。
答:final-修飾符(關(guān)鍵字)如果一個(gè)類(lèi)被聲明為final,意味著它不能再派生出新的子類(lèi),不能作為父類(lèi)被繼承。因此一個(gè)類(lèi)不能既被聲明為 abstract的,又被聲明為final的。將變量或方法聲明為final,可以保證它們?cè)谑褂弥?不被改變。被聲明為final的變量必須在聲明時(shí)給定初值,而在以后的引用中只能讀取,不可修改。被聲明為 final的方法也同樣只能使用,不能重載
finally-再異常處理時(shí)提供 finally 塊來(lái)執(zhí)行任何清除操作。如果拋出一個(gè)異常,那么相匹配的 catch 子句就會(huì)執(zhí)行,然后控制就會(huì)進(jìn)入 finally 塊(如果有的話)。
finalize-方法名。Java 技術(shù)允許使用finalize() 方法在垃圾收集器將對(duì)像從內(nèi)存中清除出去之前做必要的清理工作。這個(gè)方法是由垃圾收集器在確定這個(gè)對(duì)象沒(méi)有被引用時(shí)對(duì)這個(gè)對(duì)象調(diào)用的。它是在 Object 類(lèi)中定義的 ,因此所有的類(lèi)都繼承了它。子類(lèi)覆蓋 finalize() 方法以整理系統(tǒng)資源或者執(zhí)行其他清理工作。finalize() 方法是在垃圾收集器刪除對(duì)像之前對(duì)這個(gè)對(duì)象調(diào)用的。
78.如何處理幾十萬(wàn)條并發(fā)數(shù)據(jù)?
答:用存儲(chǔ)過(guò)程或事務(wù)。取得最大標(biāo)識(shí)的時(shí)候同時(shí)更新。注意主鍵不是自增量方式,這種方法并發(fā)的時(shí)候是不會(huì)有重復(fù)主鍵的。取得最大標(biāo)識(shí)要有一個(gè)存儲(chǔ)過(guò)程來(lái)獲取.
79.Session有什么重大BUG,微軟提出了什么方法加以解決?
答:是iis中由于有進(jìn)程回收機(jī)制,系統(tǒng)繁忙的話Session會(huì)丟失,可以用Sate server或SQL Server數(shù)據(jù)庫(kù)的方式存儲(chǔ)Session不過(guò)這種方式比較慢,而且無(wú)法捕獲Session的END事件。
80.成員變量和成員函數(shù)前加static的作用?
答:它們被稱(chēng)為常成員變量和常成員函數(shù),又被稱(chēng)為類(lèi)成員變量和類(lèi)成員函數(shù)。分別用來(lái)反映類(lèi)的狀態(tài)。比如類(lèi)成員變量可以用來(lái)統(tǒng)計(jì)類(lèi)實(shí)例的數(shù)量,類(lèi)成員函數(shù)負(fù)責(zé)這種統(tǒng)計(jì)的動(dòng)作。
81.請(qǐng)說(shuō)明在.net中常用的幾種頁(yè)面間傳遞參數(shù)的方法,并說(shuō)出他們的優(yōu)缺點(diǎn)。
答:session(viewstate)簡(jiǎn)單,但易丟失
application 全局
cookie 簡(jiǎn)單,但可能不支持,可能被偽造
input type="hidden" 簡(jiǎn)單,可能被偽造
url參數(shù)簡(jiǎn)單,顯示于地址欄,長(zhǎng)度有限
數(shù)據(jù)庫(kù)穩(wěn)定,安全,但性能相對(duì)弱
82.請(qǐng)指出GAC的含義?
答:全局程序集緩存。
83.向服務(wù)器發(fā)送請(qǐng)求有幾種方式?
答:get,post。get一般為鏈接方式,post一般為按鈕方式。
84.軟件開(kāi)發(fā)過(guò)程一般有幾個(gè)階段?每個(gè)階段的作用?
答:需求分析,架構(gòu)設(shè)計(jì),代碼編寫(xiě),QA,部署
85.在c#中using和new這兩個(gè)關(guān)鍵字有什么意義,請(qǐng)寫(xiě)出你所知道的意義?using 指令 和語(yǔ)句 new 創(chuàng)建實(shí)例 new 隱藏基類(lèi)中方法。
答:using 引入名稱(chēng)空間或者使用非托管資源
new 新建實(shí)例或者隱藏父類(lèi)方法
86.需要實(shí)現(xiàn)對(duì)一個(gè)字符串的處理,首先將該字符串首尾的空格去掉,如果字符串中間還有連續(xù)空格的話,僅保留一個(gè)空格,即允許字符串中間有多個(gè)空格,但連續(xù)的空格數(shù)不可超過(guò)一個(gè).
答:string inputStr=" xx xx ";
inputStr = Regex.Replace(inputStr.Trim(),"*"," ");
87.什么叫做SQL注入,如何防止?請(qǐng)舉例說(shuō)明。
答:利用sql語(yǔ)言漏洞獲得合法身份登陸系統(tǒng)。如身份驗(yàn)證的程序設(shè)計(jì)成:
SqlCommand com=new SqlCommand("Select * from users where username='"+t_name.text+"' and pwd='"+t_pwd.text+"'");
object obj=com.ExcuteScale();
if(obj!=null)
{
//通過(guò)驗(yàn)證
}
這段代碼容易被sql注入。如用戶(hù)在t_name中隨便輸入,在t_pwd中輸入1' and 1='1 就可以進(jìn)入系統(tǒng)了。
88.什么是ApplicationPool?
答:Web應(yīng)用,類(lèi)似Thread Pool,提高并發(fā)性能。
89.什么是XML?
答:XML即可擴(kuò)展標(biāo)記語(yǔ)言。eXtensible Markup Language.標(biāo)記是指計(jì)算機(jī)所能理解的信息符號(hào),通過(guò)此種標(biāo)記,計(jì)算機(jī)之間可以處理包含各種信息的文章等。如何定義這些標(biāo)記,即可以選擇國(guó)際通用的標(biāo)記語(yǔ)言,比如HTML,也可以使用象XML這樣由相關(guān)人士自由決定的標(biāo)記語(yǔ)言,這就是語(yǔ)言的可擴(kuò)展性。XML是從SGML中簡(jiǎn)化修改出來(lái)的。它主要用到的有XML、XSL和XPath等。
90.什么是ASP.net中的用戶(hù)控件?
答:用戶(hù)控件一般用在內(nèi)容多為靜態(tài),或者少許會(huì)改變的情況下.用的比較大.類(lèi)似ASP中的include.但是功能要強(qiáng)大的多。
91.什么是code-Behind技術(shù)。
答:aspx,resx和cs三個(gè)后綴的文件,這個(gè)就是代碼分離.實(shí)現(xiàn)了HTML代碼和服務(wù)器代碼分離.方便代碼編寫(xiě)和整理.
92.XML 與 HTML 的主要區(qū)別
答:1. XML是區(qū)分大小寫(xiě)字母的,HTML不區(qū)分。
2. 在HTML中,如果上下文清楚地顯示出段落或者列表鍵在何處結(jié)尾,那么你可以省略</p>或者</li>之類(lèi)的結(jié)束 標(biāo)記。在XML中,絕對(duì)不能省略掉結(jié)束標(biāo)記。
3. 在XML中,擁有單個(gè)標(biāo)記而沒(méi)有匹配的結(jié)束標(biāo)記的元素必須用一個(gè) / 字符作為結(jié)尾。這樣分析器就知道不用查找結(jié)束標(biāo)記了。
4. 在XML中,屬性值必須分裝在引號(hào)中。在HTML中,引號(hào)是可用可不用的。
5. 在HTML中,可以擁有不帶值的屬性名。在XML中,所有的屬性都必須帶有相應(yīng)的值。
93.類(lèi)成員有_____種可訪問(wèn)形式?
答:this.; newClass().Method;
94.在Asp.net中所有的自定義用戶(hù)控件都必須繼承自________?
答:Control。
95.在.Net中所有可序列化的類(lèi)都被標(biāo)記為_(kāi)____?
答:[serializable]
96.在.Net托管代碼中我們不用擔(dān)心內(nèi)存漏洞,這是因?yàn)橛辛薩_____?
答:GC
97.在.Net中,類(lèi)System.Web.UI.Page 可以被繼承么?
答:可以。
98.net的錯(cuò)誤處理機(jī)制是什么?
答:.net錯(cuò)誤處理機(jī)制采用try->catch->finally結(jié)構(gòu),發(fā)生錯(cuò)誤時(shí),層層上拋,直到找到匹配的Catch為止。
99.利用operator聲明且僅聲明了==,有什么錯(cuò)誤么?
答:要同時(shí)修改Equale和GetHash() ? 重載了"==" 就必須重載 "!="
100.某一密碼僅使用K、L、M、N、O共5個(gè)字母,密碼中的單詞從左向右排列,密碼單詞必須遵循如下規(guī)則:
(1) 密碼單詞的最小長(zhǎng)度是兩個(gè)字母,可以相同,也可以不同
(2) K不可能是單詞的第一個(gè)字母
(3) 如果L出現(xiàn),則出現(xiàn)次數(shù)不止一次
(4) M不能使最后一個(gè)也不能是倒數(shù)第二個(gè)字母
(5) K出現(xiàn),則N就一定出現(xiàn)
(6) O如果是最后一個(gè)字母,則L一定出現(xiàn)
問(wèn)題一:下列哪一個(gè)字母可以放在LO中的O后面,形成一個(gè)3個(gè)字母的密碼單詞?
A) K B)L C) M D) N
答案:B
問(wèn)題二:如果能得到的字母是K、L、M,那么能夠形成的兩個(gè)字母長(zhǎng)的密碼單詞的總數(shù)是多少?
A)1個(gè) B)3個(gè) C)6個(gè) D)9個(gè)
答案:A
問(wèn)題三:下列哪一個(gè)是單詞密碼?
A) KLLN B) LOML C) MLLO D)NMKO
答案:C
109.ADO.NET相對(duì)于ADO等主要有什么改進(jìn)?
答:1:ado.net不依賴(lài)于ole db提供程序,而是使用.net托管提供的程序,
2:不使用com
3:不在支持動(dòng)態(tài)游標(biāo)和服務(wù)器端游
4:,可以斷開(kāi)connection而保留當(dāng)前數(shù)據(jù)集可用
5:強(qiáng)類(lèi)型轉(zhuǎn)換
6:xml支持
110.大概描述一下ASP.NET服務(wù)器控件的生命周期
答:初始化 加載視圖狀態(tài)處理回發(fā)數(shù)據(jù) 加載 發(fā)送回發(fā)更改通知 處理回發(fā)事件 預(yù)呈現(xiàn) 保存狀態(tài) 呈現(xiàn) 處置 卸載
111.Anonymous Inner Class (匿名內(nèi)部類(lèi)) 是否可以extends(繼承)其它類(lèi),是否可以implements(實(shí)現(xiàn))interface(接口)?
答:不能,可以實(shí)現(xiàn)接口
112.Static Nested Class 和 Inner Class的不同,說(shuō)得越多越好
答:StaticNested Class是被聲明為靜態(tài)(static)的內(nèi)部類(lèi),它可以不依賴(lài)于外部類(lèi)實(shí)例被實(shí)例化。而通常的內(nèi)部類(lèi)需要在外部類(lèi)實(shí)例化后才能實(shí)例化。
113.&和&&的區(qū)別
答:&是位運(yùn)算符,表示按位與運(yùn)算,&&是邏輯運(yùn)算符,表示邏輯與(and).
114.<%# %> 和 <% %> 有什么區(qū)別?
答:<%# %>表示綁定的數(shù)據(jù)源,<% %>是服務(wù)器端代碼塊
115.你覺(jué)得ASP.NET 2.0(VS2005)和你以前使用的開(kāi)發(fā)工具(.Net 1.0或其他)有什么最大的區(qū)別?你在以前的平臺(tái)上使用的哪些開(kāi)發(fā)思想(pattern/ architecture)可以移植到ASP.NET2.0上 (或者已經(jīng)內(nèi)嵌在ASP.NET 2.0中)
答:1、ASP.NET2.0把一些代碼進(jìn)行了封裝打包,所以相比1.0相同功能減少了很多代碼。
2、同時(shí)支持代碼分離和頁(yè)面嵌入服務(wù)器端代碼兩種模式,以前1.0版本,.NET提示幫助只有在分離的代碼文件,無(wú) 法 在頁(yè)面嵌入服務(wù)器端代碼獲得幫助提示。
3、代碼和設(shè)計(jì)界面切換的時(shí)候,2.0支持光標(biāo)定位.這個(gè)我比較喜歡。
4、在綁定數(shù)據(jù),做表的分頁(yè).UPDATE,DELETE,等操作都可以可視化操作,方便了初學(xué)者。
5、在ASP.NET中增加了40多個(gè)新的控件,減少了工作量。
116.重載與覆蓋的區(qū)別?
答:1、方法的覆蓋是子類(lèi)和父類(lèi)之間的關(guān)系,是垂直關(guān)系;方法的重載是同一個(gè)類(lèi)中方法之間的關(guān)系,是水平關(guān)系。
2、覆蓋只能由一個(gè)方法,或只能由一對(duì)方法產(chǎn)生關(guān)系;方法的重載是多個(gè)方法之間的關(guān)系。
3、覆蓋要求參數(shù)列表相同;重載要求參數(shù)列表不同。
4、覆蓋關(guān)系中,調(diào)用那個(gè)方法體,是根據(jù)對(duì)象的類(lèi)型(對(duì)像對(duì)應(yīng)存儲(chǔ)空間類(lèi)型)來(lái)決定;重載關(guān)系,是根據(jù)調(diào)用時(shí)的實(shí)參表與形參表來(lái)選擇方法體的。
117.什么是WSE?目前最新的版本是多少?
答:WSE (WebService Extension)包來(lái)提供最新的WEB服務(wù)安全保證,最新版本2.0。
118.a=10,b=15,在不用第三方變量的前提下,把a(bǔ),b的值互換
答:a=a+b;b=a-b;a=a-b;
119.還有變態(tài)要求,需要代碼最短呢。有兩個(gè)結(jié)果:
1) a^=b^(b^=a^b); // 13個(gè)字節(jié)
2) a=b+(b=a)*0; // 11個(gè)字節(jié)
120.請(qǐng)簡(jiǎn)述面向?qū)ο蟮亩鄳B(tài)的特性及意義!
答:面向?qū)ο蟮木幊淌褂昧伺缮^承以及虛函數(shù)機(jī)制.一個(gè)本來(lái)指向基類(lèi)的對(duì)象指針可以指向其派生類(lèi)的.并訪問(wèn)從基類(lèi)繼承而來(lái)的成員變量和函數(shù).而虛函數(shù)是專(zhuān)門(mén)為這個(gè)特性設(shè)計(jì)的,這個(gè)函數(shù)在每個(gè)基類(lèi)的派生類(lèi)中都是同一個(gè)名字,但函數(shù)體卻并不一定相同,派生類(lèi)往往為實(shí)現(xiàn)自己的功能而修改這個(gè)虛函數(shù).這樣用一個(gè)指針就能夠?qū)崿F(xiàn)對(duì)多種不同的派生類(lèi)的訪問(wèn), 并實(shí)現(xiàn)其派生類(lèi)的特定功能(代碼 )
121.session喜歡丟值且占內(nèi)存,Cookis不安全,請(qǐng)問(wèn)用什么辦法代替這兩種原始的方法
答:用ViewState,stateserver
122.對(duì)數(shù)據(jù)的并發(fā)采用什么辦法進(jìn)行處理較好。
答:可以控制連接池的連接數(shù)量,條件好的話可以用負(fù)載平衡
123.ADO.NET處理數(shù)據(jù)并發(fā)的方法和步驟?
答:開(kāi)放式并發(fā),沒(méi)有用到數(shù)據(jù)庫(kù)的鎖,而依靠SQL語(yǔ)句判斷數(shù)據(jù)是否已經(jīng)變化了。
步驟:通常使用VS提供的工具生成SQL語(yǔ)句,工具生成的結(jié)果實(shí)在不符合要求,才手工寫(xiě)SQL語(yǔ)句。
124.動(dòng)態(tài)創(chuàng)建的控件PostBack后是否可以保存下來(lái),為什么?
答:ASP.NET框架不會(huì)為你保存,但可以手工保存到ViewState
125.T-SQL中is null和null 的區(qū)別?
答:is null 和 null 區(qū)別相當(dāng)于 "是空盒子" 和 "空盒子"的區(qū)別
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
- 這篇文章主要介紹了ASP.NET(C#) 面試總結(jié)面試題大全,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2020-08-11

