面試 Java 基礎八股文十問十答第十五期

面試 Java 基礎八股文十問十答第十五期

作者:程序員小白條,個人博客

相信看了本文后,對你的面試是有一定幫助的!關注專欄后就能收到持續更新!

?點贊?收藏?不迷路!?

1)BIO, NIO, AIO 有什么區別?

  • BIO(Blocking I/O):BIO 是傳統的 Java I/O 模型,它是阻塞的,意味著當一個線程執行 I/O 操作時,它會一直等待直到數據被讀取或寫入完成。這種模型下,每個連接都需要一個獨立的線程來處理,當連接數較大時會導致資源消耗嚴重,性能較差。
  • NIO(Non-blocking I/O):NIO 是 Java 中引入的一種更靈活的 I/O 模型。它提供了通道(Channel)和緩沖區(Buffer)的概念,使得可以使用單個線程管理多個連接。NIO 提供了非阻塞的 I/O 操作,通過選擇器(Selector)可以輪詢多個通道的狀態,當某個通道就緒時,可以進行相應的讀寫操作。相比于 BIO,NIO 可以更高效地處理大量連接。
  • AIO(Asynchronous I/O):AIO 是 Java 7 中引入的一種異步 I/O 模型。它在 NIO 的基礎上進一步提供了異步 I/O 操作的支持,即在進行 I/O 操作時可以指定一個回調函數,在操作完成時自動調用該函數,不需要線程等待。AIO 通常用于處理較大的數據流,例如文件的異步讀寫操作。

2)Files 的常用方法都有哪些?

Java 中的 Files 類提供了一組用于操作文件和目錄的靜態方法,常用的方法包括但不限于:

  • Files.exists(Path path):檢查指定路徑是否存在。
  • Files.createFile(Path path):創建一個新文件。
  • Files.createDirectory(Path dir):創建一個新目錄。
  • Files.copy(Path source, Path target, CopyOption... options):復制文件或目錄。
  • Files.move(Path source, Path target, CopyOption... options):移動文件或目錄。
  • Files.delete(Path path):刪除文件或目錄。
  • Files.readAllBytes(Path path):讀取文件的所有字節。
  • Files.lines(Path path):逐行讀取文件內容。
  • Files.write(Path path, byte[] bytes, OpenOption... options):將字節數組寫入文件。
  • Files.write(Path path, Iterable<? extends CharSequence> lines, Charset cs, OpenOption... options):將字符串集合逐行寫入文件。

3)什么是反射機制?

反射(Reflection)是指在運行時動態地獲取類的信息以及操作類的屬性和方法的能力。在 Java 中,反射機制允許程序在運行時檢查類的屬性和方法,獲取類的構造函數信息,創建類的實例,以及調用類的方法等。Java 的反射 API 主要包括 java.lang.Class 類以及其相關方法,例如 getField()getMethod()getConstructor() 等。

反射機制的主要應用場景包括但不限于:

  • 在運行時動態加載類和創建對象,例如通過類名字符串來加載類并創建對象。
  • 在運行時動態調用類的方法,例如通過方法名字符串來調用方法。
  • 分析類的屬性和方法,例如獲取類的字段、方法、構造函數等信息。
  • 實現通用的框架和工具,例如 Java 的 ORM(對象關系映射)框架和序列化框架。

盡管反射提供了一種強大的機制來操作類的屬性和方法,但由于其涉及到動態類型檢查和動態調用,通常會導致性能較低,并且在編寫代碼時易于出錯。因此,應該在必要時使用反射,避免濫用。

4)反射機制優缺點

優點:

  • 動態性: 反射機制允許在運行時動態地加載類、創建對象、調用方法,從而使得程序的行為可以更加靈活和動態。
  • 擴展性: 反射機制提供了一種強大的擴展機制,允許程序在不修改源代碼的情況下對現有類進行擴展和定制。
  • 靈活性: 反射機制使得程序可以更加靈活地處理各種類型的對象,而不需要提前確定對象的類型。

缺點:

  • 性能開銷: 反射涉及到動態類型檢查和方法調用,通常比直接調用方法要慢,因此可能會帶來一定的性能開銷。
  • 安全性問題: 反射機制可以訪問和修改類的私有屬性和方法,因此可能會破壞封裝性,引起安全漏洞。
  • 可讀性和維護性差: 反射使得程序的結構更加復雜,降低了代碼的可讀性和維護性,使得程序更難以理解和調試。

5)反射機制的應用場景有哪些?

反射機制在許多場景下都有廣泛的應用,包括但不限于:

  • 框架開發: 框架通常需要處理各種類型的對象,并且提供通用的接口供用戶使用,反射機制可以使框架更加靈活和通用。
  • 工具開發: 許多工具在運行時需要加載和操作用戶提供的類,反射機制可以使工具更加靈活和可擴展。
  • ORM(對象關系映射)框架: ORM 框架通常需要在運行時根據類的屬性和數據庫表的字段進行映射,反射機制可以幫助 ORM 框架實現自動映射。
  • 序列化和反序列化: 反射機制可以幫助序列化和反序列化框架在運行時動態地獲取類的屬性信息,從而實現對象的序列化和反序列化。

6)Java 獲取反射的三種方法

在 Java 中獲取反射的三種主要方法包括:

  1. 通過對象的 getClass() 方法: 每個對象都有一個 getClass() 方法,可以返回表示對象所屬類的 Class 對象。例如:

    MyClass obj = new MyClass();
    Class<?> clazz = obj.getClass();
    
  2. 通過類的 .class 屬性: 每個類都有一個 .class 屬性,可以直接獲取表示該類的 Class 對象。例如:

    Class<?> clazz = MyClass.class;
    
  3. 通過 Class 類的 forName() 方法: Class 類提供了一個 forName(String className) 方法,可以根據類的全限定名(包名加類名)來獲取 Class 對象。例如:

    Class<?> clazz = Class.forName("com.example.MyClass");
    

這三種方法都可以用來獲取 Class 對象,然后通過 Class 對象可以獲取類的屬性、方法、構造函數等信息,實現反射的功能。

7)字符型常量和字符串常量的區別

  • 字符型常量: 字符型常量是指用單引號括起來的單個字符,例如 'A''B''1' 等。
  • 字符串常量: 字符串常量是指用雙引號括起來的一個或多個字符組成的序列,例如 "Hello""World""123" 等。

區別在于字符型常量是單個字符,而字符串常量可以包含多個字符組成字符串。

8)什么是字符串常量池?

字符串常量池是 Java 中的一種特殊的存儲區域,用于存儲字符串常量對象。在 Java 中,如果兩個字符串常量的值相同(即字符序列相同),則它們實際上指向字符串常量池中的同一個對象,而不是創建兩個獨立的對象。這樣可以節省內存空間,并提高字符串的比較效率。

9)String 是最基本的數據類型嗎

不是的。在 Java 中,String 是引用數據類型,而不是基本數據類型。基本數據類型包括 byteshortintlongfloatdoublecharboolean,而 String 是由 char 類型組成的對象。

10)String有哪些特性

String 類具有以下特性:

  • 不可變性(Immutable): String 對象一旦被創建,其值就不能被修改。任何對 String 對象的操作都會返回一個新的 String 對象。
  • 線程安全性: 由于不可變性,String 對象是線程安全的,可以在多線程環境下安全地使用。
  • 字符串常量池: Java 中的字符串常量池可以提高字符串的重用率和比較效率。
  • 重載 + 運算符: String 類重載了 + 運算符,可以用于字符串的連接操作。
  • 實現了 Serializable 接口: String 類實現了 Serializable 接口,可以被序列化和反序列化。
  • 實現了 Comparable 接口: String 類實現了 Comparable 接口,可以進行字符串的比較操作。

開源項目地址:https://gitee.com/falle22222n-leaves/vue_-book-manage-system

前后端總計已經 700+ Star,1W+ 訪問!

?點贊?收藏?不迷路!?

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

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

相關文章

簡單實現Transformer的自注意力

簡單實現Transformer的自注意力 關注{曉理紫|小李子}&#xff0c;獲取技術推送信息&#xff0c;如感興趣&#xff0c;請轉發給有需要的同學&#xff0c;謝謝支持&#xff01;&#xff01; 如果你感覺對你有所幫助&#xff0c;請關注我。 源碼獲取&#xff1a;VX關注并回復chatg…

二叉樹的右視圖,力扣

目錄 題目&#xff1a; 我們直接看題解吧&#xff1a; 快速理解解題思路小建議&#xff1a; 審題目事例提示&#xff1a; 解題方法&#xff1a; 解題分析&#xff1a; 解題思路&#xff1a; 代碼實現(DFS)&#xff1a; 代碼1&#xff1a; 補充說明&#xff1a; 代碼2&#xff1…

Vue.js中的$nextTick

其實目前在我現有的開發經歷中&#xff0c;我還沒有實際運用過$nextTick&#xff0c;今天在看書時&#xff0c;學習到了這個東西&#xff0c;所以做個筆記記錄一下。 一、$nextTick是什么&#xff1f; $nextTick 是 Vue提供的一個方法&#xff0c;用于在 DOM 更新之后執行回調…

AI:148-開發一種智能語音助手,能夠理解和執行復雜任務

??點擊這里跳轉到本專欄,可查閱專欄頂置最新的指南寶典~ ?????? 你的技術旅程將在這里啟航! 從基礎到實踐,深入學習。無論你是初學者還是經驗豐富的老手,對于本專欄案例和項目實踐都有參考學習意義。 ??? 每一個案例都附帶關鍵代碼,詳細講解供大家學習,希望…

淺談鉤子方法

何為鉤子方法 鉤子方法&#xff08;Hook methods&#xff09;是一種在面向對象編程中常用的設計模式&#xff0c;也被稱為模板方法模式。在這種模式中&#xff0c;父類定義了一個算法的框架&#xff0c;并且將一些步驟的實現延遲到子類中。子類可以通過重寫這些“鉤子方法”來改…

[技巧]Arcgis之圖斑四至點批量計算

前言 上一篇介紹了arcgis之圖斑四至范圍計算&#xff0c;這里介紹的圖斑四至點的計算及獲取&#xff0c;兩者之間還是有差異的。 [技巧]Arcgis之圖斑四至范圍計算 這里說的四至點指的是圖斑最東、最西、最南、最北的四個地理位置點坐標&#xff0c;如下圖&#xff1a; 四至點…

青山隱隱,敗葉蕭蕭

給定序列需滿足二個條件:本身是質數&#xff0c;相鄰二項之和仍為質數 首先一個偶數2*n不能通過2*k&#xff08;k取整數&#xff09;得到質數。 奇數2*n-12*k2*(nk)-1&#xff0c;可能得到質數 那么若序列中存在偶數&#xff0c;一定不滿足第一個條件&#xff08;特判0,2&am…

STM32進階筆記——復位、時鐘與滴答定時器

本專欄爭取每周三更新直到更新完成&#xff0c;期待大家的訂閱關注&#xff0c;歡迎互相學習交流。 目錄 一、復位1.1 軟件復位1.2 低功耗管理復位 二、時鐘2.1 系統時鐘(SYSCLK)選擇2.2 系統時鐘初始化 三、滴答定時器&#xff08;Systick&#xff09;3.1 SysTick部分寄存器3.…

部署bpmn項目實現activiti流程圖的在線繪制

本教程基于centos7.6環境中完成 github開源項目: https://github.com/Yiuman/bpmn-vue-activiti軟件&#xff1a;git、docker 1. 下載源代碼 git clone https://github.com/Yiuman/bpmn-vue-activiti.git2. 修改Dockerfile文件 聲明基礎鏡像&#xff0c;將項目打包&#xff…

EasyRecovery數據恢復軟件有什么優勢呢?

EasyRecovery數據恢復軟件具有以下優勢&#xff1a; 強大的恢復能力&#xff1a;EasyRecovery采用先進的掃描和恢復技術&#xff0c;能夠深度掃描存儲設備&#xff0c;尋找并恢復因各種原因丟失的數據。無論是誤刪除、格式化、分區損壞還是病毒感染&#xff0c;它都能提供有效…

設計模式(十一)策略模式

請直接看原文:設計模式&#xff08;十一&#xff09;策略模式_某移動支付系統在實現賬戶資金轉入和轉出時需要進行身份驗證,該系統為用戶提供了-CSDN博客 ----------------------------------------------------------------------------------------------------------------…

LeetCode01 - 35.搜索插入位置

一、題目要求 給定一個排序數組和一個目標值&#xff0c;在數組中找到目標值&#xff0c;并返回其索引。如果目標值不存在于數組中&#xff0c;返回它將會被按順序插入的位置。 請必須使用時間復雜度為 O(log n) 的算法 示例 1: 輸入: nums [1,3,5,6], target 5 輸出: 2示…

SpringMVC 學習(十一)之數據校驗

目錄 1 數據校驗介紹 2 普通校驗 3 分組校驗 4 參考文檔 1 數據校驗介紹 在實際的項目中&#xff0c;一般會有兩種校驗數據的方式&#xff1a;客戶端校驗和服務端校驗 客戶端校驗&#xff1a;這種校驗一般是在前端頁面使用 JS 代碼進行校驗&#xff0c;主要是驗證輸入數據…

文物預防性保護系統方案的需求分析

沒有文物保存環境監測&#xff0c;就不能實施有效的文物預防性保護。因此要建立文物預防性保護體系&#xff0c;一定要先有良好的文物狀態監測制度,進而進行科學有效的文物保護管理。所以,導入文物預防性保護監測與調控系統,首先就是要針對文物進行全年溫度、濕度、光照等關鍵參…

使用Zint庫生成一維碼/條形碼

下面代碼是是使用 Zint 庫生成 Code 128 類型的條形碼&#xff0c;并將生成的條形碼保存為 output.bmp 文件。下面是對代碼的詳細解釋&#xff1a; #include 和 #include <zint.h>&#xff1a;這兩行代碼包含了所需的頭文件&#xff0c;分別是標準輸入輸出流的頭文件和 Z…

LeetCode---【鏈表的操作】

目錄 206反轉鏈表【鏈表結構基礎】21合并兩個有序鏈表【遞歸】我的答案【錯誤】自己修改【超出時間限制】在官方那里學到的【然后自己復寫,錯誤】對照官方【自己修改】 160相交鏈表【未理解題目目的】在b站up那里學到的【然后自己復寫,錯誤】【超出時間限制】對照官方【自己修改…

(C語言)qsort函數模擬實現

前言 我們需先了解qsort函數 qsort函數詳解&#xff1a;http://t.csdnimg.cn/rTNv9 qsort函數可以排序多種數據類型&#xff0c;很是神奇&#xff0c;這是為什么&#xff0c;我們在里模擬實現這樣的功能 目錄 1. qsort函數模擬實現 2. 我們使用bubble_sort函數排序整形數…

探究前端的.less樣式文件 css的增強版

前言 .less 文件是一種層疊樣式表&#xff08;CSS&#xff09;預處理器語言的文件格式&#xff0c;簡稱 LESS&#xff08;Leaner Style Sheets&#xff09;。它擴展了 CSS 語言&#xff0c;增加了變量、混合、函數和許多其他技術&#xff0c;使得 CSS 更加易于維護和擴展。 與…

AntDesignVue之a-table中key不唯一問題處理的多種方式

AntDesignVue2之a-table中key不唯一問題處理的多種方式 文章目錄 AntDesignVue2之a-table中key不唯一問題處理的多種方式1. key不唯一問題1. 問題描述2. 解決方法1. 帶冒號的rowKey2 . 帶冒號的rowKey綁定表達式3. 不帶冒號的rowKey屬性 1. key不唯一問題 1. 問題描述 antdv: …

Sunshine v0.21.0 安裝卡住,閃退的問題解決

上期博客講了如何利用 Sunshine 和 Moonlight 實現 iPad 當作 Windows 副屏&#xff0c;用官方 Windows installer 安裝 Sunshine 過程中&#xff0c;遇到了安裝卡住&#xff08;這個是因為需要國外網絡環境&#xff09;&#xff0c;安裝后運行閃退的問題。 Sunshine 下載地址…