一、簡述 private、 protected、 public、 internal 修飾符的訪問權限。程序員
private : 私有成員, 在類的內部才能夠訪問。 數據庫
protected : 保護成員,該類內部和繼承類中能夠訪問。 數組
public : 公共成員,徹底公開,沒有訪問限制。 安全
internal: 在同一命名空間內能夠訪問。服務器
二、C#中的委託是什麼?事件是否是一種委託?併發
簡單的說:委託是一種方法容器,裏面能夠裝載若干個具備相同簽名的方法引用地址,那麼調用委託,就至關於同時調用了該容器內的全部方法。框架
委託能夠看作一種新的對象類型,具備面向對象的特色,定義時可簽名接收參數,委託實例化時,能夠把方法名做爲一個參數傳遞給委託對象,ide
委託能夠理解爲指向函數的引用。生成的委託對象能夠代理所傳遞的方法,能夠接收方法的參數。也就是定義了委託,能夠在不用調用原方法的狀況下,調用那個方法。函數
委託能夠把一個方法做爲參數代入另外一個方法。工具
委託能夠理解爲指向一個函數的引用。
委託是一種安全的函數指針,事件是一種消息機制,是一種特殊的委託。
三、override(重寫)與overload(重載)的區別
重載是方法的名稱相同。參數或參數類型不一樣,進行屢次重載以適應不一樣的須要。
重寫是進行基類中函數的重寫,名稱、參數和參數類型都相同,爲了適應須要。
四、在C#中,string str = null 與 string str = 「」的區別。
string str = null 是不給他分配內存空間,
而string str = "" 給它分配長度爲空字符串的內存空間。
五、面向對象的語言具備________性、_________性、________性
封裝、繼承、多態。
封裝:每一個對象都包含有它能進行操做的全部信息,這個特性稱爲封裝。這樣的方法包含在類中,經過類的實例來實現。
好處:
A.良好的封裝可以減小耦合(好比實現界面和邏輯分離)
B.可讓類對外接口不變,內部能夠實現自由的修改
C.類具備清晰的對外接口,使用者只需調用,無需關心內部
D.由於封裝的類功能相對獨立,所以能更好的實現代碼複用
E.可保護代碼不被無心中破壞,經過私有字段等實現內部。注意:這裏的代碼保護不是指代碼自己的加密,而是對不想外部更改的代碼經過私有實現。
要點:
1.封裝,就是把一個對象所能操做的全部信息放在一塊兒
2.封裝能減小耦合,保持統一的對外接口,內部修改不影響外部調用
繼承:
(1) 當一個類A可以獲取另外一個類B中全部非私有的數據和操做的定義做爲本身的部分或所有成分時,就稱這兩個類之間具備繼承關係。
(2) 被繼承的類B稱爲父類或基類,繼承了父類的類A稱爲子類或派生類.
缺點:
缺點一:父類變化,子類不得不變;
缺點二:繼承破壞了包裝,父類的細節暴露給了子類。
要點:
1:父類中的私有成員,派生類是毫不能訪問;
2:C#要求一個類只能有一個直接基類;
3:被「sealed」關鍵字修飾的類將不能被繼承;
4:被「protected」修飾的成員或者數據能夠直接被派生類訪問,屬於「能夠在家族裏分享的祕密」。
5:善用「base」關鍵字,顯示調用合適的自定義基類構造函數而不是使用默認構造函數。
6:繼承須要合理使用才能發揮最佳效果,通常狀況下適用於「is a」關係,不適用「has a」關係。
多態:同一操做做用於不一樣的對象,能夠有不一樣的解釋,產生不一樣的執行結果。這就是多態,這種特性稱爲多態性。
多態的分類:多態性分爲兩種,一種是編譯時的多態性,一種是運行時的多態性。
編譯時的多態性:編譯時的多態性是經過重載來實現的。對於非虛的成員來講,系統在編譯時,根據傳遞的參數、返回的類型等信息決定實現何種操做。
運行時的多態性:運行時的多態性就是指直到系統運行時,才根據實際狀況決定實現何種操做。C#中運行時的多態性是經過覆寫虛成員實現。
要點:
a.多態是面向對象的重要特性之一,指同一操做做用於不一樣的對象,能夠有不一樣的解釋,產生不一樣的執行結果。
b.多態分爲兩種:一種是編譯時多態,使用重載實現;另外一種是運行時多態,使用重寫實現;
c.重寫有兩種,一種使用override關鍵詞,另外一種使用new關鍵詞
d.new重寫其實是對父類方法的隱藏,被覆蓋的父類方法能夠調用獲得。所以new能夠重寫(或說是隱藏)的父類方法不必定要定義爲虛方法或抽象方法。只是若是父類方法 是虛方法或抽象方法時會覆蓋父類方法,若是不是,則隱藏。
e.重載和覆蓋的發生條件:
重載,必然發生在一個類中,函數名相同,參數類型或者順序不一樣構成重載,與返回類型無關
重寫,必然發生在基類和派生類中,其類函數用virtual修飾,派生類用override修飾
覆蓋,在子類中寫一個和基類同樣名字(參數不一樣也算)的非虛函數,會讓基類中的函數被隱藏,編譯後會提示要求使用New關鍵字 new 修飾
隱藏,在子類中能夠經過new 隱藏父類的方法
f.new覆蓋與重寫、重載的區別:
當子類與父類的參數不一樣時
當基類函數不是虛函數時,基類函數將被隱藏。(由於子類和基類不在同一範圍內,因此不是重載)
當基類函數是虛函數時,基類函數將被隱藏。(由於子類和基類不在同一範圍內,因此不是重載;由於參數不一樣,因此不是重寫)
當子類與父類的參數相同時
當基類函數不是虛函數時,基類函數將被隱藏。(由於子類和基類不在同一範圍內,因此不是重載,由於基類不是虛函數,因此是隱藏不是重寫)
當基類函數是虛函數時,基類函數將被覆蓋。(由於子類和基類不在同一範圍內,因此不是重載)
六、GC是什麼? 爲何要有GC?
GC是垃圾收集器。程序員不用擔憂內存管理,由於垃圾收集器會自動進行管理。要請求垃圾收集,能夠調用下面的方法之一:
System.gc()
Runtime.getRuntime().gc()
七、C#中結構和類有什麼異同?
類是引用類型,能夠繼承類、接口和被繼承,有默認的構造函數,有析構函數,可使用abstract和sealed,有protected修飾符,必須使用new初始化。
結構是值類型,只能繼承接口,不能被繼承,沒有默認的構造函數,能夠建立,沒有析構函數,不能夠用abstract和sealed,沒有protected修飾符,能夠不用new初始化。
八、抽象類(abstract class)和接口(interface)有什麼異同?
抽象類:
(1) 抽象方法只做聲明,而不包含實現,能夠當作是沒有實現體的虛方法
(2) 抽象類不能被實例化
(3) 抽象類能夠但不是必須有抽象屬性和抽象方法,可是一旦有了抽象方法,就必定要把這個類聲明爲抽象類
(4) 具體派生類必須覆蓋基類的抽象方法
(5) 抽象派生類能夠覆蓋基類的抽象方法,也能夠不覆蓋。若是不覆蓋,則其具體派生類必須覆蓋它們。
接口:
(1) 接口不能被實例化
(2) 接口只能包含方法聲明
(3) 接口的成員包括方法、屬性、索引器、事件
(4) 接口中不能包含常量、字段(域)、構造函數、析構函數、靜態成員。
(5) 接口中的全部成員默認爲public,所以接口中不能有private修飾符
(6) 派生類必須實現接口的全部成員
(7) 一個類能夠直接實現多個接口,接口之間用逗號隔開
(8) 一個接口能夠有多個父接口,實現該接口的類必須實現全部父接口中的全部成員
相同點:
(1) 均可以被繼承
(2) 都不能被實例化
(3) 均可以包含方法聲明
(4) 派生類必須實現未實現的方法
區 別:
(1) 抽象基類能夠定義字段、屬性、方法實現。接口只能定義屬性、索引器、事件、和方法聲明,不能包含字段。
(2) 抽象類是一個不完整的類,須要進一步細化,而接口是一個行爲規範。微軟的自定義接口老是後帶able字段,證實其是表述一類「我能作。。。」
(3) 接口能夠被多重實現,抽象類只能被單一繼承
(4) 抽象類更多的是定義在一系列緊密相關的類間,而接口大多數是關係疏鬆但都實現某一功能的類中
(5) 抽象類是從一系列相關對象中抽象出來的概念, 所以反映的是事物的內部共性;接口是爲了知足外部調用而定義的一個功能約定, 所以反映的是事物的外部特性
(6) 接口基本上不具有繼承的任何具體特色,它僅僅承諾了可以調用的方法
(7) 接口能夠用於支持回調,而繼承並不具有這個特色
(8) 抽象類實現的具體方法默認爲虛的,但實現接口的類中的接口方法卻默認爲非虛的,固然您也能夠聲明爲虛的
(9) 若是抽象類實現接口,則能夠把接口中方法映射到抽象類中做爲抽象方法而沒必要實現,而在抽象類的子類中實現接口中方法
九、.NET的錯誤處理機制是什麼?
try{可能要出錯的代碼}
catch{撲捉到錯誤後的處理}
finally{不論代碼是否出錯都要執行}
十、事務是什麼?
在許多大型、關鍵的應用程序中,計算機每秒鐘都在執行大量的任務。更爲常常的不是這些任務自己,而是將這些任務結合在一塊兒完成一個業務要求,稱爲事務。
當某一個任務失敗時,就恢復到指定的恢復點,這個叫回滾。
十一、什麼是數據庫事務
(1) 事務的三個特性:一致性,原子性,隔離性
(2) 幾個SQL語句,要麼所有執行成功,要麼所有執行失敗,事務的三個操做:Begin,Commit,RollBack。
(3) 取剛插入數據的ID值,就要用事務來隔離。
十二、數據庫創建索引的優缺點
優勢:使用索引能夠加快數據的查詢速度
缺點:因爲數據插入過程當中會建索引,因此會下降數據的插入,更新速度,索引還會佔用磁盤空間。
1三、接口是否可繼承接口? 抽像類是否可實現(implements)接口? 抽像類是否可繼承實體類(concrete class)?
接口能夠繼承接口。抽像類能夠實現(implements)接口,抽像類是否可繼承實體類,但前提是實體類必須有明確的構造函數。
1四、sleep()和wait() 有什麼區別?
sleep()方法是將當前線程掛起指定的時間。
wait()釋放對象上的鎖並阻塞當前線程,直到它從新獲取該鎖。
.net是一種平臺和框架, .net 不是單純的語言也不是單純的工具,它是從底層平臺開始構建起來的一個總體框架
1六、概述反射和序列化?
反射:要給發射下一個定義仍是比較難的。反射提供了封裝程序集,模塊和類型對象,能夠用反射動態地建立類型的實例,將類型綁定到現有對象,或者從現有對象類型裏獲取 類型,而後調用類型的方法或訪問字段和屬性。動態獲取程序集信息
序列化:將對象轉換爲另外一種媒介傳輸的格式過程。如,序列化一個對象,用Http經過internet在客戶端和服務器之間傳遞該對象,在另外一端用反序列化從該流中從新獲得對象。
1七、什麼是虛函數?什麼是抽像函數?
虛函數:可由子類繼承並重寫的函數。抽像函數:規定其非虛子類必須實現的函數,必須被重寫。
1八、什麼是XML?
XML便可擴展標記語言。eXtensible Markup Language.標記是指計算機所能理解的信息符號,經過此種標記,計算機之間能夠處理包含各類信息的文章等。如何定義這些標記,即 能夠選擇國際通用的標記語言,好比HTML,也可使用象XML這樣由相關人士自由決定的標記語言,這就是語言的可擴展性。XML是從SGML中簡化修改出來的。它主要用到的有 XML、XSL和XPath等。
1九、XML與HTML 的主要區別
1 XML是區分大小寫字母的,HTML不區分。
2 在HTML中,若是上下文清楚地顯示出段落或者列表鍵在何處結尾,那麼你能夠省略或者之類的結束標記。在XML中,絕對不能省略掉結束標記。
3 在XML中,擁有單個標記而沒有匹配的結束標記的元素必須用一個 / 字符做爲結尾。這樣分析器就知道不用查找結束標記了。
4 在XML中,屬性值必須分裝在引號中。在HTML中,引號是可用可不用的。
5 在HTML中,能夠擁有不帶值的屬性名。在XML中,全部的屬性都必須帶有相應的值。
20、error和exception有什麼區別?
error 表示恢復不是不可能但很困難的狀況下的一種嚴重問題。好比說內存溢出。不可能期望程序能處理這樣的狀況。
exception 表示一種設計或實現問題。也就是說,它表示若是程序運行正常,從不會發生的狀況。
2一、向服務器發送請求有幾種方式?
get,post。
get通常爲連接方式,post通常爲按鈕方式。
2二、<%# %>和<% %>的區別?
<%# %>表示綁定的數據源
<% %>是服務器端代碼塊
2三、進程和線程分別該怎麼理解?
進程是比線程大的程序運行單元,都是由操做系統所體會的系統運行單元,一個程序中至少要有一個進程,有一個進程中,至少要有一個線程,
線程的劃分尺度要比進程要小,進程擁有獨立的內存單元,線程是共享內存,從而極大的提升了程序的運行效率同一個進程中的多個線程能夠併發執行。
2四、如何處理幾十萬條併發數據?
用存儲過程或事務。取得最大標識的時候同時更新..注意主鍵不是自增量方式這種方法併發的時候是不會有重複主鍵的..取得最大標識要有一個存儲過程來獲取.
2五、數組有沒有length()這個方法? String有沒有length()這個方法?