Java基礎(chǔ)面試題
一、JavaWeb專題
1.HTTP響應(yīng)碼有哪些
1、1xx(臨時(shí)響應(yīng))
2、2xx(成功)
3、3xx(重定向):表示要完成請(qǐng)求需要進(jìn)一步操作
4、4xx(錯(cuò)誤):表示請(qǐng)求可能出錯(cuò),妨礙了服務(wù)器的處理
5、5xx(服務(wù)器錯(cuò)誤):表示服務(wù)器在嘗試處理請(qǐng)求時(shí)發(fā)生內(nèi)部錯(cuò)誤
舉例:
200:成功,Web服務(wù)器成功處理了客戶端的請(qǐng)求。
301:永久重定向,當(dāng)客戶端請(qǐng)求一個(gè)網(wǎng)址的時(shí)候,Web服務(wù)器會(huì)將當(dāng)前請(qǐng)求重定向到另一個(gè)網(wǎng)址,搜索引擎會(huì)抓取重定向后網(wǎng)頁(yè)的內(nèi)容并且將舊的網(wǎng)址替換為重定向后的網(wǎng)址。
302:臨時(shí)重定向,搜索引擎會(huì)抓取重定向后網(wǎng)頁(yè)的內(nèi)容而保留舊的網(wǎng)址,因?yàn)樗阉饕嬲J(rèn)為重定向后的網(wǎng)址是暫時(shí)的。
400:客戶端請(qǐng)求錯(cuò)誤,多為參數(shù)不合法導(dǎo)致Web服務(wù)器驗(yàn)參失敗。
404:未找到,Web服務(wù)器找不到資源。
500:Web服務(wù)器錯(cuò)誤,服務(wù)器處理客戶端請(qǐng)求的時(shí)候發(fā)生錯(cuò)誤。
503:服務(wù)不可用,服務(wù)器停機(jī)。
504:網(wǎng)關(guān)超時(shí)
2.Forward和Redirect的區(qū)別?
- 瀏覽器URL地址:Forward是服務(wù)器內(nèi)部的重定向,服務(wù)器內(nèi)部請(qǐng)求某個(gè)servlet,然后獲取響應(yīng)的內(nèi)容,瀏覽器的URL地址是不會(huì)變化的;Redirect是客戶端請(qǐng)求服務(wù)器,然后服務(wù)器給客戶端返回了一個(gè)302狀態(tài)碼和新的location,客戶端重新發(fā)起HTTP請(qǐng)求,服務(wù)器給客戶端響應(yīng)location對(duì)應(yīng)的URL地址,瀏覽器的URL地址發(fā)生了變化。
- 數(shù)據(jù)的共享:Forward是服務(wù)器內(nèi)部的重定向,request在整個(gè)重定向過(guò)程中是不變的,request中的信息在servlet間是共享的。Redirect發(fā)起了兩次HTTP請(qǐng)求分別使用不同的request。
- 請(qǐng)求的次數(shù):Forward只有一次請(qǐng)求;Redirect有兩次請(qǐng)求。
3.Get和Post請(qǐng)求的區(qū)別
用途:
- get請(qǐng)求用來(lái)從服務(wù)器獲取資源
- post請(qǐng)求用來(lái)向服務(wù)器提交數(shù)據(jù)
表單的提交方式:
- get請(qǐng)求直接將表單數(shù)據(jù)以name1=value1&name2=value2的形式拼接到URL上(http://www.baidu.com/action?name1=value1&name2=value2),多個(gè)參數(shù)參數(shù)值需要用&連接起來(lái)并且用?拼接到action后面;
- post請(qǐng)求將表單數(shù)據(jù)放到請(qǐng)求頭或者請(qǐng)求的消息體中。
傳輸數(shù)據(jù)的大小限制:
- get請(qǐng)求傳輸?shù)臄?shù)據(jù)受到URL長(zhǎng)度的限制,而URL長(zhǎng)度是由瀏覽器決定的;
- post請(qǐng)求傳輸數(shù)據(jù)的大小理論上來(lái)說(shuō)是沒(méi)有限制的。
參數(shù)的編碼:
- get請(qǐng)求的參數(shù)會(huì)在地址欄明文顯示,使用URL編碼的文本格式傳遞參數(shù);
- post請(qǐng)求使用二進(jìn)制數(shù)據(jù)多重編碼傳遞參數(shù)。
緩存處理:
- get請(qǐng)求可以被瀏覽器緩存被收藏為標(biāo)簽;
- post請(qǐng)求不會(huì)被緩存也不能被收藏為標(biāo)簽
4.介紹下OSI七層和TCP/IP四層的關(guān)系
為了更好地促進(jìn)互聯(lián)網(wǎng)的研究和發(fā)展,國(guó)際標(biāo)準(zhǔn)化組織ISO在1985 年指定了網(wǎng)絡(luò)互聯(lián)模型。OSI 參考模型(Open System Interconnect Reference Model),具有 7 層結(jié)構(gòu)
應(yīng)用層:各種應(yīng)用程序協(xié)議,比如HTTP、HTTPS、FTP、SOCKS安全套接字協(xié)議、DNS域名系統(tǒng)、GDP網(wǎng)關(guān)發(fā)現(xiàn)協(xié)議等等。
表示層:加密解密、轉(zhuǎn)換翻譯、壓縮解壓縮,比如LPP輕量級(jí)表示協(xié)議。
會(huì)話層:不同機(jī)器上的用戶建立和管理會(huì)話,比如SSL安全套接字層協(xié)議、TLS傳輸層安全協(xié)議、RPC遠(yuǎn)程過(guò)程調(diào)用協(xié)議等等。
傳輸層:接受上一層的數(shù)據(jù),在必要的時(shí)候?qū)?shù)據(jù)進(jìn)行分割,并將這些數(shù)據(jù)交給網(wǎng)絡(luò)層,保證這些數(shù)據(jù)段有效到達(dá)對(duì)端,比如TCP傳輸控制協(xié)議、UDP數(shù)據(jù)報(bào)協(xié)議。
網(wǎng)絡(luò)層:控制子網(wǎng)的運(yùn)行:邏輯編址、分組傳輸、路由選擇,比如IP、IPV6、SLIP等等。
數(shù)據(jù)鏈路層:物理尋址,同時(shí)將原始比特流轉(zhuǎn)變?yōu)檫壿媯鬏斅肪€,比如XTP壓縮傳輸協(xié)議、PPTP點(diǎn)對(duì)點(diǎn)隧道協(xié)議等等。
物理層:機(jī)械、電子、定時(shí)接口通信信道上的原始比特流傳輸,比如IEEE802.2等等。
而且在消息通信的過(guò)程中具體的執(zhí)行流程為:
網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù)其實(shí)會(huì)通過(guò)這七層協(xié)議來(lái)進(jìn)行數(shù)據(jù)的封裝和拆解
5.說(shuō)說(shuō)TCP和UDP的區(qū)別
1、TCP面向連接(如打電話要先撥號(hào)建立連接):UDP是無(wú)連接的,即發(fā)送數(shù)據(jù)之前不需要建立連接。
2、TCP提供可靠的服務(wù)。也就是說(shuō),通過(guò)TCP連接傳送的數(shù)據(jù),無(wú)差錯(cuò),不丟失,不重復(fù),且按序到達(dá);UDP盡最大努力交付,即不保證可靠交付。tcp通過(guò)校驗(yàn)和,重傳控制,序號(hào)標(biāo)識(shí),滑動(dòng)窗口、確認(rèn)應(yīng)答實(shí)現(xiàn)可靠傳輸。如丟包時(shí)的重發(fā)控制,還可以對(duì)次序亂掉的分包進(jìn)行順序控制。
3、UDP具有較好的實(shí)時(shí)性,工作效率比TCP高,適用于對(duì)高速傳輸和實(shí)時(shí)性有較高的通信或廣播通信。
4.每一條TCP連接只能是點(diǎn)到點(diǎn)的;UDP支持一對(duì)一,一對(duì)多,多對(duì)一和多對(duì)多的交互通信
5、TCP對(duì)系統(tǒng)資源要求較多,UDP對(duì)系統(tǒng)資源要求較少。
6. 說(shuō)下HTTP和HTTPS的區(qū)別
端口不同:HTTP和HTTPS的連接方式不同沒(méi)用的端口也不一樣,HTTP是80,HTTPS用的是443
消耗資源:和HTTP相比,HTTPS通信會(huì)因?yàn)榧咏饷艿奶幚硐母嗟腃PU和內(nèi)存資源。
開(kāi)銷:HTTPS通信需要證書(shū),這類證書(shū)通常需要向認(rèn)證機(jī)構(gòu)申請(qǐng)或者付費(fèi)購(gòu)買(mǎi)。
7.說(shuō)下HTTP、TCP、Socket的關(guān)系是什么?
- TCP/IP代表傳輸控制協(xié)議/網(wǎng)際協(xié)議,指的是一系列協(xié)議族。
- HTTP本身就是一個(gè)協(xié)議,是從Web服務(wù)器傳輸超文本到本地瀏覽器的傳送協(xié)議。
- Socket是TCP/IP網(wǎng)絡(luò)的API,其實(shí)就是一個(gè)門(mén)面模式,它把復(fù)雜的TCP/IP協(xié)議族隱藏在Socket接口后面。對(duì)用戶來(lái)說(shuō),一組簡(jiǎn)單的接口就是全部,讓Socket去組織數(shù)據(jù),以符合指定的協(xié)議。
綜上所述:
- 需要IP協(xié)議來(lái)連接網(wǎng)絡(luò)
- TCP是一種允許我們安全傳輸數(shù)據(jù)的機(jī)制,使用TCP協(xié)議來(lái)傳輸數(shù)據(jù)的HTTP是Web服務(wù)器和客戶端使用的特殊協(xié)議。
- HTTP基于TCP協(xié)議,所以可以使用Socket去建立一個(gè)TCP連接。
8. 說(shuō)下HTTP的長(zhǎng)鏈接和短連接的區(qū)別
HTTP協(xié)議的長(zhǎng)連接和短連接,實(shí)質(zhì)上是TCP協(xié)議的長(zhǎng)連接和短連接。
短連接
??在HTTP/1.0中默認(rèn)使用短鏈接,也就是說(shuō),瀏覽器和服務(wù)器每進(jìn)行一次HTTP操作,就建立一次連接,但任務(wù)結(jié)束就中斷連接。如果客戶端訪問(wèn)的某個(gè)HTML或其他類型的Web資源,如JavaScript文件、圖像文件、CSS文件等。當(dāng)瀏覽器每遇到這樣一個(gè)Web資源,就會(huì)建立一個(gè)HTTP會(huì)話.
長(zhǎng)連接
??從HTTP/1.1起,默認(rèn)使用長(zhǎng)連接,用以保持連接特性。在使用長(zhǎng)連接的情況下,當(dāng)一個(gè)網(wǎng)頁(yè)打開(kāi)完成后,客戶端和服務(wù)器之間用于傳輸HTTP數(shù)據(jù)的TCP連接不會(huì)關(guān)閉。如果客戶端再次訪問(wèn)這個(gè)服務(wù)器上的網(wǎng)頁(yè),會(huì)繼續(xù)使用這一條已經(jīng)建立的連接。Keep-Alive不會(huì)永久保持連接,它有一個(gè)保持時(shí)間,可以在不同的服務(wù)器軟件(如Apache)中設(shè)定這個(gè)時(shí)間。
9.TCP原理
三次握手:
1.第一次握手:客戶端將標(biāo)志位syn重置為1,隨機(jī)產(chǎn)生seq=a,并將數(shù)據(jù)包發(fā)送給服務(wù)端
2.第二次握手:服務(wù)端收到syn=1知道客戶端請(qǐng)求連接,服務(wù)端將syn和ACK都重置為1,ack=a+1,隨機(jī)產(chǎn)一個(gè)值seq=b,并將數(shù)據(jù)包發(fā)送給客戶端,服務(wù)端進(jìn)入syn_RCVD狀態(tài)。
3.第三次握手:客戶端收到確認(rèn)后,檢查ack是否為a+1,ACK是否為1,若正確將ACK重置為1,將ack改為b+1,然后將數(shù)據(jù)包發(fā)送給服務(wù)端服務(wù)端檢查ack與ACK,若都正確,就建立連接,進(jìn)入ESTABLISHEN.
四次揮手:
1.開(kāi)始雙方都處于連接狀態(tài)
2.客戶端進(jìn)程發(fā)出FIN報(bào)文,并停止發(fā)送數(shù)據(jù),在報(bào)文中FIN結(jié)束標(biāo)志為1,seq為a連接狀態(tài)下發(fā)送給服務(wù)器的最后一個(gè)字節(jié)的序號(hào)+1,報(bào)文發(fā)送結(jié)束后,客戶端進(jìn)入FIN-WIT1狀態(tài)。
3.服務(wù)端收到報(bào)文,向客戶端發(fā)送確認(rèn)報(bào)文,ACK=1,seq為b服務(wù)端給客戶端發(fā)送的最后字節(jié)的序號(hào)+1,ack=a+1,發(fā)送后客戶端進(jìn)入close-wait狀態(tài),不再發(fā)送數(shù)據(jù),但服務(wù)端發(fā)送數(shù)據(jù)客戶端一九可以收到(城為半關(guān)閉狀態(tài))。
4.客戶端收到服務(wù)器的確認(rèn)報(bào)文后,客戶端進(jìn)入fin-wait2狀態(tài)進(jìn)行等待服務(wù)器發(fā)送第三次的揮手報(bào)文。
5.服務(wù)端向fin報(bào)文FIN=1ACK=1,seq=c(服務(wù)器向客戶端發(fā)送最后一個(gè)字節(jié)序號(hào)+1),ack=b+1,發(fā)送結(jié)束后服務(wù)器進(jìn)入last-ack狀態(tài)等待最后的確認(rèn)。
6.客戶端收到是釋放報(bào)文后,向服務(wù)器發(fā)送確認(rèn)報(bào)文進(jìn)入time-wait狀態(tài),后進(jìn)入close
7.服務(wù)端收到確認(rèn)報(bào)文進(jìn)入close狀態(tài)。
10. Cookie和Session的區(qū)別
??cookie是由Web服務(wù)器保存在用戶瀏覽器上的文件(key-value格式),可以包含用戶相關(guān)的信息??蛻舳讼蚍?wù)器發(fā)起請(qǐng)求,就提取瀏覽器中的用戶信息由http發(fā)送給服務(wù)器
??session是瀏覽器和服務(wù)器會(huì)話過(guò)程中,服務(wù)器會(huì)分配的一塊儲(chǔ)存空間給session。服務(wù)器默認(rèn)為客戶瀏覽器的cookie中設(shè)置sessionid,這個(gè)sessionid就和cookie對(duì)應(yīng),瀏覽器在向服務(wù)器請(qǐng)求過(guò)程中傳輸?shù)腸ookie包含sessionid,服務(wù)器根據(jù)傳輸cookie中的sessionid獲取出會(huì)話中存儲(chǔ)的信息,然后確定會(huì)話的身份信息。
1、Cookie數(shù)據(jù)存放在客戶端上,安全性較差,Session數(shù)據(jù)放在服務(wù)器上,安全性相對(duì)更高
2、單個(gè)cookie保存的數(shù)據(jù)不能超過(guò)4K,session無(wú)此限制
3、session一定時(shí)間內(nèi)保存在服務(wù)器上,當(dāng)訪問(wèn)增多,占用服務(wù)器性能,考慮到服務(wù)器性能方面,應(yīng)當(dāng)
使用cookie。
11.Tomcat是什么?
Tomcat服務(wù)器Apache軟件基金會(huì)項(xiàng)目中的一個(gè)核心項(xiàng)目,是一個(gè)免費(fèi)的開(kāi)放源代碼的Web應(yīng)用服
務(wù)器(Servlet容器),屬于輕量級(jí)應(yīng)用服務(wù)器,在中小型系統(tǒng)和并發(fā)訪問(wèn)用戶不是很多的場(chǎng)合下被
普遍使用,是開(kāi)發(fā)和調(diào)試JSP程序的首選。
12.Tomcat有幾種部署方式
- 利用Tomcat的自動(dòng)部署:把web應(yīng)用拷貝到webapps目錄(生產(chǎn)環(huán)境不建議放在該目錄中)。Tomcat在啟動(dòng)時(shí)會(huì)加載目錄下的應(yīng)用,并將編譯后的結(jié)果放入work目錄下。
- 使用Manager App控制臺(tái)部署:在tomcat主頁(yè)點(diǎn)擊“Manager App”進(jìn)入應(yīng)用管理控制臺(tái),可以指定一個(gè)web應(yīng)用的路徑或war文件。
- 修改conf/server.xml文件部署:在server.xml文件中,增加Context節(jié)點(diǎn)可以部署應(yīng)用。
- 增加自定義的Web部署文件:在conf/Catalina/localhost/路徑下增加xyz.xml文件,內(nèi)容是Context節(jié)點(diǎn),可以部署應(yīng)用。
13.什么是Servlet
??Servlet是JavaEE規(guī)范的一種,主要是為了擴(kuò)展Java作為Web服務(wù)的功能,統(tǒng)一接口。由其他內(nèi)部廠
商如tomcat,jetty內(nèi)部實(shí)現(xiàn)web的功能。如一個(gè)http請(qǐng)求到來(lái):容器將請(qǐng)求封裝為servlet中的
HttpServletRequest對(duì)象,調(diào)用init(),service()等方法輸出response,由容器包裝為httpresponse
返回給客戶端的過(guò)程。
14. 什么是Servlet規(guī)范?
- 從Jar包上來(lái)說(shuō),Servlet規(guī)范就是兩個(gè)Jar文件。servlet-api.jar和jsp-api.jar,Jsp也是一種Servlet。
- 從package上來(lái)說(shuō),就是javax.servlet和javax.servlet.http兩個(gè)包。
- 從接口來(lái)說(shuō),就是規(guī)范了Servlet接口、Filter接口、Listener接口、ServletRequest接口、ServletResponse接口等。類圖如下:
15.為什么我們將tomcat稱為Web容器或者Servlet容器?
我們用一張圖來(lái)表示他們之間的關(guān)系:
簡(jiǎn)單的理解:?jiǎn)?dòng)一個(gè)ServerSocket,監(jiān)聽(tīng)8080端口。Servlet容器用來(lái)裝我們開(kāi)發(fā)的Servlet。
16.Servlet的生命周期
17. jsp和Servlet的區(qū)別
- 本質(zhì)都是servlet
- servlet側(cè)重于邏輯處理
- jsp側(cè)重于視圖顯示
18. 九大內(nèi)置對(duì)象
- page頁(yè)面對(duì)象
- config配置對(duì)象
- request請(qǐng)求對(duì)象
- response響應(yīng)對(duì)象
- session會(huì)話對(duì)象
- application全局對(duì)象
- out輸出對(duì)象
- pageContext頁(yè)面上下文對(duì)象
- exception異常對(duì)象
19. JSP的四大作用域
page:
只在當(dāng)前頁(yè)面有效
request:
它在當(dāng)前請(qǐng)求中有效
session:
它在當(dāng)前會(huì)話中有效
application:
他在所有的應(yīng)用程序中都有效
注意:當(dāng)4個(gè)作用域?qū)ο蠖加邢嗤膎ame屬性時(shí),默認(rèn)按照最小的順序查找
20. GenericServlet和HttpServlet有什么區(qū)別?
GenericServlet 為抽象類,定義了一個(gè)通用的、獨(dú)立于底層協(xié)議的servlet,實(shí)現(xiàn)了Servlet 和 ServletConfig接口,ServletConfig接口定義了在Servlet初始化的過(guò)程中由Servlet容器傳遞給Servlet得配置信息對(duì)象。OK,這個(gè)類可能我們不是那么熟悉,但是他的子類相信大家都知道,也就是HttpServlet,HttpServlet 繼承自抽象類GenericServlet 具有其所有的特性并拓展了一些其他的方法,如doGet、doPost等文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-577773.html
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-577773.html
到了這里,關(guān)于2023-JavaWeb最新整理面試題-TCP、Tomcat、Servlet、JSP等的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!