java面試 網絡編程與 Java I/O:技術要點解析

java面試 網絡編程與 Java I/O:技術要點解析

  • 網絡編程與 Java I/O:技術要點解析
    • 一、TCP 和 UDP 的區別
      • TCP(Transfer Control Protocol)
      • UDP(User Datagram Protocol)
      • TCP 的三次握手與四次揮手
    • 二、Java 的幾種 I/O 模型
      • BIO(同步阻塞 I/O)
      • NIO(同步非阻塞 I/O)
      • AIO(異步非阻塞 I/O)
    • 三、Java NIO 的核心組件
      • Channel
      • Buffer
      • Selector
    • 四、select、poll 和 epoll 的區別
      • select
      • poll
      • epoll
    • 五、HTTP 和 HTTPS 的區別
      • HTTP
      • HTTPS
      • HTTPS 的缺點
    • 總結

網絡編程與 Java I/O:技術要點解析

在現代軟件開發中,網絡編程和 I/O 模型是構建高效、可靠系統的核心技術。本文將深入探討 TCP 和 UDP 的區別、Java 的幾種 I/O 模型、Java NIO 的核心組件、多路復用機制(select、poll、epoll)以及 HTTP 和 HTTPS 的差異。這些知識點對于理解網絡通信和提升系統性能至關重要。

一、TCP 和 UDP 的區別

TCP(Transfer Control Protocol)

TCP 是一種面向連接的、可靠的傳輸層通信協議。它類似于打電話,通信雙方必須先建立連接,然后才能進行數據傳輸。TCP 的特點包括:

  • 面向連接:通信前需要建立連接,通信結束后釋放連接。
  • 可靠傳輸:通過序列號、確認應答、超時重傳等機制保證數據的可靠傳輸。
  • 效率較低:由于需要維護連接狀態和進行復雜的錯誤檢測,TCP 的效率相對較低。
  • 占用資源多:TCP 需要維護連接狀態,占用較多的系統資源。

UDP(User Datagram Protocol)

UDP 是一種無連接的、不可靠的傳輸層通信協議。它類似于廣播,發送方無需等待接收方準備好即可發送數據。UDP 的特點包括:

  • 無連接:無需建立連接,發送方直接發送數據報。
  • 不可靠:不保證數據的可靠傳輸,可能會丟失數據。
  • 效率高:由于沒有連接管理和錯誤檢測機制,UDP 的效率較高。
  • 占用資源少:UDP 的協議簡單,占用的系統資源較少。

TCP 的三次握手與四次揮手

TCP 建立連接需要三次握手,斷開連接需要四次揮手。三次握手的過程如下:

  1. 客戶端發送一個 SYN(同步)請求到服務器。
  2. 服務器收到 SYN 后,回復一個 SYN-ACK(同步-確認)響應。
  3. 客戶端收到 SYN-ACK 后,發送一個 ACK(確認)響應,完成連接建立。

如果采用兩次握手,可能會導致連接資源浪費。例如,客戶端發送 SYN 請求后,服務器回復 SYN-ACK,但客戶端可能因網絡問題未收到響應,從而導致服務器端一直等待客戶端的確認,浪費資源。

二、Java 的幾種 I/O 模型

Java 提供了多種 I/O 模型,每種模型適用于不同的場景,各有優缺點。

BIO(同步阻塞 I/O)

BIO 是最基本的 I/O 模型,特點是同步阻塞。客戶端發起請求后,線程會一直等待服務器響應,直到數據讀取完成。BIO 的缺點是可靠性差、吞吐量低,適用于連接較少且固定的場景。在 JDK 1.4 之前,BIO 是唯一的選擇,編程模型簡單。

NIO(同步非阻塞 I/O)

NIO 是 Java 1.4 引入的非阻塞 I/O 模型,特點是同步非阻塞。客戶端發起請求后,線程不會一直等待,而是可以去處理其他任務,直到數據準備好后再進行讀取。NIO 的可靠性較好,吞吐量較高,適用于連接較多且連接較短的場景,例如聊天室。NIO 的編程模型相對復雜。

AIO(異步非阻塞 I/O)

AIO 是 Java 7 引入的異步非阻塞 I/O 模型,特點是異步非阻塞。客戶端發起請求后,線程不會等待,而是繼續執行其他任務,直到操作系統通知數據準備好后再進行處理。AIO 的可靠性和吞吐量都非常高,適用于連接較多且連接較長的場景,例如相冊服務器。AIO 的編程模型相對簡單,但需要操作系統的支持。

三、Java NIO 的核心組件

Java NIO 的核心組件包括 Channel、Buffer 和 Selector,它們共同實現了高效的 I/O 操作。

Channel

Channel 是 NIO 的核心組件之一,類似于傳統 I/O 中的流。它表示一個打開的 I/O 連接,可以用于讀取或寫入數據。每個 Channel 都對應一個 Buffer 緩沖區,用于存儲數據。Channel 可以是非阻塞的,也可以是阻塞的。

Buffer

Buffer 是一個緩沖區,用于存儲數據。它是一個數組,可以存儲不同類型的數據,例如字節、字符、整數等。Buffer 的主要作用是為 Channel 提供數據存儲空間,實現數據的讀寫操作。

Selector

Selector 是 NIO 中的多路復用器,用于管理多個 Channel。它可以通過注冊 Channel 來監聽事件,例如讀事件、寫事件等。當某個 Channel 上發生事件時,Selector 會通知對應的線程進行處理。Selector 的作用是提高 I/O 操作的效率,減少線程的使用。

四、select、poll 和 epoll 的區別

select、poll 和 epoll 是 Linux 操作系統提供的三種多路復用機制,用于管理多個 I/O 事件。它們的主要區別如下:

select

select 是最早的多路復用機制,出現于 1984 年。它通過維護一個文件描述符集合(fd_set)來管理多個 I/O 事件。select 的缺點是:

  • 效率較低:需要遍歷所有文件描述符集合,效率較低。
  • 最大連接數受限:文件描述符集合的大小受限于內核,通常為 1024 或 2048。

poll

poll 是對 select 的改進,出現于 1997 年。它通過鏈表結構管理文件描述符,突破了 select 的最大連接數限制。poll 的缺點是:

  • 效率一般:雖然解決了最大連接數的問題,但仍然需要遍歷所有文件描述符,效率仍然較低。

epoll

epoll 是 Linux 2.6 內核版本引入的多路復用機制,出現于 2002 年。epoll 通過事件回調機制管理文件描述符,只關注用戶關心的事件,減少了用戶空間與內核空間之間的數據拷貝。epoll 的優點是:

  • 效率高:通過紅黑樹結構管理文件描述符,效率非常高。
  • 無連接數限制:不受內核限制,可以支持大量連接。

在 Java NIO 中,Linux 系統默認使用 epoll 機制(如果內核版本為 2.6 或以上),而 Windows 系統使用 WindowsSelectorProvider。

五、HTTP 和 HTTPS 的區別

HTTP 和 HTTPS 是互聯網上常用的兩種網絡通信協議,它們的主要區別如下:

HTTP

HTTP 是一種無狀態的、基于 TCP 的應用層協議,用于瀏覽器和服務器之間的通信。HTTP 的特點包括:

  • 無狀態:每次請求都是獨立的,服務器不會保存客戶端的狀態信息。
  • 傳輸效率高:HTTP 協議簡單,傳輸效率高。
  • 安全性低:HTTP 數據以明文傳輸,容易被竊聽。

HTTPS

HTTPS 是 HTTP 的安全版本,通過 SSL/TLS 加密協議實現數據的安全傳輸。HTTPS 的特點包括:

  • 安全性高:數據通過 SSL/TLS 加密傳輸,防止數據被竊聽。
  • 需要證書:HTTPS 需要申請證書,證書通常需要收費。
  • 默認端口不同:HTTP 默認使用 80 端口,HTTPS 默認使用 443 端口。

HTTPS 的缺點

盡管 HTTPS 提供了更高的安全性,但它也有一些缺點:

  • 握手協議復雜:HTTPS 的握手過程比較復雜,會影響服務的響應速度和吞吐量。
  • 證書體系不完美:HTTPS 的證書體系并不是完全安全的,證書頒發機構(CA)可能會被攻擊。
  • 成本較高:證書需要付費,功能越強大的證書費用越高。

總結

網絡編程和 I/O 模型是現代軟件開發中的關鍵技術。TCP 和 UDP 的選擇取決于應用場景,TCP 更適合可靠傳輸,UDP 更適合高效傳輸。Java 的三種 I/O 模型各有優缺點,BIO 適用于連接較少的場景,NIO 適用于連接較多的場景,AIO 適用于高并發場景。select、poll 和 epoll 是 Linux 提供的多路復用機制,epoll 是效率最高的機制。HTTP 和 HTTPS 的選擇取決于對安全性的需求,HTTPS 提供了更高的安全性,但需要付出更高的成本和性能代價。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/83655.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/83655.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/83655.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

PhpStorm設置中文

環境信息 系統版本:Windows11 22H2 PhpStorm版本:2025.1.1【Build #PS-251.25410.148】 設置中文 PhpStorm并不需要安裝插件或下載相應的漢化包進行漢化 依次點擊點擊: file或右上角設置按鈕→ 進入Settings→ 找到Appearance & Behav…

【監控】Spring Boot 應用監控

這段配置是 Spring Boot 應用中對 Actuator 和 Micrometer 監控系統的配置,用于將應用的指標暴露給 Prometheus 進行收集。下面我將詳細介紹這種配置方式及其提供的指標。 配置說明 這個配置主要涉及 Spring Boot Actuator 和 Micrometer 兩個核心組件&#xff1a…

學習筆記(23): 機器學習之數據預處理Pandas和轉換成張量格式[1]

學習筆記(23): 機器學習之數據預處理Pandas和轉換成張量格式[1] 學習機器學習,需要學習如何預處理原始數據,這里用到pandas,將原始數據轉換為張量格式的數據。 1、安裝pandas pip install pandas 2、寫入和讀取數據 >>創建一個人工…

一臺電腦聯網如何共享另一臺電腦?網線方式

前言 公司內網一個人只能申請一個賬號和一個主機設備;會檢測MAC地址;如果有兩臺設備,另一臺就沒有網;因為是聯想老電腦,共享熱點用不了,但是有一根網線,現在解決網線方式共享網絡; …

Spring Boot 基礎知識全面解析:快速構建企業級應用的核心指南

一、Spring Boot 概述:重新定義 Java 開發 1.1 什么是 Spring Boot? Spring Boot 是基于 Spring 框架的快速開發框架,旨在簡化 Spring 應用的初始搭建及開發過程。它通過 「約定優于配置」(Convention Over Configuration&#…

CentOS-stream-9 Zabbix的安裝與配置

一、Web環境搭建部署Zabbix時,選擇合適的MariaDB、PHP和Nginx版本非常重要,以確保兼容性和最佳性能。以下是建議版本:Zabbix 6.4 MariaDB:官方文檔推薦使用MariaDB 10.3或更高版本。對于CentOS Stream 9,建議使用Maria…

CppCon 2014 學習:Adventures in Updating a Legacy Vintage Codebase

“VINTAGE” 部分是對現實中飛行模擬系統中遺留系統復雜性的描述。以下是對關鍵點的理解與拆解: 飛行模擬系統的背景 多環境、多語言、多硬件: 編程語言: 混用的“遺留語言”:Ada, C, C, Fortran, Jovial, PL/M, Pascal不同語言…

【計算機】計算機存儲器的分類與特性

文章目錄 一、按作用層次分類1. 主存儲器(內存)2. 輔助存儲器(外存)3. 高速緩沖存儲器(Cache) 二、按存儲介質分類1. 半導體存儲器2. 磁存儲技術3. 光存儲發展 三、按存取方式分類1. 隨機存儲器技術細節2. …

Redisson - 實現延遲隊列

Redisson 延遲隊列 Redisson 是基于 Redis 的一款功能強大的 Java 客戶端。它提供了諸如分布式鎖、限流器、阻塞隊列、延遲隊列等高可用、高并發組件。 其中,RDelayedQueue 是對 Redis 數據結構的高階封裝,能讓你將消息延遲一定時間后再進入消費隊列。…

上門服務小程序訂單系統框架設計

一、邏輯分析 上門服務小程序訂單系統主要涉及服務展示、用戶下單、訂單處理、服務人員接單與服務完成反饋等核心流程。 服務展示:不同類型的上門服務(如家政、維修等)需要在小程序中展示詳細信息,包括服務名稱、價格、服務內容介…

Android apk裝機編譯類型: verify、speed-profile, speed與啟動耗時

Android apk裝機編譯類型: verify、speed-profile, speed與啟動耗時 Dex2oat (dalvik excutable file to optimized art file) ,對 dex 文件進行編譯優化,Android 虛擬機可識別的是dex文件,應用運行過程如果每次都將dex文件加載內存&#xff…

winrm登錄失敗,指定的憑據被服務器拒絕

winrm登錄失敗,指定的憑據被服務器拒絕。 異常提示:the specified credentials were rejected by the server 在windows power shell執行 set-executionpolicy remotesigned winrm quickconfig winrm set winrm/config/service/auth {Basic"true…

Unity3D ET框架游戲腳本系統解析

前言 ET框架在Unity3D中實現的GamePlay腳本系統是一種革命性的、基于ECS(實體-組件-系統)架構的設計,它徹底改變了傳統的基于MonoBehaviour的游戲邏輯編寫方式。其核心思想是追求高性能、高解耦、易熱更新,特別適合大型復雜的網絡…

android與Qt類比

一、概念對應關系 Android RecyclerView 組件類比描述Qt 模型 - 視圖組件Qt 類比描述RecyclerView畫板(容器)QAbstractItemView視圖(展示數據的容器,如列表、表格)RecyclerView.Adapter畫布(數據橋梁&…

Jenkins 2.479.1安裝和郵箱配置教程

1.安裝 在JDK安裝并設置環境變量完成后,下載官網對應的war版本,在對應目錄下打開命令行窗口并輸入 java -jar jenkins.war其余參數感興趣可以自行查閱,這里啟動的 jenkins 服務默認占用8080端口,在瀏覽器輸入 localhost:8080進入…

多分辨率 LCD 的 GUI 架構設計與實現

1.1多分辨率顯示系統的挑戰與解決方案 1.1.1 分辨率適配的核心問題 在嵌入式系統中,同時支持不同分辨率的 LCD(如 240160、320480 等)面臨以下挑戰: 布局適配:同一界面元素在不同分辨率下需要調整大小和位置 字體顯示:小分辨率屏幕需要更小的字體,而大分辨率需要更清…

11. MySQL事務管理(上)

1. CURD不加控制&#xff0c;會有什么問題&#xff1f; 火車票售票系統tickets表 id name nums 10 西安<->蘭州 1 客戶端A 客戶端B if (nums > 0) { if (nums > 0) { 賣票 賣票 // update numsnums - 1 update numsnums - 1 } } 當客戶端A檢查還有一張票時&#xf…

Beta分布Dirichlet分布

目錄 Beta分布Dirichlet分布Beta分布&Dirichlet分布從Dirichlet分布生成Beta樣本Beta分布&Dirichlet分布應用 Beta分布 Beta分布是定義在區間 [ 0 , 1 ] [0, 1] [0,1]上的連續概率分布&#xff0c;通常用于模擬概率或比例的隨機變量。Beta分布的概率密度函數&#xff…

嵌入式系統中常用的開源協議

目錄 1、GNU通用公共許可證&#xff08;GPL&#xff09; 2、GNU寬松通用公共許可證&#xff08;LGPL&#xff09; 3、MIT許可證 4、Apache許可證2.0 5、BSD許可證 6、如何選擇合適的協議 在嵌入式系統開發中&#xff0c;開源軟件的使用已成為主流趨勢。從物聯網設備到汽車…

告別延遲,擁抱速度:存儲加速仿真應用的解決方案【1】

需求分析 現代仿真&#xff08;如CFD流體動力學、FEA結構分析、電磁仿真、氣候模擬、自動駕駛場景仿真、芯片設計等&#xff09;會產生PB級甚至EB級的數據。海量數據的生成、處理和存儲&#xff0c;主要體現在以下幾個關鍵方面&#xff1a; 數據量爆炸式增長&#xff1a;高分…