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.mzph.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艺术创作:通过输入关键词、选择主题或拖放模板,快速生成风格多样的数字艺术作品(如插画、海报…