1、簡述 private、 protected、 public、 internal 修飾符的訪問許可權。 private : 私有成員, 在類的內部才可以訪問。 protected : 保護成員,該類內部和繼承類中可以訪問。 public : 公共成員,完全公開,沒有訪問限制。 internal: 在 ...
1、簡述 private、 protected、 public、 internal 修飾符的訪問許可權。
private : 私有成員, 在類的內部才可以訪問。
protected : 保護成員,該類內部和繼承類中可以訪問。
public : 公共成員,完全公開,沒有訪問限制。
internal: 在同一命名空間內可以訪問。
2、C#中的委托是什麼?事件是不是一種委托?
簡單的說:委托是一種方法容器,裡面可以裝載若幹個具有相同簽名的方法引用地址,那麼調用委托,就相當於同時調用了該容器內的所有方法。
委托可以看做一種新的對象類型,具有面向對象的特點,定義時可簽名接收參數,委托實例化時,可以把方法名作為一個參數傳遞給委托對象,
委托可以理解為指向函數的引用。生成的委托對象可以代理所傳遞的方法,可以接收方法的參數。也就是定義了委托,可以在不用調用原方法的情況下,調用那個方法。
委托可以把一個方法作為參數代入另一個方法。
委托可以理解為指向一個函數的引用。
委托是一種安全的函數指針,事件是一種消息機制,是一種特殊的委托。
3、override(重寫)與overload(重載)的區別
重載是方法的名稱相同。參數或參數類型不同,進行多次重載以適應不同的需要。
重寫是進行基類中函數的重寫,名稱、參數和參數類型都相同,為了適應需要。
4、在C#中,string str = null 與 string str = “”的區別。
string str = null 是不給他分配記憶體空間,
而string str = "" 給它分配長度為空字元串的記憶體空間。
5、面向對象的語言具有________性、_________性、________性
封裝、繼承、多態。
封裝:每個對象都包含有它能進行操作的所有信息,這個特性稱為封裝。這樣的方法包含在類中,通過類的實例來實現。
好處:
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覆蓋與重寫、重載的區別:
當子類與父類的參數不同時
當基類函數不是虛函數時,基類函數將被隱藏。(因為子類和基類不在同一範圍內,所以不是重載)
當基類函數是虛函數時,基類函數將被隱藏。(因為子類和基類不在同一範圍內,所以不是重載;因為參數不同,所以不是重寫)
當子類與父類的參數相同時
當基類函數不是虛函數時,基類函數將被隱藏。(因為子類和基類不在同一範圍內,所以不是重載,因為基類不是虛函數,所以是隱藏不是重寫)
當基類函數是虛函數時,基類函數將被覆蓋。(因為子類和基類不在同一範圍內,所以不是重載)
6、GC是什麼? 為什麼要有GC?
GC是垃圾收集器。程式員不用擔心記憶體管理,因為垃圾收集器會自動進行管理。要請求垃圾收集,可以調用下麵的方法之一:
System.gc()
Runtime.getRuntime().gc()
7、C#中結構和類有什麼異同?
類是引用類型,可以繼承類、介面和被繼承,有預設的構造函數,有析構函數,可以使用abstract和sealed,有protected修飾符,必須使用new初始化。
結構是值類型,只能繼承介面,不能被繼承,沒有預設的構造函數,可以創建,沒有析構函數,不可以用abstract和sealed,沒有protected修飾符,可以不用new初始化。
8、抽象類(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) 如果抽象類實現介面,則可以把介面中方法映射到抽象類中作為抽象方法而不必實現,而在抽象類的子類中實現介面中方法
9、.NET的錯誤處理機制是什麼?
try{可能要出錯的代碼}
catch{撲捉到錯誤後的處理}
finally{不論代碼是否出錯都要執行}
10、事務是什麼?
在許多大型、關鍵的應用程式中,電腦每秒鐘都在執行大量的任務。更為經常的不是這些任務本身,而是將這些任務結合在一起完成一個業務要求,稱為事務。
當某一個任務失敗時,就恢復到指定的恢復點,這個叫回滾。
11、什麼是資料庫事務
(1) 事務的三個特性:一致性,原子性,隔離性
(2) 幾個SQL語句,要麼全部執行成功,要麼全部執行失敗,事務的三個操作:Begin,Commit,RollBack。
(3) 取剛插入數據的ID值,就要用事務來隔離。
12、資料庫建立索引的優缺點
優點:使用索引可以加快數據的查詢速度
缺點:由於數據插入過程中會建索引,所以會降低數據的插入,更新速度,索引還會占用磁碟空間。
13、介面是否可繼承介面? 抽像類是否可實現(implements)介面? 抽像類是否可繼承實體類(concrete class)?
介面可以繼承介面。抽像類可以實現(implements)介面,抽像類是否可繼承實體類,但前提是實體類必須有明確的構造函數。
14、sleep()和wait() 有什麼區別?
sleep()方法是將當前線程掛起指定的時間。
wait()釋放對象上的鎖並阻塞當前線程,直到它重新獲取該鎖。
.net是一種平臺和框架, .net 不是單純的語言也不是單純的工具,它是從底層平臺開始構建起來的一個整體框架
16、概述反射和序列化?
反射:要給發射下一個定義還是比較難的。反射提供了封裝程式集,模塊和類型對象,可以用反射動態地創建類型的實例,將類型綁定到現有對象,或者從現有對象類型里獲取 類型,然後調用類型的方法或訪問欄位和屬性。動態獲取程式集信息
序列化:將對象轉換為另一種媒介傳輸的格式過程。如,序列化一個對象,用Http通過internet在客戶端和伺服器之間傳遞該對象,在另一端用反序列化從該流中重新得到對象。
17、什麼是虛函數?什麼是抽像函數?
虛函數:可由子類繼承並重寫的函數。抽像函數:規定其非虛子類必須實現的函數,必須被重寫。
18、什麼是XML?
XML即可擴展標記語言。eXtensible Markup Language.標記是指電腦所能理解的信息符號,通過此種標記,電腦之間可以處理包含各種信息的文章等。如何定義這些標記,即 可以選擇國際通用的標記語言,比如HTML,也可以使用象XML這樣由相關人士自由決定的標記語言,這就是語言的可擴展性。XML是從SGML中簡化修改出來的。它主要用到的有 XML、XSL和XPath等。
19、XML與HTML 的主要區別
1 XML是區分大小寫字母的,HTML不區分。
2 在HTML中,如果上下文清楚地顯示出段落或者列表鍵在何處結尾,那麼你可以省略或者之類的結束標記。在XML中,絕對不能省略掉結束標記。
3 在XML中,擁有單個標記而沒有匹配的結束標記的元素必須用一個 / 字元作為結尾。這樣分析器就知道不用查找結束標記了。
4 在XML中,屬性值必須分裝在引號中。在HTML中,引號是可用可不用的。
5 在HTML中,可以擁有不帶值的屬性名。在XML中,所有的屬性都必須帶有相應的值。
20、error和exception有什麼區別?
error 表示恢復不是不可能但很困難的情況下的一種嚴重問題。比如說記憶體溢出。不可能指望程式能處理這樣的情況。
exception 表示一種設計或實現問題。也就是說,它表示如果程式運行正常,從不會發生的情況。
21、向伺服器發送請求有幾種方式?
get,post。
get一般為鏈接方式,post一般為按鈕方式。
22、<%# %>和<% %>的區別?
<%# %>表示綁定的數據源
<% %>是伺服器端代碼塊
23、進程和線程分別該怎麼理解?
進程是比線程大的程式運行單元,都是由操作系統所體會的系統運行單元,一個程式中至少要有一個進程,有一個進程中,至少要有一個線程,
線程的劃分尺度要比進程要小,進程擁有獨立的記憶體單元,線程是共用記憶體,從而極大的提高了程式的運行效率同一個進程中的多個線程可以併發執行。
24、如何處理幾十萬條併發數據?
用存儲過程或事務。取得最大標識的時候同時更新..註意主鍵不是自增量方式這種方法併發的時候是不會有重覆主鍵的..取得最大標識要有一個存儲過程來獲取.
25、數組有沒有length()這個方法? String有沒有length()這個方法?
爸爸 王小二=new 大兒子();
爸爸 王小二=new 小兒子();
那我現在叫大兒子過來,王小二可以過來,我叫小兒子過來,王小二也可以過來方便吧。
在做項目的時候, 爸爸 王小二; 這步是我寫的;後面 王小二=new 小兒子();或者new 大兒子()不一定是我寫,那我怎麼知道他到底要的是大兒子還是小兒子, 所有我聲明他們爸爸的引用,你叫大兒子和小兒子都ok。 我要是寫具體的 小兒子 王小二=new 小兒子(),不是把別人限定死了嗎。
就算那兩步都是你自己寫,我項目做完了,我如果要修改的話,那我至少聲明的那部分可以不動了吧。也就是說擴展了程式的 移植性和可維護性。 27、UDP連接和TCP連接的異同 TCP---傳輸控制協議,提供的是面向連接、可靠的位元組流服務。當客戶和伺服器彼此交換數據前,必須先在雙方之間建立一個TCP連接,之後才能傳輸數據。TCP提供超時重發,丟棄重覆數據,檢驗數據,流量控制等功能,保證數據能從一端傳到另一端。
UDP---用戶數據報協議,是一個簡單的面向數據報的運輸層協議。UDP不提供可靠性,它只是把應用程式傳給IP層的數據報發送出去,但是並不能保證它們能到達目的地。由於UDP在傳輸數據報前不用在客戶和伺服器之間建立一個連接,且沒有超時重發等機制,故而傳輸速度很快。 28、