1. 程式人生 > >轉:.NET面試題匯總(三)

轉:.NET面試題匯總(三)

轉換 writing 手動 開放 sqlserve XML stat 導入 asp.net

原文地址:http://www.cnblogs.com/yuan-jun/p/6600692.html

1、簡述 private、 protected、 public、 internal 修飾符的訪問權限。
private : 私有成員, 在類的內部才可以訪問。
protected : 保護成員,該類內部和繼承類中可以訪問。
public : 公共成員,完全公開,沒有訪問限制。
internal: 當前程序集內可以訪問。

2、ADO.NET中的五個主要對象
Connection:主要是開啟程序和數據庫之間的連接。沒有利用連接對象將數據庫打開,是無法從數據庫中取得數據的。Close和Dispose的區別,Close以後還可以Open,Dispose以後則不能再用。
Command:主要可以用來對數據庫發出一些指令,例如可以對數據庫下達查詢、新增、修改、刪除數據等指令,以及調用存在數據庫中的存儲過程等。這個對象是架構在Connection 對象上,也就是Command 對象是透過連接到數據源。
DataAdapter:主要是在數據源以及DataSet 之間執行數據傳輸的工作,它可以透過Command 對象下達命令後,並將取得的數據放入DataSet 對象中。這個對象是架構在Command對象上,並提供了許多配合DataSet 使用的功能。
DataSet:這個對象可以視為一個暫存區(Cache),可以把從數據庫中所查詢到的數據保留起來,甚至可以將整個數據庫顯示出來,DataSet是放在內存中的。DataSet 的能力不只是可以儲存多個Table 而已,還可以透過DataAdapter對象取得一些例如主鍵等的數據表結構,並可以記錄數據表間的關聯。DataSet 對象可以說是ADO.NET 中重量級的對象,這個對象架構在DataAdapter對象上,本身不具備和數據源溝通的能力;也就是說我們是將DataAdapter對象當做DataSet 對象以及數據源間傳輸數據的橋梁。DataSet包含若幹DataTable、DataTableTable包含若幹DataRow。
DataReader:當我們只需要循序的讀取數據而不需要其它操作時,可以使用DataReader 對象。DataReader對象只是一次一筆向下循序的讀取數據源中的數據,這些數據是存在數據庫服務器中的,而不是一次性加載到程序的內存中的,只能(通過遊標)讀取當前行的數據,而且這些數據是只讀的,並不允許作其它的操作。因為DataReader 在讀取數據的時候限制了每次只讀取一筆,而且只能只讀,所以使用起來不但節省資源而且效率很好。使用DataReader 對象除了效率較好之外,因為不用把數據全部傳回,故可以降低網絡的負載。
ADO.NET 使用Connection 對象來連接數據庫,使用Command 或DataAdapter對象來執行SQL語句,並將執行的結果返回給DataReader 或 DataAdapter ,然後再使用取得的DataReader 或DataAdapter 對象操作數據結果。

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

Server.Transfer和Response.Redirect的區別:Server.Transfer是服務器內部的轉接,瀏覽器不知曉;Response.Redirect是有瀏覽器參與的,所以在地址欄中可以看到地址的變化。

4、C#中的委托是什麽?事件是不是一種委托?事件和委托的關系。
委托可以把一個方法作為參數代入另一個方法。
委托可以理解為指向一個函數的指針。
委托和事件沒有可比性,因為委托是類型,事件是對象,下面說的是委托的對象(用委托方式實現的事件)和(標準的event方式實現)事件的區別。事件的內部是用委托實現的。因為對於事件來講,外部只能“註冊自己+=、註銷自己-=”,外界不可以註銷其他的註冊者,外界不可以主動觸發事件,因此如果用Delegate就沒法進行上面的控制,因此誕生了事件這種語法。事件是用來閹割委托實例的,類比用一個自定義類閹割List。事件只能add、remove自己,不能賦值。事件只能+=、-=,不能= 。加分的補充回答:事件內部就是一個private的委托和add、remove兩個方法。

面試聊:用Reflector查看.Net的類的內部實現,解決問題。

5、override與重載(overload)的區別
重載是方法的名稱相同。參數或參數類型不同,進行多次重載以適應不同的需要。重載(overload)是面向過程的概念。
Override 是進行基類中函數的重寫。Override是面向對象的概念

6、C#中索引器是否只能根據數字進行索引?是否允許多個索引器參數?
參數的個數和類型都是任意的。加分的補充回答:用reflector反編譯可以看出,索引器的內部本質上就是set_item、get_item方法。加分的補充回答:回答.net培訓中講解設計模式中開發的SettingsProvider就是用的string類型的參數名做索引器參數。

7、屬性和public字段的區別是什麽?調用set方法為一個屬性設值,然後用get方法讀取出來的值一定是set進去的值嗎?
屬性可以對設值、取值的過程進行非法值控制,比如年齡禁止設值負數,而字段則不能進行這樣的設置。雖然一般情況下get讀取的值就是set設置的值,但是可以讓get讀取的值不是set設置的值的,極端的例子。Public Age{get{return 100;}set{}}。加分的補充回答:用reflector反編譯可以看出,屬性內部本質上就是set_***、get_***方法。

class Person
{
public int Age
{
get
{
return 3;
}
set
{

}
}
}
Person p1 = new Person();
p1.Age = 30;
p1.Age++;
Console.Write(p1.Age);//輸出3

8、三層架構
通常意義上的三層架構就是將整個業務應用劃分為:表現層(UI)、業務邏輯層(BLL)、數據訪問層(DAL)。
區分層次的目的即為了“高內聚,低耦合”的思想。
表現層(UI):通俗講就是展現給用戶的界面,即用戶在使用一個系統的時候的所見所得。
業務邏輯層(BLL):針對具體問題的操作,也可以說是對數據層的操作,對數據業務邏輯處理。
數據訪問層(DAL):該層所做事務直接操作數據庫,針對數據的增添、刪除、修改、更新、查找等每層之間是一種垂直的關系。
三層結構是N層結構的一種,一般來說,層次之間是向下依賴的,下層代碼未確定其接口(契約)前,上層代碼是無法開發的,下層代碼接口(契約)的變化將使上層的代碼一起變化。
優點: 分工明確,條理清晰,易於調試,而且具有可擴展性。
缺點: 增加成本。

9、MVC模式 (*)
MVC(Model View Controller)模型-視圖-控制器
aspx就是View,視圖;Model:DataSet、Reader、對象;Controller:cs代碼。

MVC是典型的平行關系,沒有說誰在上誰在下的關系,模型負責業務領域的事情,視圖負責顯示的事情,控制器把數據讀取出來填充模型後把模型交給視圖去處理。而各種驗證什麽的應該是在模型裏處理了。它強制性的使應用程序的輸入、處理和輸出分開。MVC最大的好處是將邏輯和頁面分離。

10、什麽是裝箱(boxing)和拆箱(unboxing)? (*)
裝箱:從值類型接口轉換到引用類型。
拆箱:從引用類型轉換到值類型。
object obj = null;//引用類型
obj = 1;//裝箱,boxing。把值類型包裝為引用類型。
int i1 = (int)obj;//拆箱。unboxing

11、什麽叫應用程序域(AppDomain) (*)
一種邊界,它由公共語言運行庫圍繞同一應用程序範圍內創建的對象建立(即,從應用程序入口點開始,沿著對象激活的序列的任何位置)。
應用程序域有助於將在一個應用程序中創建的對象與在其他應用程序中創建的對象隔離,以使運行時行為可以預知。
在一個單獨的進程中可以存在多個應用程序域。應用程序域可以理解為一種輕量級進程。起到安全的作用。占用資源小。

12、CTS、CLS、CLR分別作何解釋(*)
CTS:Common Type System 通用系統類型。Int32、Int16→int、String→string、Boolean→bool
CLS:Common Language Specification 通用語言規範。不同語言語法的不同。
CLR:Common Language Runtime 公共語言運行時,就是.Net提供的那些 類。

13、在dotnet中類(class)與結構(struct)的異同?
Class可以被實例化,屬於引用類型,是分配在內存的堆上的。類是引用傳遞的。
Struct屬於值類型,是分配在內存的棧上的。結構體是復制傳遞的。加分的回答:Int32、Boolean等都屬於結構體。

14、堆和棧的區別?
棧是編譯期間就分配好的內存空間,因此你的代碼中必須就棧的大小有明確的定義;局部值類型變量、值類型參數等都在棧內存中。
堆是程序運行期間動態分配的內存空間,你可以根據程序的運行情況確定要分配的堆內存的大小。

15、能用foreach遍歷訪問的對象的要求
需要實現IEnumerable接口或聲明GetEnumerator方法的類型。

16、GC是什麽? 為什麽要有GC?
GC是垃圾收集器。程序員不用擔心內存管理,因為垃圾收集器會自動進行管理。GC只能處理托管內存資源的釋放,對於非托管資源則不能使用GC進行回收,必須由程序員手工回收,一個例子就是FileStream或者SqlConnection需要程序員調用Dispose進行資源的回收。
要請求垃圾收集,可以調用下面的方法:GC.Collection()一般不需要手動調用GC.Collection()。加分的回答:有一次用OLEAutomation的方式操作Excel的時候,Excel經常不能正常退出,在MSDN網站上找到官方解答說要調用一下GC.Collection(),至於為什麽這樣就可以也沒找到答案。

17、String s = new String(“xyz”);創建了幾個String Object?
兩個對象,一個是“xyx”,一個是指向“xyx”的引用對象。

18、值類型和引用類型的區別?
1.將一個值類型變量賦給另一個值類型變量時,將復制包含的值。引用類型變量的賦值只復制對對象的引用,而不復制對象本身。
2.值類型不可能派生出新的類型:所有的值類型均隱式派生自 System.ValueType。但與引用類型相同的是,結構也可以實現接口。
3.值類型不可能包含 null 值:然而,可空類型功能允許將 null 賦給值類型。
4.每種值類型均有一個隱式的默認構造函數來初始化該類型的默認值。

19、C#中的接口和類有什麽異同。

不同點:
不能直接實例化接口。
接口不包含方法的實現。
接口可以多繼承,類只能單繼承。
類定義可在不同的源文件之間進行拆分。
相同點:
接口、類和結構都可以從多個接口繼承。
接口類似於抽象基類:繼承接口的任何非抽象類型都必須實現接口的所有成員。
接口和類都可以包含事件、索引器、方法和屬性。

20、abstract class和interface有什麽區別?

相同點:
都不能被直接實例化,都可以通過繼承實現其抽象方法。
不同點:
接口支持多繼承;抽象類不能實現多繼承。
接口只能定義行為;抽象類既可以定義行為,還可能提供實現。
接口可以用於支持回調(CallBack);抽象類不能實現回調,因為繼承不支持。
接口只包含方法(Method)、屬性(Property)、索引器(Index)、事件(Event)的簽名,但不能定義字段和包含實現的方法;
抽象類可以定義字段、屬性、包含有實現的方法。
接口可以作用於值類型(Struct)和引用類型(Class);抽象類只能作用於引用類型。例如,Struct就可以繼承接口,而不能繼承類。
加分的補充回答:講設計模式的時候SettingsProvider的例子。

21、是否可以繼承String類?
String類是sealed類故不可以繼承。

22、try {}裏有一個return語句,那麽緊跟在這個try後的finally {}裏的code會不會被執行,什麽時候被執行?
會執行,在return前執行。
加分的補充回答(也助記):讀取數據庫中數據的條數的程序

public int QueryCount()
{
…..
try
{
return cmd.ExecuteScalar();
}
finally
{
cmd.Dispose();
}
}


如果C#設計的是先執行cmd.Dispose()再執行return就會出現return執行失敗了,因為cmd已經Dispose了。


46 在ASP.NET中有Button控件myButton,要是單擊控件時,導航到其他頁面http://www.abc.com, 正確的代碼為( c)。
a) private void myButton_Click(object sender, System.EventArgs e){Redirect(“http://www.abc.com”);}
b) private void myButton_Click(object sender, System.EventArgs e){Request.Redirect(“http://www.abc.com”);}
c) private void myButton_Click(object sender, System.EventArgs e){Reponse.Redirect(“http://www.abc.com”);}
d) private void myButton_Click(object sender, System.EventArgs e){Request.Redirect(“http://www.abc.com”);return true;}

47. 聲明一個委托public delegate int myCallBack(int x); 則用該委托產生的回調方法的原型應該是(b )。
a) void myCallBack(int x) ;
b) int receive(int num) ;
c) string receive(int x) ;
d) 不確定的;

48.StringBuilder 和 String 的區別?
答:String 在進行運算時(如賦值、拼接等)會產生一個新的實例,而 StringBuilder 則不會。所以在大量字符串拼接或頻繁對某一字符串進行操作時最好使用 StringBuilder,不要使用 String
如果要操作一個不斷增長的字符串,盡量不用String類,改用StringBuilder類。兩個類的工作原理不同:String類是一種傳統的修改字符串的方式,它確實可以完成把一個字符串添加到另一個字符串上的工作沒錯,但是在.NET框架下,這個操作實在是劃不來。因為系統先是把兩個字符串寫入內存,接著刪除原來的String對象,然後創建一個String對象,並讀取內存中的數據賦給該對象。這一來二去的,耗了不少時間。而使用System.Text命名空間下面的StringBuilder類就不是這樣了,它提供的Append方法,能夠在已有對象的原地進行字符串的修改,簡單而且直接。當然,一般情況下覺察不到這二者效率的差異,但如果你要對某個字符串進行大量的添加操作,那麽StringBuilder類所耗費的時間和String類簡直不是一個數量級的。

49、.請敘述屬性與索引器的區別。 (*)沒啥意義
屬性 索引器
通過名稱標識。 通過簽名標識。
通過簡單名稱或成員訪問來訪問。 通過元素訪問來訪問。
可以為靜態成員或實例成員。 必須為實例成員。
屬性的 get 訪問器沒有參數。 索引器的 get 訪問器具有與索引器相同的形參表。
屬性的 set 訪問器包含隱式 value 參數。 除了 value 參數外,索引器的 set 訪問器還具有與索引器相同的形參表。

50.請敘述const與readonly的區別。(*)
const 關鍵字用於修改字段或局部變量的聲明。它指定字段或局部變量的值不能被修改。常數聲明引入給定類型的一個或多個常數。
const數據成員的聲明式必須包含初值,且初值必須是一個常量表達式。因為它是在編譯時就需要完全評估。
const成員可以使用另一個const成員來初始化,前提是兩者之間沒有循環依賴。
readonly在運行期評估賦值,使我們得以在確保“只讀訪問”的前提下,把object的初始化動作推遲到運行期進行。
readonly 關鍵字與 const 關鍵字不同: const 字段只能在該字段的聲明中初始化。readonly 字段可以在聲明或構造函數中初始化。因此,根據所使用的構造函數,readonly 字段可能具有不同的值。另外,const 字段是編譯時常數,而 readonly 字段可用於運行時常數。
readonly 只能在聲明時或者構造函數裏面初始化,並且不能在 static 修飾的構造函數裏面。
參考資料:

http://www.cnblogs.com/royenhome/archive/2010/05/22/1741592.html

http://www.cnblogs.com/jams742003/archive/2010/03/23/1692913.html

http://www.cnblogs.com/wayfarer/archive/2006/04/27/386658.html

51. 請解釋ASP。NET中的web頁面與其隱藏類之間的關系?
一個ASP.NET頁面一般都對應一個隱藏類,一般都在ASP.NET頁面的聲明中指定了隱藏類例如一個頁面Tst1.aspx的頁面聲明如下

Codebehind=”Tst1.aspx.cs” 表明經編譯此頁面時使用哪一個代碼文件
Inherits=”T1.Tst1″ 表用運行時使用哪一個隱藏類

52. 什麽是viewstate,能否禁用?是否所用控件都可以禁用?
Viewstate是保存狀態的一種機制,EnableViewState屬性設置為false即可禁用。最有力的舉例子:Label、TextBox在禁用ViewState後不同的表現來說明。

53、你對web service的體會?
答:如果自己寫的一些程序也希望別人可以通過Web服務來使用,也可以把自己編寫的方法貼上標簽[WebMethed]來實現Web 服務。[是當編寫程序時,希望實現一些別的網站已經實現過的,也用Web服務可視成XML語言的編碼。可以使用別人的編碼生成的XML找到自己需要的信息,來實現自己編寫的程序的一些功能。
SOAP、WSDL。

54您在什麽情況下會用到虛方法?它與接口有什麽不同?
答案:子類重新定義父類的某一個方法時,必須把父類的方法定義為virtual
在定義接口中不能有方法體,虛方法可以。
實現時,子類可以不重新定義虛方法,但如果一個類繼承接口,那必須實現這個接口。

講到這裏了
55. 不定項選擇:
(1) 以下敘述正確的是: B C
A. 接口中可以有虛方法。B. 一個類可以實現多個接口。 C. 接口不能被實例化。 D. 接口中可以包含已實現的方法。
(2) 從數據庫讀取記錄,你可能用到的方法有:B C D
A. ExecuteNonQuery B. ExecuteScalar C. Fill D. ExecuteReader
(3).對於一個實現了IDisposable接口的類,以下哪些項可以執行與釋放或重置非托管資源相關的應用程序定義的任務?(多選) ( ABC )
A.Close B.Dispose C.Finalize
D.using E.Quit
(4)以下關於ref和out的描述哪些項是正確的?(多選) ( ACD )
A.使用ref參數,傳遞到ref參數的參數必須最先初始化。
B.使用out參數,傳遞到out參數的參數必須最先初始化。
C.使用ref參數,必須將參數作為ref參數顯式傳遞到方法。
D.使用out參數,必須將參數作為out參數顯式傳遞到方法。
講到這裏
56. 單項選擇:
(1)下列選項中,(C)是引用類型。
a)enum類型 b)struct類型 c)string類型 d)int類型

(2).關於ASP.NET中的代碼隱藏文件的描述正確的是(C)
a)Web窗體頁的程序的邏輯由代碼組成,這些代碼的創建用於與窗體交互。編程邏輯唯一與用戶界面不同的文件中。該文件稱作為“代碼隱藏”文件,如果用C#創建,該文件將具有“.ascx.cs”擴展名。
b)項目中所有Web窗體頁的代碼隱藏文件都被編譯成.EXE文件。
c)項目中所有的Web窗體頁的代碼隱藏文件都被編譯成項目動態鏈接庫(.dll)文件。
d)以上都不正確。

(3).下列描述錯誤的是(D)
a)類不可以多重繼承而接口可以;
b)抽象類自身可以定義成員而接口不可以;
c)抽象類和接口都不能被實例化;
d)一個類可以有多個基類和多個基接口;

57、DataReader和DataSet的異同?
DataReader使用時始終占用SqlConnection,在線操作數據庫
每次只在內存中加載一條數據,所以占用的內存是很小的
是只進的、 只讀的
DataSet則是將數據一次性加載在內存中.拋棄數據庫連接..讀取完畢即放棄數據庫連接(非連接模式)
DataSet將數據全部加載在內存中.所以比較消耗內存…但是確比DataReader要靈活..可以動態的添加行,列,數據.對數據庫進行 回傳更新操作(動態操作讀入到內存的數據)

58、public static const; int A = 1;這段代碼有錯誤麽?
錯誤:const不能被修飾為static ;因為定義為常量 (const )後就是靜態的(static )。

59傳入某個屬性的set方法的隱含參數的名稱是什麽?
value,它的類型和屬性所聲名的類型相同。

60、C#支持多重繼承麽?
類之間不支持,接口之間支持。類對接口叫做實現,不叫繼承。

61、C#中所有對象共同的基類是什麽?
System.Object

62、通過超鏈接怎樣傳遞中文參數?
答:用URL編碼,通過QueryString傳遞,用urlencode編碼 用urldecode解碼

63、string、String;int、Int32;Boolean、bool的區別
String、Int32、Boolean等都屬於.Net中定義的類,而string、int、bool相當於C#中對這些類定義的別名。CTS。

64、Server.Transfer和Response.Redirect的區別是什麽?(常考)
答: Server.Transfer僅是服務器中控制權的轉向,在客戶端瀏覽器地址欄中不會顯示出轉向後的地址;Response.Redirect則是完全的跳轉,瀏覽器將會得到跳轉的地址,並重新發送請求鏈接。這樣,從瀏覽器的地址欄中可以看到跳轉後的鏈接地址。
Server.Transfer是服務器請求資源,服務器直接訪問目標地址的URL,把那個URL的響應內容讀取過來,然後把這些內容再發給瀏覽器,瀏覽器根本不知道服務器發送的內容是從哪兒來的,所以它的地址欄中還是原來的地址。 這個過程中瀏覽器和Web服務器之間經過了一次交互。
Response.Redirect就是服務端根據邏輯,發送一個狀態碼,告訴瀏覽器重新去請求那個地址,一般來說瀏覽器會用剛才請求的所有參數重新請求。這個過程中瀏覽器和Web服務器之間經過了兩次交互。

65、不是說字符串是不可變的嗎?string s=”abc”;s=”123″不就是變了嗎?
String是不可變的在這段代碼中,s原先指向一個String對象,內容是 “abc”,然後我們將s指向”123″,那麽s所指向的那個對象是否發生了改變呢?答案是沒有。這時,s不指向原來那個對象了,而指向了另一個 String對象,內容為”123″,原來那個對象還存在於內存之中,只是s這個引用變量不再指向它了。

66、是否可以從一個static方法內部發出對非static方法的調用?
不可以。因為非static方法是要與對象關聯在一起的,必須創建一個對象後,才可以在該對象上進行方法調用,而static方法調用時不需要創建對象,可以直接調用。也就是說,當一個static方法被調用時,可能還沒有創建任何實例對象,如果從一個static方法中發出對非static方法的調用,那個非static方法是關聯到哪個對象上的呢?這個邏輯無法成立,所以,一個static方法內部不能發出對非static方法的調用。

67、.Net中會存在內存泄漏嗎,請簡單描述。 (*)
所謂內存泄露就是指一個不再被程序使用的對象或變量一直被占據在內存中。.Net中有垃圾回收機制,它可以保證一對象不再被引用的時候,即對象編程了孤兒的時候,對象將自動被垃圾回收器從內存中清除掉。雖然.Net可以回收無用的對象,但是.Net仍然存在由於使用不當導致的內存泄露問題。.Net中的內存泄露的情況:長生命周期的對象持有短生命周期對象的引用就很可能發生內存泄露,盡管短生命周期對象已經不再需要,但是因為長生命周期對象持有它的引用而導致不能被回收,這就是.Net中內存泄露的發生場景,通俗地說,就是程序員可能創建了一個對象,以後一直不再使用這個對象,這個對象卻一直被引用,即這個對象無用但是卻無法被垃圾回收器回收的,這就是.Net中可能出現內存泄露的情況,例如,緩存系統,我們加載了一個對象放在緩存中(例如放在一個全局Dictionary對象中),然後一直不再使用它,這個對象一直被緩存引用,但卻不再被使用。
formManager
{
public static IList forms = new …..;
}
擴展:使用弱引用那麽及時被引用也可以被回收。


68說出一些常用的類、接口,請各舉5個
要讓人家感覺你對.Net開發很熟,所以,不能僅僅只列誰都能想到的那些東西,要多列你在做項目中涉及的那些東西。就寫你最近寫的那些程序中涉及的那些類。
常用的類:StreamReader、WebClient、Dictionary、StringBuilder、SqlConnection、FileStream、File、Regex、List
常用的接口:IDisposable、IEnumerable、IDbConnection、IComparable、ICollection、IList、IDictionary
要出乎意料!不要僅僅完成任務!

69、BS與CS的聯系與區別。
C/S是Client/Server的縮寫。客戶端需要安裝專用的客戶端軟件。
B/S是Brower/Server的縮寫,客戶機上只要安裝一個瀏覽器。在這種結構下,用戶界面完全通過WWW瀏覽器實現,一部分事務邏輯在前端實現,但是主要邏輯在服務器端實現。瀏覽器通過Web Server 同數據庫進行數據交互。
C/S 與 B/S 區別:
1).硬件環境不同:
C/S 一般建立在專用的網絡上, 小範圍裏的網絡環境, 局域網之間再通過專門服務器提供連接和數據交換服務.
B/S 建立在廣域網之上的, 不必是專門的網絡硬件環境,例與電話上網, 租用設備. 信息自己管理. 有比C/S更強的適應範圍, 一般只要有操作系統和瀏覽器就行
2).對安全要求不同
C/S 一般面向相對固定的用戶群, 對信息安全的控制能力很強. 一般高度機密的信息系統采用C/S 結構適宜. 可以通過B/S發布部分可公開信息.
B/S 建立在廣域網之上, 對安全的控制能力相對弱, 可能面向不可知的用戶。
3).處理問題不同
C/S 程序可以處理用戶面固定, 並且在相同區域, 安全要求高需求, 與操作系統相關. 應該都是相同的系統。C/S的客戶端由於是本地程序,因此和本地硬件、程序的交互性很強,比如可以控制本機的其他程序、可以讀寫本地磁盤文件、可以與硬件交互。
B/S 建立在廣域網上, 面向不同的用戶群, 分散地域, 這是C/S無法作到的. 與操作系統平臺關系最小,正應為如此B/S很難和本地硬件、程序、文件進行交互,比如很難控制本機的其他程序、很難讀寫本地磁盤文件、很難與硬件交互,當然可以用ActiveX技術解決,比如網銀等就是這麽解決的,這樣做的問題就是可能會被客戶拒絕,而且只局限於Windows操作系統。

C/S也分為兩層架構和三層架構。兩層架構:客戶端程序程序直連數據庫;三層架構:客戶端訪問服務端的服務,主要邏輯代碼寫在服務端的服務中,然後服務端服務再去訪問數據庫,Oracle版分布式呼叫中心,WCF。

70、編寫一個單例(Singleton)類。
參考復習ppt。
把構造函數設置為private,設置一個public、static的對象實例

public FileManager
{
private FileManager(){}
public static FileManager Instance = new FileManager();
}

擴展:搜“C# Singleton”

71、什麽是sql註入?如何避免sql註入?
用戶根據系統的程序構造非法的參數從而導致程序執行不是程序員期望的惡意SQL語句。使用參數化的SQL就可以避免SQL註入。
詳細參考復習ppt。舉例子,擺事實!
1′ or 1=1

72、數據庫三範式是什麽?
第二範式:表必須有主鍵。
第三範式:表引用其他的表必須通過主鍵引用。

73、說出一些數據庫優化方面的經驗?
索引內部原理:想象成Dictionary,插入、刪除、更新的速度慢了,加上索引也多占用了空間,查詢的速度快了。加上索引以後速度提升非常明顯。
(1)在經常檢索的字段上(select * from Person where Name=@Name)使用索引提高查詢速度。(2)select中只列出必要的字段,而不是*。(3)避免隱式類型轉換造成的全表掃描,在索引上使用函數也會造成全表掃描(因為索引只是為字段建立的,一旦使用表達式或者函數,那麽索引就是失效了,當然也可以使用“函數索引”、“表達式索引”解決這個問題),使用索引不一定能提高查詢速度。(4)避免在索引列上使用計算(where Name+’A‘=@MyName)
加分的回答:不進行無意義優化,根據性能查看器的報表,對最耗時的SQL進行優化。

74、什麽是數據庫事務?
事務三個特性:一致性、原子性、隔離性。
幾個SQL語句,要麽全部執行成功,要麽全部執行失敗。舉例就用最經典的銀行轉賬的例子就行,然後再舉一個項目中用的例子:批量導入客戶數據的時候要麽全部導入成功,要麽全部導入失敗。事務的三個操作:Begin、Commit、RollBack。
取剛插入數據的id值,就要用事務來隔離:Insert 和select top 1 id from ….

75、談談你對設計模式的理解
世界上本沒有模式,用的人多了,也就有了模式。不用刻意記每種模式的名字,手中無模式,心中有模式。
大部分設計模式就是接口、抽象類的一個組合。ADO.Net基於接口編程,SafeDbCommand、SafeConnection。SettingsProvider。沒必要記模式的名字。
舉例:SettingsProvider、第三方支付的例子。

76、談談ViewState。談談對ASP.Net原理的理解。談談ASP.Net生命周期。
Label、Textbox在禁用ViewState的時候自增的不同表現
Http是無狀態的,WebForm為了實現基於http的“有狀態”從而簡化開發,ViewState用來在兩次請求間保持狀態。頁面返回前將界面的狀態序列化到ViewState中,這樣就將狀態保存在了瀏覽器中,下次頁面提交的時候會順便再將ViewState提交到服務器,這樣服務器就根據ViewState還原了狀態,這樣WebForm開發就像有狀態一樣了。談談自定義AutoInc控件。

77、post、get的區別
get的參數會顯示在瀏覽器地址欄中,而post的參數不會顯示在瀏覽器地址欄中;
使用post提交的頁面在點擊【刷新】按鈕的時候瀏覽器一般會提示“是否重新提交”,而get則不會;
用get的頁面可以被搜索引擎抓取,而用post的則不可以;
用post可以提交的數據量非常大,而用get可以提交的數據量則非常小(2k),受限於網頁地址的長度。
用post可以進行文件的提交,而用get則不可以。
參考閱讀:http://www.cnblogs.com/skynet/archive/2010/05/18/1738301.html

78、下面的程序執行結果是什麽?

class Person
{
public int Age { get; set; }
}
int i1 = 20;
int i2 = i1;
i1++;
Console.WriteLine(i2);

Person p1 = new Person();
p1.Age = 20;
Person p2 = p1;
p1.Age++;
Console.WriteLine(p2.Age);

答案:
20
21

解釋:引用類型和值類型的區別。

79、Http默認的端口號是(80)、Ftp默認的端口號是(21)、SQLServer的默認端口號是(1433)
80、運算符++a表示(先將a加1,然後表達式的值為a加1後的值),i++表示(表達式的值為a,然後a加1)。
81、下面程序的執行結果是什麽?
int i = 10;
Console.WriteLine(i++);
Console.WriteLine(++i);
Console.WriteLine(i=20);
答案:
10
12
20
解答:前兩個參考第80題,i++表達式的值為i自增之前的值,所以打印10,執行完成後i變成11,執行++i的時候表達式的值為自增以後的值12。C#中賦值表達式的值為變量被賦值的值,因此最後一個就輸出i賦值後的值20
while((line=reader.ReadLine())!=null)
{
}

82、如果不用VisualStudio,用哪個命令行編譯C#程序?(*)
答:csc.exe。

83、下列哪個名詞和WebService不直接相關?(B)
A、UDDI
B、GUID
C、WSDL
D、SOAP

SOAP和HTTP的關系:SOAP基於Http協議的,和普通網頁不同的是網頁返回HTML,SOAP則是符合SOAP協議的XML數據。


84、.Net Framework中的類是專門供C#調用的是嗎?
答:錯。VB.Net等語言都可以調用.Net Framework中的類。CTS、CLS。

85、開放性問題:說出盡可能多的基於.Net Framework的語言。(*)
參考解答:C#、VB.Net、F#、PowerShell、IronPython、J#、Ruby.Net

86、.Net、ASP.Net、C#、VisualStudio之間的關系是什麽?
答:.Net一般指的是.Net Framework,提供了基礎的.Net類,這些類可以被任何一種.Net編程語言調用,.Net Framework還提供了CLR、JIT、GC等基礎功能。
ASP.Net是.Net中用來進行Web開發的一種技術,ASP.Net的頁面部分寫在aspx 文件中,邏輯代碼通常通過Code-behind的方式用C#、VB.Net等支持.Net的語言編寫。
C#是使用最廣泛的支持.Net的編程語言。除了C#還有VB.Net、IronPython等。
VisualStudio是微軟提供的用來進行.Net開發的集成開發環境(IDE),使用VisualStudio可以簡化很多工作,不用程序員直接調用csc.exe等命令行進行程序的編譯,而且VisualStudio提供了代碼自動完成、代碼高亮等功能方便開發。除了VisualStudio,還有SharpDevelop、MonoDevelop等免費、開源的IDE,VisualStudio Express版這個免費版本。

87、AJAX解決什麽問題?如何使用AJAX?AJAX有什麽問題需要註意?項目中哪裏用到了AJAX?
答:AJAX解決的問題就是“無刷新更新頁面”,用傳統的HTML表單方式進行頁面的更新時,每次都要將請求提交到服務器,服務器返回後再重繪界面,這樣界面就會經歷:提交→變白→重新顯示這樣一個過程,用戶體驗非常差,使用AJAX則不會導致頁面重新提交、刷新。
AJAX最本質的實現是在Javascript中使用XMLHttpRequest進行Http的請求,開發中通常使用UpdatePanel、JQuery等方式簡化AJAX的開發,UpdatePanel的方式實現AJAX最簡單,但是數據通訊量比較大,因為要來回傳整個ViewState,而且不靈活,對於復雜的需求則可以使用JQuery提供的ajax功能。
UpdatePanel的內部原理。
AJAX最重要的問題是無法跨域請求(www.rupeng.com →so.rupeng.com),也就是無法在頁面中向和當前域名不同的頁面發送請求,可以使用在當前頁面所在的域的服務端做代理頁面的方式解決。
在如鵬網項目中發帖的時候顯示相關帖的功能、站內搜索項目中顯示搜索Suggestion、數據采集項目中都用到了AJAX。
88、NET通過對各語言先編譯成( IL),然後再執行時用( JIT)將其編譯成本地平臺代碼,來實現異構平臺下對象的互操作。(*)
89、編寫正則表達式驗證一個字符串是否為Email。復習正則表達式部分的知識。
90、Application 、Cookie和 Session 兩種會話有什麽不同?
答:Application是用來存取整個網站全局的信息,而Session是用來存取與具體某個訪問者關聯的信息。

91、開放式問題:你經常訪問的技術類的網站是什麽?
博客園(www.cnblogs.com)、csdn、codeplex、codeproject、msdn文檔、msdn論壇(遇到問題先到網上搜解決方案,還不行就問同事,同事也解決不了就去MSDN論壇提問,一定能得到解決)

92、你對.net的GC的理解
GC是.Net的垃圾收集器,可以進行內存資源的回收,程序員無需關心資源的回收,當一個對象沒有任何引用的時候就可以被回收了。一個對象可以被回收並不意味著一定會被立即回收,GC會選擇時機進行回收。可以調用GC.Collect()讓GC立即回收。GC不能回收非托管資源,對於非托管資源一般都實現了IDisposable接口,然後使用using關鍵字進行資源的回收。

93、請寫一個SQL語句:從user表中取出name列中的起始字符是“北京”的全部記錄
select * from [user] wherer name like’北京%’

94、請你簡單的說明數據庫建立索引的優缺點
使用索引可以加快數據的查詢速度,不過由於數據插入過程中會建索引,所以會降低數據的插入、更新速度,索引還會占磁盤空間。

95、什麽是WEB服務控件?使用WEB服務控件有那些優勢、劣勢?
web服務控件就是可以在服務器執行的控件,優勢在於可以回傳數據(ViewState),帶有事件驅動(doPostBack),簡化了Html標簽的使用,使得開發ASP.net程序可以像開發Winform程序一樣簡單。Web服務控件最終還是被渲染(Render)為Html標簽。使用WEB服務控件的劣勢是會生成一些無用的屬性、ViewState等,不利於SEO,一般在內網系統或者互聯網系統的後臺中使用WEB服務控件。如果沒有復雜的服務器交互動作,就不用Web服務器控件。
runat=server的HTML控件有什麽特點:路徑不用程序員解析,可以使用“~”來虛擬路徑。

96、下面程序的執行結果是什麽?
int i = 10;
if (i <=0) ;
Console.WriteLine(“i必須大於0″);
Console.WriteLine(“ok”);
答案:
i必須大於0
ok

解答:註意if (i <=0)後面的“;”,由於有了“;”,所以Console.WriteLine(“i必須大於0″)不再是和if一起的一部分,而是獨立的語句。
for循環也是如此。

97、下面程序的執行結果是什麽? (*)

static void Main(string[] args)
{
Console.WriteLine(Calc());

Console.ReadKey();
}

static int Calc()
{
int i = 0;
try
{
return i;
}
finally
{
Console.WriteLine(“finally”);
i++;
}
}

答案:
finally
0

解釋:參考第22題的值,return先執行,finally後執行,所以return的值是沒有i++之前的0。註意並不是return的時候函數真的就“返回、執行結束”了,return只是標記函數的返回值是0,標記完了還會執行finally中的代碼,只有finally中的代碼執行完成後函數才真正的返回。

98、開放式問題:工作中遇到不懂的問題是怎樣去解決的?
參考解答:首先到百度上搜索中文的資料,一般都可以找到解決方案,如果還找不到解決方案就到google上搜索英文的資料,如果還沒有解決方案就請教同事,如果同事也沒有解決方案,就將問題提交到MSDN論壇。

99、開放性問題:你能說出哪些數據庫?
參考解答:MSSQLServer、Oracle、Access、DB2、Sybase

100、開放性問題:你能說出盡可能多的你聽說過的編程語言? (*)
參考解答:C#、VB.Net、Ada、Cobol、C、C++、Delphi、Erlang、F#、Fortran、Java、JavaScript、Pascal、Python、PowerShell、Ruby、Smalltalk。

101、請翻譯下面的文章(*)
The BaseDataBoundControl is the root of all data-bound control classes. It defines the DataSource and DataSourceID properties and validates their assigned content. DataSource accepts enumerable objects obtained and assigned the ASP.NET 1.x way.

Mycontrol1.DataSource = dataSet;

Mycontrol1.DataBind();

DataSourceID is a string and refers to the ID of a bound data source component. Once a control is bound to a data source, any further interaction between the two (in both reading and writing) is handled out of your control and hidden from view. This is both good and bad news at the same time. It is good (rather, great) news because you can eliminate a large quantity of code. The ASP.NET framework guarantees that correct code executes and is written according to recognized best practices. You’re more productive because you author pages faster with the inherent certainty of having no subtle bugs in the middle. If you don’t like this situation—look, the same situation that many ASP.NET 1.x developers complained about—you can stick to the old-style programming that passes through the DataSource property and DataBind method. Also in this case, the base class saves you from common practices even though the saving on the code is less remarkable.

參考翻譯(自我感覺翻譯的很爛,僅供參考。):
BaseDataBoundControl是所有的數據綁定控件類的根類。它定義了DataSource、DataSourceID兩個屬性,並且對為它們賦值的內容進行驗證。DataSource屬性接受讀取、設置ASP.Net 1.x方式的IEnumerable 對象。
Mycontrol1.DataSource = dataSet;
Mycontrol1.DataBind();
DataSourceID 是一個字符串,引用綁定的數據源控件的ID。一旦一個控件綁定到了數據源,這兩者之間的任何交互(讀和寫)都會在你的控件之外被處理,並且被隱藏起來。這既是好消息也是壞消息。ASP.Net框架保證代碼按照最佳實踐進行代碼的執行、編寫。你會更加高效,因為你編寫了更快的、沒有任何錯誤的分頁代碼。如果你不喜歡這樣的行為(看,就和ASP.Net 1.x開發人員抱怨的一樣),你仍然可以使用老的編程風格,也就是將對象傳遞給DataSource屬性,然後調用DataBind方法。另外在這種情況下,基類可以幫你避免常規的做法,即使看起來改進不明顯。

102、在下述選項時,沒有構成死循環的程序是 (C)
A.int i=100;while (1) { i=i%100+1; if (i>100) break; }
B.for (;;);
C.int k=1000; do { ++k; }while(k>=10000);
D.int s=36; while (s);–s;

103、下列哪個是和數據庫訪問技術關系不大的技術(C)
A、SQLHelper
B、EnterPrise Library
C、AppDomain
D、Linq

104、下列哪些說法是錯誤的
A、將bmp格式的文件修改為jpg是修改圖片格式最簡單的方法
B、將QQ動態表情顯示在網頁上用gif格式比較好
C、將bmp格式的圖片放到網頁中可以優化網站速度
D、png格式用在網頁中可以實現透明的效果。

答案:A、C。A錯誤是因為修改文件的後綴並沒有真的修改文件的格式,要使用Photoshop、mspaint等圖片處理工具進行轉換才可以。C錯誤是因為在網頁中不能使用bmp圖片。

105、從以下簡寫中任選一個簡單描述
OA\MIS\HRM\CRM\KM

參考答案:
OA(Office Automation):辦公自動化
MIS(Managment Information system):管理信息系統
HRM(Human Resource Managment):人力資源管理,包括員工管理、薪資管理、入職管理、離職管理、報銷管理、請假管理等
CRM(Customer Relation Managment):客戶關系管理系統,包括客戶管理、客戶關懷、客戶回訪、投訴管理、咨詢管理、報修管理等
KM(Knowledge Managment):知識管理

106、請在數據庫中設計表來保存一個樹狀結構的公司組織結構
參考呼叫中心項目的代碼和板書。

107、下面程序的執行結果是什麽?

public struct Point
{
public int x;
public int y;
public Point(int x, int y)
{
this.x = x;
this.y = y;
}
}
Point p1 = new Point(100, 100);
Point p2 = p1;
p1.x = 200;
Console.WriteLine(“{0},{1}”, p1.x, p2.x);


答案:
200,100

解答:結構體是復制傳遞的。

108、在Windows命令行中敲入下面的指令各有什麽反應 :
cd ..

notepad
cmd
ipconfig
dir

答案:
cd ..:進入上一級目錄
notepad:打開記事本
cmd:啟動另外一個命令行
ipconfig:打印網絡設置信息
dir:顯示當前目錄下的文件

109、下列這些軟件用過哪些?他們是用來做什麽的?
TypeAndRun、FoxMail、Reflector、UltraEdit、VSS、VirtualPC、VMWare
參考答案:
TypeAndRun:快速通過敲命令的方式啟動其他程序的工具。
FoxMail:郵件收發客戶端
Reflector:.net程序反編譯工具
UltraEdit:高級文本編輯器
VSS:源代碼管理工具
VirtualPC:在一臺計算機中虛擬出另外一個計算機的軟件,是微軟的產品
VMWare:和VirtualPC一樣,也是一種虛擬機軟件

轉:.NET面試題匯總(三)