Java面試高頻問題(1-5)

?一、HashMap實現原理與并發問題

?核心機制

1. 哈希沖突解決方案:采用數組+鏈表+紅黑樹結構(JDK1.8+),當鏈表長度超過閾值(默認8)時轉為紅黑樹,提升查詢效率

2. 擴容機制:當元素數量超過負載因子(0.75)*容量時,觸發擴容為原數組2倍,rehash過程涉及數據遷移

3. 并發隱患:多線程環境下可能導致環形鏈表(JDK1.7)或死循環(JDK1.8之前版本)

?

java

// 并發修改異常示例

Map<Integer, String> map = new HashMap<>();

new Thread(() -> map.put(1, "A")).start();

new Thread(() -> map.put(2, "B")).start(); // 可能拋出ConcurrentModificationException

?

二、線程池參數配置與拒絕策略

?核心參數解析

java

ExecutorService executor = new ThreadPoolExecutor(

? ? corePoolSize, // 核心線程數

? ? maximumPoolSize, // 最大線程數

? ? keepAliveTime, // 空閑線程存活時間

? ? TimeUnit.SECONDS,

? ? new LinkedBlockingQueue<>(queueCapacity), // 任務隊列

? ? new ThreadPoolExecutor.CallerRunsPolicy() // 拒絕策略

);

?

?關鍵點

1. 隊列選擇:SynchronousQueue適合高吞吐場景,LinkedBlockingQueue適合任務執行時間差異大的場景

2. 拒絕策略:

? ?- AbortPolicy(默認):直接拋出RejectedExecutionException

? ?- CallerRunsPolicy:由提交線程執行任務

? ?- DiscardOldestPolicy:丟棄隊列頭部任務

? ?- DiscardPolicy:靜默丟棄任務

?

?三、JVM內存模型與垃圾回收

?內存分區

1. 堆內存:新生代(Eden+S0/S1)與老年代

2. 方法區:存儲類元數據(JDK8后使用元空間)

3. 本地方法棧:執行Native方法

4. 程序計數器:線程私有執行指針

?

?垃圾回收算法

- 標記-清除:基礎算法,產生內存碎片

- 復制算法:新生代常用,分From/To空間

- 標記-整理:老年代適用,解決碎片問題

- 分代收集:結合不同區域特點的混合策略

?

??四、異常處理機制與最佳實踐

?三類異常

1. Checked Exception:編譯期檢查異常(IOException)

2. RuntimeException:運行時異常(NullPointerException)

3. Error:嚴重系統錯誤(OutOfMemoryError)

?

?處理原則

1. 避免捕獲過于寬泛的Exception

2. finally塊中避免資源泄露

3. try-with-resources處理自動關閉資源

?

java

// 正確的資源管理示例

try (FileInputStream fis = new FileInputStream("test.txt")) {

? ? // 業務邏輯

} catch (IOException e) {

? ? logger.error("文件讀取失敗", e);

}

?

?五、設計模式面試題精講

?工廠模式

- 簡單工廠:通過參數決定創建對象類型

- 抽象工廠:生產產品族,符合開閉原則

?

?單例模式

1. 餓漢式:類加載時初始化

2. 雙重校驗鎖:volatile+雙重檢查保證線程安全

3. 靜態內部類:利用類加載機制保證線程安全

?

java

// 雙重校驗鎖實現

public class Singleton {

? ? private static volatile Singleton instance;

? ??

? ? public static Singleton getInstance() {

? ? ? ? if (instance == null) {

? ? ? ? ? ? synchronized (Singleton.class) {

? ? ? ? ? ? ? ? if (instance == null) {

? ? ? ? ? ? ? ? ? ? instance = new Singleton();

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }

? ? ? ? }

? ? ? ? return instance;

? ? }

}

?

?

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

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

相關文章

Genspark:重新定義AI搜索與代理的全能型工具

在當今快速發展的AI技術領域&#xff0c;搜索工具正在經歷前所未有的變革。Genspark&#xff0c;這家由前百度高管景鯤和朱凱華創立的AI公司&#xff0c;為我們帶來了全新的AI代理引擎體驗。作為一位專注于AI工具分享的博主&#xff0c;今天我將為大家詳細介紹這款強大的工具&a…

工作記錄3

前言: 繼續刷尚硅谷的前端視頻,查漏補缺。 JS (1)apply() 方法與 call() 方法 (2)構造函數 (3)原型對象<

photo-sphere-viewer 4.8.1在vue中使用

photo-sphere-viewer 加載單張平面圖 import { Viewer } from photo-sphere-viewerthis.viewer new Viewer({panorama: ‘完整的url,也可以是一個base64’,// Containercontainer: document.getElementById(viewer1),navbar: true,// Resize the panoramasize: {width: 100%,…

【PyTorch】PyTorch中的非線性激活函數詳解:原理、優缺點與實戰指南

目錄 PyTorch中的非線性激活函數詳解&#xff1a;原理、優缺點與實戰指南一、核心激活函數作用、分類與數學表達1. 傳統飽和型激活函數2. ReLU族&#xff08;加權和類核心&#xff09;3. 自適應改進型激活函數4. 輕量化與硬件友好型 二、優缺點對比與適用場景三、選擇策略與PyT…

中間件--ClickHouse-7--冷熱數據分離,解決Mysql海量數據瓶頸

在web應用中&#xff0c;當數據量非常大時&#xff0c;即使MySQL的存儲能夠滿足&#xff0c;但性能一般也會比較差。此時&#xff0c;可以考慮使用ClickHouse存儲歷史數據&#xff0c;在Mysql存儲最近熱點數據的方式&#xff0c;來優化和提升查詢性能。ClickHouse的設計初衷就是…

阿里一面:Nacos配置中心交互模型是 push 還是 pull ?(原理+源碼分析)

對于Nacos大家應該都不太陌生&#xff0c;出身阿里名聲在外&#xff0c;能做動態服務發現、配置管理&#xff0c;非常好用的一個工具。然而這樣的技術用的人越多面試被問的概率也就越大&#xff0c;如果只停留在使用層面&#xff0c;那面試可能要吃大虧。 比如我們今天要討論的…

DAY09:【pytorch】nn網絡層

1、卷積層 1.1 Convolution 1.1.1 卷積操作 卷積運算&#xff1a;卷積核在輸入信號&#xff08;圖像&#xff09;上滑動&#xff0c;相應位置上進行乘加卷積核&#xff1a;又稱為濾波器、過濾器&#xff0c;可認為是某種模式、某種特征 1.1.2 卷積維度 一般情況下&#xf…

Pinpoint - 大型分布式系統的 APM(應用性能管理)工具

文章目錄 一、關于 Pinpoint最新版本&#xff08;2024/10/23&#xff09;-- v3.0.1PHP, PYTHON 二、概述支持的模塊 一、關于 Pinpoint Pinpoint 是一個用于大型分布式系統的 APM&#xff08;應用性能管理&#xff09;工具&#xff0c;由 Java / PHP/PYTHON 編寫。 受 Dapper …

設計模式實踐:模板方法、觀察者與策略模式詳解

目錄 1 模板方法1.1 模板方法基本概念1.2 實驗1.2.1 未使用模板方法實現代碼1.2.2 使用模板方法的代碼 2 觀察者模式2.1 觀察者模式基本概念2.2 實驗 3 策略模式3.1 策略模式基本概念3.2 實驗 1 模板方法 1.1 模板方法基本概念 定義&#xff1a;一個操作中的算法的骨架 &…

Vue 2.0和3.0筆記

Vue 3 關于組件 今天回顧了下2.0關于組件的內容&#xff0c;3.0定義組件的方式多了一種就是通過單文件組件&#xff08;Single-File Component&#xff09;的方式將Vue的模板&#xff0c;邏輯和樣式放到一個文件中&#xff0c;2.0則不同&#xff0c;它是將模板放到一個屬性中…

前端面試-微前端

1. 什么是微前端&#xff1f;它的核心價值是什么&#xff1f; 答案&#xff1a; 微前端是一種將前端應用拆分為獨立模塊的架構模式&#xff0c;每個模塊可由不同團隊獨立開發、測試、部署和運行。其核心價值包括&#xff1a; 技術棧無關性&#xff1a;支持 React、Vue、Angul…

Axure高保真AI算法訓練平臺

點擊下載《Axure高保真AI算法訓練平臺(.rp) 》 原型效果&#xff1a;https://axhub.im/ax9/69fdf8f2b10b59c3/#g1 摘要 本文介紹了一款功能全面且高效的AI算法訓練平臺&#xff0c;旨在為數據科學家、研究人員和工程師提供從數據準備到模型部署的一站式解決方案。該平臺由四大…

Ubuntu服務器日志滿audit:backlog limit exceeded了會報錯解決方案-Linux 審計系統 (auditd) 工具

auditd 是 Linux 系統中的審計守護進程&#xff0c;負責收集、記錄和監控系統安全相關事件。以下是相關工具及其功能&#xff1a; 核心組件 auditd - 審計守護進程 系統的審計服務主程序 收集系統調用信息并寫入日志文件 通常存儲在 /var/log/audit/audit.log auditctl - 審計控…

Windows10系統RabbitMQ無法訪問Web端界面

項目場景&#xff1a; 提示&#xff1a;這里簡述項目相關背景&#xff1a; 項目場景&#xff1a; 在一個基于 .NET 的分布式項目中&#xff0c;團隊使用 RabbitMQ 作為消息隊列中間件&#xff0c;負責模塊間的異步通信。開發環境為 Windows 10 系統&#xff0c;開發人員按照官…

Qt 的 事件隊列

Qt 的 事件隊列 是其核心事件處理機制之一&#xff0c;用于管理和分發系統與用戶生成的事件&#xff08;如鼠標點擊、鍵盤輸入、定時器、信號槽中的隊列連接等&#xff09;。理解 Qt 的事件隊列對多線程、界面響應以及異步處理尤為關鍵。 一、Qt 的事件處理模型概覽 Qt 是基于…

無人機自主導航與路徑規劃技術要點!

一、自主導航與路徑規劃技術要點 1. 傳感器融合 GPS/北斗定位&#xff1a;提供全局定位&#xff0c;但在室內或遮擋環境下易失效。 慣性測量單元&#xff08;IMU&#xff09;**&#xff1a;通過加速度計和陀螺儀實時追蹤姿態&#xff0c;彌補GPS信號丟失時的定位空缺。 …

Before After:SQL整容級優化

首先說明這個優化有一定提升&#xff0c;但不是我所期望的 我接到一個涉及優化的SQL&#xff0c;具體內容實在太長。而且可能也不利于閱讀。于是我脫敏以及簡化一下。SQL中間大量的充斥著 (select 列名1 from t1 where t1.id t2.id ) A, (select 列名2 from t1 where t1.id …

道可云人工智能每日資訊|首屆世界人工智能電影節在法國尼斯舉行

道可云元宇宙每日簡報&#xff08;2025年4月15日&#xff09;訊&#xff0c;今日元宇宙新鮮事有&#xff1a; 杭州《西湖區打造元宇宙產業高地的扶持意見》發布 杭州西湖區人民政府印發《西湖區打造元宇宙產業高地的扶持意見》。該意見已于4月4日正式施行&#xff0c;有效期至…

JVM 為什么需要即時編譯器?

JVM之所以需要即時編譯器 (JIT Compiler)&#xff0c;是為了提高 Java 程序的執行性能&#xff0c;彌補純解釋器執行的不足。 我們可以從以下幾個角度來分析一下這個問題&#xff1a; 1. 解釋器的性能瓶頸: 逐條解釋的開銷: 解釋器需要逐條讀取 Java 字節碼指令&#xff0c;并…

PromptUp 網站介紹:AI助力,輕松創作

1. 網站定位與核心功能 promptup.net 可能是一個面向 創作者、設計師、營銷人員及藝術愛好者 的AI輔助創作平臺,主打 零門檻、智能化的內容生成與優化。其核心功能可能包括: AI藝術創作:通過輸入關鍵詞、選擇主題或拖放模板,快速生成風格多樣的數字藝術作品(如插畫、海報…