JAVA基础面试题汇总(持续更新)
1、精确运算场景使用浮点型运算问题
精确运算场景(如金融领域计算应计利息)计算数字,使用浮点型,由于精度丢失问题,会导致计算后的结果和预期不一致,使用Bigdecimal类型解决此问题,示例代码如下:
float f1 = 1f -0.1f*9;
System.out.println(f1);//0.099999964BigDecimal b1 = new BigDecimal("1");
BigDecimal b2 = new BigDecimal("0.1");
BigDecimal b3 = new BigDecimal("9");
BigDecimal result = b1.subtract(b2.multiply(b3));
System.out.println(result); // 0.1
2、Static变量和实例变量的区别
比较维度 | 静态变量 | 实例变量 |
内存分配时机 | 第一次类加载时 | 对象实例化时 |
生命周期 | 一直存在 | 和对象生命周期一致 |
调用方式 | 类.静态变量 | 对象.实例变量 |
是否全局共享 | 是 | 对象间隔离 |
访问 | 静态方法不能访问非静态变量 | 非静态方法可以访问静态变量 |
3、==、equals()、hashCode()方法的区别
- == 比较的两个对象的地址是否相同
- equals()比较两个对象的值是否相同
String s1 = "abc";
String s2 = new String("abc");
System.out.println(s1 == s2);//false
System.out.println(s1.equals(s2));//true
- hashCode()方法:
在Java中,每个对象都有一个与之关联的哈希码(hash code),这是通过对象的内部状态计算出来的一个整数值,用于在哈希表等数据结构中进行快速查找。
Student student = new Student("1","张三",18,"1");
System.out.println("student hashCode:" + student.hashCode());//student hashCode:-1575396644
如果对象student放入hash表中,如HashMap,通过hashCode()方法的值可以快速的从Map中获取对象的位置,实现快速检索。
对象的hashCode值和对象的物理内存地址完全是两回事,student在jvm堆内存的地址才是物理地址,hashCode只是在java中如果对象放入hash表中,hash表的位置。
- hashCode和equals方法的区别及联系
Student student1 = new Student("1","张三",18,"1");
Student student2 = new Student("1","张三",18,"1");
System.out.println(student1.equals(student2));//true
System.out.println("student hashCode:" + student1.hashCode());//student hashCode:-1575396644
System.out.println("student hashCode:" + student2.hashCode());//student hashCode:-1575396644
System.out.println(student1.hashCode() == student2.hashCode());//true
两个完全不同的对象的hashCode可能一样,即hash冲突
两个对象equals方法相同,hashCode一定相同;
两个对象equals方法不相同,hashCode可能相同;
两个对象的hashCode不相同,equals一定不相同
4、JVM组成
JVM由下图红框的组件构成,具体为:
1)类加载器(ClassLoader)
2)运行时数据区(Runtime Data Area)
3)执行引擎(Execution Engine)
4)本地库接口(Native Interface)
JVM的运行流程:
1)编译 java 代码转换成字节码(class 文件)--外部执行
2)JVM通过 类加载器(ClassLoader) 把文件加载到内存中的运行时数据区(Runtime Data Area),生成堆栈等信息
3)JVM通过执行引擎(Execution Engine)将字节码翻译成底层系统识别的指令再交由CPU 去执行,此过程中需要调用其他语言的接口本地库接口(Native Interface) 来实现整个程序的功能
运行时数据区的组成说明:
1)程序计数器:是一块较小的内存空间,可以识别当前线程所执行字节码的具体位置。
2)Stack栈信息:用于存储局部变量表、操作数栈、动态链接、方法出口等信息。
3)Heap堆信息:Java 虚拟机中内存最大的一块,是被所有线程共享的,存放对象实例
4)Method方法区:用于存储已被虚拟机加载的类信息、常量、静态变量等,是线程共享的
5、JAVA常见的内存泄露场景
当对象不再需要时却仍在JVM内存,导致内存使用量不断增加,最终可能导致 OutOfMemoryError。
1、静态集合类引起的内存泄漏
静态集合类中加入了大量的对象没有及时清理
2、未关闭的IO资源
各类IO资源没有及时关闭,如数据库连接、线程池等等
3、ThreadLocal引起的内存泄漏
前台发送大量请求,后台每个线程中在ThreadLocal存储了大量对象,请求完成后,没有及时进行remove操作
6、Spring中使用了哪些设计模式
1)IOC容器实例化Bean对象:工厂模式
2)Bean对象管理:单例模式,IOC容器默认实例化的对象是单例
3)AOP面向切面编程:代理模式,被代理的对象实现了接口,Spring采用的JDK的动态代理,如果被代理对象没有实现接口,Spring采用CGlib代理
4)AOP中切点前向通知、返回值通知、异常通知:适配器模式
5)JDBC Template:模板方法
相关文章:

JAVA基础面试题汇总(持续更新)
1、精确运算场景使用浮点型运算问题 精确运算场景(如金融领域计算应计利息)计算数字,使用浮点型,由于精度丢失问题,会导致计算后的结果和预期不一致,使用Bigdecimal类型解决此问题,示例代码如下…...

设计模式-创建型-常用:单例模式、工厂模式、建造者模式
单例模式 概念 一个类只允许创建一个对象(或实例),那这个类就是单例类,这种设计模式就叫做单例模式。对于一些类,创建和销毁比较复杂,如果每次使用都创建一个对象会很耗费性能,因此可以把它设…...

【数据结构】【链表代码】随机链表的复制
/*** Definition for a Node.* struct Node {* int val;* struct Node *next;* struct Node *random;* };*/typedef struct Node Node; struct Node* copyRandomList(struct Node* head) {if(headNULL)return NULL;//1.拷贝结点,连接到原结点的后面Node…...

Linux 系统五种帮助命令的使用
Linux 系统五种帮助命令的使用 本文将介绍 Linux 系统中常用的帮助命令,包括 man、–help、whatis、apropos 和 info 命令。这些命令对于新手和有经验的用户来说,都是查找命令信息、理解命令功能的有力工具。 文章目录 Linux 系统五种帮助命令的使用一…...

Vueron引领未来出行:2026年ADAS激光雷达解决方案上市路线图深度剖析
Vueron ADAS激光雷达解决方案路线图分析:2026年上市展望 Vueron近期发布的ADAS激光雷达解决方案路线图,标志着该公司在自动驾驶技术领域迈出了重要一步。该路线图以2026年上市为目标,彰显了Vueron对未来市场趋势的精准把握和对技术创新的坚定…...

Java | Leetcode java题解之第458题可怜的小猪
题目: 题解: class Solution {public int poorPigs(int buckets, int minutesToDie, int minutesToTest) {if (buckets 1) {return 0;}int[][] combinations new int[buckets 1][buckets 1];combinations[0][0] 1;int iterations minutesToTest /…...

怎么不改变视频大小的情况下,修改视频的时长
视频文件太大怎么变小?不影响画质的四种方法 怎么不改变视频大小的情况下,修改视频的时长 截取结尾的时间你可以使用 ffmpeg 来裁剪视频的结尾部分。假设你想去掉视频最后的3秒钟,可以先使用 ffmpeg 获取视频的总时长,然后通过指定一个新的…...

数据结构:AVL树
前言 学习了普通二叉树,发现普通二叉树作用不大,于是我们学习了搜索二叉树,给二叉树新增了搜索、排序、去重等特性, 但是,在极端情况下搜索二叉树会退化成单边树,搜索的时间复杂度达到了O(N),这…...

系统守护者:使用PyCharm与Python实现关键硬件状态的实时监控
目录 前言 系统准备 软件下载与安装 安装相关库 程序准备 主体程序 更改后的程序: 编写.NET程序 前言 在现代生活中,电脑作为核心工具,其性能和稳定性的维护至关重要。为确保电脑高效运行,我们不仅需关注软件优化…...

【工作流引擎集成】springboot+Vue+activiti+mysql带工作流集成系统,直接用于业务开发,流程设计,工作流审批,会签
前言 activiti工作流引擎项目,企业erp、oa、hr、crm等企事业办公系统轻松落地,一套完整并且实际运用在多套项目中的案例,满足日常业务流程审批需求。 一、项目形式 springbootvueactiviti集成了activiti在线编辑器,流行的前后端…...

SumatraPDF一打开就无响应怎么办?
结论:当前安装版不论32位还是64位都会出现问题。使用portable免安装版未发现相关问题。——sumatrapdf可以用于pdf, epub, mobi 等格式文件的浏览。 点击看相关问题和讨论...

棋牌灯控计时计费系统软件免费试用版怎么下载 佳易王计时收银管理系统操作教程
一、前言 【试用版软件下载,可以点击本文章最下方官网卡片】 棋牌灯控计时计费系统软件免费试用版怎么下载 佳易王计时收银管理系统操作教程 棋牌计时计费软件的应用也提升了顾客的服务体验,顾客可以清晰的看到自己的消费时间和费用。增加了消费的透明…...

Excel下拉菜单制作及选项修改
Excel下拉菜单 1、下拉菜单制作2、下拉菜单修改 下拉框(选项菜单)是十分常见的功能。Excel支持下拉框制作,通过预设选项进行菜单选择,可以避免手动输入错误和重复工作,提升数据输入的准确性和效率 1、下拉菜单制作 步…...

树莓派 mysql (兼容mariadb)登陆问题
树莓派 mysql (兼容mariadb)登陆问题 树莓派 MySQL 登陆问题 1 使用默认账号登陆 在首次登陆的情况下,系统默认为root用户授权 sudo su root  2. 使用root用户登…...

智能手表(Smart Watch)项目
文章目录 前言一、智能手表(Smart Watch)简介二、系统组成三、软件框架四、IAP_F411 App4.1 MDK工程结构4.2 设计思路 五、Smart Watch App5.1 MDK工程结构5.2 片上外设5.3 板载驱动BSP5.4 硬件访问机制-HWDataAccess5.4.1 LVGL仿真和MDK工程的互相移植5…...

设计模式~~~
简单工厂模式(静态工厂模式) 工厂方法模式 抽象工厂角色 具体工厂角色...

Golang | Leetcode Golang题解之第458题可怜的小猪
题目: 题解: func poorPigs(buckets, minutesToDie, minutesToTest int) int {if buckets 1 {return 0}combinations : make([][]int, buckets1)for i : range combinations {combinations[i] make([]int, buckets1)}combinations[0][0] 1iterations…...

欢聚时代(BIGO)Android面试题及参考答案
网络 TCP 和 UDP 协议的区别是什么? TCP(Transmission Control Protocol,传输控制协议)和 UDP(User Datagram Protocol,用户数据报协议)是两种不同的传输层协议,它们有以下主要区别: 一、连接性 TCP 是面向连接的协议。在通信之前,需要通过三次握手建立连接,通信结束…...

[C语言]指针和数组
目录 1.数组的地址 2.通过指针访问数组 3.数组和指针的不同点 4.指针数组 1.数组的地址 数组的地址是什么? 看下面一组代码 #include <stdio.h> int main() { int arr[5] {5,4,3,2,1}; printf("&arr[0] %p\n", &arr[0]); printf(&qu…...

Centos Stream 9备份与恢复、实体小主机安装PVE系统、PVE安装Centos Stream 9
最近折腾小主机,搭建项目环境,记录相关步骤 数据无价,丢失难复 1. Centos Stream 9备份与恢复 1.1 系统备份 root权限用户执行进入根目录: cd /第一种方式备份命令: tar cvpzf backup.tgz / --exclude/proc --exclu…...

Linux的发展历史与环境
目录: 引言Linux的起源早期发展企业级应用移动与嵌入式系统现代计算环境中的Linux结论 引言 Linux,作为开源操作系统的代表,已经深刻影响了全球的计算环境。从其诞生之初到如今成为服务器、嵌入式系统、移动设备等多个领域的核心,…...
Jax(Random、Numpy)常用函数
目录 Jax vmap Array reshape Random PRNGKey uniform normal split choice Numpy expand_dims linspace jax.numpy.linalg[pkg] dot matmul arange interp tile reshape Jax jit jax.jit(fun, in_shardingsUnspecifiedValue, out_shardingsUnspecifiedVa…...

python-pptx 中 placeholder 和 shape 有什么区别?
在 python-pptx 库中,placeholder 和 shape 是两个核心概念。虽然它们看起来相似,但在功能和作用上存在显著的区别。为了更好地理解这两个概念,我们可以通过它们的定义、使用场景以及实际代码示例来剖析其差异。 Python-pptx 的官网链接&…...

王者农药更新版
一、启动文件配置 二、GPIO使用 2.1基本步骤 1.配置GPIO,所以RCC开启APB2时钟 2.GPIO初始化(结构体) 3.给GPIO引脚设置高/低电平(WriteBit) 2.2Led循环点亮(GPIO输出) 1.RCC开启APB2时钟。…...

各省份消费差距(城乡差距)数据(2005-2022年)
消费差距,特别是城乡消费差距,是衡量一个国家或地区经济发展均衡性的重要指标。 2005年-2022年各省份消费差距(城乡差距)数据(大数据).zip资源-CSDN文库https://download.csdn.net/download/2401_84585615/…...

[Linux] 进程创建、退出和等待
标题:[Linux] 进程创建、退出和等待 个人主页水墨不写bug (图片来源于AI) 目录 一、进程创建fork() 1) fork的返回值: 2)写时拷贝 编辑3)fork常规用法 4ÿ…...

微软推出针对个人的 “AI伴侣” Copilot 会根据用户的行为模式、习惯自动进化
微软推出了为每个人提供的“AI伴侣”Copilot,它不仅能够理解用户的需求,还能根据用户的日常习惯和偏好进行适应和进化。帮助处理各种任务和复杂的日常生活场景。 它能够根据用户的生活背景提供帮助和建议,保护用户的隐私和数据安全。Copilot…...

【QT】QT入门
个人主页~ QT入门 一、简述QT1、什么是QT2、QT的优势3、应用场景 二、QT的基本使用1、新建项目(1)选择项目模版(2)选择项目路径(3)选择构建系统(4)填写类信息设置界面(5&…...

Linux 6.11版本发布
Linux 6.11版本的发布是Linux社区的一个重要里程碑,它不仅在实时计算、性能优化方面取得了显著进展,还在安全性上迈出了关键一步。 一、实时计算与性能优化 1.io_uring子系统支持 Linux 6.11引入了io_uring子系统的增强功能,特别是支持了b…...

CSS 参考手册
CSS 参考手册 概述 CSS(层叠样式表)是一种用于描述HTML或XML文档样式的样式表语言。它用于控制网页的布局和外观,使网页设计更加美观和响应式。CSS可以定义文本颜色、字体、布局、响应式设计等,是网页设计和开发中不可或缺的一部分。 基础语法 CSS的基本语法由选择器和…...