c#面試題彙總1

.netB/S結構的系統,您是用幾層結構來開發,每一層之間的關係以及爲什麼要這樣分層?
答: 

從下至上分別爲:數據訪問層、業務邏輯層(又或成爲領域層)、表示層
數據訪問層:有時候也稱爲是持久層,其功能主要是負責數據庫的訪問
業務邏輯層:是整個系統的核心,它與這個系統的業務(領域)有關
表示層:是系統的UI部分,負責使用者與整個系統的交互。 
優點:  分工明確,條理清晰,易於調試,而且具有可擴展性。
缺點:  增加成本。

分層式結構究竟其優勢何在?
1、開發人員可以只關注整個結構中的其中某一層;
2
、可以很容易的用新的實現來替換原有層次的實現;
3
、可以降低層與層之間的依賴;
4
、有利於標準化;
5
、利於各層邏輯的複用。
概括來說,分層式設計可以達至如下目的:分散關注、鬆散耦合、邏輯複用、標準定義。

分層式結構也不可避免具有一些缺陷:
 1
、降低了系統的性能。這是不言而喻的。如果不採用分層式結構,很多業務可以直接造訪數據庫,以此獲取相應的數據,如今卻必須通過中間層來完成。
2
、有時會導致級聯的修改。這種修改尤其體現在自上而下的方向。如果在表示層中需要增加一個功能,爲保證其設計符合分層式結構,可能需要在相應的業務邏輯層和數據訪問層中都增加相應的代碼。

MVC模式

MVC(Model-View-Controller)把交互系統的組成分解成模型、視圖、控制器三種部件

mvc的優點:

1.通過把項目分成model viewcontroller,使得複雜項目更加容易維護。

2.沒有使用view state和服務器表單控件,可以更方便的控制應用程序的行爲

3.應用程序通過controller來控制程序請求,可以提供豐富的url重寫。

4.對單元測試的支持更加出色

5.在團隊開發模式下表現更出衆

MVC的不足: 

1)增加了系統結構和實現的複雜性。對於簡單的界面,嚴格遵循MVC,使模型、視圖與控制器分離,會增加結構的複雜性,並可能產生過多的更新操作,降低運行效率。   
2)視圖與控制器間的過於緊密的連接。視圖與控制器是相互分離,但確實聯繫緊密的部件,視圖沒有控制器的存在,其應用是很有限的,反之亦然,這樣就妨礙了他們的獨立重用。   
3)視圖對模型數據的低效率訪問。依據模型操作接口的不同,視圖可能需要多次調用才能獲得足夠的顯示數據。對未變化數據的不必要的頻繁訪問,也將損害操作性能。

asp.net如何實現MVC模式,舉例說明!

web/business/dataaccess

 

列舉ASP.NET 頁面之間傳遞值的幾種方式。
1.使用QueryString, ....?id=1; response. Redirect()....
2.
使用Session變量
3.
使用Server.Transfer

請說明在.net中常用的幾種頁面間傳遞參數的方法,並說出他們的優缺點。
QueryString 
傳遞一個或多個安全性要求不高或是結構簡單的數值。但是對於傳遞數組或對象的話,就不能用這個方法了
session(viewstate)
簡單,但易丟失 作用於用戶個人,過量的存儲會導致服務器內存資源的耗盡。 
application
對象的作用範圍是整個全局,也就是說對所有用戶都有效。其常用的方法用LockUnLock
cookie
簡單,但可能不支持,可能被僞造 Cookie是存放在客戶端的,而session是存放在服務器端的。而且Cookie的使用要配合ASP.NET內置對象Request來使用
input ttype="hidden"
簡單,可能被僞造
url
參數簡單,顯示於地址欄,長度有限
Server.Transfer 
把流程從當前頁面引導到另一個頁面中,新的頁面使用前一個頁面的應答流
數據庫穩定,安全,但性能相對弱


什麼是Viewstate?它有什麼作用?

ViewState用來保存頁面狀態,就是說提交之後我們還可以看到文本框裏面的內容就是ViewState保存的功勞。
ViewState
只維護當前頁面的狀態,不同頁面之間不能共享,Session可以。
ViewState
你可以理解爲一個隱藏控件。

ASP.Net頁面生命週期

每個頁面的生命週期爲用戶的每一次訪問,也就是說每一次客戶端與服務器之間的一個往返過程.全局變量的生命週期在此之間.

1. Page_Init();
2. Load ViewState and Postback data;
3. Page_Load();
4. Handle control events;
5. Page_PreRender();
6. Page_Render();
7. Unload event;
8. Dispose method called;

ADO.net中常用的對象有哪些?分別描述一下。
答:
Connection       
打開數據庫連接
Command           
執行數據庫命令
DataAdapter       
連接數據,執行數據庫命令,填充DataSet
DataSet           
數據在內存中的緩存,數據結構
DataReader       
只讀向前的讀取數據庫

DataReaderDataSet的異同
DataReader使用時始終佔用SqlConnection,在線操作數據庫..任何對SqlConnection的操作都會引發DataReader的異常..因爲DataReader每次只在內存中加載一條數據,所以佔用的內存是很小的..因爲DataReader的特殊性和高性能.所以DataReader是隻進的..你讀了第一條後就不能再去讀取第一條了..
DataSet
則是將數據一次性加載在內存中.拋棄數據庫連接..讀取完畢即放棄數據庫連接..因爲DataSet將數據全部加載在內存中.所以比較消耗內存...但是確比DataReader要靈活..可以動態的添加行,,數據.對數據庫進行回傳更新操作...

 

存儲過程和sql語句的優缺點

優點:
1.
提高性能,減少網絡傳輸,節約時間

2.減少網絡流量    存儲過程位於服務器上,調用的時候只須傳遞存儲過程的名稱以及參數,不用每次訪問都傳遞很長的sql 語句。

4.安全性     減少sql 注入式***。

5.可維護性高    更新存儲過程通常比更改、測試以及重新部署程序集需要較少的時間和精力。

缺點:

1.交互性差

2.可移植性差

  

說出你所瞭解的數據庫訪問組件(例如ADO,至少4)
答:ADOADO.NetMDAC(Microsoft Data Access Components)Microsoft SQL Server OLE DB Provider

Microsoft Jet OLE DB ProviderDesktop Database Drivers ODBC DriverVisual FoxPro ODBC Driver

 

 

 

什麼是面向對象
萬物都是對象,其主要特徵:封裝、繼承、多態

怎樣實現多態 

1.通過對象直接調用成員函數時,始終默認使用該對象的類的成員函數(除非用::顯示指定類名)。

2.通過指向對象的指針或引用調用成員函數時:如果該函數是實函數,則調用該指針或引用的類的成員函數;如果該函

數是虛函數,則調用該指針或引用指向的對象的類的成員函數。

面向對象的思想主要包括什麼?
答:任何事物都可以理解爲對象,其主要特徵: 繼承。封裝。多態。特點:代碼好維護,安全,隱藏信息

什麼是裝箱和拆箱?
答:從值類型接口轉換到引用類型裝箱。從引用類型轉換到值類型拆箱。裝箱(boxing)是將值類型的數據轉化成引用類型,int i=3; object o = i ;便是裝箱過程,而拆箱(unboxing)是將飲用類型數據轉換值類型,比如int j = (int)o;屬於拆箱


 

什麼是Interface?它與Abstract Class有什麼區別?

接口(Interface)是用來定義行爲規範的,不會有具體實現,而抽象類除定義行爲規範外,可以有部分實現,但一

個類能實現多個接口,但只能繼承一個父類  

什麼時候使用抽象類,什麼時候用接口

接口用於規範,抽象類用於共性。接口中只能聲明方法,屬性,事件,索引器。而抽象類中可以有方法的實

現,也可以定義非靜態的類變量。抽象類是類,所以只能被單繼承,但是接口卻可以一次實現多個。抽象類可以

提供某些方法的部分實現,接口不可以.抽象類的實例是它的子類給出的。接口的實例是實現接口的類給出的。

再抽象類中加入一個方法,那麼它的子類就同時有了這個方法。而在接口中加入新的方法,那麼實現它的類就要

重新編寫(這就是爲什麼說接口是一個類的規範了)。接口成員被定義爲公共的,但抽象類的成員也可以是私有

的、受保護的、內部的或受保護的內部成員(其中受保護的內部成員只能在應用程序的代碼或派生類中訪問)。

此外接口不能包含字段、構造函數、析構函數、靜態成員或常量。

什麼是抽象類(abstract class)?
一種不可以被實例化的類。抽象類中一般含有抽象方法,當然也可有具體實現。繼承類只有實現過所有抽

象類的抽象方法後才能被實例化。

何時必須聲明一個類爲抽象類?
當這個類中包含抽象方法時,或是該類並沒有完全實現父類的抽象方法時。

口(interface)是什麼?
只含有共有抽象方法(public abstract method)的類。這些方法必須在子類中被實現。

爲什麼不能指定接口中方法的修飾符?
接口中的方法用來定義對象之間通信的契約,指定接口中的方法爲私有或保護沒有意義。他們默認爲公有方法。

可以繼承多個接口麼?
當然。

那麼如果這些接口中有重複的方法名稱呢?
這種情況中你可以決定如何實現。當然需要特別得小心。但是在編譯環節是沒有問題的。

接口和抽象類的區別是什麼?
接口中所有方法必須是抽象的,並且不能指定方法的訪問修飾符。抽象類中可以有方法的實現,也可以指

定方法的訪問修飾符。 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章