西安.NET培訓(xùn)中心提供.NET面試題
QQ:1350366700 643430980 電話:029-8878946
1. C#中 property 與 attribute的區(qū)別,他們各有什么用處,這種機(jī)制的好處在哪里?
答:一個(gè)是屬性,用于存取類的字段,一個(gè)是特性,用來標(biāo)識類,方法等的附加性質(zhì)
2. 講一講你理解的web service,在dot net framework中,怎么很好的結(jié)合xml?(講概念就行了)
答:web服務(wù),是利用SOAP(簡單對象訪問協(xié)議,Simple Object Access Protocol)在HTTP上執(zhí)行遠(yuǎn)程方法調(diào)用的一種方法,也可以使用WSDL(Web Service Description Language,Web服務(wù)描述語言)來完整的描述Web服務(wù),基于XML標(biāo)準(zhǔn)。
3. C#, Java 和 c++的特點(diǎn),有什么相同的地方,不同的地方,C#分別從c++和java中吸取了他們那些優(yōu)點(diǎn)?
答:都是面向?qū)ο蟮恼Z言,C#和java都是建立在虛擬機(jī)上的。從java中吸取了跨語言。
4. C#可否對內(nèi)存進(jìn)行直接的操作?(這可是個(gè)難點(diǎn)哦?要注意!)
答:可以,只要標(biāo)記為unsafe
5. 用Visual C++ 6.0編寫的代碼(unmanaged code),如何在CLR下和其他dot net component結(jié)合?
答:被編譯成dll
6. 以前作過的一些項(xiàng)目?介紹一下自己的編程經(jīng)驗(yàn)。(這是蒙混不過去的,基本一問就知道是真是假)
7. 你對公司有什么期望?你的薪水期望值?為什么學(xué)計(jì)算機(jī)?以前的工作經(jīng)驗(yàn)(這非常重要)?
Q3: 維護(hù)數(shù)據(jù)庫的完整性、一致性、你喜歡用觸發(fā)器還是自寫業(yè)務(wù)邏輯?為什么
答:使用數(shù)據(jù)庫關(guān)系:這樣可以盡可能的規(guī)范編碼、對比較大型的開發(fā)來說也容易維護(hù)數(shù)據(jù)的一致性和完整性,也讓數(shù)據(jù)庫的性能盡可能的發(fā)揮出來。
實(shí)在是不能使用數(shù)據(jù)庫的關(guān)系的時(shí)候才使用觸發(fā)器,這讓數(shù)據(jù)邏輯簡單,但這時(shí)候要注意記錄文檔,不然,觸發(fā)器多了,維護(hù)難度會相當(dāng)大。
*是自己編寫邏輯:這樣會造成數(shù)據(jù)的一致性,完整性的維護(hù)邏輯相當(dāng)大,也十分分散,沒有良好的文檔記錄習(xí)慣的話,一旦任務(wù)出現(xiàn)交接,其他人很難繼續(xù)你未完成的工作,甚至于過一段時(shí)間以后,自己要完全理請邏輯都是一個(gè)麻煩的事!因?yàn)檫@些邏輯相當(dāng)于隱藏起來了的。
Q4:ADO。NET相對于ADO等主要有什么改進(jìn)?
答:ADO以Recordset存儲,而ADO.NET則以DataSet表示。Recordset看起來更像單表,如果讓Recordset以多表的方式表示就必須在SQL中進(jìn)行多表連接。反之,DataSet可以是多個(gè)表的集合。ADO 的運(yùn)作是一種在線方式,這意味著不論是瀏覽或更新數(shù)據(jù)都必須是實(shí)時(shí)的。ADO.NET則使用離線方式,在訪問數(shù)據(jù)的時(shí)候ADO.NET會利用XML制作數(shù)據(jù)的一份幅本,ADO.NET的數(shù)據(jù)庫連接也只有在這段時(shí)間需要在線。由于ADO使用COM技術(shù),這就要求所使用的數(shù)據(jù)類型必須符合COM規(guī)范,而ADO.NET基于XML格式,數(shù)據(jù)類型更為豐富并且不需要再做COM編排導(dǎo)致的數(shù)據(jù)類型轉(zhuǎn)換,從而提高了整體性能。
Q5:ASP。NET與ASP相比,主要有哪些進(jìn)步?
答:ASP.Net擺脫了以前ASP使用腳本語言來編程的缺點(diǎn),理論上可以使用任何編程語言包括C++ , VB , JS等等,當(dāng)然,最合適的編程語言還是MS為.Net Frmaework專門推出的C(讀c sharp),它可以看作是VC和Java的混合體吧,盡管MS自己講C#內(nèi)核中更多的象VC,但實(shí)際上我還是認(rèn)為它和Java更象一些吧。首先它是面向?qū)ο蟮木幊陶Z言,而不是一種腳本,所以它具有面向?qū)ο缶幊陶Z言的一切特性,比如封裝性、繼承性、多態(tài)性等等,這就解決了剛才談到的ASP的那些弱點(diǎn)。封裝性使得代碼邏輯清晰,易于管理,并且應(yīng)用到ASP.Net上就可以使業(yè)務(wù)邏輯和Html頁面分離,這樣無論頁面原型如何改變,業(yè)務(wù)邏輯代碼都不必做任何改動;繼承性和多態(tài)性使得代碼的可重用性大大提高,你可以通過繼承已有的對象*限度保護(hù)你以前的投資。并且C#和C++、Java一樣提供了完善的調(diào)試/糾錯(cuò)體系。
Q6:C#中的委托是什么?事件是不是一種委托?
答:委托是一種安全的函數(shù)指針,事件是一種消息機(jī)制
Q7:描述一下C#中索引器的實(shí)現(xiàn)過程,是否只能根據(jù)數(shù)字進(jìn)行索引?
Q8:C#中要使一個(gè)類支持FOREACH遍歷,實(shí)現(xiàn)過程怎樣?
答:實(shí)現(xiàn)接口IEnumerable
Q10:寫一個(gè)HTML頁面,實(shí)現(xiàn)以下功能,左鍵點(diǎn)擊頁面時(shí)顯示“您好”,右鍵點(diǎn)擊時(shí)顯示“禁止右鍵”。并在2分鐘后自動關(guān)閉頁面。
Q11:你對XMLHTTP、WEBSERVICE 了解嗎?簡單描述其特點(diǎn)、作用
答:XMLHTTP可以主動獲取遠(yuǎn)端web代碼,類似HttpWebRequest
Q12:接口和抽象類有什么區(qū)別?你選擇使用接口和抽象類的依據(jù)是什么?
答:接口用于規(guī)范,抽象類用于共性。接口中只能聲明方法,屬性,事件,索引器。而抽象類中可以有方法的實(shí)現(xiàn),也可以定義非靜態(tài)的類變量。抽象類是類,所以只能被單繼承,但是接口卻可以一次實(shí)現(xiàn)多個(gè)。抽象類可以提供某些方法的部分實(shí)現(xiàn),接口不可以.抽象類的實(shí)例是它的子類給出的。接口的實(shí)例是實(shí)現(xiàn)接口的類給出的。再抽象類中加入一個(gè)方法,那么它的子類就同時(shí)有了這個(gè)方法。而在接口中加入新的方法,那么實(shí)現(xiàn)它的類就要重新編寫(這就是為什么說接口是一個(gè)類的規(guī)范了)。接口成員被定義為公共的,但抽象類的成員也可以是私有的、受保護(hù)的、內(nèi)部的或受保護(hù)的內(nèi)部成員(其中受保護(hù)的內(nèi)部成員只能在應(yīng)用程序的代碼或派生類中訪問)。此外接口不能包含字段、構(gòu)造函數(shù)、析構(gòu)函數(shù)、靜態(tài)成員或常量。
Q13:自定義控件和一般用戶控件的異同?如果要用這兩者之一,你會選擇哪種?為什么
答:用戶控件(UserControl): 擴(kuò)展名為*.ascx,跟*.aspx在結(jié)構(gòu)上相似,是指頁面中
加載的功能塊,只是用戶控件不能單獨(dú)作為頁面運(yùn)行,必須嵌入到*.aspx頁面或其它用
戶控件中使用 。
自定義控件,跟HtmlControl或WebControl相似,編譯后可以添加引用到工具欄里
面,直接用鼠標(biāo)拖動使用。
看情況使用,如果功能比較多,會用自定義控件。
Q14:大概描述一下ASP。NET服務(wù)器控件的生命周期
答:(1)初始化----在此階段中,主要完成兩項(xiàng)工作:一、初始化在傳入Web請求生命周期內(nèi)所需的設(shè)置;二、跟蹤視圖狀態(tài)。首先,頁面框架通過默認(rèn)方式引發(fā)Init事件,并調(diào)用OnInit()方法,控件開發(fā)人員可以重寫該方法為控件提供初始化邏輯。此后,頁面框架將調(diào)用TrackViewState方法來跟蹤視圖狀態(tài)。需要注意的是:多數(shù)情況下,Control基類提供的TrackViewState方法實(shí)現(xiàn)已經(jīng)足夠了。只有在控件定義了復(fù)雜屬性時(shí),開發(fā)人員才可能需要重寫TrackViewState方法。
(2)加載視圖狀態(tài)----此階段的主要任務(wù)是檢查服務(wù)器控件是否存在以及是否需要將其狀態(tài)恢復(fù)到它在處理之前的請求結(jié)束的狀態(tài)。因此該過程發(fā)生在頁面回傳過程中,而不是初始化請求過程。在此階段,頁面框架將自動恢復(fù)ViewState字典。如果服務(wù)器控件不維持其狀態(tài),或者它有能力通過默認(rèn)方式保存其所有狀態(tài)而使用ViewState字典,那么開發(fā)人員則不必實(shí)現(xiàn)任何邏輯。針對那些無法在ViewState字典中存儲的數(shù)據(jù)類型或者需要自定義狀態(tài)管理的情況,開發(fā)人員可以通過重寫LoadViewState方法來自定義狀態(tài)的恢復(fù)和管理。
(3)處理回發(fā)數(shù)據(jù)----若要使控件能夠檢查客戶端發(fā)回的窗體數(shù)據(jù),那么必須實(shí)現(xiàn)System.Web.UI.IPostBackDataHandler接口的 LoadPostData()方法。因此只有處理回發(fā)數(shù)據(jù)的控件參與此階段。
(4)加載----至此階段開始,控件樹中的服務(wù)器控件已創(chuàng)建并初始化、狀態(tài)已還原并且窗體控件反映了客戶端的數(shù)據(jù)。此時(shí),開發(fā)人員可以通過重寫OnLoad()方法來實(shí)現(xiàn)每個(gè)請求共同的邏輯。
(5)發(fā)送回發(fā)更改通知----在此階段,服務(wù)器控件通過引發(fā)事件作為一種信號,表明由于回發(fā)而發(fā)生的控件狀態(tài)變化(因此該階段僅用于回發(fā)過程)。為了建立這種信號,開發(fā)人員必須再次使用System.Web.UI.IPostBackDataHandler接口,并實(shí)現(xiàn)另一方法-RaisePostBackChangedEvent()。其判斷過程為:如果控件狀態(tài)因回發(fā)而更改,則LoadPostData()返回true;否則返回false。頁面框架跟蹤所有返回true的控件并在這些控件上調(diào)用RaisePostDataChangedEvent()。
(6)處理回發(fā)事件----該階段處理引起回發(fā)的客戶端事件。為了便于將客戶端事件映射到服務(wù)器端事件上進(jìn)行處理,開發(fā)人員在此階段可以通過實(shí)現(xiàn)System.Web.UI.IPostBackEventHandler接口的RaisePostBackEvent()方法來實(shí)現(xiàn)該邏輯。由此途徑,服務(wù)器控件將成功捕獲回發(fā)的客戶端事件進(jìn)行服務(wù)器端的相應(yīng)處理。
(7)預(yù)呈現(xiàn)----該階段完成在生成控件之前所需要的任何工作。通常情況下是通過重寫OnPreRender()方法完成該工作。需要注意的是:在該階段,可以保存在預(yù)呈現(xiàn)階段對控件狀態(tài)所做的更改,而在呈現(xiàn)階段進(jìn)行的更改則會丟失。
(8)保存狀態(tài)----如果服務(wù)器控件不維持狀態(tài),或者它有能力通過默認(rèn)方式保存其所有狀態(tài)而使用ViewState字典,那么開發(fā)人員不必在該階段實(shí)現(xiàn)任何邏輯。因?yàn)檫@個(gè)保存狀態(tài)的過程是自動的。如果服務(wù)器控件需要自定義狀態(tài)保存,或者控件無法在ViewState字典中存儲特殊的數(shù)據(jù)類型,則需要通過重寫SaveViewState()方法來實(shí)現(xiàn)狀態(tài)保存。
(9)呈現(xiàn)----表示向HTTP輸出流中寫入標(biāo)記文本的過程。開發(fā)人員通過重寫Render()方法使其在輸出流上自定義標(biāo)記文本。
(10)處置----在此階段中,通過重寫Dispose ()方法完成釋放對昂貴資源的引用,如數(shù)據(jù)庫鏈接等。
(11)卸載----完成的工作與"處置"階段相同,但是,開發(fā)人員通常在Dispose()方法中執(zhí)行清除,而不處理Unload事件。
Q15:UML
答:統(tǒng)一建模語言。
Q16:面向?qū)ο蟮母拍?,主要特點(diǎn)
答:封裝,繼承,多態(tài)
Q17:類劃分的依據(jù)。類粒度問題
Q18:事物管理問題