C# .NET面試題.doc_第1頁
C# .NET面試題.doc_第2頁
C# .NET面試題.doc_第3頁
C# .NET面試題.doc_第4頁
C# .NET面試題.doc_第5頁
已閱讀5頁,還剩24頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

本文集中了多條常見的C#、.Net經(jīng)典面試題目例如“.NET中類和結(jié)構(gòu)的區(qū)別”、“ASP.NET頁面之間傳遞值的幾種方式?”,并簡明扼要的給出了答案,希望能對學習C#、.Net的讀者有所幫助。 1, 請你說說.NET中類和結(jié)構(gòu)的區(qū)別?答:結(jié)構(gòu)和類具有大體的語法,但是結(jié)構(gòu)受到的限制比類要多。結(jié)構(gòu)不能申明有默認的構(gòu)造函數(shù),為結(jié)構(gòu)的副本是又編譯器創(chuàng)建和銷毀的,所以不需要默 認的構(gòu)造函數(shù)和析構(gòu)函數(shù)。結(jié)構(gòu)是值類型,所以對結(jié)構(gòu)變量所做的改變不會影響其的原值,而類是應用類型,改變其變量的值會改變其原值。申明結(jié)構(gòu)用 Struck關(guān)鍵字,申明類用class關(guān)鍵字,向方法傳遞結(jié)構(gòu)是時是通過值傳遞的,而不是通過引用。與類不同,結(jié)構(gòu)的實例化可以不使用New關(guān)鍵字。類 可以實現(xiàn)接口。2, 死鎖的必要條件?怎么克服?答:系統(tǒng)的資源不足,進程的推進的順序不合適,資源分配不當,一個資源每次只能被一個進程使用,一個資源請求資源時,而此時這個資源已阻塞,對已獲得資源不放,進程獲得資源時,未使用完前,不能強行剝奪。3, 接口是否可以繼承接口?抽象類是否可以實現(xiàn)接口?抽象類是否可以繼承實體類?答:接口是可以繼承接口的,抽象類是可以實現(xiàn)接口的,抽象類可以繼承實體類,但是有個條件,條件是,實體類必須要有明確的構(gòu)造函數(shù)。4, 構(gòu)造器Constructor是否可以被繼承?是否可以被Override?答:Constructor不可以被繼承,因此不能被重寫(Overriding),但可以被重載(Overloading).5, 當一個線程進入一個對象的方法后,其它線程是否可以進入該對象的方法?答:不可以,一個對象的方法只能由一個線程訪問。6, 用最有效的方法算出等已8對于幾?答:2=ln(n)/ln2(k=1)解得k=ln(n)/ln3(2)k*ln3/ln2=ln(2n)/ln2(k1)解得k=ln(2n)/ln3這是得到下限,可以很輕易證明滿足條件的最小正整數(shù)k就是所求。比如稱3次知道輕重可以從33=27個球中找出不同的球出來,如果不知道輕重就只能從(33-1)/2=13個球中找出不同的球出來。.net筆試題姓名: 日期:1. 填空: (1)面向?qū)ο蟮恼Z言具有_封裝_性、_繼承_性、_多態(tài)_性。 (2)能用foreach遍歷訪問的對象需要實現(xiàn) _IEnumerable_接口或聲明_GetEnumerable_方法的類型。 (3)列舉ADO.net中的五個主要對象_Command_、_Connection_、_DataAdapter_、_DataSet_、_DataReader_。2. 不定項選擇:(1) 以下敘述正確的是:bc A. 接口中可以有虛方法。 B. 一個類可以實現(xiàn)多個接口。 C. 接口不能被實例化。 D. 接口中可以包含已實現(xiàn)的方法。 (2) 從數(shù)據(jù)庫讀取記錄,你可能用到的方法有:bcd A. ExecuteNonQuery B. ExecuteScalar C. Fill D. ExecuteReader3. 簡述 private、 protected、 public、 internal 修飾符的訪問權(quán)限。答:public 不受限制的訪問Private 只能在本類中訪問Protected 本類和繼承與他的類中的都能訪問Internal 同一個應用程序或類庫中4. 寫出一條Sql語句: 取出表A中第31到第40記錄(SQLServer, 以自動增長的ID作為主鍵, 注意:ID可能不是連續(xù)的。)答:select top 10 from a where id not in(select top 30 from a)或:select top 10 from a where id (select max(id) from (select top 30 from a) as b)5 .列舉ASP.NET 頁面之間傳遞值的幾種方式。答:session(viewstate) 簡單,但易丟失application 全局cookie 簡單,但可能不支持,可能被偽造input type=hidden 簡單,可能被偽造url參數(shù) 簡單,顯示于地址欄,長度有限數(shù)據(jù)庫 穩(wěn)定,安全,但性能相對弱6. 寫出程序的輸出結(jié)果class Class1 private string str = Class1.str; private int i = 0; static void StringConvert(string str) str = string being converted.; static void StringConvert(Class1 c) c.str = string being converted.; static void Add(int i) i+; static void AddWithRef(ref int i) i+; static void Main() int i1 = 10; int i2 = 20; string str = str; Class1 c = new Class1(); Add(i1); AddWithRef(ref i2); Add(c.i); StringConvert(str); StringConvert(c); Console.WriteLine(i1); Console.WriteLine(i2); Console.WriteLine(c.i); Console.WriteLine(str); Console.WriteLine(c.str); 答:10,21,0,str,string being converted.7.寫出程序的輸出結(jié)果public abstract class A public A() Console.WriteLine(A); public virtual void Fun() Console.WriteLine(A.Fun(); public class B: A public B() Console.WriteLine(B); public new void Fun() Console.WriteLine(B.Fun(); public static void Main() A a = new B(); a.Fun(); 答:A,B,A.Fun()8. 寫出程序的輸出結(jié)果:public class A public virtual void Fun1(int i) Console.WriteLine(i); public void Fun2(A a) a.Fun1(1); Fun1(5); public class B : A public override void Fun1(int i) base.Fun1 (i + 1); public static void Main() B b = new B(); A a = new A(); a.Fun2(b); b.Fun2(a); 答:2,5,1,69. 一列數(shù)的規(guī)則如下: 1、1、2、3、5、8、13、21、34. 求第30位數(shù)是多少, 用遞歸算法實現(xiàn)。(C#語言)答:private int Add(int i) if (i = 0) return 0; else if (i = 1 | i = 2) return 1; else return Add(i - 1) + Add(i - 2); 10. 程序設(shè)計: 貓大叫一聲,所有的老鼠都開始逃跑,主人被驚醒。(C#語言)要求: 1.要有聯(lián)動性,老鼠和主人的行為是被動的。2.考慮可擴展性,貓的叫聲可能引起其他聯(lián)動效應。 public interface Observer void Response(); /觀察者的響應,如是老鼠見到貓的反映 public interface Subject void AimAt(Observer obs); /針對哪些觀察者,這里指貓的要撲捉的對象-老鼠 public class Mouse : Observer private string name; public Mouse(string name, Subject subj) = name; subj.AimAt(this); public void Response() Console.WriteLine(name + attempt to escape!); public class Master : Observer public Master(Subject subj) subj.AimAt(this); public void Response() Console.WriteLine(Host waken!); public class Cat : Subject private ArrayList observers; public Cat() this.observers = new ArrayList(); public void AimAt(Observer obs) this.observers.Add(obs); public void Cry() Console.WriteLine(Cat cryed!); foreach (Observer obs in this.observers) obs.Response(); class MainClass static void Main(string args) Cat cat = new Cat(); Mouse mouse1 = new Mouse(mouse1, cat); Mouse mouse2 = new Mouse(mouse2, cat); Master master = new Master(cat); cat.Cry(); /-設(shè)計方法二: 使用event - delegate設(shè)計. public delegate void SubEventHandler(); public abstract class Subject public event SubEventHandler SubEvent; protected void FireAway() if (this.SubEvent != null) this.SubEvent(); public class Cat : Subject public void Cry() Console.WriteLine(cat cryed.); this.FireAway(); public abstract class Observer public Observer(Subject sub) sub.SubEvent += new SubEventHandler(Response); public abstract void Response(); public class Mouse : Observer private string name; public Mouse(string name, Subject sub) : base(sub) = name; public override void Response() Console.WriteLine(name + attempt to escape!); public class Master : Observer public Master(Subject sub) : base(sub) public override void Response() Console.WriteLine(host waken); class Class1 static void Main(string args) Cat cat = new Cat(); Mouse mouse1 = new Mouse(mouse1, cat); Mouse mouse2 = new Mouse(mouse2, cat); Master master = new Master(cat); cat.Cry(); 1. C#中 property 與 attribute的區(qū)別,他們各有什么用處,這種機制的好處在哪里? 答:一個是屬性,用于存取類的字段,一個是特性,用來標識類,方法等的附加性質(zhì)2. 講一講你理解的web service,在dot net framework中,怎么很好的結(jié)合xml?(講概念就行了)答:web服務,是利用SOAP(簡單對象訪問協(xié)議,Simple Object Access Protocol)在HTTP上執(zhí)行遠程方法調(diào)用的一種方法,也可以使用WSDL(Web Service Description Language,Web服務描述語言)來完整的描述Web服務,基于XML標準。3. C#, Java 和 c+的特點,有什么相同的地方,不同的地方,C#分別從c+和java中吸取了他們那些優(yōu)點?答:都是面向?qū)ο蟮恼Z言,C#和java都是建立在虛擬機上的。從java中吸取了跨語言。4. C#可否對內(nèi)存進行直接的操作?(這可是個難點哦?要注意?。┐穑嚎梢?,只要標記為unsafe5. 用Visual C+ 6.0編寫的代碼(unmanaged code),如何在CLR下和其他dot net component結(jié)合?答:被編譯成dll6. 以前作過的一些項目?介紹一下自己的編程經(jīng)驗。(這是蒙混不過去的,基本一問就知道是真是假)7. 你對公司有什么期望?你的薪水期望值?為什么學計算機?以前的工作經(jīng)驗(這非常重要)? Q3: 維護數(shù)據(jù)庫的完整性、一致性、你喜歡用觸發(fā)器還是自寫業(yè)務邏輯?為什么答:使用數(shù)據(jù)庫關(guān)系:這樣可以盡可能的規(guī)范編碼、對比較大型的開發(fā)來說也容易維護數(shù)據(jù)的一致性和完整性,也讓數(shù)據(jù)庫的性能盡可能的發(fā)揮出來。實在是不能使用數(shù)據(jù)庫的關(guān)系的時候才使用觸發(fā)器,這讓數(shù)據(jù)邏輯簡單,但這時候要注意記錄文檔,不然,觸發(fā)器多了,維護難度會相當大。最后是自己編寫邏輯:這樣會造成數(shù)據(jù)的一致性,完整性的維護邏輯相當大,也十分分散,沒有良好的文檔記錄習慣的話,一旦任務出現(xiàn)交接,其他人很難繼續(xù)你未完成的工作,甚至于過一段時間以后,自己要完全理請邏輯都是一個麻煩的事!因為這些邏輯相當于隱藏起來了的。Q4:ADO。NET相對于ADO等主要有什么改進?答:ADO以Recordset存儲,而ADO.NET則以DataSet表示。Recordset看起來更像單表,如果讓Recordset以多表的方式表示就必須在SQL中進行多表連接。反之,DataSet可以是多個表的集合。ADO 的運作是一種在線方式,這意味著不論是瀏覽或更新數(shù)據(jù)都必須是實時的。ADO.NET則使用離線方式,在訪問數(shù)據(jù)的時候ADO.NET會利用XML制作數(shù)據(jù)的一份幅本,ADO.NET的數(shù)據(jù)庫連接也只有在這段時間需要在線。由于ADO使用COM技術(shù),這就要求所使用的數(shù)據(jù)類型必須符合COM規(guī)范,而ADO.NET基于XML格式,數(shù)據(jù)類型更為豐富并且不需要再做COM編排導致的數(shù)據(jù)類型轉(zhuǎn)換,從而提高了整體性能。Q5:ASP。NET與ASP相比,主要有哪些進步?答:ASP.Net擺脫了以前ASP使用腳本語言來編程的缺點,理論上可以使用任何編程語言包括C+ , VB , JS等等,當然,最合適的編程語言還是MS為.Net Frmaework專門推出的C(讀c sharp),它可以看作是VC和Java的混合體吧,盡管MS自己講C#內(nèi)核中更多的象VC,但實際上我還是認為它和Java更象一些吧。首先它是面向?qū)ο蟮木幊陶Z言,而不是一種腳本,所以它具有面向?qū)ο缶幊陶Z言的一切特性,比如封裝性、繼承性、多態(tài)性等等,這就解決了剛才談到的ASP的那些弱點。封裝性使得代碼邏輯清晰,易于管理,并且應用到ASP.Net上就可以使業(yè)務邏輯和Html頁面分離,這樣無論頁面原型如何改變,業(yè)務邏輯代碼都不必做任何改動;繼承性和多態(tài)性使得代碼的可重用性大大提高,你可以通過繼承已有的對象最大限度保護你以前的投資。并且C#和C+、Java一樣提供了完善的調(diào)試/糾錯體系。Q6:C#中的委托是什么?事件是不是一種委托?答:委托是一種安全的函數(shù)指針,事件是一種消息機制Q7:描述一下C#中索引器的實現(xiàn)過程,是否只能根據(jù)數(shù)字進行索引?Q8:C#中要使一個類支持FOREACH遍歷,實現(xiàn)過程怎樣?答:實現(xiàn)接口IEnumerableQ10:寫一個HTML頁面,實現(xiàn)以下功能,左鍵點擊頁面時顯示“您好”,右鍵點擊時顯示“禁止右鍵”。并在2分鐘后自動關(guān)閉頁面。Q11:你對XMLHTTP、WEBSERVICE 了解嗎?簡單描述其特點、作用答:XMLHTTP可以主動獲取遠端web代碼,類似HttpWebRequestQ12:接口和抽象類有什么區(qū)別?你選擇使用接口和抽象類的依據(jù)是什么?答:接口用于規(guī)范,抽象類用于共性。接口中只能聲明方法,屬性,事件,索引器。而抽象類中可以有方法的實現(xiàn),也可以定義非靜態(tài)的類變量。抽象類是類,所以只能被單繼承,但是接口卻可以一次實現(xiàn)多個。抽象類可以提供某些方法的部分實現(xiàn),接口不可以.抽象類的實例是它的子類給出的。接口的實例是實現(xiàn)接口的類給出的。再抽象類中加入一個方法,那么它的子類就同時有了這個方法。而在接口中加入新的方法,那么實現(xiàn)它的類就要重新編寫(這就是為什么說接口是一個類的規(guī)范了)。接口成員被定義為公共的,但抽象類的成員也可以是私有的、受保護的、內(nèi)部的或受保護的內(nèi)部成員(其中受保護的內(nèi)部成員只能在應用程序的代碼或派生類中訪問)。此外接口不能包含字段、構(gòu)造函數(shù)、析構(gòu)函數(shù)、靜態(tài)成員或常量。Q13:自定義控件和一般用戶控件的異同?如果要用這兩者之一,你會選擇哪種?為什么答:用戶控件(UserControl): 擴展名為*.ascx,跟*.aspx在結(jié)構(gòu)上相似,是指頁面中 加載的功能塊,只是用戶控件不能單獨作為頁面運行,必須嵌入到*.aspx頁面或其它用 戶控件中使用 。 自定義控件,跟HtmlControl或WebControl相似,編譯后可以添加引用到工具欄里 面,直接用鼠標拖動使用??辞闆r使用,如果功能比較多,會用自定義控件。Q14:大概描述一下ASP。NET服務器控件的生命周期答:(1)初始化-在此階段中,主要完成兩項工作:一、初始化在傳入Web請求生命周期內(nèi)所需的設(shè)置;二、跟蹤視圖狀態(tài)。首先,頁面框架通過默認方式引發(fā)Init事件,并調(diào)用OnInit()方法,控件開發(fā)人員可以重寫該方法為控件提供初始化邏輯。此后,頁面框架將調(diào)用TrackViewState方法來跟蹤視圖狀態(tài)。需要注意的是:多數(shù)情況下,Control基類提供的TrackViewState方法實現(xiàn)已經(jīng)足夠了。只有在控件定義了復雜屬性時,開發(fā)人員才可能需要重寫TrackViewState方法。(2)加載視圖狀態(tài)-此階段的主要任務是檢查服務器控件是否存在以及是否需要將其狀態(tài)恢復到它在處理之前的請求結(jié)束的狀態(tài)。因此該過程發(fā)生在頁面回傳過程中,而不是初始化請求過程。在此階段,頁面框架將自動恢復ViewState字典。如果服務器控件不維持其狀態(tài),或者它有能力通過默認方式保存其所有狀態(tài)而使用ViewState字典,那么開發(fā)人員則不必實現(xiàn)任何邏輯。針對那些無法在ViewState字典中存儲的數(shù)據(jù)類型或者需要自定義狀態(tài)管理的情況,開發(fā)人員可以通過重寫LoadViewState方法來自定義狀態(tài)的恢復和管理。(3)處理回發(fā)數(shù)據(jù)-若要使控件能夠檢查客戶端發(fā)回的窗體數(shù)據(jù),那么必須實現(xiàn)System.Web.UI.IPostBackDataHandler接口的LoadPostData()方法。因此只有處理回發(fā)數(shù)據(jù)的控件參與此階段。(4)加載-至此階段開始,控件樹中的服務器控件已創(chuàng)建并初始化、狀態(tài)已還原并且窗體控件反映了客戶端的數(shù)據(jù)。此時,開發(fā)人員可以通過重寫OnLoad()方法來實現(xiàn)每個請求共同的邏輯。(5)發(fā)送回發(fā)更改通知-在此階段,服務器控件通過引發(fā)事件作為一種信號,表明由于回發(fā)而發(fā)生的控件狀態(tài)變化(因此該階段僅用于回發(fā)過程)。為了建立這種信號,開發(fā)人員必須再次使用System.Web.UI.IPostBackDataHandler接口,并實現(xiàn)另一方法-RaisePostBackChangedEvent()。其判斷過程為:如果控件狀態(tài)因回發(fā)而更改,則LoadPostData()返回true;否則返回false。頁面框架跟蹤所有返回true的控件并在這些控件上調(diào)用RaisePostDataChangedEvent()。(6)處理回發(fā)事件-該階段處理引起回發(fā)的客戶端事件。為了便于將客戶端事件映射到服務器端事件上進行處理,開發(fā)人員在此階段可以通過實現(xiàn)System.Web.UI.IPostBackEventHandler接口的RaisePostBackEvent()方法來實現(xiàn)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論