1、Servlet執(zhí)行過程
用戶請求一個Servlet,Servlet容器自動構(gòu)建請求和響應對象,然后執(zhí)行Servlet的service()方法,該方法會接收請求和響應對象,通過響應對象將處理結(jié)果發(fā)送給用戶。
2、怎么請求Servlet
用戶通過一個URL來請求一個Servlet。
3、怎么處理請求
當用戶請求Servlet時,容器構(gòu)建ServletRequest對象request,并傳遞給Servlet的Service()方法,Service通過request對象獲取到請求的參數(shù),然后,根據(jù)參數(shù)做出相應的處理,通過ServletResponse對象來向客戶端發(fā)送響應內(nèi)容。
4、怎么響應客戶端
當用戶請求一個Servlet時候,容器會自動創(chuàng)建ServletResponse對象response,然后通過response對象向客戶端發(fā)送響應內(nèi)容。
5、Servlet的生命周期
a、Servlet的class經(jīng)過部署,并啟動容器
b、(當請求該Servlet時候)容器自動創(chuàng)建Servlet對象xServlet,然后xServlet調(diào)用其init()方法。到此,Servlet初始化結(jié)束。
c、一旦客戶端請求該Servlet,xServlet自動調(diào)用service()來處理請求。
d、一旦很長時間都沒有請求該Servlet(或者說該Servlet超時),則容器會將xServlet從容器中清除掉。
Servlet工作原理:
1、首先簡單解釋一下Servlet接收和響應客戶請求的過程,首先客戶發(fā)送一個請求,Servlet是調(diào)用service()方法對請求進行響應的,通過源代碼可見,service()方法中對請求的方式進行了匹配,選擇調(diào)用doGet,doPost等這些方法,然后再進入對應的方法中調(diào)用邏輯層的方法,實現(xiàn)對客戶的響應。
2、每一個自定義的Servlet都必須實現(xiàn)Servlet的接口,Servlet接口中定義了五個方法,其中比較重要的三個方法涉及到Servlet的生命周期,分別是上文提到的init(),service(),destroy()方法。
3、Servlet接口和GenericServlet是不特定于任何協(xié)議的,而HttpServlet是特定于HTTP協(xié)議的類,所以HttpServlet中實現(xiàn)了service()方法,并將請求ServletRequest、ServletResponse 強轉(zhuǎn)為HttpRequest 和 HttpResponse。
應該是tomcat里創(chuàng)建響應的socketServer線程類接收請求連接,然后在再創(chuàng)建或引用對應的servlet實例來處理請求連接。servlet是單例的,只創(chuàng)建一次。所以最好不要使用serlvet中的實例字段。。
hashmap面試經(jīng)常會被問到底層的數(shù)據(jù)結(jié)構(gòu)是什么,以及jdk1.7和1.8兩個版本hashmap的區(qū)別
AQS核心思想是,如果被請求的共享資源空閑,則將當前請求資源的線程設(shè)置為有效的工作線程,并且將共享資源設(shè)置為鎖定狀態(tài)。如果被請求的共享資源被占用,那么就需要一套線程阻塞等待以及被喚醒時鎖分配的機制,這個機制AQS是用CLH隊列鎖實現(xiàn)的,即將暫時獲取不到鎖的線程加入到隊列中。 AQS使用一個voliate int成員變量來表示同步狀態(tài),通過內(nèi)置的FIFO隊列來完成獲取資源線程的排隊工作。AQS使用CAS對該同步狀態(tài)進行原子操作實現(xiàn)對其值的修改。
AQS定義了兩種資源獲取方式:獨占(只有一個線程能訪問執(zhí)行,又根據(jù)是否按隊列的順序分為公平鎖和非公平鎖,如ReentrantLock) 和共享(多個線程可同時訪問執(zhí)行,如Semaphore/CountDownLatch,Semaphore、CountDownLatCh、 CyclicBarrier )。ReentrantReadWriteLock 可以看成是組合式,允許多個線程同時對某一資源進行讀。
AQS底層使用了模板方法模式, 自定義同步器在實現(xiàn)時只需要實現(xiàn)共享資源 state 的獲取與釋放方式即可,至于具體線程等待隊列的維護(如獲取資源失敗入隊/喚醒出隊等),AQS已經(jīng)在上層已經(jīng)幫我們實現(xiàn)好了。
vue的底層原理面試題有,vue如何實現(xiàn)數(shù)據(jù)的響應式?利用object.defineObject來實現(xiàn)的。
dom_diff的算法?
還有v_model的實現(xiàn)原理?以及生命周期是怎樣實現(xiàn)的?
還有nextTick的實現(xiàn)原理等等,這些都是vue的底層面試題
Servlet 的職責如下:
(1) 創(chuàng)建并返回一個包含基于客戶請求性質(zhì)的動態(tài)內(nèi)容的完整的 HTML 頁面。
(2) 創(chuàng)建可嵌入到現(xiàn)有 HTML 頁面中的一部分 HTML 頁面( HTML 片段)。
(3) 與其它服務器資源(包括數(shù)據(jù)庫和基于 Java 的應用程序)進行通信。
(4) 用多個客戶機處理連接,接收多個客戶機的輸入,并將結(jié)果廣播到多個客戶機上。例如, Servlet 可以是多參與者的游戲服務器。(5) 當允許在單連接方式下傳送數(shù)據(jù)的情況下,在瀏覽器上打開服務器至 applet 的新連接,并將該連接保持在打開狀態(tài)。當允許客戶機和服務器簡單、高效地執(zhí)行會話的情況下, applet 也可以啟動客戶瀏覽器和服務器之間的連接。可以通過定制協(xié)議或標準(如 IIOP )進行通信。
(6) 對特殊的處理采用 MIME 類型過濾數(shù)據(jù),例如圖像轉(zhuǎn)換和服務器端包括( SSI )。
(7) 將定制的處理提供給所有服務器的標準例行程序。例如, Servlet 可以修改如何認證用戶。
servlet是一種獨立于平臺和協(xié)議的服務器端的Java技術(shù),可以用來生成動態(tài)的Web頁面。與傳統(tǒng)的CGI(計算機圖形接口)和許多其他類似CGI技術(shù)相比,Servlet具有更好的可移植性、更強大的功能,更少的投資,更高的效率,更好的安全性等特點。
Servlet是使用Java Servlet應用程序接口(API)及相關(guān)類和方法的Java程序。Java語言能夠?qū)崿F(xiàn)的功能,Servlet基本上都能實現(xiàn)(除了圖形界面之外)。Servlet主要用于處理客戶端傳來的Http請求,并返回一個響應。通常所說的Servlet就是指HttpServlet,用于處理Http請求,其能夠處理的請求有doGet()、doPost()、service()等方法。在開發(fā)Servlet時,可以直接繼承javax.servlet.http.HttpServlet。
Servlet應用范圍很廣泛,我們現(xiàn)在用的很多流行的框架技術(shù),其最基本的代碼離不開Servelt的支持。
當客戶端發(fā)出Web資源的請求時,Web服務器根據(jù)應用程序配置文件設(shè)置的過濾規(guī)則進行檢查,客戶請求滿足過濾規(guī)則,則對客戶請求/響應進行攔截,對請求頭和請求數(shù)據(jù)進行檢查或改動,并依次通過過濾器鏈,最后把請求/響應交給請求的Web資源處理。
請求信息在過濾器鏈中可以被修改,也可以根據(jù)條件讓請求不發(fā)往資源處理器,并直接向客戶機發(fā)回一個響應。
servlet的工作機制如下:
①客戶端(瀏覽器)在地址欄輸入一個URL發(fā)起HTTP請求。
②服務器根據(jù)URL指定要執(zhí)行的Servlet。
③servlet運行service方法,并給服務器作出相應。
④服務器接收到了servlet的響應數(shù)據(jù),將數(shù)據(jù)返回給請求者。
⑤客戶端接受響應數(shù)據(jù),作出展示。