1、對於 Web 性能優化,您有哪些瞭解和經驗嗎?
出現指數:五顆星
主要考點:這道題是博主在博客園的新聞裏面看到的,回想以前幾年的面試經歷,發現此題出現機率仍是比較高的。由於它的考麪灰常廣,可讓面試官很快了解你的技術涉及面以及這些技術面的深度。
參考答案:這個問題能夠分前端和後端來講。
一、前端優化
(1)減小 HTTP 請求的次數。咱們知道每次發送http請求,創建鏈接和等待相應會花去至關一部分時間,因此在發送http請求的時候,儘可能減小請求的次數,一次請求能取出的數據就不要分屢次發送。
(2)啓用瀏覽器緩存,當肯定請求的數據不會發生變化時,可以直接讀瀏覽器緩存的就不要向服務端發送請求。好比咱們ajax裏面有一個參數可以設置請求的時候是否啓用緩存,這種狀況下就須要咱們在發送請求的時候作好相應的緩存處理。
(3)css文件放 在<head>裏面,js文件儘可能放在頁面的底部。由於請求js文件是很花費時間,若是放在<head>裏面,就會致使頁面的 DOM樹呈現須要等待js文件加載完成。這也就是爲何不少網站的源碼裏面看到引用的文件放在最後的緣由。
(4)使用壓縮的css和js文件。這個不用多說,網絡流量小。
(5)若是條件容許,儘可能使用CDN的方式引用文件,這樣就能減小網絡流量。好比咱們經常使用的網站http://www.bootcdn.cn/。
(6)在寫js和css的語法時,儘可能避免重複的css,儘可能減小js裏面循環的次數,諸如此類。
二、後端優化:
(1)程序的優化:這是一個很大的話題,我這裏就選幾個常見的。好比減小代碼的層級結構、避免循環嵌套、避免循環CURD數據庫、優化算法等等。
(2)數據庫的優化:(因爲數據庫優化不是本題重點,因此可選幾個主要的來講)好比啓用數據庫緩存、經常使用的字段建索引、儘可能避免大事務操做、避免select * 的寫法、儘可能不用in和not in 這種耗性能的用法等等。
(3)服務器優化:(這個可做爲可選項)負載均衡、Web服務器和數據庫分離、UI和Service分離等等。css
2、MVC路由理解?(家常便飯)
出現指數:五顆星
主要考點:此題主要考點是MVC路由的理解。
參考答案:
一、首先咱們要理解MVC中路由的做用:url Routing的做用是將瀏覽器的URL請求映射到特定的MVC控制器動做。
二、當咱們訪問http://localhost:8080/Home/Index 這個地址的時候,請求首先被UrlRoutingModule截獲,截獲請求後,從Routes中獲得與當前請求URL相符合的RouteData對象, 將RouteData對象和當前URL封裝成一個RequestContext對象,而後從Requestcontext封裝的RouteData中獲得 Controller名字,根據Controller的名字,經過反射建立控制器對象,這個時候控制器才真正被激活,最後去執行控制器裏面對應的 action。html
3、談談你以爲作的不錯系統,大概介紹下用到了哪些技術?
出現指數:五顆星
主要考點:這是一道很是開放的面試題。博主遇到過好幾家公司的面試官都問道了這個,博主以爲他們是想經過這個問題快速瞭解面試者的技術水平。此題只要結合你最近項目用到的技術談談就行了。
參考答案:
就拿我以前作過的一個項目爲例來簡單說明一下吧。項目分爲客戶端和服務端,客戶端分 爲BS客戶端和CS客戶端,BS客戶端採用MVC 5.0的框架,CS客戶端是Winform項目,服務端使用WebApi統一提供服務接口,考慮之後可能還要擴展手機端,因此服務接口的參數和返回值使用 通用的Json格式來傳遞數據。
一、服務端採用的面向接口編程,咱們在軟件架構的過程當中,層和層之間經過接口依賴, 下層不是直接給上層提供實現,而是提供接口,具體的實現以依賴注入的方式在運行的時候動態注入進去。MEF就是實現依賴注入的一種組件。它的使用使得UI 層不直接依賴於BLL層,而是依賴於中間的一個IBLL層,在程序運行的時候,經過MEF動態將BLL裏面的實現注入到UI層裏面去,這樣作的好處是減小 了層與層之間的耦合。服務端的異常裏面、權限驗證、日誌記錄等通用功能使用了AOP攔截的機制統一管理,項目中使用的是Postsharp這個組件,很好 地將通用需求功能從不相關的類當中分離出來,提升了代碼的可維護性。
二、BS的客戶端採用的jquery+bootstrap 的方式,全部頁面採用流式佈局,能更好適應各類不一樣的終端設備(PC、手機)。項目中使用了各類功能強大的bootstrap組件,能適應各類複雜的業務需求。前端
4、Js繼承實現。
出現指數:五顆星
主要考點:這道題考驗面試者對js理解的深度。根據博主的經歷,這種題通常在筆試出現的概率較大,爲何把它放在這裏,由於它確實太常見了。其實js實現繼承的方式不少,咱們只要寫好其中一種就行了。
參考答案:原型鏈繼承jquery
1 //1.定義Persiong函數 2 function Person(name, age) { 3 this.name = name; 4 this.age = age; 5 } 6 //2.經過原型鏈給Person添加一個方法 7 Person.prototype.getInfo = function () { 8 console.log(this.name + " is " + this.age + " years old!"); 9 } 10 function Teacher(staffId) { 11 this.staffId = staffId; 12 } 13 //3.經過prototype生命 Teacher繼承Person 14 Teacher.prototype = new Person(); 15 //4.實例Teacher函數 16 var will = new Teacher(1000); 17 will.name= "Will"; 18 will.age = 28; 19 //5.調用父類函數 20 will.getInfo();
5、談談你對設計模式的認識?結合你用得最多的一種設計模式說說它的使用。
出現指數:五顆星
主要考點:不用多說,這題考的就是對設計模式的理解。通常爲了簡單可能會要求你寫一個單例模式,注意最好是寫一個完整點的,考慮線程安全的那種。而後會讓你說說你在項目中什麼狀況下會用到這種模式
參考答案:
通用寫法程序員
1 public class Singleton 2 { 3 // 定義一個靜態變量來保存類的實例 4 private static Singleton uniqueInstance; 5 // 定義一個標識確保線程同步 6 private static readonly object locker = new object(); 7 // 定義私有構造函數,使外界不能建立該類實例 8 private Singleton() 9 { 10 } 11 /// <summary> 12 /// 定義公有方法提供一個全局訪問點,同時你也能夠定義公有屬性來提供全局訪問點 13 /// </summary> 14 /// <returns></returns> 15 public static Singleton GetInstance() 16 {// 雙重鎖定只須要一句判斷就能夠了 17 if (uniqueInstance == null) 18 { 19 lock (locker) 20 { 21 // 若是類的實例不存在則建立,不然直接返回 22 if (uniqueInstance == null) 23 { 24 uniqueInstance = new Singleton(); 25 } 26 } 27 } 28 return uniqueInstance; 29 } 30 }
單例模式確保一個類只有一個實例,並提供一個全局訪問點,它的使用場景好比任務管理 器整個系統中應該只有一個把,再好比操做文件的對象,同一時間咱們只能有一個對象**做文件吧。最重要的,好比咱們項目中用得很是多的功能→日誌記錄,在 一個線程中,記錄日誌的對象應該也只能有一個吧。單例模式的目的是爲了保證程序的安全性和數據的惟一性。或者你也能夠結合你使用的其餘設計模式來講明。web
6、IIS的工做原理?
出現指數:四顆星
主要考點:此題主要考的是.net framework和IIS是如何結合呈現頁面的。這是一個有點複雜的過程,面試的時候不可能說得完整,那麼咱們就抓住幾個關鍵點說說就能夠。其實博主也不能徹底理解這個過程,今天正好借這個機會溫**下。
參考答案:
一、當客戶端發送HTTP Request時,服務端的HTTP.sys(能夠理解爲IIS的一個監聽組件) 攔截到這個請求;
二、HTTP.sys 聯繫 WAS 向配置存儲中心請求配置信息。
三、而後將請求傳入IIS的應用程序池。
四、檢查請求的後綴,啓動aspnet_isapi.dll這個dll,這個dll是.net framework裏面的,也就是說到這一步,請求進入了.net framework的管轄範圍。
五、這個時候若是是WebForm,開始執行復雜的頁面生命週期(HttpRuntime→ProcessRequest→HttpContext→HttpHandler);若是是MVC,則啓動mvc的路由機制,根據路由規則爲URL來指定HttpHandler。
六、httpHandler處理請求後,請求結束,給出Response,客戶端處理響應,整個過程結束。面試
7、Http協議
出現指數:四顆星
主要考點:此題主要考對於web裏面http協議的理解。
參考答案:
一、http協議是瀏覽器和服務器雙方共同遵循的規範,是一種基於TCP/IP應用層協議。
二、http是一種典型的請求/響應協議。客戶端發送請求,請求的內容以及參數存放到請求報文裏面,服務端收到請求後,作出響應,返回響應的結果放到響應報文裏面。經過F12能夠查看請求報文和響應報文。
三、http協議是」無狀態」的,當客戶端向服務端發送一次http請求後,服務端收到請求而後返回給客戶端相應的結果,服務器會當即斷開鏈接並釋放資源。在實際開發過程當中,咱們有時須要「保持」這種狀態,因此衍生出了Session/Cookie這些技術。
四、http請求的方式主要有get/post。
五、http狀態碼最好記幾個,博主有一次面試就被問到了。200(請求成功)、404(請求的資源不存在)、403(禁止訪問)、5xx(服務端錯誤)ajax
8、數據庫優化經驗(後端工程師很是常見)
出現指數:四顆星
主要考點:此題考察後端工程師操做數據庫的經驗。說實話,數據庫是博主的弱項,博主以爲對於這種考題,須要抓住幾個經常使用而且關鍵的優化經驗,若是說得不對,歡迎你們斧正。
參考答案:
一、數據庫運維方面的優化:啓用數據庫緩存。對於一些比較經常使用的查詢能夠採用數據庫緩存的機制,部署的時候須要注意設置好緩存依賴項,防止「過時」數據的產生。
二、數據庫索引方面的優化:好比經常使用的字段建索引,聯合查詢考慮聯合索引。(PS:若是你有基礎,能夠敞開談談彙集索引和非彙集索引的使用場景和區別)
三、數據庫查詢方面的優化:避免select * 的寫法、儘可能不用in和not in 這種耗性能的用法等等。
四、數據庫算法方面的優化:儘可能避免大事務操做、減小循環算法,對於大數據量的操做,避免使用遊標的用法等等。redis
9、關於代碼優化你怎麼理解?你會考慮去代碼重構嗎?
出現指數:四顆星
主要考點:此題考的是面試者對代碼優化的理解,以及代碼如何重構的相關知識。
參考答案:
一、對於代碼優化,以前的公司每週會作代碼審覈,審覈的主要做用就是保證代碼的正確性和執行效率,好比減小代碼的層級結構、避免循環嵌套、避免循環CURD數據庫、儘可能避免一次取出大量數據放在內存中(容易內存溢出)、優化算法等。
二、對於陳舊代碼,可能不少地方有調用,而且開發和維護人員頗有可能不是同一我的,因此重構時要格外當心,若是沒有十足的把握,不要輕易重構。若是必需要重構,必須作好充分的單元測試和全局測試。算法
10、談談你的優勢和缺點?
出現指數:四顆星
主要考點:這道題讓人有一種罵人的衝動,可是沒辦法,恰恰不少所謂的大公司會問這個。好比華爲。這個問題見仁見智,答案能夠本身組織。
參考答案:
優勢:對於新的技術學**能力強,能很快適應新環境等等
缺點:對技術太過於執着等等
11、關於服務器端 MVC 架構的技術實現,您是怎樣理解的?這種架構方式有什麼好處?您在項目中是如何應用這一架構的?
出現指數:三顆星
主要考點:此題主要考的對於MVC這種框架的理解。
參考答案:MVC,顧名思義,Model、View、Controller。全部的 界面代碼放在View裏面,全部涉及和界面交互以及URL路由相關的邏輯都在Controller裏面,Model提供數據模型。MVC的架構方式會讓系 統的可維護性更高,使得每一部分更加專一本身的職責,而且MVC提供了強大的路由機制,方便了頁面切換和界面交互。而後能夠結合和WebForm的比較, 談談MVC如何解決複雜的控件樹生成、如何避免了複雜的頁面生命週期。
12、網站優化:網站運行慢,如何定位問題?發現問題如何解決?
出現指數:三顆星
主要考點:此題和問題一相似,考察Web的問題定位能力和優化方案。
參考答案:
瀏覽器F12→網絡→查看http請求數以及每一個請求的耗時,找到問題的根源,而後依次解決,解決方案能夠參考問題一里面的Web優化方案。
十3、說說你最擅長的技術?並說說你是如何使用的?
出現指數:三顆星
主要考點:這是一道很是開放的面試題。最初遇到這種問題,博主很想來一句:你妹,這叫什麼問題!但確實有面試官問到。回頭想一想,其實此題考查你擅長的技術的涉及深度。其實博主以爲對於這個問題,能夠結合你項目中用到的某一個技術來講就行了。
參考答案:
簡單談談MEF在咱們項目裏面的使用吧。
在談MEF以前,咱們必需要先談談DIP、IOC、DI
依賴倒置原則(DIP):一種軟件架構設計的原則(抽象概念)
控制反轉(IoC):一種反轉流、依賴和接口的方式(DIP的具體實現方式)。
依賴注入(DI):IoC的一種實現方式,用來反轉依賴(IoC的具體實現方式)。
什麼意思呢?也就是說,咱們在軟件架構的過程當中,層和層之間經過接口依賴,下層不是 直接給上層提供實現,而是提供接口,具體的實現以依賴注入的方式在運行的時候動態注入進去。MEF就是實現依賴注入的一種組件。它的使用使得UI層不直接 依賴於BLL層,而是依賴於中間的一個IBLL層,在程序運行的時候,經過MEF動態將BLL裏面的實現注入到UI層裏面去,這樣作的好處是減小了層與層 之間的耦合。這也正是面向接口編程方式的體現。
十4、本身寫過JS組件嗎?舉例說明。
出現指數:三顆星
主要考點:此題考的js組件封裝和js閉包的一些用法。通常來講,仍是筆試出現的概率較大。
參考答案:自定義html的select組件
1 //combobox 2 (function ($) { 3 $.fn.combobox = function (options, param) { 4 if (typeof options == 'string') { 5 return $.fn.combobox.methods[options](this, param); 6 } 7 options = .fn.combobox.defaults, options || {}); 8 var target = $(this); 9 target.attr('valuefield', options.valueField); 10 target.attr('textfield', options.textField); 11 target.empty(); 12 var option = $('<option></option>'); 13 option.attr('value', ''); 14 option.text(options.placeholder); 15 target.append(option); 16 if (options.data) { 17 init(target, options.data); 18 } 19 else { 20 //var param = {}; 21 options.onBeforeLoad.call(target, option.param); 22 if (!options.url) return; 23 $.getJSON(options.url, option.param, function (data) { 24 init(target, data); 25 }); 26 } 27 28 function init(target, data) { 29 $.each(data, function (i, item) { 30 var option = $('<option></option>'); 31 option.attr('value', item[options.valueField]); 32 option.text(item[options.textField]); 33 target.append(option); 34 }); 35 options.onLoadSuccess.call(target); 36 } 37 target.unbind("change"); target.on("change", function (e) { if (options.onChange) return options.onChange(target.val()); }); } $.fn.combobox.methods = { getValue: function (jq) { return jq.val(); }, setValue: function (jq, param) { jq.val(param); }, load: function (jq, url) { ('<option></option>'); option.attr('value', ''); option.text('請選擇'); jq.append(option); ('<option></option>'); option.attr('value', item[jq.attr('valuefield')]); option.text(item[jq.attr('textfield')]); jq.append(option); }); }); } }; $.fn.combobox.defaults = { url: null, param: null, data: null, valueField: 'value', textField: 'text', placeholder: '請選擇', onBeforeLoad: function (param) { }, onLoadSuccess: function () { }, onChange: function (value) { } 38 }; 39 })(jQuery);
調用的時候
1 $("#sel_search_orderstatus").combobox({ 2 url: '/apiaction/Order/OrderApi/GetOrderStatu', 3 valueField: 'VALUE', 4 textField: 'NAME' 5 });
就能自動從後臺取數據,注意valueField和textField對應要顯示和實際值。
十5、本身寫過多線程組件嗎?簡要說明!
出現指數:三顆星
主要考點:此題是兩年前博主在攜程的一次電話面試中遇到的,其餘地方基本上沒遇到過,其實到如今也不能理解當時面試官問這個問題的目的。但我想,此問題必有出處,估計面試官是想了解你對多線程以及線程池等的理解深度。
知識點:
一、什麼是面向對象?
面向對象說到底就是一種思想,任何事物均可以看做是一個對象。在有些面試題目中也稱之爲OOP(Object Oriented Programming)。分開來解讀就是:
Object:對象
Oriented: 面向的
Programming:程序設計
面向對象就是把一我的或事務的屬性,好比名字,年齡這些定義在一個實體類裏面。存和取的時候直接使用存取實體類就把這我的的名字,年齡這些所有存了,這個實體類就叫對象,這種思想就叫面向對象。
面向對象開發具備如下優勢:
代碼開發模塊化,便於維護。
代碼複用性強
代碼的可靠性和靈活性。
代碼的可讀性和可擴展性。
2. 簡述 private、 protected、 public、 internal 修飾符的訪問權限。
答 . private : 私有成員, 在類的內部才能夠訪問。
protected : 保護成員,該類內部和繼承類中能夠訪問。
public : 公共成員,徹底公開,沒有訪問限制。
internal: 在同一命名空間內能夠訪問,當前程序集內能夠訪問
3 .列舉ASP.NET 頁面之間傳遞值的幾種方式。
答. 1.Request.QueryString
2.Request.Form
3.Session
4.Application
5.Cache
6.Cookie
7.Server.Transfer
8.Database
9.HttpContext的Item屬性等
4.a=10,b=15,請在不使用第三方變量的狀況下,把a、b的值互換
答: int a=a+b; int b=a-b;int a=a-b;
5.用.net作B/S結構的系統,您是用幾層結構來開發,每一層之間的關係以及爲何要這樣分層?
答:通常爲3層:數據訪問層,業務層,表示層。
數據訪問層對數據庫進行增刪查改。
業務層通常分爲二層,業務表觀層實現與表示層的溝通,業務規則層實現用戶密碼的安全等。
表示層爲了與用戶交互例如用戶添加表單。
優勢: 分工明確,條理清晰,易於調試,並且具備可擴展性。
缺點: 增長成本。
6.能用foreach遍歷訪問的對象須要實現 ________________接口或聲明________________方法的類型。
答:IEnumerable 、 GetEnumerator。
7.GC是什麼? 爲何要有GC?
答:GC是垃圾收集器。程序員不用擔憂內存管理,由於垃圾收集器會自動進行管理。要請求垃圾收集,能夠調用下面的方法之一:
System.gc()
Runtime.getRuntime().gc()
8.啓動一個線程是用run()仍是start()?
答:啓動一個線程是調用start()方法,使線程所表明的虛擬處理機處於可運行狀態,這意味着它能夠由JVM調度並執行。這並不意味着線程就會當即運行。run() 方法能夠產生必須退出的標誌來中止一個線程。
9.是否能夠繼承String類?
答:String類是final類故不能夠繼承。
10.session喜歡丟值且佔內存,Cookis不安全,請問用什麼辦法代替這兩種原始的方法
答:redis 或者 memcache。固然,微軟也提供瞭解決方案。iis中因爲有進程回收機制,系統繁忙的話Session會丟失,能夠用Sate server或SQL Server數據庫的方式。
11.IOC容器?
1. IOC即控制反轉,是一種設計思想,在以前的項目中,當咱們須要一個對象時,須要new一個對象,而IOC的設計思想是咱們將須要的對象注入到一個容器中,就會得到咱們所須要的資源 。
2. IOC和DI IOC是控制反轉,DI是依賴注入,控制反轉的解釋有些模棱兩可,而依賴注入就很明確,咱們將須要的對象注入到容器中,獲取所須要的資源。
3. IOC控制反轉:正常狀況下程序開發是上端調用下端,依賴下端,依賴倒置原則告訴咱們,上端不要依賴下端,要依賴抽象,上端只依賴抽象,細節交給第三方工廠(容器)來決定,這就是IOC,就是控制反轉——使系統架構能夠更穩定,支持擴展。
十二、什麼是委託,事件是否是一種委託?
1. 委託能夠把一個方法做爲參數代入另外一個方法。
2. 委託能夠理解爲指向一個函數的引用。
3. 事件是一種特殊的委託。
delegate <函數返回類型> <委託名> (<函數參數>)
13.c#多線程是什麼?
多線程的優勢:能夠同時完成多個任務;可使程序的響應速度更快;能夠節省大量時間進行處理任務;能夠隨時中止任務;能夠設置每一個任務的優先級,以優化程序性能。
14.WebApi概述
Web API是在.NET Framework之上構建的Web的API的框架,Web API是一個編程接口,用於操做可經過標準HTTP方法和標頭訪問的系統,Web API須要基於.NET 3.5或更高版本才能夠進行開發
15.什麼是WebService
webservice是一種跨平臺,跨語言的規範,用於不一樣平臺,不一樣語言開發的應用之間的交互,是基於網絡的、分佈式的模塊化組件,它執行特定的任務,遵照具體的技術規範。
16.存儲過程是什麼?有什麼用?有什麼優勢?用什麼來調用?
存儲過程是預編譯,安全性高,也是大大提升了效率,存儲過程能夠重複使用以減小數據庫開發人員的工做量,複雜的邏輯咱們可使用存儲過程完成,在存儲過程當中咱們可使用臨時表,還能夠定義變量,拼接sql語句,調用時,只需執行這個存儲過程名,傳入咱們所須要的參數便可。
17.何爲觸發器?
觸發器是一種特殊的存儲過程,主要是經過事件觸發而被執行。它能夠強化約束來維護數據的完整性和一致性,能夠跟蹤數據庫內的操做從而不容許未經許可的更新和變化。能夠級聯運算。
常見的觸發器有三種:分別應用於Insert , Update , Delete 事件。
18.什麼叫作泛型?
只是爲了去掉重複代碼,應對不一樣類型的共同需求。
19. C#中值類型和引用類型分別有哪些?
值類型:結構體(數值類型,bool型,用戶定義的結構體),枚舉,可空類型。
引用類型:數組,用戶定義的類、接口、委託,object,字符串。
21 .NET的錯誤處理機制是什麼?
.net錯誤處理機制採用try->catch->finally結構,發生錯誤時,層層上拋,直到找到匹配的Catch爲止。
22.C#能否對內存進行直接的操做?
在.net下,.net引用了垃圾回收(GC)功能,它替代了程序員不過在C#中,不能直接實現Finalize方法,而是在析構函數中調用基類的Finalize()方法。
23. ADO.NET相對於ADO等主要有什麼改進?
1:ado.net不依賴於ole db提供程序,而是使用.net託管提供的程序,
2:不使用com
3:不在支持動態遊標和服務器端遊
4:,能夠斷開connection而保留當前數據集可用
5:強類型轉換
6:xml支持
24.若是在一個B/S結構的系統中須要傳遞變量值,可是又不能使用Session、Cookie、Application,您有幾種方法進行處理?
this.Server.Transfer、Response.Redirect()、QueryString
25. .NET中讀寫數據庫須要用到那些類?他們的做用?
Connection鏈接對象,Command執行命令和存儲過程,DataReader向前只讀的數據流,DataAdapter適配器,支持增刪查詢,DataSet數據級對象,至關與內存裏的一張或多張表。
26.簡要談一下您對微軟.NET架構下remoting和webservice兩項技術的理解以及實際中的應用。
WS主要是可利用HTTP,穿透防火牆。而Remoting能夠利用TCP/IP,二進制傳送提升效率。
remoting是.net中用來跨越machine,process, appdomain進行方法調用的技術,對於三成結構的程序,就可使用remoting技術來構建.它是分佈應用的基礎技術.至關於之前的DCOM。
Web Service是一種構建應用程序的普通模型,並能在全部支持internet網通信的操做系統上實施。Web Service令基於組件的開發和web的結合達到最佳,基於組件的對象模型。
27.什麼是反射?
動態獲取程序集信息。
28.override與重載的區別?
重載是方法的名稱相同。參數或參數類型不一樣,進行屢次重載以適應不一樣的須要。
Override是子類對基類中函數的重寫。爲了適應須要。
29.裝箱和拆箱的概念和原理
裝箱是將值類型轉化爲引用類型的過程;
拆箱是將引用類型轉化爲值類型的過程
30.Session有什麼重大BUG,微軟提出了什麼方法加以解決?
是iis中因爲有進程回收機制,系統繁忙的話Session會丟失,能夠用Sate server或SQL Server數據庫的方式存儲Session不過這種方式比較慢,並且沒法捕獲Session的END事件。
參考文獻:https://blog.csdn.net/user2041/article/details/80591365