1. 程式人生 > >最近整理的一些常見的面試題,面試大全,黑馬程式設計師面試寶典題庫---JavaWEB基礎篇

最近整理的一些常見的面試題,面試大全,黑馬程式設計師面試寶典題庫---JavaWEB基礎篇

一、 JDBC 技術(評論留言獲取原件)

1. 說下原生 jdbc 操作資料庫流程?(2017-11-25-wzz)

第一步: Class.forName()載入資料庫連線驅動;
第二步: DriverManager.getConnection()獲取資料連線物件;
第三步:根據 SQL 獲取 sql 會話物件,有 2 種方式 Statement、 PreparedStatement ;
第四步:執行 SQL 處理結果集,執行 SQL 前如果有引數值就設定引數值 setXXX();
第五步:關閉結果集、關閉會話、關閉連線。
詳細程式碼請看(封裝): https://blog.csdn.net/qq_29542611/article/details/52426006

2.什麼要使用 PreparedStatement?

1、 PreparedStatement 介面繼承 Statement, PreparedStatement 例項包含已編譯的 SQL 語句,所以其執行速度要快於 Statement 物件。
2 、 作 為 Statement 的 子 類 , PreparedStatement 繼 承 了 Statement 的 所 有 功 能 。 三 種 方法 execute、 executeQuery 和 executeUpdate 已被更改以使之不再需要引數
3、在 JDBC 應用中,在任何時候都不要使用 Statement,原因如下:
一、程式碼的可讀性和可維護性.Statement 需要不斷地拼接,而 PreparedStatement 不會。
二、 PreparedStatement 盡最大可能提高效能.DB 有快取機制,相同的預編譯語句再次被呼叫不會再次需要編譯。
三、最重要的一點是極大地提高了安全性.Statement 容易被 SQL 注入,而 PreparedStatementc 傳入的內容不會和 sql 語句發生任何匹配關係。

3. 關係資料庫中連線池的機制是什麼?


前提:為資料庫連線建立一個緩衝池。
1:從連線池獲取或建立可用連線
2:使用完畢之後,把連線返回給連線池
3:在系統關閉前,斷開所有連線並釋放連線佔用的系統資源
4:能夠處理無效連線,限制連線池中的連線總數不低於或者不超過某個限定值。
其中有幾個概念需要大家理解:
最小連線數是連線池一直保持的資料連線。如果應用程式對資料庫連線的使用量不大,將會有大量的資料庫連線源被浪費掉。
最大連線數是連線池能申請的最大連線數。如果資料連線請求超過此數,後面的資料連線請求將被加入到等待佇列中,這會影響之後的資料庫操作。
如果最小連線數與最大連線數相差太大,那麼,最先的連線請求將會獲利,之後超過最小連線數量的連線請求等價於建立一個新的資料庫連線。不過,這些大於最小連線數的資料庫連線在使用完不會馬上被釋放,它將被放到連線池中等待重複使用或是空閒超時後被釋放。
上面的解釋,可以這樣理解:資料庫池連線數量一直保持一個不少於最小連線數的數量,當數量不夠時,資料庫會建立一些連線,直到一個最大連線數,之後連線資料庫就會等待。


三、 Http 協議

4. http 的長連線和短連線


HTTP 協議有 HTTP/1.0 版本和 HTTP/1.1 版本。 HTTP1.1 預設保持長連線(HTTP persistent connection,也翻譯為持久連線),資料傳輸完成了保持 TCP 連線不斷開(不發 RST 包、不四次握手),等待在同域名下繼續用這個通道傳輸資料;相反的就是短連線。
在 HTTP/1.0 中,預設使用的是短連線。也就是說,瀏覽器和伺服器每進行一次 HTTP 操作,就建立一次連線,任務結束就中斷連線。 從 HTTP/1.1 起,預設使用的是長連線, 用以保持連線特性。

5. HTTP/1.1 與 HTTP/1.0 的區別


參考原文: https://blog.csdn.net/forgotaboutgirl/article/details/6936982

6.http 常見的狀態碼有哪些?

200 OK //客戶端請求成功
301 Moved Permanently(永久移除),請求的 URL 已移走。 Response 中應該包含一個 Location URL, 說明資
源現在所處的位置
302 found 重定向
400 Bad Request //客戶端請求有語法錯誤,不能被伺服器所理解
401 Unauthorized //請求未經授權,這個狀態程式碼必須和 WWW-Authenticate 報頭域一起使用
403 Forbidden //伺服器收到請求,但是拒絕提供服務
404 Not Found //請求資源不存在, eg:輸入了錯誤的 URL
500 Internal Server Error //伺服器發生不可預期的錯誤
503 Server Unavailable //伺服器當前不能處理客戶端的請求,一段時間後可能恢復正常


7. GET 和 POST 的區別?

從表面現像上面看 GET 和 POST 的區別:
1. GET 請求的資料會附在 URL 之後(就是把資料放置在 HTTP 協議頭中),以?分割 URL 和傳輸資料,引數之間以&相連,如: login.action?name=zhagnsan&password=123456。 POST 把提交的資料則放置在是 HTTP 包的包體中。
2. GET 方式提交的資料最多隻能是 1024 位元組,理論上 POST 沒有限制,可傳較大量的資料。其實這樣說是錯誤的,不準確的:“GET 方式提交的資料最多隻能是 1024 位元組",因為 GET 是通過 URL 提交資料,那麼 GET 可提交的資料量就跟URL 的長度有直接關係了。而實際上, URL 不存在引數上限的問題, HTTP 協議規範沒有對 URL 長度進行限制。這個限制是特定的瀏覽器及伺服器對它的限制。IE對URL長度的限制是2083 位元組(2K+35)。對於其他瀏覽器,如 Netscape、FireFox 等,理論上沒有長度限制,其限制取決於作業系統的支援。
3.POST 的安全性要比 GET 的安全性高。注意:這裡所說的安全性和上面 GET 提到的“安全”不是同個概念。上面“安全”的含義僅僅是不作資料修改,而這裡安全的含義是真正的 Security 的含義,比如:通過 GET 提交資料,使用者名稱和密碼將明文出現在 URL 上,因為(1)登入頁面有可能被瀏覽器快取, (2)其他人檢視瀏覽器的歷史紀錄,那麼別人就可以拿到你的賬號和密碼了,除此之外,使用 GET 提交資料還可能會造成 Cross-site request forgery 攻擊。Get 是向伺服器發索取資料的一種請求,而 Post 是向伺服器提交資料的一種請求,在 FORM(表單)中, Method預設為"GET",實質上, GET 和 POST 只是傳送機制不同,並不是一個取一個發!
參考原文: https://www.cnblogs.com/hyddd/archive/2009/03/31/1426026.html


8.http 中重定向和請求轉發的區別?

本質區別:轉發是伺服器行為,重定向是客戶端行為。
重定向特點:兩次請求,瀏覽器地址發生變化,可以訪問自己 web 之外的資源,傳輸的資料會丟失。
請求轉發特點:一次強求,瀏覽器地址不變,訪問的是自己本身的 web 資源,傳輸的資料不會丟失。


四、 Cookie 和 Session

9. Cookie 和 Session 的區別

        Cookie 是 web 伺服器傳送給瀏覽器的一塊資訊,瀏覽器會在本地一個檔案中給每個 web 伺服器儲存 cookie。以後瀏覽器再給特定的 web 伺服器傳送請求時,同時會發送所有為該伺服器儲存的 cookie。
        Session 是儲存在 web 伺服器端的一塊資訊。 session 物件儲存特定使用者會話所需的屬性及配置資訊。當用戶在應用程式的 Web 頁之間跳轉時,儲存在 Session 物件中的變數將不會丟失,而是在整個使用者會話中一直存在下去。
Cookie 和 session 的不同點:
1、無論客戶端做怎樣的設定, session 都能夠正常工作。當客戶端禁用 cookie 時將無法使用 cookie。
2、在儲存的資料量方面: session 能夠儲存任意的 java 物件, cookie 只能儲存 String 型別的物件。

10.session 共享怎麼做的(分散式如何實現 session 共享)?


參考原文: https://blog.csdn.net/sxiaobei/article/details/57086489

11.在單點登入中,如果 cookie 被禁用了怎麼辦?

單點登入的原理是後端生成一個 session ID,然後設定到 cookie,後面的所有請求瀏覽器都會帶上 cookie,然後服務端從 cookie 裡獲取 session ID,再查詢到使用者資訊。所以,保持登入的關鍵不是 cookie,而是通過cookie 儲存和傳輸的 session ID,其本質是能獲取使用者資訊的資料。除了 cookie,還通常使用 HTTP 請求頭來傳輸。但是這個請求頭瀏覽器不會像 cookie 一樣自動攜帶,需要手工處理。
 

五、 jsp 技術

12. 什麼是 jsp,什麼是 Servlet? jsp 和 Servlet 有什麼區別?

jsp 本質上就是一個 Servlet,它是 Servlet 的一種特殊形式(由 SUN 公司推出),每個 jsp 頁面都是一個 servlet例項。Servlet 是由 Java 提供用於開發 web 伺服器應用程式的一個元件,執行在服務端,由 servlet 容器管理,用來生成動態內容。一個 servlet 例項是實現了特殊介面 Servlet 的 Java 類,所有自定義的 servlet 均必須實現 Servlet 介面。
區別:
jsp 是 html 頁面中內嵌的 Java 程式碼,側重頁面顯示;
Servlet 是 html 程式碼和 Java 程式碼分離,側重邏輯控制, mvc 設計思想中 jsp 位於檢視層, servlet 位於控制層Jsp 執行機制:如下圖:

JVM 只能識別 Java 類,並不能識別 jsp 程式碼! web 容器收到以.jsp 為副檔名的 url 請求時,會將訪問請求交給tomcat 中 jsp 引擎處理,每個 jsp 頁面第一次被訪問時, jsp 引擎將 jsp 程式碼解釋為一個 servlet 源程式,接著編譯servlet 源程式生成.class 檔案,再有 web 容器 servlet 引擎去裝載執行 servlet 程式,實現頁面互動。
 

13.jsp 有哪些域物件和內建物件及他們的作用?

四大域物件:
(1) pageContext page 域-指當前頁面,在當前 jsp 頁面有效,跳到其它頁面失效
(2) request request 域-指一次請求範圍內有效,從 http 請求到伺服器處理結束,返回響應的整個過程。在這個過程中使用 forward(請求轉發)方式跳轉多個 jsp,在這些頁面裡你都可以使用這個變數
(3) session session 域-指當前會話有效範圍,瀏覽器從開啟到關閉過程中,轉發、重定向均可以使用

(4) application context 域-指只能在同一個 web 中使用,伺服器未關閉或者重啟,資料就有效
九大內建物件:


 


六、 XML 技術

14.什麼是 xml,使用 xml 的優缺點, xml 的解析器有哪幾種,分別有什麼區別?

xml 是一種可擴充套件性標記語言,支援自定義標籤(使用前必須預定義)使用 DTD 和 XML Schema 標準化 XML 結構。
具體瞭解 xml 詳見: http://www.importnew.com/10839.html