JavaSE 常见问题解析

article/2025/6/26 12:25:21

最近正在复习Java八股,所以会将一些热门的八股问题,结合ai与自身理解写成博客便于记忆
在这里插入图片描述
本文将以以上问题作为基础

String 相关问题

String 底层数据类型?

String 在 Java 9 之前底层使用 char[] 数组存储字符数据,Java 9 及以后版本改为 byte[] 数组加上编码标志字段(coder),这样可以更节省内存空间(Latin1字符用1字节,UTF-16字符用2字节)。

String 类能被继承吗?

不能。String 类被声明为 final,因此不能被继承。这样设计主要是为了保证 String 的不可变性和安全性。

String 是不可变的,如何实现?

String 的不可变性通过以下方式实现:

  1. 类声明为 final,防止被继承和修改
  2. 内部字符数组声明为 private final
  3. 不提供修改内部数组的方法
  4. 所有修改操作都返回新 String 对象而非修改原对象

String 存储有长度限制吗?

有长度限制:

  1. 理论最大长度受 Integer.MAX_VALUE (2^31-1) 限制
  2. 实际限制更小,受 JVM 规范限制(常量池中 UTF-8 编码的字符串最大长度为 65535)
  3. 运行时创建字符串受 JVM 可用内存限制

为什么设计为不可变的?字符串常量池是什么?

不可变设计原因

  1. 安全性:字符串常用于敏感信息(如密码、URL等),不可变防止被篡改
  2. 线程安全:无需同步即可在多线程中使用
  3. 缓存哈希值:String 是 HashMap 常用键,不可变保证哈希值不变
  4. 字符串常量池优化

字符串常量池

  • 是 JVM 中特殊的内存区域,用于存储字符串字面量
  • 相同内容的字符串只存储一份,减少内存消耗
  • 可通过 intern() 方法将字符串显式加入常量池

String/StringBuffer/StringBuilder的区别

特性StringStringBufferStringBuilder
可变性不可变可变可变
线程安全是(天然)是(方法同步)
性能修改时性能差较好最好
使用场景常量字符串多线程字符串操作单线程字符串操作

深拷贝与浅拷贝

什么是深拷贝和浅拷贝?

  • 浅拷贝:只复制对象本身和其基本类型字段,引用类型字段仍指向原对象引用的对象
  • 深拷贝:不仅复制对象本身,还递归复制其所有引用指向的对象

区别:

  1. 复制深度不同:浅拷贝只复制一层,深拷贝复制所有层级
  2. 内存消耗:深拷贝消耗更多内存
  3. 实现复杂度:深拷贝实现更复杂
  4. 独立性:深拷贝后的对象完全独立于原对象

异常处理

Error和Exception的区别

特性ErrorException
类型不可查异常(unchecked)可查异常(checked)和不可查异常
来源JVM 或系统底层问题应用程序问题
处理方式通常不捕获处理应捕获处理
示例OutOfMemoryErrorIOException

异常的分类和区别

  1. Checked Exception(检查型异常)

    • 继承自 Exception
    • 必须被捕获或声明抛出
    • 代表可预期的异常情况
    • 示例:IOException、SQLException
  2. Unchecked Exception(非检查型异常)

    • 继承自 RuntimeException
    • 不强制捕获或声明
    • 代表编程错误或系统问题
    • 示例:NullPointerException、ArrayIndexOutOfBoundsException

finally中的代码一定会被执行吗?

大部分情况下会执行,但有几种特殊情况不会:

  1. 在 try 或 catch 块中调用 System.exit()
  2. 线程被中断或杀死
  3. JVM 崩溃
  4. 在 try 或 catch 块中进入无限循环

IO模型

AIO、BIO、NIO分别是什么

  1. BIO(Blocking IO,阻塞IO)

    • 同步阻塞模型
    • 每个连接需要一个独立线程处理
    • 简单但并发能力有限
  2. NIO(Non-blocking IO,非阻塞IO)

    • 同步非阻塞模型
    • 基于通道(Channel)和缓冲区(Buffer)
    • 使用选择器(Selector)实现多路复用
    • 适合高并发场景
  3. AIO(Asynchronous IO,异步IO)

    • 异步非阻塞模型
    • 基于事件和回调机制
    • 操作系统完成IO操作后通知应用
    • 性能最好但实现复杂

同步/异步与阻塞/非阻塞

同步与异步如何理解

  • 同步:调用者主动等待调用结果(关注的是调用结果的通知方式)
  • 异步:调用发出后立即返回,结果通过回调或通知机制告知(不阻塞调用者)

阻塞与非阻塞如何理解

  • 阻塞:调用结果返回前,当前线程被挂起(关注的是调用等待期间线程的状态)
  • 非阻塞:调用结果返回前,线程可以继续执行其他任务

组合模式

  1. 同步阻塞(BIO)
  2. 同步非阻塞(NIO)
  3. 异步非阻塞(AIO)

http://www.hkcw.cn/article/UEUfOlKapd.shtml

相关文章

潜入水面:穿越“冰山”之旅,探寻Java鲜为人知的一面

“冰山”梗是一种网络现象,幽默而有时令人不安地展示了某个主题的知识或入门层次——从冰山之巅简单、广为人知的常识到只有最坚韧的老兵才能理解的黑暗、神秘深处。想象一座海洋上矗立的冰山:表面可见的部分只是开始,真正的魔法(…

如何配置mvn镜像源为华为云

如何配置mvn镜像源为华为云 # 查找mvn 配置文件 mvn -X help:effective-settings | grep settings.xml# 配置mvn镜像源为华为云,/home/apache-maven-3.9.5/conf/settings.xml文件路径需要根据上一步中查询结果调整 cat > /home/apache-maven-3.9.5/conf/setting…

【DAY37】早停策略和模型权重的保存

内容来自浙大疏锦行python打卡训练营 浙大疏锦行 知识点: 过拟合的判断:测试集和训练集同步打印指标模型的保存和加载 仅保存权重保存权重和模型保存全部信息checkpoint,还包含训练状态 早停策略 作业: 对信贷数据集训练后保存权…

TASK OA 案例hook

TASK OA 案例hook 定义的状态 useRef & useForm ref使用: xxx 尽可能使用组件库antd内部提供的方法 两大稍微比较难的组件:table 和 form 服务器通信 使用async/await 不用想配套使用 try/catch 初次渲染拉取query。useEffect(..., []) 状态更新useE…

Kafka集成Flume/Spark/Flink(大数据)/SpringBoot

Kafka集成Flume Flume生产者 ③、安装Flume,上传apache-flume的压缩包.tar.gz到Linux系统的software,并解压到/opt/module目录下,并修改其名称为flume Flume消费者 Kafka集成Spark 生产者 object SparkKafkaProducer{def main(args:Array[S…

Linux指令:

我们今天来学习一下linux的一些相关的指令L: 1. 快速认识6~8个指令: 第一条:pwd pwd指令表示的是我当前在哪条路径下;我当前在哪里; 我们看这个第二句话,因为在windows环境下,当我们登录进入到…

网络攻防技术五:网络扫描技术

文章目录 一、网络扫描的基础概念二、主机发现三、端口扫描1、端口号2、端口扫描技术3、端口扫描隐秘策略 四、操作系统识别五、漏洞扫描六、简答题1. 主机扫描的目的是什么?请简述主机扫描方法。2. 端口扫描的目的是什么?请简述端口扫描方法及扫描策略。…

win32相关(虚拟内存和物理内存)

虚拟内存和物理内存 在win32操作系统下,每个进程都有它自己独立的4GB空间,是window给它分配的一个虚拟空间,并不是真正的物理空间,这4GB空间中,分为高2G和低2G,高2G是应用程序的,低2G空间是给内…

00后新人“整顿”婚礼 简简单单更实在!

00后新人“整顿”婚礼简简单单更实在!婚礼当天,宾客们刚坐下,新郎新娘就手拉手走上台。新郎咧嘴一笑:“感谢各位来捧场,我俩今天正式领证了!”新娘接茬:“废话不多说,大家吃好喝好,菜不够再加,吃不完打包带走!”台下瞬间爆发出欢呼声,这场婚礼从开始到宣布开席,总…

德约科维奇vs诺里 法网百胜里程碑

北京时间6月2日,法网男单第四轮比赛中,赛会六号种子德约科维奇以6-2、6-3、6-2的比分击败诺里,成功晋级八强。首盘开始,德约连保带破取得2-0领先。尽管诺里随后回破,但德约在第四局再次破发,掌控了比赛节奏。最终在诺里的关键发球局中,德约再次破发,以6-2赢得首盘。第二…

地磁暴又来了!这些地方受影响 我国北部或现极光

中国气象局国家空间天气监测预警中心报告称,北京时间5月31日太阳爆发了耀斑,地球可能连续三天发生地磁暴,我国北部有机会出现较为明显的极光。具体来说,5月31日7点45分左右,太阳活动区14100开始爆发耀斑,软X射线流量快速上升,8点05分达到峰值——M8.1级中等耀斑强度。伴…

北京今天晴朗伴大风 阵风可达6至7级 明起炎热升级 气温将明显升高

今天6月3日,北京天气以晴朗为主,北风加大,阵风可达6至7级。未来两天,北京将继续保持晴朗,气温显著升高。昨天,北京大部分地区晴朗,北部和西部出现分散性阵雨或雷阵雨,但雨量不大。多地北风强劲,阵风达到6至7级。据北京市气象台预计,今天白天晴间多云,北风从2级左右逐…

全都要!德天空:新月将和胜利争夺C罗,同时致力于签下B费 沙特豪门雄心勃勃

据德国天空体育报道,利雅得新月在与利雅得胜利争夺C罗的同时,还致力于签下布鲁诺-费尔南德斯。C罗与利雅得胜利的合同将于6月底到期。尽管利雅得胜利的体育总监耶罗极力挽留,但利雅得新月希望签下这名40岁的老将,并带他参加即将举行的世俱杯(6月14日至7月13日)。利雅得新…

[HTML5]快速掌握canvas

背景 canvas 是 html5 标准中提供的一个标签, 顾名思义是定义在浏览器上的画布 通过其强大的绘图接口,我们可以实现各种各样的图形,炫酷的动画,甚至可以利用他开发小游戏,包括市面上很流行的数据可视化框架底层都用到了Canvas。…

Mininconda3安装使用

一、简介 Anaconda和Miniconda都是非常流行的Python发行版,它们都提供了强大的包管理系统和环境管理系统,让Python编程变得超级简单。 但Miniconda是Anaconda的精简版,只包含最基本的conda包管理器和Python环境管理器,不像Anaco…

设备驱动与文件系统:03 生磁盘的使用

磁盘驱动学习开篇 从这一讲开始,我们进入设备驱动的学习,具体聚焦于设备管理的最后一个部分——磁盘管理。磁盘管理实践也是操作系统课程的最后一块内容。磁盘的驱动器本质上仍是一种设备驱动,其原理不变,核心依旧是文件视图、磁…

【MATLAB代码】制导——平行接近法,三维,目标是运动的,订阅专栏后可直接查看MATLAB源代码

文章目录 运行结果简介代码功能概述运行结果核心模块解析代码特性与优势 MATLAB例程代码调整说明相关公式视线角速率约束相对运动学方程导引律加速度指令运动学更新方程拦截条件判定 运行结果 运行演示视频: 三维平行接近法导引运行演示 简介 代码功能概述 本代码…

spdlog介绍与使用

文章目录 spdlog的介绍与安装使用样例二次封装 spdlog的介绍与安装 spdlog 是一个高性能、超快速、零配置的 C 日志库,它旨在提供简洁的 API 和丰富的功能,同时保持高性能的日志记录。它支持多种输出目标、格式化选项、线程安全以及异步日志记录。 特点…

w373驾校预约学习系统的设计与实现

🙊作者简介:多年一线开发工作经验,原创团队,分享技术代码帮助学生学习,独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取,记得注明来意哦~🌹赠送计算机毕业设计600个选题excel文…

【PCB设计】STM32开发板——产品设计流程及元件选型

一、PCB设计流程 二、产品设计流程 三、需求及方案 四、元器件的选型 1.MCU选型 2.STM32单片机命名规则 根据命名规则及我们的需求,最终选择使用STM32F103VET6的芯片。 3.MCU最小系统 MCU最小系统的电路设计可以参考相关的数据手册。 4.信号接口选型 ADC以及DAC一…