Java基礎及進階

JAVA特性

基礎語法

一、Java程序的命令行工具

在這里插入圖片描述

二、final、finally、finalize

在這里插入圖片描述

三、繼承

在這里插入圖片描述

class 父類 {
//代碼
}class 子類 extends 父類 {
//代碼
}

四、Vector、ArrayList、LinkedList

五、原始數據類型和包裝類

在這里插入圖片描述

六、接口和抽象類

在這里插入圖片描述

JAVA進階

Java引用隊列

在這里插入圖片描述

Object counter = new Object();
ReferenceQueue refQueue = new ReferenceQueue<>();
PhantomReference<Object> p = new PhantomReference<>(counter, refQueue);
counter = null;
System.gc();
try {// Remove是一個阻塞方法,可以指定timeout,或者選擇一直阻塞Reference<Object> ref = refQueue.remove(1000L);if (ref != null) {// do something}
} catch (InterruptedException e) {// Handle it
}

七、JAVA IO

三種IO方式

java.io包

也叫BIO。它基于流模型實現,在進行讀取輸入流或者寫入輸出流操作時,讀、寫動作完成之前,線程會一直阻塞,它們之間的調用是可靠的線性順序優點是代碼比較簡單、直觀,缺點是IO 效率和擴展性存在局限性。

java.nio包

NIO 框架,提供了 Channel、Selector、Buffer 等新的抽象。它可以構建多路復用的、同步非阻塞 IO 程序,同時提供了更接近操作系統底層的高性能數據操作方式。

NIO2

也叫AIO(Asynchronous IO),它是NIO的進一步改進,引入了異步非阻塞 IO 方式。異步 IO 操作基于事件和回調機制,應用操作直接返回,而不會阻塞在那里,當后臺處理完成,操作系統會通知相應線程進行后續工作。

IO 工具類

File

這里是引用

RandomAccessFile

這里是引用

字節流

InputStream和OutputStream。
字符流
Reader和Writer。
補充知識點
Closeable 接口:

try-with-resources、 try-finally

Cleaner 或 finalize 機制:資源釋放的最后把關

在這里插入圖片描述

NIO
1.主要組成

主要由Buffer、Channel、Selector、Charset四部分組成。

Buffer(緩沖區):

NIO 中,數據都是通過 Buffer 處理的; 除了布爾類型,所有原始數據類型都有相應的 Buffer 實現( ByteBuffer、CharBuffer、ShortBuffer、IntBuffer、LongBuffer、FloatBuffer 和 DoubleBuffer)。

Buffer詳細介紹:

Buffer的幾個基本屬性:capacity、position、limit、mark。

capacity:	Buffer的大小,即數組的長度。
position:要操作的數據的起始位置。
limit:操作的限額。(注意,在讀取和寫入時,limit的意義是不同的)
mark:記錄上一次position的位置,但不是必須的。(默認是0)

Channel(通道):

NIO 中被用來支持批量式 IO 操作的一種抽象,可以進行異步的 IO 操作。
常見的 Channel 類有 FileChannel、SocketChannel、ServerSocketChannel 和 DatagramChannel。

Selector(選擇器):

Selector 可以用來實現 Reactor 模式,用于監聽多個 Channel 的事件。因此,可以檢測到注冊在 Selector 上的多個 Channel 中,是否有 Channel 處于就緒狀態,實現了單線程對多 Channel 的高效管理,是javaNIO 實現多路復用的基礎

Charset:

提供 Unicode 字符串定義。

2.NIO的核心

Buffer 和 Channel 之間的交互:數據可以從 Channel 讀取到 Buffer 中,也可以從 Buffer 寫入到 Channel 中。

3.NIO的優點

NIO通過高效地定位就緒的 Channel,高效分配任務。僅select 時是阻塞的,所以可以避免大量客戶端連接時,頻繁切換線程。因此,應用的擴展性有了非常大的提高。

在這里插入圖片描述

異常處理時的基本原則

在這里插入圖片描述

補充概念

同步或異步(synchronous/asynchronous)

同步:當我們進行同步操作時,后續的任務是等待當前調用返回,才會進行下一步。

異步:其他任務不需要等待當前調用返回,通常依靠事件、回調等機制來實現任務間次序關系

阻塞與非阻塞(blocking/non-blocking)

阻塞狀態:無法從事其他任務,只有當條件就緒才能繼續。

非阻塞:不管 IO 操作是否結束,直接返回,相應操作在后臺繼續處理。

序列化(Serialization)

這里是引用

補充知識點

不能一概而論認為同步或阻塞就是低效。

網絡編程中,比如 Socket 通信,都是典型的 IO 操作目標

在這里插入圖片描述

補充

FileSystemProvider
兩種特別的Buffer:Direct Buffer和MappedByteBuffer

DirectBuffer:

DirectBuffer是ByteBuffer的一種特殊形式,用于在堆外(Off-heap)內存中存儲數據。

DirectBuffer創建方法:

調用ByteBuffer的allocateDirect()方法來創建。(不是使用傳統的allocate()方法)

DirectBuffer的主要特點:

特點內容
直接訪問因為內存是在堆外分配的,所以DirectBuffer對象可以通過JNI(Java Native Interface)直接訪問,從而避免了在Java堆和本機堆之間來回復制數據的開銷
堆外內存存儲DirectBuffer對象分配的內存不在Java虛擬機的堆中,而是直接在操作系統的本機內存中分配的
性能優化DirectBuffer適用于需要頻繁訪問大量數據或需要與本地(native)代碼進行交互的場景,它們可以顯著提高數據訪問和操作的效率,因為避免了額外的內存拷貝。

DirectBuffer的使用需要注意:

  • 它們的創建和銷毀通常比普通的堆上的ByteBuffer更昂貴,因為涉及到操作系統的本機內存管理。
  • 對于小數據量的操作,并不一定比普通的堆上操作性能更好,甚至可能更差,因為操作系統在小塊內存分配和釋放上的開銷相對較大。

垃圾收集方面的特殊性。

Buffer的基本操作

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

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

相關文章

PostgreSQL行級安全策略探究

前言 最近和朋友討論oracle行級安全策略(VPD)時&#xff0c;查看了下官方文檔&#xff0c;看起來VPD的原理是針對應用了Oracle行級安全策略的表、視圖或同義詞發出的 SQL 語句動態添加where子句。通俗理解就是將行級安全策略動態添加為where 條件。那么PG中的行級安全策略是怎…

搭建基于 ChatGPT 的問答系統

搭建基于 ChatGPT 的問答系統 &#x1f4e3;1.簡介&#x1f4e3;2.語言模型&#xff0c;提問范式和 token?2.1語言模型?2.2Tokens?2.3Helper function輔助函數&#xff08;提問范式&#xff09; &#x1f4e3;3.評估輸入-分類&#x1f4e3;4.檢查輸入-審核?4.1審核4.1.1 我…

使用UDP通信接收與發送Mavlink2.0協議心跳包完整示例

1.克隆mavlink源碼 https://github.com/mavlink/mavlink.git 2.進入mavlink目錄,安裝依賴 python3 -m pip install -r pymavlink/requirements.txt 3.生成Mavlink的C頭文件 mavlink % python3 -m pymavlink.tools.mavgen --lang=C --wire-protocol=2.0 --output=generated…

1-5歲幼兒胼胝體的表面形態測量

摘要 胼胝體(CC)是大腦中的一個大型白質纖維束&#xff0c;它參與各種認知、感覺和運動過程。盡管CC與多種發育和精神疾病有關&#xff0c;但關于這一結構的正常發育(特別是在幼兒階段)還有很多待解開的謎團。雖然早期文獻中報道了性別二態性&#xff0c;但這些研究的觀察結果…

【Linux網絡】select{理解認識select/select與多線程多進程/認識select函數/使用select開發并發echo服務器}

文章目錄 0.理解/認識回顧回調函數select/pollread與直接使用 read 的效率差異 1.認識selectselect/多線程&#xff08;Multi-threading&#xff09;/多進程&#xff08;Multi-processing&#xff09;select函數socket就緒條件select的特點總結 2.select下echo服務器封裝套接字…

C++ 類和對象 賦值運算符重載

前言&#xff1a; 在上文我們知道數據類型分為自定義類型和內置類型&#xff0c;當我想用內置類型比較大小是非常容易的但是在C中成員變量都是在類(自定義類型)里面的&#xff0c;那我想給類比較大小那該怎么辦呢&#xff1f;這時候運算符重載就出現了 一 運算符重載概念&…

安全防御:防火墻基本模塊

目錄 一、接口 1.1 物理接口 1.2 虛擬接口 二、區域 三、模式 3.1 路由模式 3.2 透明模式 3.3 旁路檢測模式 3.4 混合模式 四、安全策略 五、防火墻的狀態檢測和會話表技術 一、接口 1.1 物理接口 三層口 --- 可以配置IP地址的接口 二層口&#xff1a; 普通二層…

Java面試題:分庫分表

分庫分表 當數據量非常大時,就需要通過分庫分表的方式進行壓力分攤,避免數據庫訪問壓力過大 分庫分表的前提: 業務數據達到一定量級:單表數據量達到1000w或20g 優化解決不了性能問題 分庫分表策略 垂直拆分 垂直分庫 以表為依據,根據業務將不同表拆分到不同庫中 eg:根…

車載終端_RTK定位|4路攝像頭|駕駛輔助系統ADAS定制方案

現代車輛管理行業的發展趨勢逐漸向智能化和高效化方向發展&#xff0c;車載終端成為關鍵的工具之一。在這個背景下&#xff0c;一款特別為車隊管理行業設計的車載終端應運而生。該車載終端采用8寸多點觸控電容屏&#xff0c;搭載聯發科四核處理器&#xff0c;主頻2.0GHz&#x…

如何安裝node.js

Node.js Node.js 是一個基于 Chrome V8 引擎的 JavaScript 運行時環境。 主要特點和優勢&#xff1a; 非阻塞 I/O 和事件驅動&#xff1a;能夠高效處理大量并發連接&#xff0c;非常適合構建高并發的網絡應用&#xff0c;如 Web 服務器、實時聊天應用等。 例如&#xff0c;在…

FeignClient詳解

FeignClient 是 Spring Cloud Open Feign 中的一個注解&#xff0c;它用于定義一個 Feign 客戶端&#xff0c;Feign 是一個聲明式的 Web 服務客戶端&#xff0c;使得編寫 Web 服務客戶端變得更加簡單。以下是 FeignClient 注解的詳細說明&#xff1a; 定義 Feign 客戶端&#x…

網絡安全——防御(防火墻)帶寬以及雙機熱備實驗

12&#xff0c;對現有網絡進行改造升級&#xff0c;將當個防火墻組網改成雙機熱備的組網形式&#xff0c;做負載分擔模式&#xff0c;游客區和DMZ區走FW3&#xff0c;生產區和辦公區的流量走FW1 13&#xff0c;辦公區上網用戶限制流量不超過100M&#xff0c;其中銷售部人員在其…

Swift入門筆記

Swift入門筆記 簡單值控制流函數和閉包對象和類枚舉和結構體并發協議和擴展錯誤處理泛型 簡單值 // 聲明變量 var myVariable 42 myVariable 50// 聲明常量 let myConstant 42// 聲明類型 let implicitInteger 70 let implicitDouble 70.0 let explicitDouble: Double 7…

排序相關算法--3.選擇排序

之前涉及的堆排序就是選擇排序的一種&#xff0c;先進行選擇。 基本選擇排序&#xff1a; 最簡單&#xff0c;也是最沒用的排序算法&#xff0c;時間復雜度高并且還是不穩定的排序方法&#xff0c;項目中很少會用。 過程&#xff1a; 在一個長度為 N 的無序數組中&#xff0c;…

智慧公廁系統助力城市衛生管理

在當今快速發展的城市環境中&#xff0c;城市衛生管理面臨著諸多挑戰。其中&#xff0c;公共廁所的管理一直是一個重要但又常被忽視的環節。然而&#xff0c;隨著科技的不斷進步&#xff0c;智慧公廁系統的出現為城市衛生管理帶來了全新的解決方案&#xff0c;成為提升城市品質…

OrangePi AIpro 淺上手

OrangePi AIpro 淺上手 OrangePi AIpro 介紹開發版介紹硬件規格頂層視圖和底層視圖接口詳情圖 玩轉 OrangePi AIPro燒錄鏡像串口調試連接 WiFissh 連接配置下載源 使用感受優點&#xff1a;缺點或需注意的點&#xff1a; OrangePi AIpro 介紹 開發版介紹 OrangePi AIpro是香橙…

【大語言模型】私有化搭建-企業知識庫-知識問答系統

下面是我關于大語言模型學習的一點記錄 目錄 人工智能學習路線 MaxKB 系統(基于大語言模型的知識問答系統) 部署開源大語言模型LLM 1.CPU模式(沒有好的GPU&#xff0c;算力和效果較差) 2.GPU模式&#xff08;需要有NVIDIA顯卡支持&#xff09; Ollama網絡配置 Ollama前…

【問卷系統】TDucKX更新速覽

TDuck是一款在線表單問卷收集工具&#xff0c;開源地址&#xff1a;https://gitee.com/TDuckApp一款免費的表單問卷系統&#xff1b;可快速創建問卷或業務表單&#xff0c;采用無代碼理念支持開發自定義組件。采用SpringBootVueElementUI技術棧&#xff0c;功能強大界面清新&am…

Catena-x標準解讀:CX-0007 Minimal Data Provider Service Offering v1.0.2 最小數據提供商服務產品

為了更好地理解&#xff0c;最小數據提供者服務也將被稱為“上傳工具”。 對于數據供應工具來說&#xff0c;數據主權的概念尤為重要。數據主權是Catena-X網絡的核心價值觀之一。每個參與者都應該盡可能多地控制自己的數據。這包括 他總是確切地知道他在與誰交換數據。參與者…