一些ASP.NET研發工程師的面試題

來源:互聯網
上載者:User

從中聯實習完到現在,很久沒有正式工作過了,最近感覺有點閑得慌的感覺,突然感覺到工作條件下的自己才算比較正常的。今天上午13:00接到一個公司的技術面試電話,總共聊了半個多小時,基本問題還是答出來,但是其實對於一些細節問題還是有待商榷。下面利用空閑時間整理一下,也算補充一下自己。

 

一、首先是談論一下對於之前項目開發的介紹,以及之前項目開發中遇到的一些問題,甚至還問到了是如何解決這些問題的?

這是一個面試過程中比較常見的問題,也許面試官是考證一下投遞簡曆的人是否跟簡曆介紹的一樣,我見過許多把簡曆寫得相當NB的人,結果一面試,天啦,傻眼了!

我按照實際情況描述了一下項目,然後概括性介紹了項目的模組,以及項目開發中遇到了一些問題以及資料表的介紹。

二、ASP.NET中的伺服器控制項,比如TextBox,如果添加了一個TextChanged事件,在用戶端進行事件觸發的時候,伺服器如何接收到該事件的,以及伺服器如何處理該事件的?

說實話,我挺佩服這個面試官的,從他對於問題的描述可以得知應該是個大牛之內的人,其水平不在譚老大之下。

這個問題可以理解為對於ASP.NET的運行以及生命週期的問題,觸發事件是指觸發伺服器事件。首先你在用戶端發生了一個選節點的操作,這時通過用戶端頁面的JAVASCRIPT方法(通常是_DO_POSTBACK方法,這個是ASP.NET自動產生的),來向伺服器回傳一些資訊,這些資訊其中就包括當前用戶端頁面的所有狀態、觸發回傳的控制項ID等等。
伺服器在接收到_DO_POSTBACK發回的資訊後,進行處理,找到對應的處理方法,然後執行。產生頁面之後,發送給用戶端。

三、ASP.NET頁面的生命週期是多少?以及當使用者在請求某個aspx頁面的過程中,從請求到頁面顯示過程中,細節是怎麼樣的?

我從這個問題扯到了Session、Application、Cookie以及ViewData方面,顯然是不正確的。應該是這樣回答的:

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;

四、接著我上面扯到的答案,面試官很正常的問到了我對於Session、Cookie以及Application的應用範圍,以及這些全域變數的優缺點。

1、Application用於儲存所有使用者共用的資料資訊,如果被儲存的資料在應用程式生存期內根本不會改變或很少改變,用它。但是在asp.net中有個web.config,可能更好點。如果要使用application,一個需要考慮的問題是任何寫操作都有要在application_onstart事件中(Global.asax)中完成。儘管使用application.lock和application.unlock方法來避免操作的同步,但是它序列化了對application的請求,當網站訪問量大時會造成效能瓶頸。因此最好不要用它存取大的資料集。

2、Session 用於儲存每個使用者的專用資訊,它的生存期是使用者持續請求時間再加上一段時間(可以在web.config中設定,預設是20分鐘)。Session中的資訊儲存在伺服器的記憶體中,當然你也可以設定它的儲存方法(如存在SQL資料庫中)。由於使用者停止使用程式後它仍然在記憶體中保持一段時間,因此使用Session對象儲存使用者資料的方法效率很低。對於小量的資料。使用Session還是一個不錯的選擇。
3、Cookie用於儲存客戶瀏覽器請求伺服器頁面的請求資訊,程式員也可以用它儲存非敏感性的內容。儲存時間可以根據需要設定。如果沒有設定Cookie失效時間,它僅儲存至瀏覽器關閉。如果將Cookie設定為Min Value,則表示它永不到期。Cookie儲存量受到很大限制,一般瀏覽器支援最大容量為4096位元組。因此不能用來儲存大量資料。由於並非所有瀏覽器都支援Cookie,並且它是以明文方式儲存的,所以最好不要儲存敏感性的內容。否則會影響網路安全。

五、由於我之前在中山大學做過JSP頁面,所以面試官問了一個關於ASP.NET與JSP的問題,就是伺服器端對於用戶端控制項事件處理的機制有什麼區別?

這個問題跟問題2是基本一致的。

六、對於ASP.NET的問題問得差不多後,面試官開始對C#下手了,問到的第一個是子類如何重寫父類的方法?

1、如果父類包含某個需要重寫的函數,利用override即可

2、如果父類不包含這個函數,利用public new override也可。

七、在C#中,你是如何理解反射的?

說實話,這些概念在平時開發中還真沒有特別的留意。反射(Reflection)是.NET中的重要機制,通過反射,可以在運行時獲得.NET中每一個類型(包括類、結構、委託、介面和枚舉等)的成員,包括方法、屬性、事件,以及建構函式等。還可以獲得每個成員的名稱、限定符和參數等。有了反射,即可對每一個類型了如指掌。如果獲得了建構函式的資訊,即可直接建立對象,即使這個對象的類型在編譯時間還不知道。

八、對於之前你提到的裝箱和拆箱是怎麼理解的?

拆箱是把“引用”類型轉換成“值”類型;裝箱是把“值”類型轉換成“參考型別”;原因是有時某些方法的參數要求使用“引用”類型,而你想把“值”類型的變數通過這個參數傳入,就需要使用這個操作。舉例說明就是,

object obj="HelloWorld";就是裝箱

String str=(String) obj;就是拆箱 

九、在SQL中,左串連的具體細節是怎麼樣的?

面試官給出了例子,即表A和表B,表A中的BID與表B中的BID對應,當進行左串連操作時,問我的表結構是怎麼樣的。

left join的操作基本是:首先取出A表中所有資料,然後再加上與A,B匹配的的資料

right join的操作就是:首先取出B表中的所有資料,然後再加上與A,B匹配的的資料

至於inner join操作就是:取出A,B表匹配的資料 

十、C#中using關鍵字的用法?

這個問題的回答還算順利,在C#中,關鍵字using主要有兩種用途:

1、作為語句,用於定義一個範圍,在此範圍的末尾將釋放對象:當提到這一點的時候,面試官又追問了,如果是定義一個數組也會釋放嗎?於是我繼續回答到,為using語句提供的對象必須實現IDisposable 介面。此介面提供了Dispose 方法,該方法將釋放此對象的資源。

2、作為指令,用於為命名空間建立別名或匯入其他命名空間中定義的類型

小結:

雖然並不是所有問題都答出了,但是總算明白了自己在項目開發過程中需要重視一些基本概念的理解,畢竟萬事皆源於概念,只有概念結合動手能力,才是無敵的王道。最後謝謝這位面試官。

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.