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異?;駿xception派生的類型
7. C#中的委托是什么?事件是不是一種委托?
委托是將一種方法作為參數傳入到另一種方法。事件是一種特殊的委托。委托聲明的關鍵字是Delegate。
8. 用接口或父類作為輸入的參數有什么好處?返回值如果是接口是為了什么?
接口或父類作為參數,所有繼承了此接口或父類的類都可以使用,即你給此方法傳參數的時候,可以把繼承了這個接口或父類的類的實例傳給這個方法??梢砸淮涡詡魅攵喾N字段、方法等而不用定義多個形參。
接口作為返回值,返回的是實現接口的對象。
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只是暫時休眠一定時間,時間到了之后,自動恢復運行,不需另外的線程喚醒.
新聞熱點
疑難解答