JAVA面试宝典面经系列之JAVA基础-含JAVA基础语法,集合,线程等方面的使用与面试热点频点问题

Java集合框架、并发修改异常、Lamabda表达式 javaList/map面试题 阅读详情

JAVA的基本数据类型

在这里插入图片描述

需要了解有哪些基础数据类型,数据范围,以及它们所占内存空间

数据类型所占内存空间数据范围
byte1字节(8位)-2^8 ~ 2^8-1
short2字节(16位)-2^16 ~ 2^16-1
int4字节(32位)-2^32 ~ 2^32 -1
long8字节(64位)-2^64 ~2^64-1
float4字节(32位)-2^32 ~ 2^32-1
double8 字节(64位)-2^64 ~2^64-1
char2字节(16位)-216~216-1
boolean--

举例:

Integer i = 128;
Integer j = 128;
System.out.println(i == j);//返回false

Integer m = 127;
Integer n = 127;
System.out.println(m == n);//返回true

为什么会一个返回true一个返回false呢?看下Integer的源码:

private static class IntegerCache {
        static final int low = -128;
        static final int high;
        static final Integer cache[];
 
        static {
            // high value may be configured by property 即是可调大小的
            int h = 127;
            String integerCacheHighPropValue =
                sun.misc.VM.getSavedProperty("java.lang.Integer.IntegerCache.high");
            if (integerCacheHighPropValue != null) {
                int i = parseInt(integerCacheHighPropValue);
                i = Math.max(i, 127);
                // Maximum array size is Integer.MAX_VALUE
                h = Math.min(i, Integer.MAX_VALUE - (-low) -1);
            }
            high = h;
            
            //把-128到127(可调)的整数都提前实例化了
            cache = new Integer[(high - low) + 1];
            int j = low;
            for(int k = 0; k < cache.length; k++)
                cache[k] = new Integer(j++);
        }
 
        private IntegerCache() {}
    }

Integer把-128到127(可调)的整数都提前实例化了, 所以你不管创建多少个这个范围内的Integer都是同一个对象。

总结:
用两个Integer类型的整数做相等比较:
1.如果Integer类型的两个数相等,且范围在-128~127,超过这个范围就需要重新创建对象了,范围内的用“==”返回true,其余的返回false。

2.一个基本类型的数int和一个包装类型Integer的数比较,用==会返回true,比较时候,Integer类型做了拆箱操作,拆箱后如果值相等即为true。这也是多态的体现。

3.Integer类型比较大小,要么调用Integer.intValue()转为基本类型用“==”比较,要么直接用equals比较。

重载与重写的区别

重载是发生在一个类中的,指的是多个方法在方法名相同时,参数列表不同,构成重载,注意重载与方法返回值和访问修饰符无关。
重写是发生在子类和父类之中的,指子类重写父类方法,且重写的方法的方法名和参数列表等与父类方法相同。抛出的异常要小于等于父类的方法抛出的异常,即子类抛出xxxxException,父类抛出的异常可以是xxxxException或Exception。

Ojbect类中的方法

Class<?> getClass() : 返回该类对象的运行时类
boolean equals(Object obj) : 判断该对象与指定对象是否相等
int hashCode() : 返回该对象的hashCode值,默认情况下这个地址是根据当前对象的内存地址计算出的hashCode,但实际中很多对象会重写这个方法进行覆盖。
toString() : 该对象的字符串表示,一般是将十六进制的hashcode字符串打印输出,同样,这也是很多类重写的方法之一
Object类提供了wait()、notify()、notifyAll()、这几个方法,通过这几个方法可以控制线程的暂停和运行,Object类也提供了clone()方法,用于当前对象的克隆,克隆之后的对象是不同的,是两个不同的对象,而且这个方法是由protected修饰的,只能被子类重写或者调用。

hashCode和equals之间的关系

hashCode是用于获取对象的哈希值,equals用于判断当前对象是否相等,
他们遵守以下约束:
如果两个对象相等。那这两个对象的哈希值一定相同
如果两个对象有相同的哈希值,但这两个对象不一定相等,因为可能存在哈希值冲突

Set集合对象是无序且元素不重复的,实现集合类的HashSet就是一个体现。
当在set中存放一个元素,需要判断当前的set中是否已经有当前元素,这个操作是每次调用一次添加方法就需要去校验的,所以理论上是不可以依靠暴力法循环去解决的。在HashSet中是按照获取对象哈希值,以及对象的equals方法解决的。
HashSet会调用对象hashCode方法获取到当前新加入的对象的哈希值,然后通过哈希值确定集合存放位置,如果当前这个哈希值存在对象,将对象的equals方法进行校验,如果相同说明对象重复,不保存新加入对象,如果equals方法返回false,说明发生了冲突。HashSet会用链式结构在同一位置进行保存多个对象,如果之后还有对象新增还是一样的hashCode,那就需要与这个链式上的所有对象进行equals,equals到链路上最后一个对象都是false才能新增。

==和equals有什么区别?

当前者被用于数值类型的比较时即比较数值大小
当被用于对象与对象之间的比较时,比较的是对象之间的内存地址是否一致
Object类中equals没重写是,通常是与前者一样的效果
被重写后一般是比较对象的值之间是否一致

String能否被继承?

不能,因为String是被final关键字修饰的
String在设计上从理论上讲,是不可以被继承的,因为String类一般存储账号,密码等敏感信息,所以从安全角度出发,如果可以被重写,那无法保证字符在操作过程是安全的。也可能存在SQL注入等风险。
在多线程中,绝对安全的领域只有不变的对象和值,可以在多个线程之间共享这些数据。
字符串不可变时,字符常量池才有意义。字符常量池中,可以减少创建相同的字符串,让不同的引用指向同一个字符串,节省堆内存,如果字符串可以变,字符常量池就会失去意义,每次创建字符对象时都需要开辟新的内存空间,占据更多内存。
如果String不被final关键字修饰,就可能存在String的子类,这些String的子类可以重写String的方法,改变字符串的值。违背了String不可变的初衷。

StringBuffer和StringBuilder的区别?

StringBuffer和StringBuilder都是可变的字符对象,他们有共同的父类AbstractStringBuilder,StringBuffer是线程安全的,通过sychronized实现线程安全。StringBuilder是线程不安全的。

接口与抽象类的区别?

接口更多的是一种规范,接口规定实现者必须实现的方法。对外提供哪些方法和服务,接口是多个程序之间的通信标准。
抽象类是一种模板式设计。
在使用的细节上说,二者有以下区别:
接口只包含抽象方法,静态方法,私有方法。
接口只能定义静态常量,不能定义普通的成员变量,相反抽象类可以定义普通成员变量,也可以定义静态常量。
接口不能包含构造器,而抽象类是可以包含构造器的。
接口也不能包含初始化块,抽象类可以有初始化块。

关键字

关于线程的安全的关键字,有voliate和sychronized,后面会单独出一篇讲解其原理。
大概JAVA基础就这些啦。
在这里插入图片描述

滑模控制理论(SMC)概述 滑模控制理论(SMC)概述一、背景二、数学理论三、高维拓展四、分析 一、背景 滑模控制理论(Sliding Mode Control, SMC)是一种建立在现代控制理论基础上的控制理论,主要数学核心为李雅普诺夫函数。 滑模控制的核心思想是建立一个滑模面,将被控系统拉取到滑模面上来,使系统沿着滑模面运动。滑模控制的一个优势是无视外部扰动和不确定参数,采用一种比较“暴力”的方式达到控制的目的。 其思想和反步法有些类似,但数学实现起来更加方便而不抽象。相比反步法,滑模控制没有复杂的数学计算,也不会出现“微分爆炸” 阅读详情

相关推荐

[kriging](一)网上下载的kriging克里金的C++程序的初步调试

笔者在网上下载了一份克里金的C++程序,水平有限,正在逐步地调试中。 初步 克里金法现在在许多软件都已经有集成了,据笔者所知: arcgis : 看过有的arcgis培训视频里面简略介绍了里面的插值方法,有克里金。 surfer :笔者用过这个,效果很好。 gocad :听说有 landmark &jason :研究生时候用的专业的石油物探软件,里面有克里金法,万恶的开始。 pykrig...

FOREST优快云 5610

Integer面试题

Integer i1=127; Integer i2=127; Integer i3=128; Integer i4=128; System.out.println(i1=i2);//true System.out.println(i3=i4);//false 结果为 : true false 原因分析:Integer在常量池中的存储范围为[-128,127],这个范围内的数字直接存储在常量池中,...

qq_43434078的博客 347

ROS2_IGH方案配置(二)——Ubuntu22.04 实时内核性能验证与调优

本文详细介绍了在Ubuntu22.04系统上配置ROS2_IGH方案时,如何验证和调优PREEMPT_RT实时内核性能。通过使用cyclictest工具进行基准测试和压力测试,分析中断与硬件延迟,并优化内核参数,确保系统满足工业控制领域对硬实时性的苛刻要求。文章还提供了针对ROS2的特殊优化建议和性能监控方案,帮助开发者实现毫秒级延迟的稳定控制。

weixin_30791095的博客 222

Integer源码,为什么缓存范围在【-128—+127】?

  public final class Integer extends Number implements Comparable&lt;Integer&gt;   Integer是final类型的,表示不能被继承,同时实现了Number类,并实现了Comparable接口;     java中数据类型可以分为两类,一种的基本数据类型,一种是引用数据类型。 基本数据类型的数据不是对...

伟大是熬出来的 8643

ESP32-P4开发板实战:从零配置VSCode环境到点亮MIPI-DSI屏幕(避坑指南)

本文详细介绍了ESP32-P4开发板在VSCode环境下的配置流程,包括SDK安装、idf_component.yml依赖管理,以及MIPI-DSI屏幕驱动的实现方法。通过实战指南帮助开发者避开常见配置陷阱,快速完成从环境搭建到屏幕点亮的全流程,适用于物联网和嵌入式开发场景。

pp12345的博客 739

深入CRSF协议数据包:手撕STM32代码,教你像调试串口一样分析ELRS遥控数据流

本文深入解析CRSF协议数据包,通过手撕STM32代码,教你如何像调试串口一样分析ELRS遥控数据流。从硬件准备到数据包捕获状态机设计,再到高级数据分析技巧和实战应用,全面覆盖CRSF协议的解析与优化,帮助开发者构建稳定可靠的通信系统。

weixin_29194693的博客 337

关于Integer的缓存问题

先看一段示例代码: public class TestMain { public static void main(String[] args) { Integer a = 66; Integer b = 66; System.out.println("a等于b:" + (a == b));//结果是true Integer ...

硅脂味咖啡的博客 763

多周期路径及set_multicycle_path详解

默认情况下,每条路径都被定义为单周期,即源触发器在时钟的任一边沿启动(launch)的数据都应该由目的触发器在时钟的下一上升沿捕获(capture)。 有的设计需要在数据被捕获前提供一些额外的周期,这类路径被称为多周期路径。 一、set_multicycle_path命令 命令格式如下: set_multicycle_path .........

Jackiezhang1993的博客 4万+

2019年最新Java面试题及答案整理(上)

1、面向对象的特征有哪些方面? 答:面向对象的特征主要有以下几个方面: 抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面。抽象只关注对象有哪些属性和行为,并不关注这些行为的细节是什么。 继承:继承是从已有类得到继承信息创建新类的过程。提供继承信息的类被称为父类(超类、基类);得到继承信息的类被称为子类(派生类)。继承让变化中的软件系统有了一定的延续性,同时...

不二的博客 810

DQN网络代码调用env.reset()后存储观测信息报错问题ValueError: setting an array element with a sequence.解决处理

**reset()函数返回的是一个array类型以及其中数据的type!模拟游戏进行学习任务。因此需要将observation指定为真正需要的array信息即可,得到的的变量observation类型与Agent存储时的。因此怀疑返回的observation有问题,于是通过。报错信息提示为数据维度不对应,也即最初通过。在强化学习DQN网络代码实现过程中,针对。

Vulcan_Q的博客 4092

MS1826A HDMI 多功能视频处理器 HDMI4进1出画面分割芯片

基本介绍 MS1826A 是一款多功能视频处理器,包含 4 路独立 HDMI 音视频输入通道、1 路 HDMI 音视 频输出通道以及 1 路独立可配置为输入或者输出的 SPDIF、I2S 音频信号。支持 4 个独立的字库定 制型 OSD;可处理隔行和逐行视频或者图形输入信号;有四路独立视频播放引擎可支持视频多路 播放。该产品提供了高质量的视频输出,有解隔行输入、视频增强,以及帧率转换的处理能力。 功能特征 视频输入输出  四路独立 HDMI 输入通道  一路 HDMI 输出通道  最高支持 4K@3

qq_45645383的博客 1781

Java基础之 Integer 类源码分析

Integer 类 源码说明 Java中Integer是基本数据类型int的包装类。也就是每一个Integer对象包含一个int类型的属性,是抽象类Number类的子类,位于java.lang包下。 部分源码: public final class Integer extends Number implements Comparable<Integer> { @Native ...

ouYang的博客 559

2021-10-29【微生物】丨基于qiime2工具16S/ITS分析全套流程(上)

目录摘要工具与方法使用命令结果展示总结二级目录三级目录 摘要 前两个月项目特别多,最近终于有机会闲下来写点文章,把之前搭建的流程梳理一遍。前同事分析16S/ITS使用的qiime1,我接手后感觉不太适应,希望能够使用新版本来搭建,于是花了几天时间重新搭了这个流程, 工具与方法 使用工具:qiime2 使用版本:qiime2-2021.4 参考文档:https://docs.qiime2.org/2021.4/(最新版本2021.8) 使用命令 在这里插入代码片 结果展示 总结 二级目录 三级目录 ...

1万+

JAVA面试宝典面经系列之JAVA基础-含JAVA基础语法,集合,线程等方面的使用与面试热点频点问题(二)

Java的序列化和反序列化 序列化可以将对象转化为字节序列,字节序列可以保存在磁盘上,也可以通过网络传输,并允许程序将字节序列恢复为原来的对象,其中对象的序列化是指将一个对象写入IO流,对象的反序列化指从IO流获取到JAVA对象。 如果对象需要支持序列化机制,则它的类需要实现Serializable接口,该接口是一个标记接口,没有提供任何的方法,只是表明对象可以被序列化,Java的很多类已经实现Serializable接口,String类,Date类都实现了。 如果需要实现序列化,需要用对象流ObjectI

cssnnd的博客 421

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Java面试突击指南:高频考点速成与场景题攻坚策略

在软件工程领域,构建高效、可靠的系统离不开对核心编程范式和底层原理的深刻理解。Java作为主流后端开发语言,其知识体系庞大,面试考察往往聚焦于基础原理、并发模型、JVM机制、数据库优化及框架设计等核心模块。理解这些技术的底层原理,如JVM内存管理与垃圾回收机制、MySQL的索引数据结构与事务隔离级别,是评估开发者工程能力的关键。这些知识不仅能解决日常开发中的性能瓶颈与并发安全问题,更在高并发、分布式等复杂业务场景中发挥核心价值。本文聚焦Java面试高频考点,通过‘以题带学’的方式,直击HashMap、线程池

weixin_34268169的博客 461

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Java自学资料!2021金九银十Java大厂面试题来袭

01 MySQL相关 1.1 面试问题 MySQL有哪些锁? 解释一下ACID都是什么 Innodb中索引的实现 B+树 AUTO_INCREMENT原理(考察并发情况) 数据库的索引有哪几种?为什么要用B+树来做索引?组合索引和几个单个的索引有什么区别?数据库的大表查询优化了解吗?MVCC机制了解不?MVCC机制有什么问题?怎么去解决这个问题?mysql慢语句调优做过吗?说说你是怎么做的? 1.2 我的MySQL学习笔记 (1)20个高频MySQL面试知识点 事务四大特性(ACID)原子性、一致性、

jixuczy的博客 166

Integer缓存IntegerCache详解

IntegerCache缓存区间为[-128,127]。在调用Integer.valueOf(int i)方法进行自动装箱时假若i的值在[-128,127]区间则生成的Integer对象会被存入缓冲区。当再次对该值进行装箱时会先去缓冲区中获取;如果取到则返回,如果没有取到则创建包装类对象存入缓冲区并返回。

谷哥的小弟 6609

Spring AI + GPT-5.5 + Ollama 配置教程:Base URL、超时与流式调用

由于不同 Spring AI、Spring Boot 小版本之间仍可能存在差异,创建项目时应检查 Spring Initializr、Spring AI BOM 和官方兼容矩阵,不要直接复制旧教程中的 Starter 名称和版本号。多人项目最好隔离不同客户端,并在脱敏前提下记录最终 URL、状态码、请求耗时、请求 ID 和模型 ID。Spring AI 接入模型 API,至少要同时确认 Starter、Base URL、请求路径、API Key、模型 ID、连接超时、读取超时和流式客户端这 8 项。

2601_95893075的博客 221

V8 机制、手写核心函数与 TypeScript 类型体操

或固定初始化(如数组先定长、对象先给全字段)保持类型与形状稳定;这些都比"换框架"更基础。只能处理纯数据(丢函数、Date、RegExp、循环引用报错)。生产级深拷贝要处理:原始值短路、循环引用、V8(Chrome / Node 的 JS 引擎)不是"解释一行跑一行"那么简单,它用。图:V8 执行流程——解释执行 + 热点优化,优化失败会 Deopt 回退。JS 内存自动管理,但"自动"不等于"不会漏"。是"固定间隔最多执行一次"。手写 Promise 是"懂异步"的试金石。是"停下后才执行最后一次",

qq_38468358的博客 328

【JVM】对象内存布局

HotSpot JVM 中,Java 对象内存布局由对象头(12字节,含Mark Word与压缩Klass Pointer)、实例数据及对齐填充构成,总大小为8字节倍数。对象头支持锁状态动态复用,指针压缩使引用仅4字节,但堆超32GB时失效。实例字段按类型优先级重排序以减少间隙,最小对象大小为16字节。通过JOL工具可精准验证布局,理解锁机制、GC、伪共享等底层行为。

2301_79732484的博客 149

Spring Boot 数据源与 MyBatis(-Plus) 自定义配置详解

本文详解 Spring Boot 中单数据源环境下 HikariCP 与 MyBatis-Plus 的自定义配置。通过手动声明 SqlSessionFactory,实现下划线转驼峰、日志输出、一级缓存策略等精细化控制。结合 HikariCP 核心参数调优(如最大连接数、连接生命周期),确保高性能与稳定性。适用于仅需访问单一数据库的场景,避免多数据源复杂性,兼顾性能与可维护性。

BADAO_LIUMANG_QIZHI的博客 192

Java EE 进阶:8.MyBatis 操作数据库(入门)(第一弹)

Java EE 进阶:8.MyBatis 操作数据库(入门)(第一弹)

要努力去发光,而不是被照亮~ 114

LeetCode Hot 100 二叉树专题(二)3 题(Java)

本篇文章共 3 题:543. 二叉树的直径、102. 二叉树的层序遍历、108. 将有序数组转换为二叉搜索树。 每道题都统一按「① 题目分析 & 解题思路 → ② 常见解法(附代码)及讲解 → ③ 知识点总结」的顺序组织;代码使用 Java 编写,节点定义沿用 LeetCode 默认的 TreeNode。

2401_88612756的博客 362

Decorator

TaskDecorator 是异步场景下"跨线程传递上下文"的标准方案,主要用于传递 MDC、用户信息、数据源路由等上下文数据,核心价值是让异步任务的日志链路不中断、业务上下文不丢失。TaskDecorator 是 Spring 提供的一个钩子接口,用于在异步任务执行前对 Runnable 进行包装,常用于跨线程传递上下文。如果你在项目中遇到具体的异步上下文传递问题,可以把代码贴出来,我帮你给出最合适的 Decorator 方案 👍。✅ 核心能力:在线程切换时,把"父线程的上下文"搬到"子线程"

wlwork66的博客 102

JDK 下载安装:装完 Java 提示「不是内部或外部命令」?环境变量没配

JDK 是写 Java 程序必须装的东西。它包含运行 Java 的虚拟机(JRE)和编译 Java 的编译器(javac)——装了它,能跑、.java文件能编译成可执行程序。免费,学习和小规模生产都不花钱。

科小怪的博客 625

数据库乐观锁深度解析:MySQL、PostgreSQL 实战 + Spring Boot 集成指南

Oracle 提供了ORA_ROWSCN伪列(System Change Number),记录最后修改行的 SCN,类似 PostgreSQL 的xmin。实践中通常仍使用 version 字段方案,逻辑与 MySQL 完全相同。-- Oracle:通过 ORA_ROWSCN 实现乐观锁-- 更新时比对 SCN// 自定义注解// AOP 切面@Aspect@Component@Slf4jtry {

yjc_1111的专栏 396

C++ 多态详解:作用、原理与实战用法

多态是C++面向对象的核心特性,通过虚函数实现运行期动态绑定,使同一接口在不同对象上表现出不同行为。其核心作用包括统一接口、提升可扩展性、降低耦合、支持运行时分派与批量处理。实现依赖虚函数表(vtable)和虚指针(vptr),需注意虚析构函数、对象切片等陷阱。相比编译期多态(模板),运行期多态灵活性高但有调用开销。合理结合两者,可兼顾代码的灵活性与性能,是构建可扩展、低耦合系统的关键。

2402_85743155的博客 376
上一篇: Redis为什么比MYSQL快,理由不止单线程,深耕解析Redis底层结构
下一篇: JAVA面试宝典面经系列之JAVA基础-含JAVA基础语法,集合,线程等方面的使用与面试热点频点问题(二)
瓦坎达forever
博客等级 码龄7年 143粉丝 57原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值