1. 程式人生 > >.NET筆試題集(三)

.NET筆試題集(三)

bs與cs 上網 新的 交換 query cli 通過 搜索引擎 windows

1、傳入某個屬性的set方法的隱含參數的名稱是什麽?

value,它的類型和屬性所聲名的類型相同。

2、C#支持多重繼承麽?

類之間不支持,接口之間支持。類對接口叫做實現,不叫繼承。

3、C#中所有對象共同的基類是什麽?

System.Object

4、通過超鏈接怎樣傳遞中文參數?

答:用URL編碼,通過QueryString傳遞,用urlencode編碼 用urldecode解碼。

5、string、String;int、Int32;Boolean、bool的區別

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

6、Server.Transfer和Response.Redirect的區別是什麽?

答: Server.Transfer僅是服務器中控制權的轉向,在客戶端瀏覽器地址欄中不會顯示出轉向後的地址;Response.Redirect則是完全的跳轉,瀏覽器將會得到跳轉的地址,並重新發送請求鏈接。這樣,從瀏覽器的地址欄中可以看到跳轉後的鏈接地址。

Server.Transfer是服務器請求資源,服務器直接訪問目標地址的URL,把那個URL的響應內容讀取過來,然後把這些內容再發給瀏覽器,瀏覽器根本不知道服務器發送的內容是從哪兒來的,所以它的地址欄中還是原來的地址。 這個過程中瀏覽器和Web服務器之間經過了一次交互。

Response.Redirect就是服務端根據邏輯,發送一個狀態碼,告訴瀏覽器重新去請求那個地址,一般來說瀏覽器會用剛才請求的所有參數重新請求。這個過程中瀏覽器和Web服務器之間經過了兩次交互。

7、不是說字符串是不可變的嗎?string s="abc";s="123"不就是變了嗎?

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

8、是否可以從一個static方法內部發出對非static方法的調用?

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

9、.Net中會存在內存泄漏嗎,請簡單描述。

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

10、說出一些常用的類、接口,請各舉5個

常用的類:StreamReader、WebClient、Dictionary<K,V>、StringBuilder、SqlConnection、FileStream、File、Regex、List<T>

常用的接口:IDisposable、IEnumerable、IDbConnection、IComparable、ICollection、IList、IDictionary

11、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。

12、編寫一個單例(Singleton)類。

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

13、什麽是sql註入?如何避免sql註入?

用戶根據系統的程序構造非法的參數從而導致程序執行不是程序員期望的惡意SQL語句。使用參數化的SQL就可以避免SQL註入。使用參數化Paramter

1‘ or 1=1

14、說出一些數據庫優化方面的經驗?

索引內部原理:想象成Dictionary,插入、刪除、更新的速度慢了,加上索引也多占用了空間,查詢的速度快了。加上索引以後速度提升非常明顯。

(1)在經常檢索的字段上(select * from Person where [email protected])使用索引提高查詢速度。

(2)select中只列出必要的字段,而不是*。

(3)避免隱式類型轉換造成的全表掃描,在索引上使用函數也會造成全表掃描(因為索引只是為字段建立的,一旦使用表達式或者函數,那麽索引就是失效了,當然也可以使用“函數索引”、“表達式索引”解決這個問題),使用索引不一定能提高查詢速度。

(4)避免在索引列上使用計算(where [email protected]

15、談談ViewState。談談對ASP.Net原理的理解。談談ASP.Net生命周期。

Label、Textbox在禁用ViewState的時候自增的不同表現

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

16、post、get的區別

get的參數會顯示在瀏覽器地址欄中,而post的參數不會顯示在瀏覽器地址欄中;

使用post提交的頁面在點擊【刷新】按鈕的時候瀏覽器一般會提示“是否重新提交”,而get則不會;

用get的頁面可以被搜索引擎抓取,而用post的則不可以;

用post可以提交的數據量非常大,而用get可以提交的數據量則非常小(2k),受限於網頁地址的長度。

用post可以進行文件的提交,而用get則不可以。

17、Http默認的端口號是(80)、Ftp默認的端口號是(21)、SQLServer的默認端口號是(1433)

18、運算符++a表示(先將a加1,然後表達式的值為a加1後的值),a++表示(表達式的值為a,然後a加1)。

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

int i = 10;
Console.WriteLine(i++);
Console.WriteLine(++i);
Console.WriteLine(i=20);

答案:

10

12

20

20、如果不用VisualStudio,用哪個命令行編譯C#程序?

答:csc.exe。

21、下列哪個名詞和WebService不直接相關?(B)

A、UDDI

B、GUID

C、WSDL

D、SOAP

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

22、.Net Framework中的類是專門供C#調用的是嗎?

答:錯。VB.Net等語言都可以調用.Net Framework中的類。CTS、CLS。

23、開放性問題:說出盡可能多的基於.Net Framework的語言。

參考解答:C#、VB.Net、F#、PowerShell、IronPython、J#、Ruby.Net

24、.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版這個免費版本。

25、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),也就是無法在頁面中向和當前域名不同的頁面發送請求,可以使用在當前頁面所在的域的服務端做代理頁面的方式解決。

26、NET通過對各語言先編譯成( IL),然後再執行時用( JIT)將其編譯成本地平臺代碼,來實現異構平臺下對象的互操作。

27、Application 、Cookie和 Session 兩種會話有什麽不同?

答:Application是用來存取整個網站全局的信息,而Session是用來存取與具體某個訪問者關聯的信息。

28、開放式問題:你經常訪問的技術類的網站是什麽?

博客園(www.cnblogs.com)、csdn、codeplex、codeproject、msdn文檔、msdn論壇

29、你對.net的GC的理解

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

30、請寫一個SQL語句:從user表中取出name列中的起始字符是“北京”的全部記錄

select * from [user] wherer name like‘北京%‘

.NET筆試題集(三)