【Java面試】IO和NIO有什麼區別?

来源:https://www.cnblogs.com/mic112/archive/2022/05/26/16313372.html
-Advertisement-
Play Games

IO問題一直是面試的重災區之一 但又是非常重要而且面試必問的知識點 一個工作了7年的粉絲私信我,他去面試了 4家互聯網公司, 有三個公司問他網路IO的問題,另外一個公司問了Netty,結果都沒回答上來。 好吧,對於“IO和NIO的區別”,看看普通人和高手的回答。 普通人: 嗯。。。。。。。。。。 高 ...


IO問題一直是面試的重災區之一

但又是非常重要而且面試必問的知識點

一個工作了7年的粉絲私信我,他去面試了 4家互聯網公司,

有三個公司問他網路IO的問題,另外一個公司問了Netty,結果都沒回答上來。

好吧,對於“IO和NIO的區別”,看看普通人和高手的回答。

普通人:

嗯。。。。。。。。。。

高手:

好的,關於這個問題,我會從下麵幾個方面來回答。

首先,I/O ,指的是IO流, 它可以實現數據從磁碟中的讀取以及寫入。

實際上,除了磁碟以外,記憶體、網路都可以作為I/O流的數據來源和目的地。

在Java裡面,提供了字元流和位元組流兩種方式來實現數據流的操作。

其次,當程式是面向網路進行數據的IO操作的時候,Java裡面提供了Socket的方式來實現。

通過這種方式可以實現數據的網路傳輸。

基於Socket的IO通信,它是屬於阻塞式IO,也就是說,在連接以及IO事件未就緒的情況下,當前的連接會處於阻塞等待的狀態。

image-20220422210331160

如果一旦某個連接處於阻塞狀態,那麼後續的連接都得等待。所以服務端能夠處理的連接數量非常有限。

NIO,是JDK1.4裡面新增的一種NEW IO機制,相比於傳統的IO,NIO在效率上做了很大的優化,並且新增了幾個核心組件。

Channel、Buffer、Selectors。

另外,還提供了非阻塞的特性,所以,對於網路IO來說,NIO通常也稱為No-Block IO,非阻塞IO。

也就是說,通過NIO進行網路數據傳輸的時候,如果連接未就緒或者IO事件未就緒的情況下,服務端不會阻塞當前連接,而是繼續去輪詢後續的連接來處理。

所以在NIO裡面,服務端能夠並行處理的鏈接數量更多。

image-20220422212223083

因此,總的來說,IO和NIO的區別,站在網路IO的視角來說,前者是阻塞IO,後者是非阻塞IO。

以上就是我對這個問題的理解。

總結

在互聯網時代,網路IO是最基礎的技術。

無論是微服務架構中的服務通信、還是應用系統和中間件之間的網路通信,都在體現網路IO的重要性。

如果想獲得一對一的面試指導以及面試資料,可以私信我。

file

版權聲明:本博客所有文章除特別聲明外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自 Mic帶你學架構
如果本篇文章對您有幫助,還請幫忙點個關註和贊,您的堅持是我不斷創作的動力。歡迎關註「跟著Mic學架構」公眾號公眾號獲取更多技術乾貨!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 原文地址:TornadoFx設置保存功能(config和preference使用) 相信大部分的桌面軟體都是存在一個設置的界面,允許用戶進行設置的修改,此修改之後需要保存的本地,若是讓開發者自己實現,還是有些繁瑣 這裡介紹下TornadoFx中提供的一個config對象,可以快速實現設置頁面相關數據 ...
  • Spring Ioc源碼分析系列--Bean實例化過程(一) 前言 上一篇文章Spring Ioc源碼分析系列--Ioc容器註冊BeanPostProcessor後置處理器以及事件消息處理已經完成了對IoC容器啟動方法也就是refresh()方法的簡單分析。但是之前的分析在對容器實例化Bean的過程 ...
  • 服務演變之路 單體應用架構 在剛開始的時候,企業的用戶量、數據量規模都⽐較⼩,項⽬所有的功能模塊都放在⼀個⼯程中編碼、編譯、打包並且部署在⼀個Tomcat容器中的架構模式就是單體應用架構,這樣的架構既簡單實用、便於維護,成本⼜低,成為了那個時代的主流架構⽅式。這時候由於業務以及規模都⽐較⼩,所以⽆論 ...
  • 在後面的漏洞研究的學習中,必須要會的幾個知識點。反射機制和動態代理機制。至於反射的前面已經講到過了,這裡就不做更多的贅述了。反射是通過class文件去獲取對象對象的方法. ...
  • 目錄 一.簡介 二.效果演示 三.源碼下載 四.猜你喜歡 零基礎 OpenGL (ES) 學習路線推薦 : OpenGL (ES) 學習目錄 >> OpenGL ES 基礎 零基礎 OpenGL (ES) 學習路線推薦 : OpenGL (ES) 學習目錄 >> OpenGL ES 轉場 零基礎 O ...
  • 場景說明 現有一個 10G 文件的數據,裡面包含了 18-70 之間的整數,分別表示 18-70 歲的人群數量統計,假設年齡範圍分佈均勻,分別表示系統中所有用戶的年齡數,找出重覆次數最多的那個數,現有一臺記憶體為 4G、2 核 CPU 的電腦,請寫一個演算法實現。 23,31,42,19,60,30,3 ...
  • Conda 創建 Python 虛擬環境不純凈的問題(2021.1.18) 1. 產生環境 Ubuntu 16.04; Conda 4.9.2; Python 3.6; 2. 問題描述 通過 Conda 命令創建 Python 虛擬環境後,利用 pip list 命令查看包列表,發現有很多多餘的包, ...
  • SpringBoot MySQL密碼等敏感信息加密方案(2021.04.27) 一、背景說明 SpringBoot 項目經常將連接資料庫的密碼明文放在配置文件里,安全性就比較低,尤其一些企業對安全性要求很高,因此我們就考慮如何對密碼等敏感信息進行加密。 二、解決方案 通過 Jasypt 對密碼等敏感 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...