C#面試題html
1 ,請你說說 .NET 中類和結構的區別?程序員
答:結構沒有默認的構造函數。結構是值類型,因此對結構變量所作的改變不會影響其的原值,而類是應用類型,改變其變量的值會改變其原值。申明結構用Struck 關鍵字,申明類用 class 關鍵字,向方法傳遞結構是經過值傳遞的,而不是經過引用。與類不一樣,結構的實例化能夠不使用New關鍵字。類能夠實現接口。web
2,死鎖的必要條件?怎麼克服?ajax
答:系統的資源不足,進程的推動的順序不合適,資源分配不當,一個資源每次只能被一個進程使用,一個資源請求資源時,而此時這個資源已阻塞,對已得到資源不放,進程得到資源時,未使用完前,不能強行剝奪。算法
3,當一個線程進入一個對象的方法後,其它線程是否能夠進入該對象的方法?數據庫
答:不能夠,一個對象的方法只能由一個線程訪問。編程
4,接口是否可繼承接口? 抽象類是否可實現(implements)接口? 抽象類是否可繼承實體類(concrete class)?json
答:接口能夠繼承接口。抽象類能夠實現(implements)接口,抽象類是否可繼承實體類,但前提是實體類必須有明確的構造函數。c#
5,什麼時候必須聲明一個類爲抽象類?windows
答:當這個類中包含抽象方法時,或是該類並無徹底實現父類的抽象方法時。
6,什麼是抽象類(abstract class)?
答:一種不能夠被實例化的類,它只能做爲父類被繼承。從多個具備相同特徵的類中抽象出一個抽象類,以這個抽象類做爲其子類的模板,從而避免了子類的隨意性。
abstract class類中的方法沒必要是抽象的。abstract class類中定義抽象方法必須在具體子類中實現,因此,不能有抽象構造方法或抽象靜態方法。若是子類沒有實現抽象父類中的全部抽象方法,那麼子類也必須定義爲abstract類型。
7,接口(interface)是什麼?(只含有公有抽象方法(public abstract method)的類)
答:接口(interface)能夠說成是抽象類的一種特例,接口中的全部方法都必須是抽象的,這些方法必須在子類中被實現。接口中的方法定義默認爲public abstract類型。
8,接口和抽象類具備什麼區別?
答:(1)二者的語法區別:
a)抽象類能夠有構造方法,接口中不能有構造方法。
b)抽象類中能夠包含非抽象的普通方法,接口中的全部方法必須都是抽象的。
c)抽象類中抽象方法能夠指定爲public,接口中抽象方法不能指定任何修飾符,默認就是public。
d)一個類能夠實現多個接口,但只能繼承一個抽象類。
(2)接口和抽象類二者在應用上的區別:
接口更多的是在系統架構設計方法發揮做用,主要用於定義模塊之間的通訊契約。而抽象類在代碼實現方面發揮做用,能夠實現代碼的重用。
9,用最有效率的方法算出2乘以8等於幾? 答:2<<3,
10,C#是否能夠對內存直接進行操做?
答: C#是能夠對內存進行直接操做的,雖然不多用到指針,可是C#可使用指針,在用的時候須要在前邊加unsafe,在.NET中使用了垃圾回收機制(GC)功能,它替代了程序員,不過在C#中不能夠直接使用finalize方法,是在析構函數中調用基類的finalize()方法。
11,Error和Exception有的區別?
答: error表示恢復不是不可能但很困難的狀況下的一種嚴重問題;exception表示一種設計或實現問題。
12,談談final,finally,finallize的區別?
答:final 用於申明屬性,方法和類,表示屬性不可變,方法不能夠被重寫,類不能夠被繼承;
Finally 是異常處理語句結構中,表示總被執行的部分;
Finallize 表示是object類一個方法,在垃圾回收機制執行的時候會被調用被回收對象的方法。
13,.NET的錯誤處理機制是什麼?
答:.NET錯誤處理機制採用try->catch->finally結構,發生錯誤時,層層上拋,直到找到匹配的Catch爲止。
14,try{}裏有一個return語句,那麼緊跟在這個try後面的finally{}裏的code會不會被執行。何時執行?
答:會,在return 以前執行。
15, Const和ReadOnly的區別?
答:Const用來申明編程時常量,ReadOnly用來申明運行時常量。
16,HashMap和Hashtable的區別?
答:HashMap是Hashtable的輕量級實現,非線程安全的實現,他們都實現了map接口,主要區別是HashMap鍵值能夠爲空null,效率能夠高於Hashtable。
17,Collection和Collections的區別?
答:Collection 是集合類的上級接口,Collections 是針對集合類的一個幫助類,它提供一系列靜態方法來實現對各類集合的搜索,排序,線程安全化操做。
18,Override,Overload的區別?
答:Override是重寫的意思,它表示重寫基類的方法,並且方法的名稱,返回類型,參數類型,參數個數要與基類相同。
Overload 是重載是意思,它也表示重寫基類的方法,可是隻要方法名相同,別的能夠不一樣。
19,構造器Constructor是否能夠被繼承?是否能夠被Override?
答:Constructor不能夠被繼承,所以不能被重寫(Overriding),但能夠被重載(Overloading),
20,重載與重寫的區別?
答:(1)方法的重寫是子類和父類之間的關係,是垂直關係;方法的重載是同一個類中方法之間的關係,是水平關係
(2)重寫只能由一個方法,或只能由一對方法產生關係;方法的重載是多個方法之間的關係。
(3)重寫要求參數列表相同;重載要求參數列表能夠不一樣。
(4)重寫關係中,調用那個方法體,是根據對象的類型(對象對應存儲空間類型)來決定;重載關係,是根據調用時的實參表與形參表來選擇方法體的。
*21,ASP.NET頁面之間傳遞值的幾種方式?
答:session(消耗服務器內存資源,容易丟失);
cookie(安全性不高,容易僞造);
application(做爲全局變量容易被誤操做,用lock和unlock方法用來鎖定和解鎖,爲了防止併發修改);
Request.QueryString(缺少安全性,值暴露URL地址中且不能傳遞對象);
server.Transfer(相對路徑問題多);
respose;redictor。
部分實例:Request.Form["SourceData1"],ToString();
Request.QueryString["parameter1"],ToString();
Context.Items["value"],ToString();
*22,若是在一個B/S結構的系統中須要傳遞變量值,可是又不能使用Session、Cookie、Application您有幾種方法進行處理?
答:this,server,Transfer,Querystring
23,概述反射和序列化?
答:反射就對程序集的動態操做(程序集包括了模塊,而模塊裏面包含類型,類型又包含成員),動態獲取程序集信息,動態獲取類的屬性和方法。
反射提供了封裝程序集,模塊和類型的對象,能夠動態地建立類型的實例,將類型綁定到現有對象,或者從現有對象類型裏獲取類型,而後調用類型的方法或訪問字段和屬性。
序列化:把對象轉換爲容易傳輸的格式的過程。如,序列化一個對象,用Http經過internet在客戶端和服務器之間傳遞該對象,在另外一端用反序列化從該流中從新獲得對象。
24,C#中委託是什麼?事件是否是一種委託?
答:委託是一種安全的相似與函數指針,可是它比指針要安全的多,它能夠把方法做爲一個參數傳遞給另外一個方法,能夠理解爲指向函數的引用。事件是一種消息機制,在C#中處理事件的邏輯都包裝爲委託,它是一種特殊的委託。
25,如何部署一個ASP.NET頁面?
答:vs2003,vs2005裏邊都有發表機制,vs2003能夠發佈而後在複製部署。Vs2005能夠直接部署到對應的位置。
26,進程和線程分別該怎麼理解?
答:進程是比線程大的程序運行單元,都是由操做系統所劃分的系統運行單元,一個程序中至少有一個進程。一個進程中,至少要有一個線程,線程的劃分尺度要比進程要小,進程擁有獨立的內存單元,線程是共享內存,從而極大的提升了程序的運行效率,同一個進程中的多個線程能夠併發執行。
27,New有幾種用法?
答:有3種,第一種是,用於建立對象和調用構造函數(實例化),如:NewClass();
第二種是,用於向基類成員隱藏繼承成員,如:public new 隱藏基類的方法;
第三種是,用於在泛型聲明中約束可能用做類型參數的參數的類型。
28,什麼叫應用程序域?什麼是託管代碼?什麼是強類型系統?什麼是裝箱和拆箱?什麼是重載?
CTS、CLS和CLR分別做何解釋?
答:應用程序域:爲了安全性,可靠性,隔離性,和版本控制,及卸載程序提供的隔離邊界。它一般由運行庫宿主建立,應用程序域提供了一個更安全,用途更廣的處理單元。
託管代碼:使用CLR編譯語言編輯器開發編寫的代碼就叫託管代碼。
裝箱和拆箱:是把值類型轉換爲引用類型的過程,是隱式的,相反的過程就是拆箱,是顯式的。
CTS是公共類型系統,CLS是公共語言規範,CLR公共語言運行庫。
強類型系統:每一個變量和對象都必須具備申明類型。
29,值類型和引用類型的區別?
答:值類型變量直接把變量的值保存在棧中,引用類型的變量把實際數據的地址保存在棧中,而實際數據則保存在堆中,改變其值也就改變了變量原有的值;
值類型不容許包含null值,然而可空類型能夠將null賦值給值類型;
值類型存取速度快,引用類型存取速度慢;
值類型繼承自System,ValueType,引用類型繼承自System,Object;
棧的內存分配是自動釋放;而堆在.NET中會有GC(垃圾回收)來釋放。
30,Heap與stack的差異?
答:Heap是堆,Stack是棧,
(1)堆棧空間分配
①棧(操做系統):由操做系統自動分配釋放 ,存放函數的參數值,局部變量的值等。其操做方式相似於數據結構中的棧。
②堆(操做系統): 通常由程序員分配釋放, 若程序員不釋放,程序結束時可能由OS回收,分配方式卻是相似於鏈表。
(2)堆棧緩存方式
①棧使用的是一級緩存, 他們一般都是被調用時處於存儲空間中,調用完畢當即釋放。
②堆則是存放在二級緩存中,生命週期由虛擬機的垃圾回收算法來決定(並非一旦成爲孤兒對象就能被回收)。因此調用這些對象的速度要相對來得低一些。
(3)堆棧數據結構區別
①堆(數據結構):堆能夠被當作是一棵樹,如:堆排序。
②棧(數據結構):一種先進後出的數據結構。
31,請詳述在.NET中類(class)與結構(struct)的異同:
答:Class能夠被實例化,屬於引用類型,是分配在內存的堆上的,Struct屬於值類型,是分配在內存的棧上的
32,解釋一下UDDI、WSDL的意義及其做用?
答:UDDI是統一描述集成協議,是一套基於Web的,分佈式的,爲WEB服務提供的信息註冊的實現標準規範,同時爲也是爲企業自己提供的Web服務註冊以讓別的企業可以發現並訪問的協議標準。提供了基於標準的規範,用於描述和發現服務,還提供了一組基於因特網的實現。
WSDL這是一個基於XML的描述WEB服務的接口。
33,什麼是SOAP?
答:是簡單訪問協議。是在分佈式環境中,交換信息並實現遠程調用的協議。是一個基於XML的協議。使用SOAP,能夠不考慮任何傳輸協議,但一般仍是HTTP協議,能夠容許任何類型的對象或代碼,在任何平臺上,以任一種語言相互通訊。它是一種輕量級協議。
34,UDP和TCP鏈接有和異同?
答:TCP是傳輸控制協議,提供的是面向鏈接的,是可靠的,字節流服務,當用戶和服務器彼此進行數據交互的時候,必須在他們數據交互前要進行TCP鏈接以後才能傳輸數據。TCP提供超時重撥,檢驗數據功能。
UDP是用戶數據報協議,是一個簡單的面向數據報的傳輸協議,是不可靠的鏈接。
35,如何理解.NET中的垃圾回收機制? GC
答:.NET中的垃圾回收機制是引用程序對內存的回收和釋放。當每次用new關鍵字建立一個對象時,運行庫都要從託管堆中爲其分配內存,由於空間是有限的,最終垃圾回收機制是要回收不用的內存的。已釋放內存,從新使用。
36,經過程序控制GC的強制回收是否能夠提升效率?
答:我的覺得是能夠的(在網上沒找到答案),GC是循環遍歷全部資源的,若是你已經強制回收了,那麼遍歷的就會少,從而提升效率。
37,BS架構下,在session中存儲了一個datatable的對象y,y在何時會被GC回收?這種存儲數據的方式是否合理?若是Application增長了對y的引用,何時會被GC回收?
答:在session的生命週期結束以後回收,不合理,每一個session儲存在服務器端的內存裏,每一個用戶都會有一個獨立的session,若是session的內容過於複雜,當大量的用戶訪問的時候會致使內存溢出。Application是全部用戶共有的,因此應該不會被回收(我的理解)。
38,面向對象三大基本特性,五大基本原則?
答:
三大基本特性:
一、封裝:封裝的目標就是要實現軟件部件的「高內聚、低耦合」,防止程序相互依賴性而帶來的變更影響。
二、繼承:子類繼承父類成員,實現代碼複用,提升了軟件的可重用性和可擴展性。
三、多態:不一樣子類對同一個消息做出不一樣的反映,提升軟件靈活性
五大基本原則:
一、單一職責原則(SRP)
二、開放封閉原則(OCP)
三、里氏替換原則(LSP)
四、依賴倒置原則(DIP)
五、接口隔離原則(ISP)
39,在.NET中全部類的基類是?
答:object。
40,能用foreach遍歷訪問的對象須要實現?
答:須要實現IEnumerable接口或聲明GetEnumerator方法的類型。注:不必定要實現IEnumerable接口,但必定要實現GetEnumrator方法。
41, ASP.NET的身份驗證方式有哪些?
答:windows,forms,passport
42,.NET中讀寫數據庫須要用到那些類?他們的做用?
答:SqlConnection/OleDbConnection:創建數據庫的鏈接;
SqlCommand/OleDbCommand:執行數據庫腳本。
43,ASP.NET與ASP相比,主要有哪些進步?
答:ASP解釋形,ASPX編譯型,性能提升,能夠跟美工的工做分開進行,更有利於團隊開發。
44,DataReader與Dataset有什麼區別?
答:一個是隻能向前的只讀遊標,一個是內存中的表。
45,什麼是虛函數?什麼是抽像函數?
答:虛函數:可由子類繼承並重寫的函數。
抽像函數:規定其非虛子類必須實現的函數,必須被重寫。
46,什麼是ASP.NET中的用戶控件?
答:用戶控件通常用在內容多爲靜態,或者少量會改變的狀況下,相似ASP中的include,可是功能要強大的多。
47,什麼是code-Behind技術。
答:ASPX,RESX和CS三個後綴的文件,這個就是代碼分離,實現了HTML代碼和服務器代碼分離,方便代碼編寫和整理,
48,當整數a賦值給一個object對象時,整數a將會被? 答:裝箱。
49, C#中索引器實現過程,是否只能根據數字索引?
答:不是的,能夠是任意類型。
50,簡述下列詞在C#語言中的做用:
volatile:(建立單例模式時會使用)就像你們更熟悉的const同樣,volatile是一個類型修飾符(type specifier)。它是被設計用來修飾被不一樣線程訪問和修改的變量。若是不加入volatile,基本上會致使這樣的結果:要麼沒法編寫多線程程序,要麼編譯器失去大量優化的機會。做爲指令關鍵字,確保本條指令不會因編譯器的優化而省略,且要求每次直接讀值,,簡單地說就是防止編譯器對代碼進行優化,好比以下程序:
XBYTE[2]=0x55;
XBYTE[2]=0x56;
XBYTE[2]=0x57;
XBYTE[2]=0x58;
對外部硬件而言,上述四條語句分別表示不一樣的操做,會產生四種不一樣的動做,可是編譯器卻會對上述四條語句進行優化,認爲只有XBYTE[2]=0x58(即忽略前三條語句,只產生一條機器代碼)。若是鍵入volatile,則編譯器會逐一的進行編譯併產生相應的機器代碼(產生四條代碼)
interlocked:爲多個線程共享的變量提供原子操做(僅限int類型)
monitor:lock:(lock是一種混合鎖,至關於Monitor,Enter(object)方法是獲取鎖,Monitor,Exit(object)方法是釋放鎖的組合)
ReaderWriterLock:字面意思,讀寫鎖,分爲讀鎖和寫鎖,多個線程讀一個對象, 而只有一個線程要寫這個對象, 那麼對於讀線程來講, 它不改變對象的內容, 咱們就應該容許多個線程同時讀, 只有在寫的時候纔要給鎖住對象, 這樣能夠提升讀線程的吞吐量。
AutoResetEvent|ManualResetEvent 字面意思爲自動重置事件和手動重置事件,這兩個類能夠理解爲設置信號,來進行阻塞線程或者讓線程從新啓動。
Semaphore:信號量,經過計數器設置能夠訪問的線程數目例如設置爲10,則能夠同時有10個線程訪問此資源,每當有一個線程訪問此資源,則信號量減1,訪問完成以後釋放則加1,當信號量=0時禁止訪問,阻塞線程,當信號量>0時,能夠訪問。
Mutex:互相排斥,只有擁有互斥對象的線程才具備訪問資源的權限,因爲互斥對象只有一個,所以就決定了任何狀況下此共享資源都不會同時被多個線程所訪問。由於使用互斥不只僅可以在同一應用程序不一樣線程中實現資源的安全共享,並且能夠在不一樣應用程序的線程之間實現對資源的安全共享。
51, 如何把一個Array複製到ArrayList中?
(1)使用for循環,將array數組中的數據逐步加入到ArrayList的對象中;
//一、for循環
for (int i = 0; i < array,Length;i++)
{
list,Add(array[i]);
}
(2)使用ArrayList 的CopyTo()方法:
//二、copyTo()
list,CopyTo(array);
(3)使用ArrayList的Adapter()方法:
//3,Adapter()
ArrayList list1=ArrayList,Adapter(array);
(4)直接使用構造方法傳入,由於Array實現了ICollection:
//4\構造方法
ArrayList list3 = new ArrayList(array);。
52,MVC框架中,ActionResult,JsonResult,ContentResult哪一個能夠return view()?
答:ActionResult。
53,Aspx頁面中,updatepanel的做用是什麼?
答:UpdatePanel控制頁面的局部更新。
54,MVC框架中,當使用Get方法訪問JsonResult時,可否直接採用如下寫法:return json(obj),爲何?
答:不能,要使用 res,JsonRequestBehavior = JsonRequestBehavior,AllowGet;//容許使用GET方式獲取,不然用GET獲取是會報錯。
55, EF框架中,使用DBFirst時數據庫中的表A沒有主鍵,可否經過「從數據庫更新模型「操做,將表A導入到EF框架中?
答:不能,表必需要有主鍵,不然會報錯。
savechange()方法返回0,而不是正常的大於0的值。切記設置主鍵。
返回錯誤InnerException={"沒法更新EntitySet「t_Customer」,由於它有一個 DefiningQuery,而<ModificationFunctionMapping>元素中沒有支持當前操做的 <InsertFunction>元素。"}。
在發現錯誤後要吧原有的數據庫的表刪除,從新更新。若是不刪除的話,沒法更新,而且要從新生成解決方案。
56,foreach和for循環誰的效率高?switch和if呢?
答:foreach高,for循環每次都要進行判斷i的大小,foreach依賴IEnumerable,第一次 var a in GetList()時調用 GetEnumerator 返回第一個對象並賦給a,之後每次再執行 var a in GetList() 的時候調用MoveNext,直到循環結束。期間GetList()方法只執行一次。
一樣的道理:當有多個判斷時,switch更快。
57,WebService基於什麼協議?
答:soap協議,而Soap創建在http上的。
58,WebService和WebAPI 有什麼不一樣?
WebService是基於SOAP協議的,數據格式是XML,WebAPI遵循的http協議,它的Response能夠被而Web API的MediaTypeFormatter轉換成Json、XML或者任何你想轉換的格式。
WebService它只能部署在IIS上,而WebAPI能夠寄宿在不一樣的宿主上(寄宿的本質就是利用一個具體的應用程序爲WebAPI提供一個運行的環境,並解決請求的接收和響應的回覆),如Web Host,Self Host方式。WebService也能夠經過ajax訪問。
WebAPI無狀態,相對WebService更輕量級。WebAPI支持如get,post等http操做,而且對限制帶寬的設備,好比智能手機等支持的很好。
59,這樣對比的話WebService貌似並很差用。可是咱們爲何要用它呢,理由以下:
答:很好的跨編程語言和跨操做系統;
可移植性:傳統的WebService利用了HTTP通道,進行獨立的交互,這個交互協議能夠移植到其餘協議下運做。
60,C#是否支持多重繼承?
答:不支持。多重繼承指的是一個類能夠同時繼承多個類,好比A類繼承自B類和C類,這就是多重繼承。C#只能繼承一個類,可是能夠繼承多個接口。
61,簡述private,protected,public,internal修飾符的訪問權限。
public(公共的) 徹底公開,訪問不受限制。
protected(保護的) 訪問僅限於包含類或從包含類派生的類型。該類內部和繼承類中能夠訪問。
internal(內部的) 訪問僅限於當前程序集。在同一命名空間內能夠訪問。
protected internal(內部保護的) 訪問僅限於同一程序集或者派生類能夠訪問,也就是protected跟internal的並集,而不是交集。
private(私有的) 訪問僅限於包含類型。在類的內部才能夠訪問
62,修飾符protected internal 的意思?
internal修飾的b在同一個項目中哪裏均可以訪問,而在另一個項目中就不能訪問,說明「同一程序集」指的是同一個項目;對於protected internal修飾的a在同一項目中哪裏均可以訪問,而在其它項目中只有在派生類能夠訪問,因此protected internal 修飾的成員變量是同一程序集或者派生類能夠訪問,也就是protected跟internal的並集,而不是交集。(被protected internal修飾的屬性/方法只能在它的在同一個程序集(Assembly)中的子類被訪問)查資料找到了兩種說法,不知道哪一種是對的,我的覺得是第一種是對的。
63,b/s架構下,能否聲明一個靜態的數據庫鏈接對象,全部的業務類都引用該靜態鏈接對象去訪問數據庫?
答:一個靜態的Sqlconnection來管理項目內全部的數據庫鏈接在絕大部分場景是不合理的
(沒說絕對不可行,在winform單線程項目中,這樣作是沒有問題的,由於操做者是一個用戶,每一個用戶都有一份程序副本)。若是是多個用戶提交的請求是同一個AppDomain中的函數來處理時,都是用同一個靜態的Sqlconnection對象是不行的,會引發併發問題,會引發相互干擾,還須要加鎖lock才能操做。
64,C#提供了一個默認的無參數構造函數,當我實現了另一個有一個參數的構造函數的時候,還想保留這個無參數的構造函數。這樣我應該寫幾個構造函數?
答:兩個。
65,可以阻止某一個類被其餘類繼承麼?可以實現容許某個類被繼承,但不容許其中某個方法被覆寫嗎?
答:(1)當對一個類應用 sealed 修飾符時,此修飾符會阻止其餘類從該類繼承;
(2)標記這個類爲public,並標記這個方法爲sealed。
66,什麼是強類型?C#是強類型嗎,JS呢?
答:強類型指的是程序中表達的任何對象所從屬的類型都必須能在編譯時刻肯定。常見的強類型語言有C++、Java、Apex和Python等,C#是強類型,JS不是。
67,金額等精確的數值聲明爲何類型?
答:float,double,decimal
68,讀寫數據庫都須要哪些對象,簡要說明其做用。
答:(1) Connection:與數據源創建鏈接。
(2) Command:對數據源執行SQL命令並返回結果。
(3) DataReader:讀取數據源的數據,只容許對將數據源以只讀、順向的方式查看其中所存儲的數據。其經常使用於檢索大量數據,DataReader對象仍是一種很是節省資源的數據對象。
(4) DataAdapter:對數據源執行操做並返回結果,在DataSet與數據源之間創建通訊,將數據源中的數據寫入DataSet中,或根據DataSet中的數據綁定數據源。
(5)DataSet:內存中的數據庫,是數據表的集合,它能夠包含任意多個數據表。
69,int? a和int a的區別。
答:int?爲可空類型,能夠是null,他是經過把int裝箱爲引用類型實現的。
70,string和stringbuilder的區別。
答:System.String是不可變的字符串;System.StringBuilder存放了一個可變的字符串,並提供一些對這個字符串修改的方法
71,描述一下virtual、sealed、override和abstract的區別。
答:被virtual修飾的方法能夠被子類重寫
sealed說明該類不可被繼承
override重寫基類的方法
abstract申明抽象類和抽象方法的關鍵字,抽象方法不提供實現,由子類實現,抽象類不可實例化。
72,int,string,hashtable,datetime,datatable中哪些是引用類型?
答:string,hashtable,datatable
73,MVC模式。
答:MVC 模式表明 Model-View-Controller(模型-視圖-控制器) 模式。這種模式用於應用程序的分層開發。
74,什麼是匿名方法?請寫一段代碼。
答:delegate(int i) { return i > 0; }
75,傳入某個屬性的set方法的隱含參數的名稱是什麼?
答:value,它的類型和屬性所聲名的類型相同。
76,如何在C#中實現繼承?
答:繼承的格式:在類名後加上一個冒號,再加上基類的名稱。
77,私有成員會被繼承麼?
答:會,可是不能被訪問。因此看上去他們彷佛是不能被繼承的,但實際上確實被繼承了。
78,C#中全部對象共同的基類是什麼?
答:System,Object
79,可以將非靜態的方法覆寫成靜態方法麼?
答:不能,覆寫方法的簽名必須與被覆寫方法的簽名保持一致,除了將virtual改成override
80,能夠覆寫私有的虛方法麼?
答:不能夠,甚至子類中沒法訪問父類中的私有方法。
81,是否能夠繼承String類?
答:String類是final類故不能夠繼承。
82,數組有沒有length()這個方法? String有沒有length()這個方法?
答:數組沒有length()這個方法,有length的屬性。String有length()這個方法(查網上資料說有個方法,但我的實驗了一下是沒有的,只有Length屬性)。
83,成員變量和成員函數前加static的做用?
答:它們被稱爲常成員變量和常成員函數,又稱爲類成員變量和類成員函數。分別用來反映類的狀態。好比類成員變量能夠用來統計類實例的數量,類成員函數負責這種統計的動做。
84,public static const int A=1;這段代碼有錯誤麼?是什麼?
答:const不能用static修飾。
85,在c#中using和new這兩個關鍵字有什麼意義,請寫出你所知道的意義?using 指令和語句 new 建立實例 new 隱藏基類中方法。
答:using 引入名稱空間或者使用非託管資源
new 新建實例或者隱藏父類方法
86,什麼是虛函數?什麼是抽象函數?
答:虛函數:沒有實現的,可由子類繼承並重寫的函數。
抽象函數:規定其非虛子類必須實現的函數,必須被重寫。
87,c#中的三元運算符是? 答:?:
88,Ref參數是引用調用,out參數是輸入調用。
89,const和readonly有什麼區別?
答:const能夠用於局部常量,而readonly實際是類的initonly字段,顯然不能是局部的,const是編譯時常量,readonly是運行時常量。
90,虛函數的用法:
答:1)virtual指明一成員函數爲虛函數,而virtual僅用於類的定義裏,在類外可不加此關鍵字,
2)一個類的成員函數被定義爲虛函數時,子類該函數仍保持虛函數特徵,
3)子類重寫此函數時,定義裏可不加virtual關鍵字,但函數聲明要和基類的徹底一致!且此聲明是必須的,
4)不是純虛函數時,父類的虛函數必需要實現; 而若將父類的虛函數設定爲純虛函數時,子類必須要重寫之並且必需要實現之!
91,對象和類的區別是什麼?
答:「類」(Class)具備相同屬性和方法的一組對象的集合,類是抽象的概念,僅僅是模板
對象是一個你可以看獲得、摸得着的具體實體。
92,什麼是局部變量,什麼是成員變量?
答:局部變量是指一個方法中定義的變量;成員變量是指在類範圍裏定義的變量,也就是以前講過的屬性。
93,靜態成員和實例成員的區別?
答:使用static修飾的成員稱爲靜態成員,使用實例對象調用的成員稱爲實例成員
94,怎麼聲明和調用靜態變量?
答:用static聲明;static 限制了變量的做用域只在該文件裏;沒有static修飾的全局變量,要是在不一樣文件中定義了相同的變量名,程序會報錯。
*定義性聲明(定義):須要創建存儲空間,eg:int a;在聲明時就已經創建好存儲空間了。
*引用性聲明:不須要創建存儲空間,eg:extern int a;僅是變量a的聲明,不須要創建存儲空間,變量a在其餘文件中定義。
95,對象可否調用靜態方法 ?
答:不能。對於類內部定義的靜態變量及靜態方法,該類的對象均不能調用。
96,爲何不能指定接口中方法的修飾符?
答:接口中的方法用來定義對象之間通訊的契約,指定接口中的方法爲私有或保護沒有意義。他們默認爲公有方法。
97,base關鍵字的做用是什麼?
答:子類繼承父類的過程當中,可能須要在子類中調用父類中的成員,如屬性、方法或者構造方法。這個時候,可使用base關鍵字來完成。base的做用是用於引用父類的成員,如屬性、方法或者是構造方法。
98,在C#中,string str=null string str= string,Empty與string str=「」請儘可能使用文字或圖象說明其中的區別。
答: string,Empty:不分配存儲空間。"":分配一個長度爲空的存儲空間,""和String,Empty,這兩個都是表示空字符串,空字符串是一個特殊的字符串,只不過這個字符串的值爲空,在內存中是有準確的指向的。
99,Params是什麼含義?
答:Params是C#中的關鍵字,採用此關鍵字能夠指定參數數目爲可變;在方法聲明中的params關鍵字以後不容許任何其餘參數,而且在方法聲明中只容許一個params關鍵字。
100,float f=-123,567F; int i=(int)f;i的值如今是_____? 答:-123
101,C#中 property(屬性) 與 attribute(特性)的區別,他們各有什麼用處,這種機制的好處在哪裏?
答:屬性:用於存取類的字段。特性:用來標識類,方法等的附加性質。
attribute:自定義屬性的基類;property :類中的屬性。
102,概述三層結構體系
答:表示層(UI) ,業務邏輯層(BLL) ,數據訪問層(DAL)。
103,概述O/R Mapping 的原理
答:利用反射,配置將對象和數據庫表映射。
104,列舉ADO.NET中的共享類和數據庫特定類
答:共享類:DataSet,DataTable,DataRow,DataColumn,DataRealtion,Constraint,DataColumnMapping,DataTableMapping
特定類:(x)Connection,(x)Command,(x)CommandBuilder,(x)DataAdapter,(x)DataReader,(x)Parameter,(x)Transaction
105,在.net中,配件的意思是?
答:程序集。(中間語言,源數據,資源,裝配清單)
106,什麼是受管制的代碼?
答:unsafe:非託管代碼。不通過CLR運行。
107,簡要談您對微軟.NET 構架下remoting和webservice兩項技術的理解以及實際中的應用。
答:webservice主要是可利用HTTP,穿透防火牆。而Remoting能夠利用TCP/IP,二進制傳送提升效率。
remoting是.net中用來跨越machine,process, appdomain進行方法調用的技術,對於三層結構的程序,就可使用remoting技術來構建.它是分佈應用的基礎技術.至關於之前的DCOM。
Web Service是一種構建應用程序的普通模型,並能在全部支持internet網通信的操做系統上實施。Web Service令基於組件的開發和web的結合達到最佳,基於組件的對象模型。
108,啓動一個線程是用run()仍是start()?
答:啓動一個線程是調用start()方法,使線程所表明的虛擬處理機處於可運行狀態,這意味着它能夠由JVM調度並執行。這並不意味着線程就會當即運行。
run()方法能夠產生必須退出的標誌來中止一個線程。
109,當一個線程進入一個對象的一個synchronized方法後,其它線程是否可進入此對象的其它方法?
答:不能,一個對象的一個synchronized方法只能由一個線程訪問。
110,abstract的method是否可同時是static,是否可同時是native,是否可同時是synchronized?
答:都不能。
111,List, Set, Map是否繼承自Collection接口?
答:List,Set是,Map不是
112,Set裏的元素是不能重複的,那麼用什麼方法來區分重複與否呢? 是用==仍是equals()? 它們有何區別?
答:Set裏的元素是不能重複的,那麼用iterator()方法來區分重複與否。equals()是判讀兩個Set是否相等。
equals()和==方法決定引用值是否指向同一對像,equals()在類中被覆蓋,爲的是當兩個分離的對象的內容和類型相配的話,返回真值。
113,如何處理幾十萬條併發數據?
答:用存儲過程或事務。取得最大標識的時候同時更新。注意主鍵不是自增量方式,這種方法併發的時候是不會有重複主鍵的。取得最大標識要有一個存儲過程來獲取.
114,Session有什麼重大BUG,微軟提出了什麼方法加以解決?
答:是iis中因爲有進程回收機制,系統繁忙的話Session會丟失,能夠用Sate server或SQL Server數據庫的方式存儲Session不過這種方式比較慢,並且沒法捕獲Session的END事件。
115,請指出GAC的含義?
答:全局程序集緩存。
116,向服務器發送請求有幾種方式?
答:get,post。get通常爲連接方式,post通常爲按鈕方式。
117,&和&&的區別
答:&是位運算符,表示按位與運算,&&是邏輯運算符,表示邏輯與(and).
120,<%# %> 和 <% %> 有什麼區別?
答:<%# %>表示綁定的數據源,<% %>是服務器端代碼塊
121,動態建立的控件PostBack後是否能夠保存下來,爲何?
答:ASP.NET框架不會爲你保存,但能夠手工保存到ViewState
122,T-SQL中is null和null 的區別?
答:is null 和 null 區別至關於 "是空盒子" 和 "空盒子"的區別
引用參照:
http://www.javashuo.com/article/p-eqvertcc-q.html
http://www.javashuo.com/article/p-uoucezhx-v.html