1. 程式人生 > >Java面試題(1)

Java面試題(1)

1.說一下轉發(Forward)和重定向(Redirect)的區別 答:①轉發是伺服器行為,重定向是客戶端行為 ②剩下的區別如下圖:在這裡插入圖片描述 2. TCP 三次握手和四次揮手 在這裡插入圖片描述 簡單示意圖: 在這裡插入圖片描述

  • 客戶端–傳送帶有 SYN 標誌的資料包–一次握手–服務端
  • 服務端–傳送帶有 SYN/ACK 標誌的資料包–二次握手–客戶端
  • 客戶端–傳送帶有帶有 ACK 標誌的資料包–三次握手–服務端

為什麼要三次握手 三次握手的目的是建立可靠的通訊通道,說到通訊,簡單來說就是資料的傳送與接收,而三次握手最主要的目的就是雙方確認自己與對方的傳送與接收是正常的。

第一次握手:Client 什麼都不能確認;Server 確認了對方傳送正常,自己接收正常。

第二次握手:Client 確認了:自己傳送、接收正常,對方傳送、接收正常;Server 確認了:自己接收正常,對方傳送正常

第三次握手:Client 確認了:自己傳送、接收正常,對方傳送、接收正常;Server 確認了:自己傳送、接收正常,對方傳送接收正常

所以三次握手就能確認雙發收發功能都正常,缺一不可。

為什麼要傳回 SYN 接收端傳回傳送端所傳送的 SYN 是為了告訴傳送端,我接收到的資訊確實就是你所傳送的訊號了。

SYN 是 TCP/IP 建立連線時使用的握手訊號。在客戶機和伺服器之間建立正常的 TCP 網路連線時,客戶機首先發出一個 SYN 訊息,伺服器使用 SYN-ACK 應答表示接收到了這個訊息,最後客戶機再以 ACK(Acknowledgement[漢譯:確認字元 ,在資料通訊傳輸中,接收站發給傳送站的一種傳輸控制字元。它表示確認發來的資料已經接受無誤。 ])訊息響應。這樣在客戶機和伺服器之間才能建立起可靠的TCP連線,資料才可以在客戶機和伺服器之間傳遞。

傳了 SYN,為啥還要傳 ACK 雙方通訊無誤必須是兩者互相傳送資訊都無誤。傳了 SYN,證明發送方(主動關閉方)到接收方(被動關閉方)的通道沒有問題,但是接收方到傳送方的通道還需要 ACK 訊號來進行驗證。

雙方通訊無誤必須是兩者互相傳送資訊都無誤。傳了 SYN,證明發送方(主動關閉方)到接收方(被動關閉方)的通道沒有問題,但是接收方到傳送方的通道還需要 ACK 訊號來進行驗證。

TCP的四次揮手 示意圖如下: 在這裡插入圖片描述 舉個例子:A 和 B 打電話,通話即將結束後,A 說“我沒啥要說的了”,B回答“我知道了”,但是 B 可能還會有要說的話,A 不能要求 B 跟著自己的節奏結束通話,於是 B 可能又巴拉巴拉說了一通,最後 B 說“我說完了”,A 回答“知道了”,這樣通話才算結束。

3.常見http狀態碼 在這裡插入圖片描述 HTTP請求、響應報文格式: HTTP請求報文主要由請求行、請求頭部、請求正文3部分組成 HTTP響應報文主要由狀態行、響應頭部、響應正文3部分組成 詳細內容可以參考:https://blog.csdn.net/a19881029/article/details/14002273

4. 為什麼要使用索引?索引這麼多優點,為什麼不對錶中的每一個列建立一個索引呢?索引是如何提高查詢速度的?說一下使用索引的注意事項?Mysql索引主要使用的兩種資料結構?什麼是覆蓋索引?

為什麼要使用索引?

①通過建立唯一性索引,可以保證資料庫表中每一行資料的唯一性。 ②可以大大加快 資料的檢索速度(大大減少的檢索的資料量), 這也是建立索引的最主要的原因。 ③幫助伺服器避免排序和臨時表 ④將隨機IO變為順序IO ⑤可以加速表和表之間的連線,特別是在實現資料的參考完整性方面特別有意義。

索引這麼多優點,為什麼不對錶中的每一個列建立一個索引呢? ①當對錶中的資料進行增加、刪除和修改的時候,索引也要動態的維護,這樣就降低了資料的維護速度。 ②索引需要佔物理空間,除了資料表佔資料空間之外,每一個索引還要佔一定的物理空間,如果要建立聚簇索引,那麼需要的空間就會更大。 ③建立索引和維護索引要耗費時間,這種時間隨著資料量的增加而增加。

5.執行緒間的幾種通訊方式知道不? 1、鎖機制 互斥鎖:提供了以排它方式阻止資料結構被併發修改的方法。 讀寫鎖:允許多個執行緒同時讀共享資料,而對寫操作互斥。 條件變數:可以以原子的方式阻塞程序,直到某個特定條件為真為止。對條件測試是在互斥鎖的保護下進行的。條件變數始終與互斥鎖一起使用。 2、訊號量機制:包括無名執行緒訊號量與有名執行緒訊號量

3、訊號機制:類似於程序間的訊號處理。

執行緒間通訊的主要目的是用於執行緒同步,(所以執行緒沒有像程序通訊中用於資料交換的通訊機制????括號裡的有點不理解)。

6.簡單介紹一下bean。知道Spring的bean的作用域與生命週期嗎? 在這裡插入圖片描述

7.SpringMVC 原理了解嗎? 在這裡插入圖片描述 客戶端傳送請求-> 前端控制器 DispatcherServlet 接受客戶端請求 -> 找到處理器對映 HandlerMapping 解析請求對應的 Handler-> HandlerAdapter 會根據 Handler 來呼叫真正的處理器開處理請求,並處理相應的業務邏輯 -> 處理器返回一個模型檢視 ModelAndView -> 檢視解析器進行解析 -> 返回一個檢視物件->前端控制器 DispatcherServlet 渲染資料(Moder)->將得到檢視物件返回給使用者