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

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

  • 1、請簡要說明Java中equeals()和hashCode()的作用及區別?
  • 2、Java中的四種訪問修飾符及它們之間的區別?
  • 3、請解釋Java中的異常處理機制,包括checked exception和unchecked exception?
  • 4、Java線程池的核心參數有哪些?
  • 5、Java中深拷貝和淺拷貝的區別是什么?
  • 6、Java中ArrayList和LinkedList區別是什么?
  • 7、Java中ArrayList擴容過程是什么?
  • 8、Java中HashMap底層實現是什么?
  • 9、Java中ConcurrentHashMap支持多并發的原理是什么?
  • 10、JVM中一個類加載的過程是什么樣子?

1、請簡要說明Java中equeals()和hashCode()的作用及區別?

equals()方法判斷兩個對象是否相同,在Object類中默認比較兩個對象是否為同一引用。而hashCode()方法返回對象對應的哈希碼值,主要被哈希表使用。

作用
-equals():主要用戶判斷兩個對象內容是否相同(而不是引用地址),可以根據業務需求進行重寫。
-hashCode():主要用于提高對對象的查找和存儲效率,將對象映射為哈希表中的索引

區別

  1. equals()和hashCode()是不同目的所使用的方法,equals()用于判斷對象內容相等性,hashCode()主要用于哈希表存儲
  2. 如果兩個對象調用equals()方法返回true,則它們的hashCode值應該一樣,但反之則不成立

2、Java中的四種訪問修飾符及它們之間的區別?

Java中有四種訪問修飾符:public、protected、private和default(即沒有明確的修飾符)。它們用于限定類、方法和變量對其它類或子類的可見性。

-public:可以被所有類訪問。被public修飾的類、方法和變量都可以在任何地方訪問。
-protected只能在聲明所在類或者子類中使用。被protected修飾的方法和成員變量對于同一包內其它類也是可見的
-private:僅可以在聲明所在類內部使用。私有對象無法從該類外部直接訪問。
-default:沒有明確指定訪問級別,也稱為包級私有訪問權限。默認情況下,只允許同一個包內的其它類進行訪問

3、請解釋Java中的異常處理機制,包括checked exception和unchecked exception?

Java的異常處理機制適用于處理程序運行時可能出現的錯誤和異常情況。Java中的異常可分為兩種類型:checked exception(被檢查的異常)和unchecked exception(未被檢查的異常)
-Checked Exception:這些在編譯時由編譯器強制要求進行捕獲或聲明拋出。例如,‘IOException’、'SQLException’等。如果不對這些異常進行try-catch捕獲或throws聲明拋出,代碼將無法通過編譯。
-Unchecked Exception:這些是在運行時發生且不需要顯式捕獲或聲明拋出。常見的Unchecked Exceptions包括"NullPointerException",'ArrauIndexOutOfBoundsException’等。
對于Checked Exceptions,開發者必須根據具體情況選擇合適的方式來處理它們,比如使用try-catch快來捕獲并處理該類異常;而對于Unchecked Exceptions通常可以通過良好的編程實踐避免其發生,或者選擇適當層次向上拋出以由調用方去負責處理

4、Java線程池的核心參數有哪些?

corePoolSize:線程池的基本大小,即在沒有任務執行時線程池的大小,并且只有在工作隊列滿了的情況下,才會創建超出這個數量的線程。
maximunPoolSize線程池最大線程數。這是線程池可以容納的最大線程數,超出這個數的線程會被拒絕。
workQueue當線程池中的線程都被使用時,新任務會被放在這個隊列中等待被執行。這個參數通常是一個實現了BlockingQueue、LinkedBlockingQueue或SynchronousQueue。
threadFactory:用于創建新線程的工廠。使用這個工廠可以自定義如何創建線程,例如設置線程的名稱、優先級等。
handler當線程池和工作隊列都滿了,用于處理被拒絕的任務。常見的實現有AbortPolicy(直接拋出異常)、CallerRunsPolicy(用調用者的線程執行任務)、DiscardPolicy(靜默丟棄任務)和DiscardOldestPolicy(丟棄隊列中最舊的任務)。
keepAliveTime當線程池中的線程數量超過corePoolSize時,這是多余的空閑線程在被終止前等待新任務的最長的時間
timeUnitkeepAliveTime參數的時間單位,如TimeUnit.SECONDS、TimeUnit.MILLISECONDS等。
這些參數共同決定了線程池的創建、運行和任務處理策略。

5、Java中深拷貝和淺拷貝的區別是什么?

在Java中,深拷貝和淺拷貝是對于對象復制的兩種不同方式。

淺拷貝:是創建一個新對象,該對象的實例變量與原對象相同,如果有引用類型的成員變量,淺拷貝僅僅復制了引用而不是創建新的對象。這意味著原對象和淺拷貝對象會共享相同的引用類型成員變量,對其中一個對象的修改會影響到另一個對象

深拷貝:是創建一個新對象,該對象的所有實例變量都會被復制,并且會為引用類型的成員變量創建新的對象。這意味著原對象和深拷貝對象是完全獨立的,對其中一個對象的修改不會影響到另一個對象
在Java中,可以通過實現Cloneable接口和重寫clone()方法來實現淺拷貝。對于深拷貝,可以通過實現Serializable接口并使用對象序列化和反序列化來實現,或者通過手動復制所有引用類型成員變量的值來實現
需要注意的是,如果引用類型成員變量也實現了Cloneable接口并進行了深拷貝,那么在進行深拷貝時需要在clone()方法中遞歸調用成員變量clone()方法,確保所有層級的引用類型對象都被正確復制。

6、Java中ArrayList和LinkedList區別是什么?

ArrayList和LInkedList是Java中兩種不同的集合類,它們的區別主要體現在以下幾個方面:

  1. 數據結構ArrayList是基于動態數組實現的,通過數組實現元素的存儲和訪問;而LinkedList則是基于雙向鏈表實現的,通過鏈表節點實現元素的存儲和訪問。
  2. 插入和刪除操作ArrayList在尾部進行插入和刪除操作比較高效,因為它使用數組實現,可以直接在尾部進行元素的增刪;而在中間或頭部進行插入和刪除操作時,由于需要移動元素,效率較低。而LinkedList在任意位置進行插入和刪除操作效率較高,因為它只需要更改節點的指針即可。
  3. 隨機訪問ArrayList支持通過下標進行隨機訪問,可以通過索引快速定位元素;而LinkedLisk不支持直接通過下標訪問,需要從頭節點或尾節點開始遍歷鏈表,直到找到對應位置的元素。
  4. 內存訪問ArrayList在存儲元素時需要預留一定的空間,當元素數超過預留空間時,需要進行動態擴容;而LinkedList則不需要進行擴容操作,但是每個節點需要存儲額外的指針信息,相對于ArrayList來說占用的內存較多。

綜上所述,如果需要頻繁進行插入和刪除操作,并且不需要頻繁隨機訪問元素,可以選擇使用LinkedList;如果需要頻繁隨機訪問元素,可以選擇使用ArrayList

7、Java中ArrayList擴容過程是什么?

  1. 在創建ArrayList對象時,默認會創建一個初始容量為10的數組
  2. 當添加新元素時,如果當前數組已滿(即元素個數等于數組容量),則會觸發擴容操作
  3. 擴容操作會創建一個新的數組,新數組的容量是原數組容量的1.5倍(JDK1.4之前為原容量的2倍)
  4. 將原數組中的元素逐個復制到新數組中。
  5. 更新ArrayList內部的引用指向新數組
  6. 新元素添加到新數組中

8、Java中HashMap底層實現是什么?

Java中HashMap底層實現是通過哈希表(HashTable)和鏈表(LinkedList)結合的方式來實現的。具體來說,HashMap內部維護了一個數組,數組的每個元素是一個鏈表的頭節點。當我們往HashMap中插入鍵值對時,首先會根據鍵的哈希值計算出在數組中的位置,然后將該鍵值對插入到對應鏈表的末尾。如果發生哈希沖突,即多個鍵的哈希值相同時,會將新的鍵值對插入到鏈表的頭部。當鏈表的長度超過一定閾值(默認為8),鏈表就會轉化為紅黑樹,以提高查詢效率。在進行查詢操作時,根據鍵的哈希值找到對應鏈表或紅黑樹,然后再遍歷鏈表或搜索紅黑樹,找到對應值。這種底層實現方式使得HashMap再插入、刪除和查找操作上都具有較高的效率。

9、Java中ConcurrentHashMap支持多并發的原理是什么?

ConcurrentHashMap是Java中線程安全的哈希表實現,它支持多并發操作的原理主要有以下幾點:

  1. 分段鎖:ConcurrentHashMap內部將數據分成多個段,每個段都可以獨立地進行加鎖和解鎖操作。這樣不同的線程可以同時訪問不同的段,從而提高并發能力。
  2. 鎖分離:與傳統的同步容器不同,ConcurrentHashMap的讀操作并不需要加鎖,多個線程可以同時進行讀操作,只要寫操作需要加鎖。這樣可以避免不必要的阻塞,提高了并發讀的效率。
  3. CAS(比較并交換)操作:ConcurrentHashMap使用了CAS操作來保證線程安全。在并發寫操作時,通過CAS操作來實現無鎖的數據更新
  4. 紅黑樹:ConcurrentHashMap中的每個段內部使用了紅黑樹來存儲數據,當鏈表長度超過閾值時,會將鏈表轉化為紅黑樹,這樣可以保證在最壞的情況下仍然有較高的性能。

10、JVM中一個類加載的過程是什么樣子?

  1. 加載:類加載的第一步是加載,即通過類的全限定名找到對應的二進制字節碼文件。這個過程可以通過類加載器完成,類加載器會根據類的名稱定位到類文件,并將其讀取到內存中
  2. 驗證:在加載完成后,JVM會對加載的類進行驗證,確保類文件的字節碼符合JVM規范,不會危害JVM的安全。驗證的過程包括文件格式驗證、元數據驗證、字節碼驗證以及符號引用驗證。
  3. 準備:在驗證通過后,JVM會為類的靜態成員遍歷分配內存空間,并設置默認初始值。這個過程并不會為實例變量分配空間,只是為靜態變量分配。
  4. 解析:解析階段是將符號引用替換為直接引用的過程。符號引用是一種編譯時的引用,直接引用是在運行時可直接指向內存地址的引用。解析過程包括將常量池中的符號引用替換為直接引用、將類、方法、字段等符號解析為具體的內存地址
  5. 初始化:在準備階段完成后,JVM會開始執行類的初始化過程。類初始化時會執行類的靜態代碼塊和靜態變量的賦值操作。這個過程是類加載的最后一個階段。
  6. 使用:類加載完成后,就可以使用該類創建對象、調用方法等操作。

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

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

相關文章

Linux 學習筆記(10)

十、 進程管理 進程就是運行中的程序,一個運行著的程序,可能有多個進程。 比如 LinuxSir.Org 所用的 WWW 服務器是 apache 服務器,當管理員啟動服務后,可能會有好多人來訪問,也就是說許多用戶來同時請 求 htt…

QT debug編譯失敗:xxx/bin/ld.exe: cannot find -lxxd1

原因:由于編譯時,使用debug模式下,動態庫沒有對應的lxxd1中的xx庫 解決方案1:改為release編譯; 解決方案2:在引用的三方pri文件中,去掉多余的d #修改前 if(!debug_and_release|build_pass):CON…

沃德的背包

題目描述 沃德進入源碼世界的路上有很多寶石,可是沃德的背包只能背總重量不超過m的寶石,路上一共有n個寶石,每個寶石的重量為wi,請你幫沃德選擇盡量多的寶石裝進背包,請注意寶石的總重量不超過m。 輸入描述 第一行輸…

Django官網項目 二

官網地址:Writing your first Django app, part 2 | Django documentation | Django 創建模組: 注冊model (bug:沒有加后面的逗號) 在manage.py 的目錄下: python manage.py makemigrations polls pyth…

redis09 集群(cluster)

思維草圖 為什么要使用集群 單臺redis內存容量的限制單臺redis并發寫量太大有性能瓶頸 redis集群認識 redis集群是對redis的水平擴容,即啟動N個redis節點,將整個數據分布存儲在這個N個節點中,每個節點存儲總數據的1/N。 如下圖&#xff1…

C++ 根據公式計算橢圓任意點到中心的距離

#include <iostream> using namespace std;double fact(int x) //定義階乘函數。注意是double類型 {double y x; //注意是double類型for (int i x-1; i > 0; i--)y * i;return y; };double My_sin(int x) //定義sin函數。注意是double類型 {double y 0; //注意是do…

【視頻圖像取證篇】Amped FIVE專業法醫圖像和視頻增強軟件之模糊圖像去隔行功能

【視頻圖像取證篇】Amped FIVE專業法醫圖像和視頻增強軟件之模糊圖像去隔行功能 法醫圖像和視頻增強軟件&#xff0c;專業又強大&#xff01;&#xff01;&#xff01;超過 140 種過濾器和工具&#xff0c;用于分析、恢復和增強數字圖像和視頻。Amped FIVE能夠穩定抖動的視頻&…

Linux:ansible-playbook配置文件(劇本)(進階)

Linux&#xff1a;ansible-playbook配置文件&#xff08;劇本&#xff09;_ansible-playbook -i參數-CSDN博客https://blog.csdn.net/w14768855/article/details/132579492?ops_request_misc%257B%2522request%255Fid%2522%253A%2522170930036016800215061982%2522%252C%2522s…

LaTeX排版論文的常見問題匯總(持續更新中)

文章目錄 LaTeX排版論文的常見問題匯總&#xff08;持續更新中&#xff09;1.如何上傳期刊或會議提供的LaTeX模板&#xff1f;2.模板中各文件的說明3.LaTeX中如何設置字體大小&#xff1f;3.1如何設置表格中的字體大小&#xff1f;3.2如何設置表格、圖片標題的字體大小&#xf…

A/D轉換

硬件電路模型 模數轉換代碼 main.c #include <REGX52.H> #include "LCD1602.h" #include "Delay.h" #include "XPT2046.h"unsigned int ADValue; int main(){LCD_Init();LCD_ShowString(1,1,"ADJ NTC RG");while(1){ADValue …

什么是Vue的服務端渲染(SSR)?它有什么作用?

Vue的服務端渲染&#xff08;SSR&#xff09;是指將Vue組件在服務器端進行渲染&#xff0c;然后將已經渲染好的頁面返回給瀏覽器&#xff0c;相比于傳統的客戶端渲染&#xff0c;SSR可以更好地優化SEO和加速首屏加載速度。在傳統的客戶端渲染中&#xff0c;瀏覽器需要加載所有的…

【MySQL系列】在 MacOS 上安裝 MySQL

在 MacOS 上有兩種方式安裝 MySQL 服務器&#xff1a;通過 brew 安裝和通過安裝包安裝。 文章目錄 1、通過 brew 安裝 MySQL1.1、安裝 MySQL1.2、啟動 MySQL 服務器1.3、配置 MySQL 服務器1.4、MySQL 服務器管理命令 2、通過安裝包安裝 MySQL2.1、下載安裝包2.2、安裝 MySQL2.3…

深入理解快速排序算法:從原理到實現

目錄 1. 引言 2. 快速排序算法原理 3. 快速排序的時間復雜度分析 4. 快速排序的應用場景 5. 快速排序的優缺點分析 5.1 優點&#xff1a; 5.2 缺點&#xff1a; 6. Java、JavaScript 和 Python 實現快速排序算法 6.1 Java 實現&#xff1a; 6.2 JavaScript 實現&#…

30、類和接口

文章目錄 接口概念接口和類之間有何關系&#xff1f; 可以使用接口來約束類接口繼承接口接口還可以繼承類接口為什么可以繼承類內層原因&#xff1a;接口為什么可以繼承類 用得出的結論解釋最初的demo接口繼承類的一些限制 接口概念 接口&#xff08;Interfaces&#xff09;可…

【大廠AI課學習筆記NO.61】環境部署的選擇

主要是選擇單機和分布式、生產和開發環境的規劃等。 開發環境、測試環境、預發布環境和生產環境是軟件開發和部署過程中常見的幾個環境&#xff0c;它們各自的定義、區別、聯系以及實現的關鍵技術如下&#xff1a; 1. 開發環境&#xff08;Development Environment&#xff09…

Ai 快捷鍵學習

Ai 快捷鍵學習 Ait 鼠標滾輪 實現頁面的放大和縮小 空格鼠標左鍵 抓手工具 ctrl r 調出標尺&#xff0c;可以通過標尺來對其圖片 ctrl &#xff1b; 隱藏標尺 ctrl ‘ 調用網格標尺 再按一次就是取削 ctrl shiftz 反向撤回 tab 快速全屏 ctsls / ctrlshift…

完全解析淘寶天貓詳情接口API:購物小白也能秒變高手

在如今的電商領域中&#xff0c;淘寶和天貓是最為重要和熱門的平臺之一。作為購物平臺的用戶&#xff0c;我們通常只是瀏覽商品的頁面&#xff0c;點擊購買和支付&#xff0c;卻未能深入了解背后的技術信息。然而&#xff0c;淘寶天貓詳情接口API的了解和運用&#xff0c;聯訊數…

力扣hot4--雙指針

題目&#xff1a; 雙指針想法&#xff1a; i 指針在數組不為 0 的地方停留&#xff0c;j 指針在每個地方停留&#xff0c;依次交換 i 和 j 指針。當 i 指針遍歷完所有數組元素時&#xff0c;j 指針指向的元素及后面的元素都為0。 代碼如下&#xff1a; C版本 class Solution …

冒泡、插入、希爾、選擇、堆排序、快速排序(附源碼)

目錄 插入排序&#xff1a; 核心思想&#xff1a; 時間復雜度&#xff1a; 冒泡排序&#xff1a; 核心思想&#xff1a; 時間復雜度&#xff1a; 希爾排序&#xff1a; 核心思想&#xff1a; 時間復雜度&#xff1a; 選擇排序&#xff1a; 核心思想&#xff1a; 時間…

告別手動填寫邀請碼,這款App數據統計工具幫你輕松實現

在移動互聯網時代&#xff0c;App的推廣和運營已成為各大企業的必修課。然而&#xff0c;面對錯綜復雜的推廣渠道和浩如煙海的數據&#xff0c;如何精準地追蹤用戶來源、優化推廣策略&#xff0c;一直是困擾著運營者的難題。今天&#xff0c;我們就來聊聊一款能夠幫助你輕松解決…