大數據開發(Java面試真題-卷三)

大數據開發(Java面試真題)

  • 1、簡要介紹以下JVM有幾種垃圾收集器?
  • 2、Java中Synchronized的底層原理是什么?
  • 3、Java String為什么是不可變的?為什么要設計成不可變?
  • 4、泛型?
  • 5、常用的反射方法?
  • 6、Java集合類型?
  • 7、HashMap原理?轉換成紅黑樹條件?為什么這么設計?
  • 8、Java線程安全的HashMap?ConcurrentHashMap和HashTable的區別?ConcurrentHashMap原理?

1、簡要介紹以下JVM有幾種垃圾收集器?

  1. Serial收集器:Serial收集器是JVM中最古老的一種垃圾回收器,它以單線程方式進行垃圾收集工作,適用于小型或者單核處理器的應用場景。
  2. Parallel收集器:Parallel收集器是Serial收集器的改進版本,它使用多線程進行垃圾收集,提高了垃圾收集的效率,適用于多核處理器的應用常見。
  3. CMS收集器:CMS收集器是一種以獲取最短回收停頓時間為目標的收集器,它通過并發的方式進行垃圾收集,能夠在主程序運行的同時進行垃圾收集,適用于對響應時間有較高要求的應用場景
  4. G1收集器:G1收集器是一種面向服務端應用的垃圾收集器,它將堆內存劃分為多個區域,并根據垃圾產生情況優先回收垃圾角度的區域,可以達到較低的停頓時間和更好的吞吐量。

2、Java中Synchronized的底層原理是什么?

Synchronized是Java中用于實現線程同步的關鍵字,它的底層原理是通過對象監視器(也稱為內部鎖或監視鎖)來實現的。
當一個線程進入synchronized代碼塊時,它會嘗試獲取對應對象的監視器。如果該監視器沒有被其它線程占用,則該線程獲取到監視器并執行代碼塊中的邏輯。如果監視器已經被其它線程占用,該線程就會進入阻塞狀態,等待監視器的釋放
在Java虛擬機中,每個對象都有一個與之關聯的監視器鎖。當一個線程獲取到該對象的監視器鎖時,其它線程就無法同時獲取該對象的監視器鎖,它們會被阻塞直到鎖被釋放。
在方法上適用synchronized關鍵字時,它會對該方法的整個代碼塊進行加鎖,以保證同一時間只有一個線程可以執行該方法。而在代碼塊上使用synchronized關鍵字時,它只會對該代碼塊進行加鎖,其它線程仍然可以同時執行其它非同步代碼塊
需要注意的是,synchronized關鍵字會引入一定的性能開銷,因為每次進入synchronized代碼塊或方法時,都會進行加鎖或解鎖的操作。因此,在使用synchronized時需要權衡線程安全和性能之間的平衡。

3、Java String為什么是不可變的?為什么要設計成不可變?

Java中的String是不可變的,這是因為String類被設計成了不可變的對象。這意味著一旦一個String對象被創建,它的值就不能被修改。

不可變有以下幾個原因:

  1. 線程安全:不可變的特性使得String對象在多線程環境中是安全的。因為它的值不可變,不會被其它線程修改,所以不需要同步控制
  2. 緩存哈希值:String類將哈希值緩存在對象中,因為它是不可變的,所以哈希值只需要計算一次,而不需要每次使用時重新計算。這樣可以提高性能。
  3. 字符串池:Java中的字符串池是為了節省內存而設計的。不可變的String對象可以被共享并重復使用,避免了創建多個相同值得字符串對象。這樣可以減少內存占用,提高性能。
  4. 安全性:字符串作為參數傳遞給一些敏感得API時,不可變的特性可以確保參數的值不會被修改,從而保證數據的安全性。

綜述所述,Java中的String被設計成不可變的主要是為了提高性能、確保線程安全以及節省內存

4、泛型?

泛型是Java中一種參數化類型的概念,它允許我們在編寫類、接口和方法時使用未知的數據類型。通過使用泛型,我們可以創建通用的代碼,可以在不同的數據類型上進行操作,提高代碼的復用性和類型安全性。泛型使用尖括號<>來定義,可以用于類、接口和方法的聲明和實例化中。在使用泛型時,可以指定具體的數據類型,也可以使用通配符來表示未知的數據類型

5、常用的反射方法?

常用的反射方法有:

  1. 獲取Class對象:通過Class.forName(),對象.getClass()、類名.class等方式獲取一個類的Class對象。
  2. 創建實例:通過Class對象的newInstance()方法創建類的實例。
  3. 獲取類的成員變量:通過Class對象的getField()、getDeclaredField()等方法獲取類的公共或私有成員變量。
  4. 獲取類的方法:通過Class對象的getMethod()、getDeclaredMethod()等方法獲取類的公共或私有方法。
  5. 調用方法:通過Method對象的invoke()方法調用方法。
  6. 修改成員變量的值:通過Field對象的set()方法修改成員變量的值。
  7. 調用構造函數:通過Class對象的getConstructor()、getDeclaredConstructor()等方法獲取類的公共或私有構造函數,并通過Constructor對象的newInstance()方法創建類的實例。
    這些方法可以在運行時動態地獲取和操作類的信息,使得我們可以在不知道具體類名地情況下,通過反射機制來調用類地方法、訪問成員變量等

6、Java集合類型?

Java集合類型有以下幾種:

  1. List(列表):List是一個有序的集合,可以包含重復元素。常見的實現類有ArrayList和LinkedList。
  2. Set(集合):Set是一個不允許重復元素的集合。常見的實現類有HashSet和TreeSet。
  3. Map(映射):Map是一種鍵值對的集合,每個鍵只能對應一個值。常見的實現類有HashMap和TreeMap。
  4. Queue(隊列):Queue是一種先進先出(FIFO)的集合。常見的實現類有LinkedList和PriorityQueue。
  5. Stack(棧):Stack是一種后進先出的集合。常見的實現類有Stack。
  6. Vector(向量):Vector是一個動態數組,與ArrayList類似,但是它是線程安全的。

7、HashMap原理?轉換成紅黑樹條件?為什么這么設計?

HashMap是Java中常見的一種數據結構,它基于哈希表實現。具體原理如下:

  1. HashMap內部由一個數組和鏈表(或紅黑樹)組成。數組是HashMap的主體,用于存儲鍵值對。鏈表和紅黑樹用于解決哈希沖突,提高查找效率。
  2. 添加一個鍵值對到HashMap中時,首先根據鍵的hashCode()方法計算出一個哈希值,然后通過哈希值與數組長度取模,得到在數組中的位置。如果該位置上已經存在其它鍵值對,就發生了哈希沖突
  3. 如果發生哈希沖突,會在該位置上的鏈表或紅黑樹上順序查找鍵值對。如果鍵已經存在,則更新對應的值。如果鍵不存在,則在鏈表或紅黑樹的末尾添加新的鍵值對
  4. 鏈表長度超過閾值(默認為8)時,鏈表會轉換為紅黑樹

轉換為紅黑樹的條件如下:
-當鏈表長度達到8時,且當前數組長度大于等于64,HashMap會將鏈表轉換為紅黑樹。
-當紅黑樹節點數量小于等于6時,HashMap會將紅黑樹轉換為鏈表

這樣設計的原因是,當鏈表長度過長時,查找效率會降低,因為需要遍歷鏈表進行查找。而紅黑樹相比鏈表,具有更高效的查找、插入和刪除操作,能夠更好地提高HashMap的性能。同時,對于較小的鏈表,轉換為紅黑樹的開銷反而比鏈表更大,所以在節點數量小于等于6時,會將紅黑樹轉換回鏈表,以節省內存空間

8、Java線程安全的HashMap?ConcurrentHashMap和HashTable的區別?ConcurrentHashMap原理?

Java線程安全的HashMap可以使用ConcurrentHashMap來實現。ConcurrentHashMap是Java并發包中的一個線程安全的哈希表實現,它比傳統的HashTable和同步的HashMap具有更好的并發性能
ConcurrentHashMap和HashTable的區別如下:

  1. 鎖機制ConcurrentHashMap使用了分段鎖(Segment),每個Segment相當于一個小的HashTable,只鎖住當前操作的Segement而不是整個HashTable;而HashTable在每次操作時都鎖住整個HashTable
  2. 并發性ConcurrentHashMap允許多個線程同時讀取,而寫操作會鎖住相關的Segment,使得在并發寫入時性能更好;HashTable在寫操作時需要鎖住整個HashTable,導致并發寫入性能較差。
  3. 擴容機制ConcurrentHashMap在擴容時只需要鎖住相關的Segment,不影響其它Segment的讀寫操作,提高了并發性能;HashTable在擴容時需要鎖住整個HashTable,導致其它線程無法讀寫,性能較差。

ConcurrentHashMap的原理是基于分段鎖(Segment)實現的。它將整個哈希表分成多個小的HashTable(Segment),每個Segment獨立地進行鎖定和擴容操作。這樣可以提高并發性能,允許多個線程同時讀取,而寫操作只需要鎖定相關地Segment,不影響其它Segment的讀寫操作。同時ConcurrentHashMap使用CAS算法來保證并發操作的一致性和線程安全性。

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

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

相關文章

深入Java日志框架及其最佳實踐

概述 在Java應用開發中&#xff0c;日志框架是確保應用穩定性和可觀察性的關鍵組件。它幫助開發者記錄應用的行為、診斷問題&#xff0c;并監控系統的健康狀況。隨著Java生態系統的不斷發展&#xff0c;各種日志框架也應運而生&#xff0c;各有特點和優勢。本文將詳細探討幾個…

redis進階(一)

文章目錄 前言一、Redis中的對象的結構體如下&#xff1a;二、壓縮鏈表三、跳躍表 前言 Redis是一種key/value型數據庫&#xff0c;其中&#xff0c;每個key和value都是使用對象表示的。 一、Redis中的對象的結構體如下&#xff1a; /** Redis 對象*/ typedef struct redisO…

c# .net8 香橙派orangepi + hc-04藍牙 實例

這些使用c# .net8開發&#xff0c;硬件 香橙派 orangepi 3lts和 hc-04藍牙 使用場景&#xff1a;可以通過這個功能&#xff0c;手機連接orangepi進行wifi等參數配置 硬件&#xff1a; 1、帶USB口的linux開發板orangepi 2、USB 轉TTL 中轉接藍牙&#xff08;HC-04) 某寶上買…

Vue的響應式原理是如何實現的

Vue的響應式原理主要**基于JavaScript的Object.defineProperty方法實現**。具體如下&#xff1a; 1. 數據劫持&#xff08;Data Hijacking&#xff09; Vue在初始化時&#xff0c;會遍歷data對象中的所有屬性&#xff0c;并使用Object.defineProperty將這些屬性轉換為getter/s…

Flink:Temporal Table Function(時態表函數)和 Temporal Join

博主歷時三年精心創作的《大數據平臺架構與原型實現&#xff1a;數據中臺建設實戰》一書現已由知名IT圖書品牌電子工業出版社博文視點出版發行&#xff0c;點擊《重磅推薦&#xff1a;建大數據平臺太難了&#xff01;給我發個工程原型吧&#xff01;》了解圖書詳情&#xff0c;…

AR時間序列模型

AR時間序列模型&#xff08;AutoRegressive Time Series Model&#xff09;是一種用于分析和預測時間序列數據的統計模型。該模型假設未來的觀測值與過去的觀測值相關&#xff0c;且該相關性可以通過線性回歸來描述。 AR模型的基本思想是將當前時刻的觀測值表示為過去幾個時刻…

設計模式(十五)狀態模式

請直接看原文:設計模式系列 ------------------------------------------------------------------------------------------------------------------------------- 前言 建議在閱讀本文前先閱讀設計模式&#xff08;十一&#xff09;策略模式這篇文章&#xff0c;雖說狀態…

java.sqlrecoverableexception: io error: the network adapter could not establ

數據庫相關學習資料下載地址&#xff1a; 數據庫相關資料合集 Java SQLRecoverableException: IO Error: The Network Adapter Could Not Establish Connection 在進行Java開發中&#xff0c;經常會遇到與數據庫進行交互的情況。然而&#xff0c;有時候我們可能會遇到java.sq…

Redis過期刪除策略

1、定時刪除&#xff1a; 一旦鍵過期就立即從內存中刪除&#xff0c;節省內存空間&#xff0c;但刪除過程會占用大量CPU時間&#xff0c;可能影響服務器的響應時間和吞吐量。 2、惰性刪除&#xff1a; 并不會立即從內存中刪除過期鍵&#xff0c;而是在需要訪問時才會檢查是否…

【MATLAB】MVMD_ MFE_SVM_LSTM 神經網絡時序預測算法

有意向獲取代碼&#xff0c;請轉文末觀看代碼獲取方式~也可轉原文鏈接獲取~ 1 基本定義 MVMD_MFE_SVM_LSTM神經網絡時序預測算法結合了多變量多尺度分解&#xff08;MVMD&#xff09;、多尺度特征提取&#xff08;MFE&#xff09;、支持向量機&#xff08;SVM&#xff09;和長…

Python爬蟲之爬取并下載嗶哩嗶哩視頻

親自使用過&#xff0c;太好用了 # 導入requests模塊&#xff0c;模擬發送請求 import requests # 導入json import json # 導入re import re# 定義請求頭 headers {Accept: */*,Accept-Language: en-US,en;q0.5,User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6…

小米消息隊列的選型與實踐

之前寫了一篇關于消息隊列的文章&#xff1a;《消息隊列介紹與對比》&#xff0c;本文主要介紹消息隊列在實際工作中的使用情況&#xff08;截止到2023年&#xff0c;因為我2023年離職了&#xff0c;后續的情況不了解了&#xff0c;哈哈&#xff09;。 市面上的多種消息隊列都有…

node問題: command not found: nodemon

如何安裝并使用 nodemon npm i -g nodemon 問題與解決方案&#xff1a; 問題&#xff1a;zsh: command not found: nodemon 解決方案&#xff1a; 在你的 package.json 中加入&#xff1a; "scripts": {"auto": "npx nodemon server.js" }…

單例模式及應用場景

如果希望自己的代碼更優雅、可維護性更高以及更簡潔&#xff0c;往往離不開設計模式這一解決方案。 在JS設計模式中&#xff0c;最核心的思想&#xff1a;封裝變化&#xff08;將變與不變分離&#xff0c;確保變化的部分靈活&#xff0c;不變的部分穩定&#xff09;。 那么來…

[嵌入式系統-36]:龍芯1B 開發學習套件 -5- PMON常見命令

目錄 0. 開機時按c鍵進入pmon模式 &#xff08;自啟動模式時&#xff09; 1、幫助命令 h 2、顯示設備信息 devls 3.重啟&#xff1a;reboot 4、設置環境變量 set/unset 5.查詢環境變量&#xff1a;env 6.網絡設置相關命令&#xff1a; ①設置IP&#xff1a;ifconfig&am…

Linux 基礎IO(1)內存文件

文章目錄 鋪墊文件的系統調用接口文件描述符緩沖區 鋪墊 文件文件內容 文件屬性訪問文件之前&#xff0c;都要先打開文件&#xff0c;而要訪問&#xff0c;修改&#xff0c;編輯文件&#xff0c;文件就必須加載到內存中程序運行起來變成進程&#xff0c;被CPU調度&#xff0c;…

詳解Win 7重置電腦操作步驟

文章目錄 介紹Win 7 重置系統的方法&#xff1a;1.按下鍵盤上的Windows鍵和R鍵&#xff0c;打開運行窗口&#xff0c;輸入sysprep 點擊回車確定。2.之后就會出現如下界面&#xff0c;在這個新打開的窗口中雙擊 sysprep 程序3.選擇【進入系統全新體驗&#xff08;00BE) 】&#…

基于SpringBoot的在線拍賣系統(附項目源碼+論文)

摘要 在線拍賣系統&#xff0c;主要的模塊包括管理員&#xff1b;首頁、個人中心、用戶管理、商品類型管理、拍賣商品管理、歷史競拍管理、競拍訂單管理、留言板管理、系統管理&#xff0c;用戶&#xff1b;首頁、個人中心、歷史競拍管理、競拍訂單管理、留言板管理&#xff0…

Linux重新獲取IP地址

你可以通過重啟客戶端來獲取新的IP地址。可以使用以下命令來重啟DHCP客戶端&#xff1a; sudo dhclient -r # 釋放當前IP sudo dhclient # 獲取新的IP 這將釋放當前的IP地址&#xff0c;并請求新的IP地址。 使用ifdown和ifup命令&#xff1a;另一種方法是使用ifdown和i…

STM32學習和實踐筆記(1): 裝好了的keil μVision 5

2019年3月在淘寶上買了這塊STM32的開發板&#xff0c;學了一段時間后就丟下了&#xff0c;今天重新撿起來&#xff0c;決定好好學習、天天向上。 對照教程&#xff0c;今天先把keil5裝上了。 裝的過程有以下幾點值得記錄下&#xff1a; 1&#xff09;用注冊機時&#xff0c;…