面試筆記2

51  請解釋ASPNET中的web頁面與其隱藏類之間的關係?

一個ASP.NET頁面一般都對應一個隱藏類,一般都在ASP.NET頁面的聲明中指定了隱藏類例如一個頁面Tst1.aspx的頁面聲明如下

<%@ Page language="c#" Codebehind="Tst1.aspx.cs" AutoEventWireup="false" Inherits="T1.Tst1" %>

Codebehind="Tst1.aspx.cs" 表明經編譯此頁面時使用哪一個代碼文件

Inherits="T1.Tst1" 表用運行時使用哪一個隱藏類

52  什麼是viewstate,能否禁用?是否所用控件都可以禁用?

Viewstate是保存狀態的一種機制,EnableViewState屬性設置爲false即可禁用。最有力的舉例子:LabelTextBox在禁用ViewState後不同的表現來說明。

53、你對web service的體會?

答:如果自己寫的一些程序也希望別人可以通過Web服務來使用,也可以把自己編寫的方法貼上標籤[WebMethed]來實現Web 服務。[是當編寫程序時,希望實現一些別的網站已經實現過的,也用Web服務可視成XML語言的編碼。可以使用別人的編碼生成的XML找到自己需要的信息,來實現自己編寫的程序的一些功能。把傳智播客.net培訓的如鵬網項目中用WebService實現管理客戶端的例子說出來。

SOAPWSDL

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以下關於refout的描述哪些項是正確的?(多選)   (    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)一個類可以有多個基類和多個基接口;

57DataReaderDataSet的異同?

DataReader使用時始終佔用SqlConnection,在線操作數據庫

每次只在內存中加載一條數據,所以佔用的內存是很小的

是隻進的、 只讀的

DataSet則是將數據一次性加載在內存中.拋棄數據庫連接..讀取完畢即放棄數據庫連接(非連接模式)

DataSet將數據全部加載在內存中.所以比較消耗內存...但是確比DataReader要靈活..可以動態的添加行,,數據.對數據庫進行 回傳更新操作(動態操作讀入到內存的數據)

58public static const; int  A = 1;這段代碼有錯誤麼? 

錯誤:const不能被修飾爲static ;因爲定義爲常量 (const )後就是靜態的(static )。

59傳入某個屬性的set方法的隱含參數的名稱是什麼?

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

60C#支持多重繼承麼?

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

61C#中所有對象共同的基類是什麼?

System.Object

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

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

63stringStringintInt32Booleanbool的區別

StringInt32Boolean等都屬於.Net中定義的類,而stringintbool相當於C#中對這些類定義的別名。CTS

64Server.TransferResponse.Redirect的區別是什麼?(常考)

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

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

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

65、不是說字符串是不可變的嗎?string s="abc";s="123"不就是變了嗎?(傳智播客.Net培訓班原創模擬題)

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<Form> forms = new .....;  

}

擴展:使用弱引用那麼及時被引用也可以被回收。

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

要讓人家感覺你對.Net開發很熟,所以,不能僅僅只列誰都能想到的那些東西,要多列你在做項目中涉及的那些東西。就寫你最近寫的那些程序中涉及的那些類。

常用的類:StreamReaderWebClientDictionary<K,V>StringBuilderSqlConnectionFileStreamFileRegexList<T> 

常用的接口:IDisposableIEnumerableIDbConnectionIComparableICollectionIListIDictionary

要出乎意料!不要僅僅完成任務!

69BSCS的聯繫與區別。 

C/SClient/Server的縮寫。客戶端需要安裝專用的客戶端軟件。 

B/S是Brower/Server的縮寫,客戶機上只要安裝一個瀏覽器。在這種結構下,用戶界面完全通過WWW瀏覽器實現,一部分事務邏輯在前端實現,但是主要邏輯在服務器端實現。瀏覽器通過Web Server 同數據庫進行數據交互。 

C/S 與 B/S 區別: 

1).硬件環境不同

  C/S 一般建立在專用的網絡上小範圍裏的網絡環境局域網之間再通過專門服務器提供連接和數據交換服務

  B/S 建立在廣域網之上的不必是專門的網絡硬件環境,例與電話上網租用設備信息自己管理有比C/S更強的適應範圍一般只要有操作系統和瀏覽器就行 

).對安全要求不同 

  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,設置一個publicstatic的對象實例

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)使用索引提高查詢速度。(2select中只列出必要的字段,而不是*。(3避免隱式類型轉換造成的全表掃描,在索引上使用函數也會造成全表掃描(因爲索引只是爲字段建立的,一旦使用表達式或者函數,那麼索引就是失效了,當然也可以使用“函數索引”、“表達式索引”解決這個問題),使用索引不一定能提高查詢速度。4)避免在索引列上使用計算(where Name+'A'=@MyName

加分的回答:不進行無意義優化,根據性能查看器的報表,對最耗時的SQL進行優化。

74、什麼是數據庫事務?

事務三個特性:一致性、原子性、隔離性。

幾個SQL語句,要麼全部執行成功,要麼全部執行失敗。舉例就用最經典的銀行轉賬的例子就行,然後再舉一個項目中用的例子:傳智播客.net培訓中批量導入客戶數據的時候要麼全部導入成功,要麼全部導入失敗。事務的三個操作:BeginCommitRollBack

取剛插入數據的id值,就要用事務來隔離:Insert select top 1 id from ....

75、談談你對設計模式的理解(傳智播客.Net培訓班原創模擬題)

世界上本沒有模式,用的人多了,也就有了模式。不用刻意記每種模式的名字,手中無模式,心中有模式。

大部分設計模式就是接口、抽象類的一個組合。ADO.Net基於接口編程,SafeDbCommandSafeConnectionSettingsProvider。沒必要記模式的名字。

舉例:傳智播客.net培訓時SettingsProvider、第三方支付的例子。

76、談談ViewState。談談對ASP.Net原理的理解。談談ASP.Net生命週期。

LabelTextbox在禁用ViewState的時候自增的不同表現

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

77postget的區別

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

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

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

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

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

 參考閱讀:http://www.cnblogs.com/skynet/archive/2010/05/18/1738301.html 

78、下面的程序執行結果是什麼?(傳智播客.Net培訓班原創模擬題)

    class Person

    {

        public int Age { getset; }

    }

            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

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

79Http默認的端口號是(80)、Ftp默認的端口號是(21)、SQLServer的默認端口號是(1433)(傳智播客.Net培訓班原創模擬題)

80運算符++a表示(先將a1,然後表達式的值爲a1後的值),i++表示(表達式的值爲a,然後a1)。

81、下面程序的執行結果是什麼?(傳智播客.Net培訓班原創模擬題)

            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#程序?(*)(傳智播客.Net培訓班原創模擬題)

答:csc.exe。

83、下列哪個名詞和WebService不直接相關?(B)(傳智播客.Net培訓班原創模擬題)

A、UDDI 

B、GUID

C、WSDL

D、SOAP

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

84、.Net Framework中的類是專門供C#調用的是嗎?(傳智播客.Net培訓班原創模擬題)

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

85、開放性問題:說出儘可能多的基於.Net Framework的語言。(*)(傳智播客.Net培訓班原創模擬題)

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

86、.Net、ASP.Net、C#、VisualStudio之間的關係是什麼?(傳智播客.Net培訓班原創模擬題)

答:.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?(傳智播客.Net培訓班原創模擬題)

答: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、下面程序的執行結果是什麼?(傳智播客.Net培訓班原創模擬題)

            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、下面程序的執行結果是什麼?(傳智播客.Net培訓班原創模擬題)(*)

        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、開放式問題:工作中遇到不懂的問題是怎樣去解決的?(傳智播客.Net培訓班原創模擬題)

參考解答:首先到百度上搜索中文的資料,一般都可以找到解決方案,如果還找不到解決方案就到google上搜索英文的資料,如果還沒有解決方案就請教同事,如果同事也沒有解決方案,就將問題提交到MSDN論壇。

99、開放性問題:你能說出哪些數據庫?(傳智播客.Net培訓班原創模擬題)

參考解答:MSSQLServer、Oracle、Access、DB2、Sybase

100、開放性問題:你能說出儘可能多的你聽說過的編程語言?(傳智播客.Net培訓班原創模擬題)(*)

參考解答:C#、VB.Net、Ada、Cobol、C、C++、Delphi、Erlang、F#、Fortran、Java、JavaScript、Pascal、Python、PowerShell、Ruby、Smalltalk。

發佈了51 篇原創文章 · 獲贊 0 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章