1. 程式人生 > >Java相關面試題總結+答案(五)

Java相關面試題總結+答案(五)

exit json cor 常用 padding 狀態 創建 exce 執行

【異常】


74. throw 和 throws 的區別?

  • throw 是真實拋出一個異常;
  • throws 是聲明可能會拋出一個異常。

75. final、finally、finalize 有什麽區別?

  • final:是修飾符,可以修飾類、方法、變量,如果修飾類,此類不能被繼承;如果修飾方法,此方法不能被重寫(override);如果修飾變量,則該變量是不可修改的,即變量變成常量。
  • finally:是 try-catch-finally 最後一部分,表示不論發生什麽情況都會執行(除非在finally 之前執行 System.exit()方法),常用於釋放資源或鎖。
  • finalize:是Object 類的一個方法,在垃圾收集器執行的時候會調用別回收對象的該方法。finalize 機制現在已經不推薦使用。

76. try-catch-finally 中哪個部分可以省略? 

  try-catch-finally 其中 catch 和 finally 都可以被省略,但是不能同時省略,也就是說有 try 的時候,必須後面跟一個 catch 或者 finally。

77. try-catch-finally 中,如果 catch 中 return 了,finally 還會執行嗎?

  finally 一定會執行,即使是 catch 中 return 了,catch 中的 return 會等 finally 中的代碼執行完之後,才會執行。

78. 常見的異常類有哪些?

  • NullPointerException 空指針異常
  • ClassNotFoundException 指定類不存在
  • NumberFormatException 字符串轉換為數字異常
  • IndexOutOfBoundsException 數組下標越界異常
  • ClassCastException 數據類型轉換異常
  • FileNotFoundException 文件未找到異常
  • NoSuchMethodException 方法不存在異常
  • IOException IO 異常
  • SocketException Socket 異常

【網絡】


79. http 響應碼 301 和 302 代表的是什麽?有什麽區別? 

301:永久重定向。

302:暫時重定向。

它們的區別是,301 對搜索引擎優化(SEO)更加有利;302 有被提示為網絡攔截的風險。

80. forward 和 redirect 的區別?  

  forward 是轉發,而 redirect 是重定向,它們的區別如下:

    • 地址欄 url 顯示:foward url 不會發生改變,redirect url 會發生改變;
    • 數據共享:forward 可以共享 request 裏的數據,redirect 不能共享;
    • 效率:forward 比 redirect 效率高。

81. 簡述 tcp 和 udp的區別?

tcp 和 udp 是 OSI 模型中的運輸層中的協議。tcp 提供可靠的通信傳輸,而 udp 則常被用於讓廣播和細節控制交給應用的通信傳輸。

兩者的區別大致如下:

    • tcp 面向連接,udp 面向非連接即發送數據前不需要建立鏈接;
    • tcp 提供可靠的服務(數據傳輸),udp 無法保證;
    • tcp 面向字節流,udp 面向報文;
    • tcp 數據傳輸慢,udp 數據傳輸快;

82. tcp 為什麽要三次握手,兩次不行嗎?為什麽?

  如果采用兩次握手,那麽只要服務器發出確認數據包就會建立連接,但由於客戶端此時並未響應服務器端的請求,那此時服務器端就會一直在等待客戶端,這樣服務器端就白白浪費了一定的資源。若采用三次握手,服務器端沒有收到來自客戶端的再此確認,則就會知道客戶端並沒有要求建立請求,就不會浪費服務器的資源。

83. 說一下 tcp 粘包是怎麽產生的? 

TCP粘包是指發送方發送的若幹包數據到接收方接收時粘成一包,從接收緩沖區看,後一包數據的頭緊接著前一包數據的尾。

tcp 粘包可能發生在發送端或者接收端,分別來看兩端各種產生粘包的原因:

    • 發送端粘包:發送端需要等緩沖區滿才發送出去,造成粘包;
    • 接收方粘包:接收方不及時接收緩沖區的包,造成多個包接收。

84. OSI 的七層模型都有哪些?

  • 物理層:利用傳輸介質為數據鏈路層提供物理連接,實現比特流的透明傳輸。
  • 數據鏈路層:負責建立和管理節點間的鏈路。
  • 網絡層:通過路由選擇算法,為報文或分組通過通信子網選擇最適當的路徑。
  • 傳輸層:向用戶提供可靠的端到端的差錯和流量控制,保證報文的正確傳輸。
  • 會話層:向兩個實體的表示層提供建立和使用連接的方法。
  • 表示層:處理用戶信息的表示問題,如編碼、數據格式轉換和加密解密等。
  • 應用層:直接向用戶提供服務,完成用戶希望在網絡上完成的各種工作。

85. get 和 post 請求有哪些區別? 

  • get 請求會被瀏覽器主動緩存,而 post 不會。
  • get 傳遞參數有大小限制,而 post 沒有。
  • post 參數傳輸更安全,get 的參數會明文限制在 url 上,post 不會。

86. 如何實現跨域?

實現跨域有以下幾種方案:

    • 服務器端運行跨域 設置 CORS 等於 *;
    • 在單個接口使用註解 @CrossOrigin 運行跨域;
    • 使用 jsonp 跨域;

87. 說一下 JSONP 實現原理?

  jsonp:JSON with Padding,它是利用script標簽的 src 連接可以訪問不同源的特性,加載遠程返回的“JS 函數”來執行的。

【設計模式】


88. 說一下你熟悉的設計模式?

  • 單例模式:保證被創建一次,節省系統開銷。
  • 工廠模式(簡單工廠、抽象工廠):解耦代碼。
  • 觀察者模式:定義了對象之間的一對多的依賴,這樣一來,當一個對象改變時,它的所有的依賴者都會收到通知並自動更新。
  • 外觀模式:提供一個統一的接口,用來訪問子系統中的一群接口,外觀定義了一個高層的接口,讓子系統更容易使用。
  • 模版方法模式:定義了一個算法的骨架,而將一些步驟延遲到子類中,模版方法使得子類可以在不改變算法結構的情況下,重新定義算法的步驟。
  • 狀態模式:允許對象在內部狀態改變時改變它的行為,對象看起來好像修改了它的類。

89. 簡單工廠和抽象工廠有什麽區別?

  • 簡單工廠:用來生產同一等級結構中的任意產品,對於增加新的產品,無能為力。
  • 工廠方法:用來生產同一等級結構中的固定產品,支持增加任意產品。
  • 抽象工廠:用來生產不同產品族的全部產品,對於增加新的產品,無能為力;支持增加產品族。

Java相關面試題總結+答案(五)