1.MVC路由的理解?
url routing的作用是將瀏覽器的url請求映射到指定的MVC控制器的動作。
當我們在瀏覽器請求一個URL地址時,這個請求首先會被URLRoutingModule所截獲,截獲請求后會從路由中得到與當前url向匹配的RounteData對象,
然后RounteData與url封裝成一個RequestContext對象,可以從RequestContext中封裝的RouteData中獲取Contrller名字(這時Contoller才被真正的激活),然后再去執行控制器中的Action。
2.如何優化網站?
前端:1.減少http的請求,每次發送http請求都會消耗一定的時間。
2.可以使用js緩存,瀏覽器緩存,能直接從緩存中讀取數據,不在請求服務器。
3.使用壓縮后的css和js,避免css和js的重復使用,減少 js里面的循環次數。
4.css剛在<head>里面,js放在頁面的 底部。因為請求js文件很花費時間,如果放在<head>里面,會導致DOM樹需要等待js文件加載完成。
后端:
5.優化SQL,避免使用*查詢,使用索引,避免sp中出現大量邏輯的事務,減少in或and和or的查詢使用。
6.使用memcache緩存,減少數據庫的訪問。
7.減少代碼的層級接口,避免循環嵌套,優化算法等等。
8.讀寫分離,負載均衡,面向接口編程,降低耦合性。
3.系統中使用的好的技術?
服務器端采用面向接口編程,層與層之間通過接口進行依賴,下層不是直接給上層提供實現,而是提供接口,具體的實現以依賴注入的方式在運行時動態注入進去。
減少了層之間的耦合性。
數據的訪問進行了讀寫分離,直接針對數據庫進行操作,比如增刪改查都是直接調用sql語句、sp以及內置函數進行實現。
4.設計模式的理解?
1.單例:保持一個類只有一個實例,並提供一個全局訪問點。目的就是為了保證程序的安全性和數據的唯一性。
2.工廠模式:使用者可以不需要知道具體的實現過程,只需要知道實現的工廠就行。在系統增加新的產品時,我們只需要添加一個具體產品類和對應的實現工廠,無需對原工廠進行任何修改,很好地符合了“開閉原則”。
抽象工廠:用於版本的復制。由抽象工廠類,具體工廠類,抽象產品類,具體產品類構成。
3.建造者模式:相同的方法,不同的順序,產生不同的事件結果時。產品類非常復雜,或者產品類中的調用順序不同產生了不同的效能。
由抽象建造者,具體建造者,指導者,產品角色組成。
5.IIS的工作原理
1.當客戶端發送http request時,服務端的http.sys攔截到這個請求。
2.http.sys聯系was向配置存儲中心請求配置 信息。
3.然后將請求傳入iis的應用程序池。
4.檢查請求的后綴,啟動aspnet_isapi.dll,這個dll是.net framework里面的,也就是這一步進入了.net framework的管線范圍。
5.這個時候如果是webfom,開始執行頁面的生命周期,(HttpRuntime>ProcessRequset>HttpContext>HttpHandler)。
如果時MVC,則啟動mvc的路由機制,根據路由規則為url來指定HttpHandler。
6.HashTable、HashSet、Dictionary的區別
(1).HashTable不支持泛型,而Dictionary支持泛型。
(2). Hashtable 的元素屬於 Object 類型,所以在存儲或檢索值類型時通常發生裝箱和拆箱的操作,所以你可能需要進行一些類型轉換的操作,而且對於int,float這些值類型還需要進行裝箱等操作,非常耗時。
(3).單線程程序中推薦使用 Dictionary, 有泛型優勢, 且讀取速度較快, 容量利用更充分。多線程程序中推薦使用 Hashtable, 默認的 Hashtable 允許單線程寫入, 多線程讀取。
(4)在通過代碼測試的時候發現key是整數型Dictionary的效率比Hashtable快,如果key是字符串型,Dictionary的效率沒有Hashtable快。
1.HashTable的方法是同步的,HashMap未經同步,所以在多線程場合要手動同步HashMap這個區別就像Vector和ArrayList一樣。
2.HashTable不允許null值(key和value都不可以),HashMap允許null值(key和value都可以)。
3.HashTable有一個contains(Object value),功能和containsValue(Object value)功能一樣。
4.HashTable使用Enumeration,HashMap使用Iterator
5.HashTable中hash數組默認大小是11,增加的方式是 old*2+1。HashMap中hash數組的默認大小是16,而且一定是2的指數。
7.網站的安全性要考慮哪些方面?
sql注入、
跨腳本攻擊(xss): 這個也有時被人們稱作HTML注入,和sql注入原理相似,也是沒有特殊字符進行處理。是用戶可以提交HTML標簽對網站進行重新的構造。其實在默認的情況下在asp.net網頁中是開啟 validateRequest屬性的,所有HTML標簽后會.NET都會驗證:但這樣直接把異常拋給用戶,多少用戶體驗就不好。
解決方法 :通過在 Page 指令或 配置節中設置 validateRequest=false 禁用請求驗證
跨站請求偽造(csrf):它可以在你不知道的情況用你的通過驗證用戶進行操作,所以也被稱為瀏覽器劫持。如果你已通過某個網站的驗證那么你將以你的角色對網站進行操作,比如你是管理員可以添加其它的用 戶到管理組,但是如果有人構造了添加管理員的鏈接被管理員點后也會執行相應操作。
解決方法:修改信息時添加驗證碼,或添加Session令牌。
獲取頁面js文件加密信息
8.線程掛了會帶來什么后果?
會導致該線程占有的資源無法釋放,從而影響其他線程的工作。
9.asp.net和c#的本質區別是什么?
C#是一個語言,.net是一個平台。
ASP.NET是一種架構,或者說是一種平台,在這個平台下可根據需要創建網站及各種web應用程序。
C#是ASP.NET的默認語言,除此之外,使用VB也可以完成ASP.NET應用程序的開發。
10.HttpHandle和HttpMoudle的區別與聯系
HttpHandle:一個HttpHanlder用於響應一類的請求,為一類的請求生成響應結果:
由於HTTP請求有很多種請求類型,比如請求aspx、html、jpg等等。因此,僅僅由HttpApplication直接處理請求時很臃腫的,而且不利於擴展。
因此Asp.net采用了抽象工廠模式來處理這些請求。Asp.net在web.config的架構中,允許我們制定某些請求映射到一個HttpHandlerFactory。
HttpMoudle:有時候有些頁面需要一些相同的檢查功能,比如身份驗證。明顯使用HttpHandler是不方便的,因為不是所有的頁面都需要去調用那些相同的功能。
HttpModule的設計正是提供了一個靈活的方法解決這種功能重用的問題,它采用事件(觀察者)的設計模式,將某些HttpHandler都需要的功能抽取出來,形成不同的觀察者類型,這些觀察者類型可 以編譯成類庫形式,供多個網站共用。為了讓ASP.NET管線更靈活,ASP.NET允許我們再web.config中自由配置需要的HttpModule。
我們用HttpModule做什么事情?
1. 修改某些請求(例如前面的示例修改了響應頭)。
2. 檢查檢查請求(例如身份認證檢查)。
HttpModule能處理哪些請求呢?
1. 默認是全部進入ASP.NET的請求。
2. 如果只需要處理部分請求,那么請自行判斷。
11.Remoting與Web Services的區別?
(1)Remoting既支持TCP信道又支持HTTP信道,傳輸速度快
(2)Remoting即可傳輸XML的SOAP包又可傳輸二進制流,效率高
(3)Remoteing主要用於C/S結構項目
(4)不一定要依賴IIS服務器
12.Invoke()和BeginInvoke()的區別?
Invoke() 調用時,會阻塞當前線程,等到 Invoke() 方法返回才繼續執行后面的代碼,表現出“同步”的概念。
BeginInvoke() 調用時,當前線程會啟用線程池中的某個線程來執行此方法,當前線程不被阻塞,繼續運行后面的代碼,表現出“異步”的概念。
EndInvoke() ,在想獲取 BeginInvoke() 執行完畢后的結果時,調用此方法來獲取。
13.怎么解決跨域問題?
引用js、
使用jsonp技術:
它是在文檔中插入一個script標簽,創建_callback方法,通過服務器配合執行_callback方法,並傳入一些參數
JSONP的局限就在於,因為是通過插入script標簽,所以參數只能通過url傳入,因此只能滿足get請求,特別jQuery的ajax方法時,即使設置type: 'POST',但是只要設置了dataType: 'jsonp',在請求 時,都會自動使用GET請求