面试 Java 基础八股文十问十答第二十九期

面试 Java 基础八股文十问十答第二十九期

作者:程序员小白条,个人博客

相信看了本文后,对你的面试是有一定帮助的!关注专栏后就能收到持续更新!

⭐点赞⭐收藏⭐不迷路!⭐

1)类加载过程

类加载是 Java 虚拟机(JVM)在运行 Java 程序时将类的字节码加载到内存中并转换为 Java 类的过程。这个过程分为以下几个步骤:

  • 加载(Loading): 加载是指查找并加载类的字节码文件。类加载器会根据类的全限定名(Fully Qualified Name)来定位类的字节码文件,并将其加载到内存中。
  • 链接(Linking): 链接阶段又分为三个子阶段:
    • 验证(Verification): 验证阶段确保加载的字节码是合法、符合规范的,并且不会危害虚拟机的安全。
    • 准备(Preparation): 准备阶段为类的静态变量分配内存,并设置默认初始值。
    • 解析(Resolution): 解析阶段将类、方法、字段的符号引用解析为直接引用。
  • 初始化(Initialization): 初始化阶段是类加载过程的最后一步,在此阶段,会执行类的初始化代码,包括对静态变量的赋值和静态代码块的执行。

2)双亲委派

双亲委派模型是 Java 类加载器的工作原理之一,其基本思想是当一个类加载器收到类加载请求时,先委托给父类加载器加载,只有在父类加载器无法加载该类时,才由当前类加载器加载。这样做的好处是保证类的唯一性,防止同一个类被多个类加载器加载,导致类型不一致的问题,同时也能保证 Java 核心类库的安全性和稳定性。

3)BigDecimal

BigDecimal 是 Java 中用于表示任意精度的十进制数的类,它可以解决浮点数计算精度丢失的问题。在金融、科学计算等领域,对数字精度要求较高的场景中,常常会使用 BigDecimal 来进行精确计算。与基本数据类型的浮点数相比,BigDecimal 可以表示任意大小的数值,并提供了丰富的算术运算方法,如加减乘除、取整、取余等。由于 BigDecimal 是不可变的,因此它的操作不会改变原始值,而是返回一个新的 BigDecimal 对象。

4)new String("xiaobaitiao") 一共创建了几个对象?

new String("xiaobaitiao") 会创建两个对象:

  • 一个对象:由字符串常量池中的 "xiaobaitiao" 字符串常量创建。
  • 一个对象:由 new String("xiaobaitiao") 创建,存放在堆内存中。

5)finalfinallyfinalize 各自有什么区别?

  • final final 是一个关键字,用于修饰类、方法和变量。对于类,final 表示该类不能被继承;对于方法,final 表示该方法不能被重写;对于变量,final 表示该变量的值只能被赋值一次,即为常量。
  • finally finally 是异常处理中的一个关键字,用于定义在 try-catch 语句块结束之后总是会被执行的代码块,无论是否发生异常。
  • finalize finalize 是 Object 类中的一个方法,用于在对象被垃圾回收之前执行清理操作。但是,由于它的执行时机不确定性,不建议在实际开发中过多依赖该方法进行资源释放。

6)为什么平时写代码的时候会遇到乱码?

乱码通常是由于字符编码不一致导致的。常见的情况包括:

  • 源代码编码和文件编码不一致: 源代码以某种编码(如 UTF-8)编写,但文件的实际编码与之不符(如 ANSI),导致读取时出现乱码。
  • 数据传输过程中编码不一致: 在网络传输或文件读写过程中,如果发送端和接收端使用了不同的字符编码,就可能导致乱码。
  • 字符编码设置错误: 在程序中使用了错误的字符编码,或者未正确设置字符编码,也会引发乱码问题。

解决乱码问题通常需要注意以下几点:

  • 统一使用 UTF-8 编码。
  • 在程序中明确指定字符编码。
  • 在读取和写入文件时,指定正确的字符编码。
  • 在网络通信中,使用统一的字符编码进行数据传输。

7)Java 的集合类简介

Java 的集合类是用于存储和操作对象的数据结构。它们提供了一种更加灵活、高效的方式来管理数据集合,相比传统的数组,集合类具有更多的功能和操作。Java 中常见的集合类包括 List、Set、Map 等,它们都位于 java.util 包中。

  • List: 允许存储重复元素,并且有序。常见的实现类有 ArrayList、LinkedList、Vector 等。
  • Set: 不允许存储重复元素,通常用于存储不重复的对象集合。常见的实现类有 HashSet、LinkedHashSet、TreeSet 等。
  • Map: 存储键值对,键是唯一的,值可以重复。常见的实现类有 HashMap、LinkedHashMap、TreeMap 等。

8)数组和链表的区别

  • 数组(Array): 数组是一种线性数据结构,元素在内存中是连续存储的,具有固定的大小。访问数组中的元素是通过索引来进行的,可以快速访问任何位置的元素,但插入和删除操作需要移动大量元素。
  • 链表(Linked List): 链表是一种线性数据结构,元素在内存中不一定是连续存储的,每个元素都包含一个指向下一个元素的引用(或指针)。链表可以方便地进行插入和删除操作,但访问元素时需要从头节点开始遍历,效率较低。

9)Java 的链表实现类

Java 中常见的链表实现类有:

  • LinkedList: Java 标准库提供的双向链表实现类,实现了 List 和 Deque 接口,可以用作队列、栈等数据结构。

10)ArryaList、LinkedList、Vector 的区别

  • ArrayList: 基于数组实现的动态数组,支持随机访问,插入和删除操作的时间复杂度为 O(n),因为需要移动元素。不是线程安全的。
  • LinkedList: 基于双向链表实现的列表,插入和删除操作的时间复杂度为 O(1),但访问操作的效率较低,需要遍历链表。不是线程安全的。
  • Vector: 与 ArrayList 类似,但是 Vector 是线程安全的,所有的方法都被 synchronized 修饰,因此在多线程环境下使用时比较安全,但性能相对较低。

开源项目地址:https://gitee.com/falle22222n-leaves/vue_-book-manage-system

前后端总计已经 1300+ Star,2 W+ 访问!

⭐点赞⭐收藏⭐不迷路!⭐

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/593570.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Transformer中的数据输入构造

文章目录 1. 文本内容2. 字典构造2.1 定义一个类用于字典构造2.2 拆分文本2.3 构造结果 3. 完整代码 1. 文本内容 假如我们有如下一段文本内容: Optics It is the branch of physics that studies the behaviour and properties of light . Optical Science 这段…

【计算机科学速成课】笔记二

笔记一 文章目录 7.CPU阶段一:取指令阶段阶段二:解码阶段阶段三:执行阶段 8.指令和程序9.高级CPU设计——流水线与缓存 7.CPU CPU也叫中央处理器,下面我们要用ALU(输入二进制,会执行计算)、两种…

倪海厦(二)研究任何学问(东西)批判去看

大家好今天我们接着研究,倪海厦是如何思考问题的: 研究任何学问(东西),批判去看,假设--验证--结果。以果决其行!!!放空自己。学而后思,思学并进。 今天这一篇呢&#xf…

医疗器械软件相关的追溯关系

在医疗器械软件开发过程中,追溯性是确保产品质量和安全性的关键步骤之一。追溯性要求各个阶段的需求、设计、实现和测试之间能够清晰、连贯地关联起来,以便在整个开发周期中进行有效的跟踪和管理。IEC62304中明确输出的内容要有对应的追溯性,…

golang学习笔记(内存模型和分配机制)

操作系统的存储管理 虚拟内存管理 虚拟内存是一种内存管理技术,它允许操作系统为每个进程提供一个比实际物理内存更大的地址空间。这个地址空间被称为虚拟地址空间,而实际的物理内存则被称为物理地址空间。使用虚拟内存有以下几点好处: 内…

docker系列8:容器卷挂载(上)

目录 传送门 从安装redis说起 什么是容器卷挂载 操作系统的挂载 日志文件一般是"首恶元凶" 挂载命令 容器卷挂载 卷挂载命令 启动时挂载 查看挂载卷信息 容器卷管理 查看卷列表 创建容器卷 具名挂载与匿名挂载 具名挂载 传送门 docker系列1&#xff…

了解并学会使用反射

目录 一、反射的应用场景(简单了解) 二、反射的定义 三、关于反射的四个重要的类 四、反射的使用 1.Class获取一个class对象的方式 方式一:forName(): 方式二:封装类.Class: …

天风证券:水电燃气价格上涨,能推动通胀么?

水电燃气价格上涨对PPI的影响更大,6%的平均价格上涨能够拉动CPI和PPI分别上涨0.3个和0.7个百分点。 近期,国内多地上调水电燃气价格 燃气价格上涨主要针对居民端。目前燃气价格实行居民用气价格限价波动非民用气市场化定价的双轨制,这使得居…

【Linux】目录和文件相关的命令,补充:centos7系统目录结构

【Linux】Linux操作系统的设计理念之一就是“一切皆文件”(Everything is a file),即将设备、文件等都当作“文件”处理。 “文件”主要类型有:目录(即文件夹),链接文档(即快捷方式…

【Linux线程】

目录 线程是操作系统的一个执行流并发编程进程并发的优劣基于线程的并发编程Linux当中的线程 线程的创建使用pthread_createpthread_join对线程进行等待pthread_exit和pthread_cancelpthread_detach线程分离注意事项 原生线程库,详谈Linux的线程pthread库管理线程 线…

云端部署Stirling PDF:构建个人App的API调用指南(附Python源码)

今天发现一个Github的开源项目,Stirling PDF,项目地址如下:https://gitcode.com/Stirling-Tools/Stirling-PDFhttps://gitcode.com/Stirling-Tools/Stirling-PDF?utm_sourceartical_gitcode目前CSDN上已经有好几个up主都介绍了这个项目&…

cocos=》 预乘、混合(黑边、白色)

简介 预乘,指的是在数据提交给GPU之前,就对纹理的RGB分量与alpha值进行计算。 预乘计算 结果颜色 源颜色值 目标颜色值 * (1 - 源 alpha 值) result source.RGB dest.RGB * (1 - source.A); 对应的颜色混合函数设置为 gl.blendFunc(gl.ONE, gl.…

英语复习之英语形近词总结

最近在练习英语口语,有很好的练习场景,和数字人对练,还能纠错,不过开口的基础需要单词量的支撑以及语法的熟悉,因为英语的语法太简单了,没啥需要复习和注意的,音标发音的问题也可以后期再纠正&a…

Angular进阶-NVM管理Node.js实现不同版本Angular环境切换

一、NVM介绍 1. NVM简介 Node Version Manager(NVM)是一个用于管理多个Node.js版本的工具。它允许用户在同一台机器上安装和使用多个Node.js版本,非常适合需要同时进行多个项目的开发者。NVM是开源的,支持MacOS、Windows和Linux…

wechat_OCR项目打包以及如何使用

📚博客主页:knighthood2001 ✨公众号:认知up吧 (目前正在带领大家一起提升认知,感兴趣可以来围观一下) 🎃知识星球:【认知up吧|成长|副业】介绍 ❤️感谢大家点赞👍&…

医学图像处理:nii格式转换(3D切片为2D)

目录 NIFTI文件结构 读取NII文件 ITK-SNAP安装 使用方法 NII转PNG NIFTI文件结构 NIFTI 格式,是一种用于存储和交换医学成像数据的文件格式,特别适用于神经影像学领域。NIFTI文件通常有两个扩展名:.nii(用于图像数据&#xf…

42.WEB渗透测试-信息收集-域名、指纹收集(4)

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于: 易锦网校会员专享课 上一个内容:41.WEB渗透测试-信息收集-域名、指纹收集(3) 关于单域名收集内容…

基于JSP的酒店客房管理系统(二)

目录 第二章 相关技术介绍 2.1 Jsp的简介 2.2 sql server 2005 的简介 第三章 系统的分析与设计 3.1 系统需求分析 1.理解需求 2.需求分析 3.2开发及运行环境 3.3功能模块的设计 3.3.1 设计目标 3.3.2 客房管理系统前台的设计 3.3.3 操作员管…

一种算法分类方式及其应用

在计算机科学领域,算法是解决问题的有效方法,而对算法进行分类有助于理解它们的特性、优劣以及在不同场景下的应用。常见的算法分类方法,包括按设计思想、问题类型、数据结构和应用领域等,每一类算法会对应有其典型和实际应用。 算…

大数据BI可视化(Echarts组件)项目开发-熟悉交互API5.0

全局echarts对象 init初始化 registerTheme注册主题 var mCharts echarts.init(document.querySelector("div"), itcast)registerMap地图图表 connect 代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8&qu…
最新文章