1. 程式人生 > >.net面試題整理

.net面試題整理

1.      談談你對MVC和三層架構的理解。

MVC即模型、檢視、控制器,模型表示業務資料及業務處理,用來封裝資料及行為;檢視是使用者看到並與之互動的介面;控制器接受使用者輸入並呼叫模型和檢視去完成使用者的請求。使用MVC有利於關注點分離,自動化UI測試成為了可能。

三層架構即表現層(UI)、業務邏輯層(BLL)、資料訪問層(DAL)。區分層次的目的即為了“高內聚,低耦合”的思想。表現層通俗講就是展現給使用者的介面,業務邏輯層即針對具體問題的操作,也可以說是對資料層的操作,對資料業務邏輯處理。資料訪問層:該層所做事務直接操作資料庫,針對資料的增添、刪除、修改、更新、查詢等。

2.      在MVC中如何保持Sessions?

可使用tempdata、viewdata、viewbag三種方式。其中tempdata:在不同的控制器或動作間轉換時保持資料。另外,進行頁面轉向時,tempdata可以保持資料,它是一個內部的Session變數。Viewdata:可以在控制器和檢視間保持資料。Viewbag:它是檢視資料的動態包裝,使用viewbag不需要型別轉換,它使用的是內部動態關鍵詞。

3.      MVC中如何做輸入驗證?

在M層使用資料模型的屬性標籤形如[Required],在C層使用ModelState.IsValid屬性檢查資料是否正確,也可在C層使用javascript進行資料驗證。

4.      已經有了ASPX,為什麼還要Razor?哪個更好?

Razor是一個輕量級的檢視引擎,MVC3引入,相比ASPX,Razor更乾淨、輕量級、語法更簡單,只需要使用@關鍵字,如@DataTime.Now

5.      MVC有多少種不同型別的結果型別,請詳細描述。

有12種,最主要的是ActionResult類,它是一個基礎類,它有11個子型別。

ViewResult  - 給響應流渲染指定的檢視

PartialViewResult  - 給響應流渲染指定的區域性檢視

EmptyResult  - 返回空的響應結果。

RedirectResult  - 執行一個HTTP轉向到指定的URL。

RedirectToRouteResult  -執行一個HTTP轉向到一個URL,這個URL由基於路由資料的路由引擎來決定

JsonResult  - 序列化一個ViewData對像到JSON格式。

JavaScriptResult  - 返回一段Javascript程式碼,它可以在客戶端執行。

ContentResult  - 寫內容到響應流,不需要檢視支援。

FileContentResult  - 返回一個檔案到客戶端。

FileStreamResult  - 返回一個檔案到客戶端,它提供的是流。

FilePathResult  - 返回一個檔案到客戶端。

6.      以下兩種異常處理方式有什麼區別?try {} catch(){throw;}  try{}catch(Exception ex){Throw ex;}

前者catch無引數,可以捕獲所有異常,只有throw關鍵字,表示丟擲當前catch語句捕獲的異常。

後者catch有引數,可以捕獲所有以Exception類派生的異常,throw 變數名;丟擲的是Exception異常或Exception派生的型別

7.      C#中的委託是什麼?事件是不是一種委託?

委託是將一種方法作為引數傳入到另一種方法。事件是一種特殊的委託。委託宣告的關鍵字是Delegate。

8.      用介面或父類作為輸入的引數有什麼好處?返回值如果是介面是為了什麼?

介面或父類作為引數,所有繼承了此介面或父類的類都可以使用,即你給此方法傳引數的時候,可以把繼承了這個介面或父類的類的例項傳給這個方法。可以一次性傳入多種欄位、方法等而不用定義多個形參。

介面作為返回值,返回的是實現介面的物件。

9.      C#和JS的閉包。

閉包的概念是內層的函式可以引用包含在它外層的函式的變數,即使外層函式的執行已經終止。但該變數提供的值並非變數建立時的值,而是在父函式範圍內的最終值。

C#閉包可理解為跨作用域訪問函式內變數,那麼如何避免閉包陷阱呢?C#中普遍的做法是,將匿名函式引用的變數用一個臨時變數儲存下來,然後在匿名函式中使用臨時變數。參考:http://www.cnblogs.com/jiejie_peng/p/3701070.html

JS閉包,在js中的我的理解就是函式巢狀函式,當內部函式在定義它的作用域的外部被引用時,就建立了該內部函式的閉包 ,如果內部函式引用了位於外部函式的變數,當外部函式呼叫完畢後,這些變數在記憶體不會被釋放,因為閉包需要它們。參考:http://www.myexception.cn/javascript/2042903.html

10.  Ajax操作怎麼處理session過期?

當session過期時,我們獲取請求頭資訊值判斷是否為ajax請求,如果是,我們可以返回特定格式的JSON資料,客戶端可以對此資料處理,發現session失效,可以跳轉到其他頁面如登陸等。

11.  簡要談一下你對微軟.Net架構下remoting和webservice兩項技術的理解及實際中的應用。

Remoting可以利用TCP/IP,二進位制傳送提高效率,webservice可利用http,穿透防火牆。

遠端邏輯呼叫,remoing介面只能用在.net remoting是.net 中用來跨越machine,process, appdomain 進行方法呼叫的技術,對於三成結構的程式,就可以使用remoting技術來構建.它是分佈應用的基礎技術.相當於以前的DCOM

WebService是一種構建應用程式的普通模型,並能在所有支援internet網通訊的作業系統上實施。Web Service令基於元件的開發和web的結合達到最佳,基於元件的物件模型。

12.  Sleep()和wait()有什麼區別?

1. sleep是執行緒類Thread 的方法,它是使當前執行緒暫時睡眠,可以放在任何位置。

而wait,它是使當前執行緒暫時放棄物件的使用權進行等待,必須放在同步方法或同步塊裡。

2.Sleep使用的時候,執行緒並不會放棄物件的使用權,即不會釋放物件鎖,所以在同步方法或同步塊中使用sleep,一個執行緒訪問時,其他的執行緒也是無法訪問的。

而wait是會釋放物件鎖的,就是當前執行緒放棄物件的使用權,讓其他的執行緒可以訪問。

3.執行緒執行wait方法時,需要其他執行緒呼叫Monitor.Pulse()或者Monitor.PulseAll()進行喚醒或者說是通知等待的佇列。

而sleep只是暫時休眠一定時間,時間到了之後,自動恢復執行,不需另外的執行緒喚醒.