第一,簡單說說你對物件導向的理解(也就是三大特徵的理解,封裝、繼承、多態)
封裝:就象一個盒子,你不需要知道裡面有什麼東西,只知道它有那些用處就行
繼承:就象父子關係,兒子是父親的繼承
多態:好比一個父親有多個兒子,各個兒子有不同的特徵
封裝的意思是說對象資料和操作該資料的指令都是對象自身的一部分,封裝能夠實現儘可能對外部世界隱藏資料。譬如,當你在某個模組中定義某個變數、常量、函數前聲明了關鍵字Private,你就將它封裝了起來,降低了它被外界汙染的可能。
繼承的思想是當你定義了一個對象後,你可以擴充該對象,建立一些新的對象。譬如你定義了一個基類Human,其中的屬性有Stature、Weight、Age、Gender等。假如你此時又要定義另一個類Student並且發現這個類除了具有以上Human基類的所有屬性之外還具有一些自己特有的屬性例如School、Grade、Class、StudentID等等,這時你就不必重寫它的全部屬性,只需聲明Student類繼承於Human類就可以了,在VB.NET中用Inherits關鍵字聲明。繼承提高了我們編寫代碼的效率。
多態性是指以不同的方式、不同的類來實現一個公用介面的能力。譬如說,你定義了BladeMaster(劍聖)、DeathKnight(死亡騎士)、DaemonHunter(惡魔獵手)、Archmage(大法師)這四個類並且分別建立了它們的執行個體,此時你向每個執行個體都發送一條UseUltimateSkill(使用終極技能)這個訊息,這四個執行個體將完成不同的事情,BladeMaster將施展劍刃風暴,DeathKnight將召喚周圍的死屍,DaemonHunter將變身,而Archmage將實現部隊的瞬間移動。每個類都可以以不同的方式對一條特定的訊息作出反應,這就是多態性的精髓!
在物件導向設計裡:
類: 是對象的模板.就像做汽車的圖紙.
對象: 是類的一個具體執行個體.
方法: 執行一個操作,可以返回一個對象.
屬性: 對象的特徵
面向過程就是分析出解決問題所需要的步驟,然後用函數把這些步驟一步一步實現,使用的時候一個一個依次調用就可以了。物件導向是把構成問題事務分解成各個對象,建立對象的目的不是為了完成一個步驟,而是為了描敘某個事物在整個解決問題的步驟中的行為。
例如五子棋,面向過程的設計思路就是首先分析問題的步驟:
1、開始遊戲,
2、黑子先走,
3、繪製畫面,
4、判斷輸贏,
5、輪到白子,
6、繪製畫面,
7、判斷輸贏,
8、返回步驟2,
9、輸出最後結果。
把上面每個步驟用分別的函數來實現,問題就解決了。
而物件導向的設計則是從另外的思路來解決問題。整個五子棋可以分為:
1、黑白雙方,這兩方的行為是一模一樣的,
2、棋盤系統,負責繪製畫面,
3、規則系統,負責判定諸如犯規、輸贏等。
第一類對象(玩家對象)負責接受使用者輸入,並告知第二類對象(棋盤對象)棋子布局的變化,棋盤對象接收到了棋子的變化就要負責在螢幕上面顯示出這種變化,同時利用第三類對象(規則系統)來對棋局進行判定。
可以明顯地看出,物件導向是以功能來劃分問題,而不是步驟。同樣是繪製棋局,這樣的行為在面向過程的設計中分散在了總多步驟中,很可能出現不同的繪製版本,因為通常設計人員會考慮到實際情況進行各種各樣的簡化。而物件導向的設計中,繪圖只可能在棋盤對象中出現,從而保證了繪圖的統一。
功能上的統一保證了物件導向設計的可擴充性。比如我要加入悔棋的功能,如果要改動面向過程的設計,那麼從輸入到判斷到顯示這一連串的步驟都要改動,甚至步驟之間的循序都要進行大規模調整。如果是物件導向的話,只用改動棋盤對象就行了,棋盤系統儲存了黑白雙方的棋譜,簡單回溯就可以了,而顯示和規則判斷則不用顧及,同時整個對對象功能的調用順序都沒有變化,改動只是局部的。
到這裡就可以很明顯的看出物件導向和面向過程的區別所在了。
不管有多少年的編程經驗,要完全掌握物件導向的思想那是很難的,物件導向的思想的學習是我們不斷的吸取經驗和不斷的總結,抽象出現實世界的實體,萬物皆是對象,我們把具有相同屬性和行為的一類事物抽象成為一個類,在類裡封裝資料,一般欄位做為私人成員變數,對外不能訪問,類裡的屬性和方法是提供其他與對象相互協調的介面,我們要對一個對象發送訊息時候,只能對該對象的屬性或方法進行調用,不能直接存取對象的私人成員,這樣就把資料封裝起了。
對物件導向編程的認識
1. 物件導向方法都支援三種基本的活動:識別對象和類,描述對象和類之間的關
系,以及通過描述每個類的功能定義對象的行為。
2. 物件導向編程(OOP)中最重要的概念是類(Class),指的是資料類型,而對象(Object)指的是資料類型的執行個體、變數
。類可以並定義為一組對象的抽象描述,每個對象都有自己特定的狀態,但都可以執行相同的操作。
3. 類的主要任務有兩個:
I. 類定義了與其有關的抽象物。不管有多複雜,可以使用類描述真實世界中實體。當然,當非常複雜時,可以用類來描述子系統。
II. 類是程式模組化的基礎。
4. 繼承:利用已存在的類定義新類,而不用重建立立該類。子類從它的父類(基類)中繼承元素和對象方法。繼承是一種功能強大的語言構造,有以下一些規則與技巧:
I. 繼承代表特殊化,可把子類當作父類的一種特殊情況。
II. 繼承還用於通用化。
III. 實際上繼承是一種避免代碼重複的手段。
IV. 編譯器可以更好的理解。父類與子類有一些類型相容性。
5. 多態:使用,一個程式變數引用不同類的對象;根據當前與該變數相連的對象類,使用不同方式對該變數執行操作。多態允許對一個對象應用一種操作,讓對象按照與其類型相符合的方式作出響應。
第二,簡單說說asp.net的動作原理(主要的是IL語言,二次編譯的概)
第三,三層結構的概念
第四,簡單說說ado.net有那幾個重要的對象和控制項(對象:Connection、Command、Adapter、reader。控制:DataGrid、DataList、Repater)
第五,資料集的概念..
1. 在c#中using和new這兩個關鍵字有什麼意義,請寫出你所知道的意義?
Using 引入一個名子空間,或在使用了一個對像後自動調用其IDespose,New 執行個體化一個對像,或修飾一個方法,表此方法完全重寫此方法
2. DataReader和DataSet的異同
DataReader和DataSet最大的區別在於,DataReader使用時始終佔用SqlConnection,線上操作資料庫..任何對SqlConnection的操作都會引發DataReader的異常..因為DataReader每次只在記憶體中載入一條資料,所以佔用的記憶體是很小的..因為DataReader的特殊性和高效能.所以DataReader是只進的..你讀了第一條後就不能再去讀取第一條了..
DataSet則是將資料一次性載入在記憶體中.拋棄資料庫連接..讀取完畢即放棄資料庫連接..因為DataSet將資料全部載入在記憶體中.所以比較消耗記憶體...但是確比DataReader要靈活..可以動態添加行,列,資料.對資料庫進行回傳更新操作...
3. C#中介面和類的異同
介面和類都是類,不同的事,介面只包含方法或屬性的聲明,不包含具體實現方法的代碼,介面可以實現多繼承,而類只能是單繼承,繼承介面的類必須實現介面中聲明的方法或屬性。介面主要定義一種規範,統一調用方法,在大型項目中介面正發揮日益重要的作用。
4. 請說明在.net中常用的幾種頁面間傳遞參數的方法,並說出他們的優缺點。
6種:QueryString,session,cookies,application,server.Transfer,respose.redictor
session(viewstate) 簡單,但易丟失
application 全域
cookie 簡單,但可能不支援,可能被偽造
input ttype="hidden" 簡單,可能被偽造
url參數簡單,顯示於地址欄,長度有限
資料庫穩定,安全,但效能相對弱
使用QueryString, 如....?id=1; response. Redirect()....
使用Server.Transfer
5.override與重載的區別
Override用來重寫父類的方法,重載使用相同名的方法或操作符擁有不同類型的參數
6..net的錯誤處理機制是什麼
.net錯誤處理機制採用try->catch->finally結構,發生錯誤時,層層上拋,直到找到匹配的Catch為止。
7. 簡述 private、 protected、 public、 internal 修飾符的存取權限。
private : 私人成員, 在類的內部才可以訪問。protected : 保護成員,該類內部和繼承類中可以訪問。public : 公用成員,完全公開,沒有訪問限制。internal: 在同一命名空間內可以訪問。
8.寫出一條Sql語句: 取出表A中第31到第40記錄(SQLServer, 以自動成長的ID作為主鍵, 注意:ID可能不是連續的。)
select top 10 * from A where id not in (select top 30 id from A)
9 死結的必要條件?怎麼克服?
答:系統的資源不足,進程的推進的順序不合適,資源分派不當,一個資源每次只能被一個進程使用,一個資源請求資源時,而此時這個資源已阻塞,對已獲得資源不放,進程獲得資源時,未使用完前,不能強行剝奪。
10 介面是否可以繼承介面?抽象類別是否可以實現介面?抽象類別是否可以繼承實體類?
答:介面是可以繼承介面的,抽象類別是可以實現介面的,抽象類別可以繼承實體類,但是有個條件,條件是,實體類必須要有明確的建構函式。
11 構造器Constructor是否可以被繼承?是否可以被Override?
答:Constructor不可以被繼承,因此不能被重寫(Overriding),但可以被重載(Overloading).
12 C#是否可以對記憶體直接進行操作?
答:這個問題比較難回答,也是個很大的問題。但是可以這樣問答。C#是可以對記憶體進行直接操作的,雖然很少用到指標,但是C#是可以使用指標的,在用的時候需要在前邊加unsafe,,在.net中使用了記憶體回收機制(GC)功能,它替代了程式員,不過在C#中不可以直接使用finalize方法,而是在解構函式中調用基類的finalize()方法。
13 Error和Exception有是區別?
答:error表示恢複不是不可能,但是很困難,exception表示一種實際或實現問題,它表示程式運行正常不可以發生的。
14 談談final,finally,finallize的區別?
答:final用於申明屬性,方法和類,表示屬性不可變,方法不可以被覆蓋,類不可以被繼承。
Finally是異常處理語句結構中,表示總是執行的部分。
Finallize表示是object類一個方法,在記憶體回收機制中執行的時候會被調用被回收對象的方法。
15 Collection和Collections的區別?
答:Collection是集合類的上級介面,Collections是針對集合類的一個協助類,它提供一系列靜態方法來實現對各種集合的搜尋,排序,安全執行緒化操作。
16 C#中委託是什麼?事件是不是一種委託?
答:委託是一種安全的類似與函數指標,但是她比指標要安全的多,它可以把方法作為一個參數傳遞給另一個方法,可以理解為指向函數的引用。事件是一種訊息機制,它是一種委託,委託不帶方法體。
17 Override, Overload,的區別?
答:Override是重寫的意思,它表示重寫基類的方法,而且方法的名稱,傳回型別,參數類型,參數個數要與基類相同。
Overload是重載是意思,它也表示重寫基類的方法,但是只要方法名相同,別的可以不同。
18 New有種用法?
答:有3種,第一種是,執行個體化如:New Class()
第二種是,public new 隱藏基類的方法
第三種是,在泛型類申明中的任何型別參數都必須有公用的無參建構函式。
19 概述反射和序列化?
答:反射:要給發射下一個定義還是比較難的,這裡先說說我的理解。反射提供了封裝程式集,模組和類型對象,可以用反射動態地建立類型的執行個體,將類型綁定到現有對象,或者從現有物件類型裡擷取類型,然後調用類型的方法或訪問欄位和屬性。
序列化:將對象轉換為另一種媒介傳輸的格式過程。如,序列化一個對象,用Http通過internet在用戶端和伺服器之間傳遞該對象,在另一端用還原序列化從該流中重新得到對象。
20 Const和ReadOnly?
答:Const用來申明編程時申明常量,ReadOnly用來申明運行時常量。
21 UDP和TCP串連有和異同?
答:TCP是傳輸控制通訊協定,提供的是連線導向的,是可靠的,位元組流服務,當使用者和伺服器彼此進行資料互動的時候,必須在他們資料互動前要進行TCP串連之後才能傳輸資料。TCP提供逾時重撥,檢驗資料功能。UDP是使用者資料包通訊協定,是一個簡單的面向資料報的傳輸協議,是不可靠的串連。
22 .用.net做B/S結構的系統,您是用幾層結構來開發,每一層之間的關係以及為什麼要這樣分層?
答:一般為3層
資料訪問層,業務層,展示層。
資料訪問層對資料庫進行增刪查改。
業務層一般分為二層,業務表觀層實現與展示層的溝通,商務規則層實現使用者密碼的安全等。
展示層為了與使用者互動例如使用者添加表單。
優點: 分工明確,條理清晰,易於調試,而且具有可擴充性。
缺點: 增加成本。
我試首寫幾句(顯示資料)
DAL:
public DataSet GetDataSet(string sql)
{
Open();
SqlDataAdpater adapter =new SqlDataAdpater(sql,connection);
DataSet dt = new DateSet();
adapter.Fill(dt);
Close();
return dt
}
BLL:
Cate.cs
public class Cate
{
private _name;
public string Name
{
set{_name=value;}
get{return _name;}
}
public void LoadData()
{
DataSet ds=GetDataSet("select catename form cates");
_name=ds.Tables[0].Row[0]["catename"];
}
}
PDL:
Cate cate=new Cate();
cate.LoadData();
Response.Write cate.Name;
---------
大功告成
23. 什麼叫應用程式定義域?什麼是Managed 程式碼?什麼是強型別系統?什麼是裝箱和拆箱?什麼是重載?CTS、CLS和CLR分別作何解釋?
答:應用程式定義域:就是為安全性,可靠性,隔離性,和版本控制,及卸載程式提供的隔離邊界。它通常由運行庫宿主建立,應用程式定義域提供了一個更安全,用途更廣的處理單元。
Managed 程式碼:使用CLR編譯語言編輯器開發編寫的代碼就叫Managed 程式碼。
裝箱和拆箱:是把實值型別轉換為參考型別的過程,是隱式的,相反的過程就是拆箱,是顯式的。
CTS是公用類型系統,CLS是Common Language Specification,CLR公用語言運行庫。
強型別系統:每個變數和對象都必須具有申明類型。
24. 實值型別和參考型別的區別?
答:實值型別的值是存放在堆棧中的,改變其值,不改變變數原有的值,而參考型別的值是存放在棧中的,其引用的地址是存放在堆棧中的,改變其值也就改變了變數原有的值。實值型別不允許包含null值,然而可空類型可以將null賦值給實值型別l。
25. ASP.net的身分識別驗證方式有哪些?
答:windows,forms,passport
26. 解釋一下UDDI、WSDL的意義及其作用?
答:UDDI是統一描述整合協議,是一套基於Web的,分布式的,為WEB服務提供的資訊註冊的實現標準規範,同時為也是為企業本身提供的Web服務註冊以讓別的企業能夠發現並訪問的協議標準。提供了基於標準的規範,用於描述和探索服務,還提供了一組基於網際網路的實現。
WSDL這是一個基於XML的描述WEB服務的介面。
27. 什麼是SOAP?
答:是簡單訪問協議。是在分布式環境中,交換資訊並實現遠程調用的協議。是一個基於XML的協議。使用SOAP,可以不考慮任何傳輸協議,但通常還是HTTP協議,可以允許任何類型的對象或代碼,在任何平台上,以任一種語言相互連信。它是一種輕量級協議。
28. 如何部署一個ASP.net頁面?
答:vs2003,vs2005裡邊都有發表機制,vs2003發行就緒然後在複製部署。
Vs2005可以直接部署到對應的位置。
29. 如何理解.net中的記憶體回收機制?
答:.NET中的記憶體回收機制是引用程式對記憶體的回收和釋放。當每次用new關鍵字建立一個對象時,運行庫都要從託管堆中為其分配記憶體,因為空白間是有限的,最終記憶體回收機制是要回收不用的記憶體的。已釋放記憶體,重新使用。
30. 物件導向的三大基本原則?
答:封裝,繼承,多態。
31. 在.NET中所有類的基類是?
答:object。
32. 能用foreach遍曆訪問的對象需要實現?
答:需要實現IEnumerable介面和GetEnumerator ()方法。
33. Heap與stack的差別?
答:Heap是堆,空間是由手動操作分配和釋放的,它的儲存區很大的自由儲存區。
Stack是棧,是由是作業系統自動分配和釋放的,棧上的空間是有限的。程式在編譯期間變數和函數分配記憶體都是在棧上進行的,且在運行時函數調用時的參數的傳遞也是在棧上進行的。