Java面試小冊(3)

21

【Q】: 什么是Java的SPI機制?

【A】:

  1. SPI 是一種插件機制,用于在運行時動態加載服務的實現。它通過定義接口(服務接口)并提供一種可擴展的方式來讓服務的提供著(實現類)在運行時注入,實現解耦和模塊化設計。
  2. SPI機制的核心概念:
    1. 服務接口:接口或抽象類,定義某個服務的規范或功能。
    2. 服務提供者:實現了服務接口的具體實現類。
    3. 服務加載器:Java提供的工具類,負載動態加載服務的實現類。提供ServiceLoader可以在運行時發現和加載多個服務提供者。
    4. 配置文件:服務提供者通過在META-INF/services/目錄下配置服務接口的文件來聲明自己。這些文件的內容是實現該接口的類的完全限定名。
  1. SPI機制的優勢:
    1. 解耦:接口與實現分類,客戶端不需要依賴具體實現,能夠在運行時靈活加載不同的實現類。
    2. 可擴展性:提供了一種易于擴展的機制,允許后期添加或替換實現類,而不需要修改現有的代碼。

22

【Q】:Java泛型的作用是什么?

【A】:

  1. Java泛型的作業是通過編譯時檢查類型安全,允許程序員編寫更通用和靈活的代碼,避免在運行時發現類型轉換錯誤。
  2. 作用:
    1. 類型安全:泛型運行在編譯時進行類型檢查,確保在使用集合或者其他泛型類時,不會出現類型不匹配的問題,減少了運行時的ClassCastException錯誤。
    2. 代碼重用:泛型使代碼可以適用于多種不同的類型,減少代碼重復,提升可讀性和維護性。
    3. 消除顯式類型轉換:泛型允許在編譯時指定類型參數,從而消除了運行時需要顯示類型轉換的麻煩。

23

【Q】:Java泛型擦除是什么?

【A】:

  1. 泛型擦除指Java編譯時將所有泛型信息刪除的過程,以確保與Java1.4之前的版本保存兼容。泛型參數在運行時會被替換為其上界(通常是Object),這樣一來在運行時無法獲取的實際類型。
  2. 作用:泛型擦除確保了Java代碼的向后兼容性,但它也限制了在運行時對泛型類型的操作。
  3. 運行:由于類型擦除,無法在運行時獲取泛型的實際類型,也不能創建泛型類型的數組或對泛型類型使用 。

24

【Q】:什么是Java泛型的上下界限定符?

【A】:

  1. 用于對泛型類型參數進行范圍限制,主要有上界限定符和下界限定符。
  2. 上界限定符(?extends T):?extends T表示通配符類型必須是T類型或T類型的子類。允許使用T或其子類型作為泛型參數,通常用于讀取操作,確保可以讀取為T或T的子類的對象
  3. 下界限定符(?super T):?super T表示通配符類型必須是T類型或T類型的父類。允許使用T或其父類型作為泛型參數,通常用于寫入操作,確保可以安全地向泛型集合中插入T類型的對象

25

【Q】:Java中的深拷貝和淺拷貝有什么區別?

【A】:

  1. 深拷貝:不復制對象本身,還遞歸復制對象中所有引用的對象。這樣新的對象與原對象完全獨立。
  2. 淺拷貝:只復制對象的引用,而不復制引用指向的實際對象。淺拷貝創建一個新的對象,但它的字段(若是對象類型)指向的是原對象中的相同內存引用。

26

【Q】:什么是Java的Integer緩存池?

【A】:

  1. Java的Integer緩存池:為了提升性能和節省內存。根據實踐發現大部分的數據操作都集中在值比較小的范圍,因為緩存這些對象可以減少內存的分配和垃圾回收的負擔,提升性能。
  2. -128~127范圍內的Integer對象會被緩存和復用。
  3. Java在自動裝箱時,對于值在-128~127之間的int類型,會直接返回一個已經緩存的integer對象,而不是創建新的對象。
  4. 緩存池的使用場景:當基本數據類型int轉化為包裝類型Integer時,若數值在緩存范圍內,返回緩存對象;由于相同范圍內的整數使用同一個緩存對象,使用==可以正確比較它們的地址(引用相同),而不需要使用equals。但是要注意對于超過范圍的Integer對象,==比較的是對象引用,而不是數值。要比較數值,應使用equals方法。

27

【Q】:Java中的類加載過程是怎么樣的?

【A】:

  1. 是把類加載到JVM中,把二進制流存儲到內存中,之后經過一番解析、處理轉化成可用的class類。二進制流可用來源于class文件,或通過字節碼工具生成的字節碼或來自網絡。只要符合格式的二進制流,JVM來著不拒。
  2. 類加載流程分為:加載、連接(驗證、準備、解析)、初始化。

28

【Q】:什么是Java中的BigDecimal?

【A】:

  1. 是Java中提供的一個用于高精度計算的類,屬于java.math包。對浮點數和定點數的精確控制。
  2. 高精度:可以處理任何精度的數值,而不像float和double存在限制。
  3. 不可變性:所有算術運算都會返回新的BigDecimal對象,而不會改原有對象。
  4. 豐富的功能:提供了較多方法,支持各種舍入模式。

29

【Q】:BigDecimal為什么可以保證精度不丟失?

【A】:

  1. 使用了任意進度的整數表示伐,而不是浮動的二進制表示,
  2. 內部使用兩個字段存儲數字,一個是整數部分intVal,另一個是用來表示小數點的位置scale,避免了浮點數轉化過程中可能的精度丟失。

30

【Q】:new String(“”)會創建多少個對象?

【A】:

  1. 會創建1個或2個字符串對象。
  2. 如果字符串常量池中不存在對象的引用,那么它會在堆上創建兩個字符串對象,其中一個字符串對象的引用會被保存在字符串常量池中。

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

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

相關文章

P1150 Peter 的煙

記錄20#include <bits/stdc.h> using namespace std; int main(){int n,k;cin>>n>>k;int cnt0;while(n>k){cntk;nn-k1;}cntn;cout<<cnt;return 0; }突破口每吸完一根煙就把煙蒂保存起來&#xff0c;k&#xff08;k>1&#xff09;個煙蒂可以換一個…

Cursor和Hbuilder用5分鐘開發微信小程序

分享一個5分鐘搞定微信小程序開發的技能&#xff0c;需要用到兩個工具&#xff1a;Cursor和Hbuilder。 第1步、下載HBuilder。Hbuilder可以實現一套代碼直接生成安卓、蘋果、鴻蒙各個平臺APP。訪問Hbuilder的官方網站&#xff0c;HBuilderX-高效極客技巧&#xff0c;選擇適合…

k8s的dashboard

找一個裝有docker的機器&#xff0c;在一個rocky linux的虛擬機里弄拉取一個rancher鏡像建立一個目錄&#xff0c;目的&#xff1a;和里面數據做持久化關聯后臺運行&#xff0c;讓他有權限&#xff0c;8080端口和容器80端口映射&#xff0c;443和443做映射查看一下刪掉&#xf…

橋接模式,打造靈活可擴展的日志系統C++

一、為什么用橋接模式在企業開發中&#xff0c;日志系統幾乎是標配。常見需求&#xff1a;日志有多種類型&#xff08;Info、Warning、Error 等&#xff09;&#xff1b;日志需要支持多種輸出方式&#xff08;控制臺輸出、寫文件、遠程上傳、數據庫存儲等&#xff09;。如果把這…

kafka--基礎知識點--5.3--producer事務

1 事務簡介 Kafka事務是Apache Kafka在流處理場景中實現Exactly-Once語義的核心機制。它允許生產者在跨多個分區和主題的操作中&#xff0c;以原子性&#xff08;Atomicity&#xff09;的方式提交或回滾消息&#xff0c;確保數據處理的最終一致性。例如&#xff0c;在流處理中…

利用DeepSeek實現服務器客戶端模式的DuckDB原型

在網上看到韓國公司開發的一款GooseDB&#xff0c;DuckDB? 的功能擴展分支&#xff0c;具有服務器/客戶端、多會話和并發寫入支持&#xff0c;使用 PostgreSQL 有線協議&#xff0c;但它是Freeware而不是開源&#xff0c;所以讓DeepSeek實現之。 首先把readme頁面發給他翻譯&a…

麥當勞APP逆向

版本 V 7.0.17.0反調試 梆梆企業加固 frida反調試部分代碼 headers {"biz_scenario": "500","biz_from": "1004","User-Agent": "mcdonald_Android/7.0.17.0 (Android)","ct": "102","…

大數據畢業設計選題推薦-基于大數據的結核病數據可視化分析系統-Hadoop-Spark-數據可視化-BigData

?作者主頁&#xff1a;IT畢設夢工廠? 個人簡介&#xff1a;曾從事計算機專業培訓教學&#xff0c;擅長Java、Python、PHP、.NET、Node.js、GO、微信小程序、安卓Android等項目實戰。接項目定制開發、代碼講解、答辯教學、文檔編寫、降重等。 ?文末獲取源碼? 精彩專欄推薦?…

Vue3 視頻播放器完整指南 – @videojs-player/vue 從入門到精通

前言 在 Vue 3 生態中&#xff0c;視頻播放功能是許多應用的核心需求。videojs-player/vue 是一個專門為 Vue 3 設計的視頻播放器組件&#xff0c;基于成熟的 Video.js 庫構建&#xff0c;提供了簡單而強大的視頻播放解決方案。 主要特性 Vue 3 組件化&#xff1a;原生 Vue …

【靶場練習】--DVWA第一關Brute Force(暴力破解)全難度分析

注意&#xff0c;這一關必須要使用Burpsuite來抓包 目錄Low1.抓包2.發送到爆破模塊3.選擇爆破模式爆破模式介紹4.添加載荷5.添加字典6.爆破查看查看源碼Medium查看源碼High1.抓包2.在bp的extensions中找到CSRF Token Tracker&#xff0c;并安裝3.構造字典4.成功爆破查看源碼Imp…

Java語言——排序算法

一、基本概念排序&#xff1a;將n個數字按一定順序排列&#xff08;比如&#xff1a;升序&#xff0c;或者降序&#xff09; ^內部排序 &#xff1a;若整個排序過程不需要訪問外存便能完成&#xff0c;則稱此類排序問題為內部排序 ^外部排序&#xff1a;若參加排序的記錄數量很…

【Linux】人事檔案——用戶及組管理

目錄 1 用戶及組管理 2?用戶及用戶組管理命令 2.1 useradd&#xff1a;建立用戶 useradd命令用于建立用戶&#xff0c;該 2.2 passwd&#xff1a;更改用戶密碼 2.3 usermod&#xff1a;更改用戶信息 2.4 groupadd&#xff1a;建立用戶組 2.5 finger&#xff1a;查找并顯…

給定一個有序的正數數組arr和一個正數range,如果可以自由選擇arr中的數字,想累加得 到 1~range 范圍上所有的數,返回arr最少還缺幾個數。

給定一個有序的正數數組arr和一個正數range&#xff0c;如果可以自由選擇arr中的數字&#xff0c;想累加得 到 1~range 范圍上所有的數&#xff0c;返回arr最少還缺幾個數。 #include <iostream> #include <vector>using namespace std;void func1(std::vector<…

BigemapPro快速添加歷史影像(Arcgis衛星地圖歷史地圖)

這是Esri(Arcgis)官方提供的歷史影像數據&#xff0c;可放心使用。https://livingatlas.arcgis.com/wayback如何快速添加到Bigemap Pro軟件里&#xff0c;詳細步驟如下&#xff1a;復制下面的文本保存為 配置.bmmap,然后拖入軟件就可以了{"BmLayerVersion":"1.0…

[免費]基于Python的Django醫院管理系統【論文+源碼+SQL腳本】

大家好&#xff0c;我是python222_小鋒老師&#xff0c;看到一個不錯的基于Python的Django醫院管理系統&#xff0c;分享下哈。 項目視頻演示 https://www.bilibili.com/video/BV1iPH8zmEut/ 項目介紹 隨著人民生活水平日益增長&#xff0c;科技日益發達的今天&#xff0c;…

MyBatis 從入門到精通(第三篇)—— 動態 SQL、關聯查詢與查詢緩存

在前兩篇博客中&#xff0c;我們掌握了 MyBatis 的基礎搭建、核心架構與 Mapper 代理開發&#xff0c;能應對簡單的單表 CRUD 場景。但實際項目中&#xff0c;業務往往更復雜 —— 比如 “多條件動態查詢”“員工與部門的關聯查詢”“高頻查詢的性能優化” 等。本篇將聚焦 MyBa…

Linux內核中IPv4的BEET模式封裝機制解析

引言 在Linux網絡棧中,IPSec提供了網絡層的數據加密和認證服務。傳統的IPSec支持兩種模式:傳輸模式(Transport Mode)和隧道模式(Tunnel Mode)。然而,這兩種模式各有優缺點:傳輸模式開銷小但無法隱藏原始IP頭;隧道模式提供完全封裝但增加了開銷。 BEET(Bound End-to…

設計模式——創建型模式

什么是設計模式&#xff1f;設計模式是軟件工程中解決常見問題的經典方案&#xff0c;它們代表了最佳實踐和經驗總結。通過使用設計模式&#xff0c;開發者可以創建更加靈活、可維護和可擴展的代碼結構。設計模式不是具體的代碼實現&#xff0c;而是針對特定問題的通用解決方案…

我愛學算法之—— 位運算(上)

常見位運算 對于位運算&#xff1a; &&#xff1a;按位與&#xff0c;有0則0。 |&#xff1a;按位或&#xff0c;有1則1。 ^&#xff1a;按位異或&#xff0c;相同為0、不同為1。&#xff08;無進位相加&#xff09; ~&#xff1a;二進制位按位取反。 對于位運算的常見使用…

智能語音系統

智能語音系統通過技術手段讓機器能夠“聽懂”、“理解”并“回應”人類的語音&#xff0c;是實現人機交互的關鍵技術之一。下面我將為你梳理智能語音系統的核心組成部分、工作原理、應用場景以及面臨的挑戰。&#x1f9e0; 核心技術與工作原理智能語音系統之所以能實現人機交互…