面试 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.mzph.cn/bicheng/8615.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenNJet产品体验-手把手在Ubuntu20.04系统从零部署到应用OpenNJet

目录 一、引言 二、OpenNJet产品安装 2.1下载OpenNJet安装包 2.2安装OpenNJet V2.0.1 ​2.3快速启动并测试OpenNJet 三、OpenNJet产品应用体验 3.1配置OpenNJet 3.2 部署 Web 应用程序 3.3启动 NJet 3.4访问 Web 应用程序 四、总结 一、引言 OpenNJet应用引擎是高性…

[iOS]从拾遗到Runtime(上)

[iOS]从拾遗到Runtime(上) 文章目录 [iOS]从拾遗到Runtime(上)写在前面名词介绍instance 实例对象class 类对象meta-class 元类对象为什么要有元类? runtimeMethod(objc_method)SEL(objc_selector)IMP 类缓存(objc_cache)Category(objc_category) 消息传递消息传递的…

Vue 3 中的 h() 与 mergeProps() API 详解

前言 在 Vue 3 中,随着 Composition API 的引入,我们有了更多的灵活性和控制权来构建我们的组件。其中,h() 函数和 mergeProps() 是在构建渲染函数或 JSX/TSX 时经常使用的两个工具。下面,我将对这两个 API 进行详细的解释。 h()…

2024OD机试卷-求最多可以派出多少支团队 (java\python\c++)

题目:求最多可以派出多少支团队 题目描述 用数组代表每个人的能力,一个比赛活动要求参赛团队的最低能力值为N,每个团队可以由1人或者2人组成,且1个人只能参加1个团队,计算出最多可以派出多少只符合要求的团队。 输入描述 第一行代表总人数,范围1-500000 第二行数组代…

大模型微调之 在亚马逊AWS上实战LlaMA案例(四)

大模型微调之 在亚马逊AWS上实战LlaMA案例(四) 在 Amazon SageMaker JumpStart 上微调 Llama 2 以生成文本 Meta 能够使用Amazon SageMaker JumpStart微调 Llama 2 模型。 Llama 2 系列大型语言模型 (LLM) 是预先训练和微调的生成文本模型的集合&#x…

C++string续

一.find_first_of与find 相同:都是从string里面找字符,传参格式一样(都可以从某个位置开始找) 不同:find_first_of只能找字符,find可以找字符串 find_first_of参数里面的string与char*是每个字符的集合,指找出string…

普通组件的注册-局部注册和全局注册

目录 一、局部注册和全局注册-概述 二、局部注册的使用示例 三、全局注册的使用示例 一、局部注册和全局注册-概述 组件注册有两种方式: 局部注册:只能在注册的组件内使用。使用方法:创建.vue文件,在使用的组件内导入并注册。…

QX-mini51单片机学习-----(3)流水灯

目录 1宏定义 2函数的定义 3延时函数 4标准库函数中的循环移位函数 5循环移位函数与左移和右移运算符的区别 6实例 7keil中DeBug的用法 1宏定义 是预处理语句不需要分号 #define uchar unsigned char//此时uchar代替unsigned char typedef是关键字 后面是接分号…

Python实战开发及案例分析(5)—— 贪心算法

贪心算法是一种在每一步选择中都采取当前状态下最好或最优(即最有利)的选择,从而希望导致结果是全局最好或最优的算法。贪心算法不能保证得到最优解,但在某些问题中非常有效,并容易实现。 案例分析:找零问…

【Web前端】JavaScript—01

1.Javascript简介 简称JS,是当前最流行、应用最广泛的客户端脚本语言,用来在网页中添加一些动态效果与交互功能。在web开发领域有着举足轻重的地位。 2.JavaScript包含内容 核心ECMAScript(es):提供语言的语法和基本对象(数据类型、运算符、流程控制等…

Android Studio 之颜色

在Android中,颜色值由透明度alpha和RGB(红、绿、蓝)三原色定义,有八位十六进制数与六位十六进制数两种编码,例如八位编码FFEEDDCC,FF表示透明度,EE表示红色的浓度,DD表示绿色的浓度&…

Java特性之设计模式【代理模式】

一、代理模式 概述 在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式 在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口 主要解决: 在直接访问…

设计模式——外观模式(Facade)

外观模式(Facade Pattern) 是一种结构型设计模式,它为一个子系统中的一组接口提供一个统一的高层接口,使得子系统更加容易使用。这种类型的设计模式属于结构型模式,它向客户端提供了一个接口,隐藏了子系统的…

项目管理-项目资源管理2/2

项目管理:每天进步一点点~ 活到老,学到老 ヾ(◍∇◍)ノ゙ 何时学习都不晚,加油 资源管理:6个过程“硅谷火箭管控” ①规划资源管理: 写计划 ②估算活动资源:估算团队资源&…

【代码随想录37期】Day01 二分查找 + 移除元素

二分查找 力扣704 贴一下之前的笔记: 没想到一下子写不出来,忘记什么是二分法了,这里回顾一下: 「二分查找 binary search」是一种基于分治策略的高效搜索算法。 它利用数据的有序性,每轮减少一半搜索范围&#xff…

Kafak 消费异常:The coordinator is not available.

Kafak 消费异常:The coordinator is not available. 1. 问题描述2. 问题排查2.1 Topic 状态异常2.2 `__consumer_offsets` 简介1. 问题描述 在新环境部署 Kafak 时,发现可以正常产生消息,但是无法正常消费消息,消费消息的异常日志如下: 11:59:53.315 [main] DEBUG org.a…

PPP点对点协议

概述 Point-to-Point Protocol,点到点协议,工作于数据链路层,在链路层上传输网络层协议前验证链路的对端,主要用于在全双工的同异步链路上进行点到点的数据传输。 PPP主要是用来通过拨号或专线方式在两个网络节点之间建立连接、…

docker-本地私有仓库、harbor私有仓库部署与管理

一、本地私有仓库: 1、本地私有仓库简介: docker本地仓库,存放镜像,本地的机器上传和下载,pull/push。 使用私有仓库有许多优点: 节省网络带宽,针对于每个镜像不用每个人都去中央仓库上面去下…

SQL查询语句(三)范围查找关键字

在上一篇文章中,我们介绍了SQL语句中,逻辑关键字的作用,并举例演示了如何用逻辑关键字来组合WHERE子句。在文章的末尾我们提到了两个用于范围查找的关键字IN和BETWEEN。这两个关键字都可以与NOT关键字灵活组合,起到对字句结果取反…

深度学习中模块化设计的理念优势

模块化设计在深度学习领域中是一个重要的概念,比如在构建和改进类似于编码器-解码器这样的复杂模型时,transformer就是编码器-解码器架构的一个实例。模块化设计可以帮助我们快速集成最新的研究成果,支持模型的快速迭代,这些都与深…