自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Vinfol的博客

Vinfol的博客

  • 博客(41)
  • 收藏
  • 关注

原创 【JAVA】注解基础:元注解与自定义注解(30)

Retention:指定注解的保留策略,即注解在什么阶段可用。它有三个取值::注解只在源码中保留,编译时会被丢弃。:注解在编译时保留在字节码中,但在运行时不会被加载。:注解在运行时也会被保留,可以通过反射机制读取。@Target:指定注解可以应用的程序元素类型,例如类、方法、字段等。可以使用枚举来指定,如表示可以应用于类、接口等,表示可以应用于方法。:指定注解是否会被包含在 JavaDoc 文档中。@Inherited:指定注解是否可以被继承。如果一个类使用了带有@Inherited。

2025-05-23 09:30:00 553

原创 【JAVA】泛型高级用法:通配符与PECS原则(29)

解答思路:PECS 原则即“Producer Extends, Consumer Super”,当一个泛型类型主要用于生产数据(读取数据)时,使用?extends T通配符;当一个泛型类型主要用于消费数据(写入数据)时,使用?super T通配符。

2025-05-22 09:30:00 451

原创 【JAVA】比较器Comparator与自然排序(28)

Comparator是 Java 中的一个函数式接口,位于java.util包下。它用于定义对象之间的比较规则,允许我们根据自定义的逻辑对对象进行排序。与对象的自然排序(实现Comparable接口)不同,Comparator可以在不修改对象类的情况下,灵活地定义多种不同的排序方式。

2025-05-21 09:16:09 1112

原创 【JAVA】Iterator与Fail - Fast机制源码解读(27)

Iterator解答思路:Fail - Fast 机制是 Java 集合框架中的一种错误检测机制,当一个集合在被某个Iterator遍历的同时被其他线程或本线程的其他操作修改时,Iterator会立即抛出。它通过一个modCount变量来实现,modCount记录了集合结构被修改的次数,Iterator在遍历过程中会检查modCount是否发生变化。

2025-05-20 09:00:00 731

原创 【JAVA】ConcurrentHashMap线程安全实现原理(26)

缺点是在某些情况下,锁的粒度可能不够细,仍然会存在锁竞争的问题,并且分段锁的实现相对复杂,增加了代码的复杂度。当进行写操作时,首先会通过 CAS 操作尝试更新节点,如果 CAS 操作失败,则使用。使用分段锁机制,将整个哈希表分成多个段,每个段有自己的锁,不同线程可以同时访问不同的段。:在 Java 7 中,通过分段锁机制,每个段有自己的锁,线程在访问某个段时需要获取该段的锁。锁,使用数组存储节点,当进行写操作时,先尝试 CAS 操作,失败后使用。当进行写操作时,线程需要先获取对应段的锁,然后再进行操作。

2025-05-19 09:15:00 896

原创 【JAVA】HashMap深度剖析:哈希冲突与扩容机制(25)

HashMap。

2025-05-18 08:00:00 614

原创 【JAVA】ArrayList与LinkedList源码级性能对比(24)

但如果需要先定位到插入位置,由于需要遍历链表,时间复杂度为 O(n)。但如果需要先定位到删除位置,由于需要遍历链表,时间复杂度为 O(n)。时,如果已知元素的大致数量,可以通过构造函数指定初始容量,避免频繁的扩容操作,提高性能。在需要展示大量数据,并且用户可能会频繁根据索引查看数据的场景中,如表格数据展示,可以使用。的随机访问时间复杂度为 O(1),性能较高。在消息队列系统中,需要频繁在队列的头部和尾部进行插入和删除操作,此时可以使用。方法实现扩容,会创建一个新的数组,并将原数组的元素复制到新数组中。

2025-05-17 11:30:00 1574

原创 【JAVA】集合框架概述:List/Set/Map核心区别(23)

接口定义了集合的基本操作和行为,实现类是对接口的具体实现,算法则提供了对集合进行操作的方法。保证键按照自然顺序或指定的比较器顺序排列,基于红黑树实现,查找、插入和删除操作的时间复杂度为 O(log n)。是一个键值对的集合,它存储的是键和值之间的映射关系。是一个有序的集合,它允许存储重复的元素。不保证键的顺序,基于哈希表实现,查找和插入操作的时间复杂度为 O(1)。是一个不允许存储重复元素的集合,它不保证元素的顺序。存储键值对,键唯一,通过键访问值,适用于根据键快速查找值的场景。如果需要频繁随机访问元素,

2025-05-16 09:15:00 1211

原创 【JAVA】泛型基础:类型擦除与桥接方法揭秘(22)

解答思路:类型擦除是 Java 泛型的实现方式,在编译时,编译器会将泛型类型参数擦除,替换为它们的边界类型(如果没有指定边界,则替换为Object其影响包括无法在运行时获取泛型类型信息,泛型数组的创建受限等。

2025-05-15 09:41:27 699

原创 【JAVA】自定义异常与异常链传递实战(21)

在 Java 中,自定义异常类通常是通过继承Exception类(用于创建受检查异常)或类(用于创建非受检查异常)来实现的。// 自定义受检查异常类// 无参构造方法super();// 带消息的构造方法// 带消息和原因的构造方法上述代码中,类继承自Exception类,并且提供了三种常见的构造方法,方便在不同场景下抛出异常时携带不同的信息。如果要创建非受检查异常,只需继承// 自定义非受检查异常类super();// 自定义业务异常类// 模拟数据库操作类。

2025-05-15 09:35:57 1290

原创 【JAVA】异常处理机制:try - catch - finally底层原理(20)

在 Java 中,异常是指程序在运行过程中出现的不正常情况。异常处理机制允许程序在出现异常时进行捕获和处理,从而避免程序崩溃。Java 中的异常分为两类:受检查异常(Checked Exception)和非受检查异常(Unchecked Exception)。受检查异常必须在方法签名中声明或者进行捕获处理,而非受检查异常则不需要。解答思路:可以通过继承Exception类(受检查异常)或类(非受检查异常)来自定义异常类。然后在需要抛出异常的地方使用throw关键字抛出该异常对象。

2025-05-14 09:30:00 1003

原创 【JAVA】枚举类:单例模式与线程安全实践(19)

Java枚举类是一种特殊的类,用于表示一组固定的常量,具有类型安全和可迭代的特点。它常用于表示固定值集合或状态机。枚举类在实现单例模式时具有显著优势,因其天生线程安全且能防止反序列化和反射攻击,确保单例的唯一性。实际业务中,枚举类可用于配置管理和权限管理等场景。面试中常见问题包括枚举类实现单例模式的优势、实例创建时机及如何添加方法和属性。性能优化建议包括合理使用枚举类、避免复杂初始化操作及注意序列化问题。扩展学习资源推荐官方文档和相关书籍。思考题涉及枚举类实现接口、抽象方法及性能优化。

2025-05-13 09:15:00 606

原创 【JAVA】内部类与匿名类:Lambda表达式前传(18)

内部类是定义在另一个类内部的类。它可以访问外部类的成员,包括私有成员。成员内部类:定义在外部类的成员位置,与成员变量和成员方法平级。示例代码如下:静态内部类:使用static关键字修饰的内部类。静态内部类只能访问外部类的静态成员。示例代码如下:局部内部类:定义在方法内部的类。局部内部类只能在定义它的方法内部使用。

2025-05-12 10:17:40 664

原创 【JAVA】final关键字:类、方法、变量的终极约束(17)

在实际业务中,经常需要定义一些常量,如数学常数、配置参数等。使用final关键字可以确保这些常量的值不会被意外修改。

2025-05-11 09:00:00 891

原创 【JAVA】抽象类与接口:设计模式中的应用对比(16)

抽象类是使用abstract关键字修饰的类。它不能被实例化,主要用于作为其他类的基类,提供一些通用的属性和方法。抽象类可以包含抽象方法和具体方法。抽象方法是使用abstract关键字修饰的方法,它只有方法声明,没有方法体,子类必须实现这些抽象方法。在这个例子中,Shape是一个抽象类,包含一个具体方法getColor和一个抽象方法area。

2025-05-10 11:45:00 1065

原创 【JAVA】继承与多态:方法重写与动态绑定(15)

解答思路:方法重写是指子类重写父类的方法,方法名、参数列表和返回类型必须相同。规则包括方法签名必须相同、访问修饰符不能更严格、不能抛出比父类更多的异常。解答思路:动态绑定是基于对象的实际类型而不是引用类型来调用方法。在 Java 中,通过虚方法表来实现动态绑定。每个类都有一个虚方法表,存储了该类的所有虚方法的地址。当调用一个对象的方法时,JVM 根据对象的实际类型找到对应的虚方法表,然后在虚方法表中查找要调用的方法的地址,最后调用该方法。

2025-05-09 11:15:00 728

原创 【JAVA】构造方法与对象初始化流程(14)

构造方法是一种特殊的方法,用于创建和初始化对象。它的名称必须与类名相同,并且没有返回类型(连void也没有)。// 构造方法解答思路:如果一个类没有定义任何构造方法,Java 编译器会自动为该类生成一个无参构造方法,也称为默认构造方法。默认构造方法的方法体为空,它的作用是调用父类的无参构造方法。但如果类中定义了有参构造方法,编译器就不会再自动生成默认构造方法。

2025-05-08 10:30:00 652

原创 【JAVA】面向对象编程(OOP)核心概念解析(13)

在 Java 中,类是对象的抽象描述,它定义了对象的属性和行为。类的定义使用class// 属性// 构造方法// 方法在这个例子中,Person类有两个属性name和age,一个构造方法用于初始化对象,还有一个方法sayHello用于输出信息。解答思路:面向对象编程是一种编程范式,它将数据和操作数据的方法封装在一起,通过类和对象来组织代码。核心概念包括类和对象、封装、继承和多态。

2025-05-07 12:00:00 658

原创 【JAVA】包机制与访问权限:封装设计思想(12)

在 Java 中,包(Package)是一种组织类和接口的方式,它可以将相关的类和接口放在一起,便于管理和维护。包的命名通常遵循反向域名的规则,例如。这样可以确保包名的唯一性,避免命名冲突。

2025-05-06 13:18:36 629

原创 【JAVA】StringBuilder与StringBuffer:线程安全与性能权衡(11)

对象时,尽量根据实际情况设置合适的初始容量,减少扩容操作带来的性能开销。扩容操作会创建一个新的数组,并将原数组的内容复制到新数组中,比较耗时。尽量将多个小的操作合并成一个大的操作,减少方法调用的次数。例如,在拼接字符串时,可以先将需要拼接的内容整理好,然后一次性进行拼接。在单线程环境下,如解析文件、处理数据等场景,经常需要进行大量的字符串拼接操作。是非线程安全的,没有使用同步机制,因此在单线程环境下性能更高。:可以在创建对象时指定合适的初始容量,避免频繁的扩容操作。,因为它的同步机制会带来额外的性能开销。

2025-05-05 09:45:00 771

原创 【JAVA】String类深度解析:不可变性与常量池(10)

常量池是一个特殊的内存区域,用于存储字符串常量。当使用双引号创建字符串时,JVM 会首先检查常量池中是否已经存在该字符串。对象的不可变性,频繁的字符串拼接会创建大量的临时对象,导致性能问题。对象的不可变性,频繁的字符串拼接会创建大量的临时对象,导致性能问题。对象时,会在堆内存中创建一个新的对象,无论常量池中是否已经存在相同的字符串。运算符比较的是两个字符串对象的引用是否相等,而。运算符比较的是两个字符串对象的引用是否相等,而。方法比较的是两个字符串的内容是否相等。方法比较的是两个字符串的内容是否相等。

2025-05-04 14:30:00 918

原创 【JAVA】数组与内存模型:二维数组底层实现(9)

在 Java 中,一维数组是相同类型元素的有序集合。声明并分配内存这里创建了一个长度为 5 的int类型数组,数组中的每个元素初始值为 0。声明并初始化这种方式直接为数组元素赋值,数组长度由初始化元素的个数决定。访问数组元素可以通过下标进行,下标从 0 开始。// 输出 3。

2025-05-03 16:00:00 660

原创 【JAVA】方法定义与重载:JVM方法调用机制(8)

在Java中,方法是一段具有特定功能的代码块,它可以接受参数并返回一个值。方法的定义包括方法的修饰符、返回类型、方法名、参数列表和方法体。修饰符 返回类型 方法名(参数列表) {// 方法体return 返回值;System.out.println("两数之和为: " + result);在这个例子中,add方法使用修饰符,返回类型为int,方法名是add,参数列表包含两个int类型的参数a和b,方法体中执行了加法运算并返回结果。解答思路。

2025-05-02 13:00:00 744

原创 【JAVA】循环结构:for/while/递归的适用场景(7)

在Java中,常见的循环结构有for循环、while循环和递归。循环结构用于重复执行一段代码,直到满足特定的条件。

2025-05-01 11:00:00 786

原创 【JAVA】控制流语句:if - else与switch性能对比(6)

在Java中,控制流语句用于控制程序的执行流程。常见的控制流语句包括条件语句(if - else)和选择语句(switch)。

2025-04-30 10:30:00 1112

原创 【JAVA】运算符与表达式:陷阱案例与面试考点(5)

在 Java 中,表达式的求值遵循一定的优先级规则,优先级高的运算符先进行计算。例如,乘法和除法的优先级高于加法和减法。:在 Java 中,当两个整数进行除法运算时,结果会是整数,小数部分会被截断。可以将复杂的表达式拆分成多个简单的表达式,提高代码的可读性和性能。逻辑与和逻辑或运算符的短路特性可以避免不必要的计算,提高代码的性能。需要注意的是,在整数除法中,如果两个操作数都是整数,结果也会是整数,小数部分会被截断。在需要精确计算的场景中,要注意整数除法的截断问题,避免使用整数除法得到不准确的结果。

2025-04-29 13:45:00 668

原创 【JAVA】数据类型与变量:深入理解栈内存分配(4)

每个线程都有自己的栈内存,栈内存的分配和释放是由系统自动完成的,速度较快。:基本数据类型直接存储数据的值,而引用数据类型存储的是对象的引用。基本数据类型在栈内存中分配内存,而引用数据类型的对象在堆内存中分配内存,引用变量在栈内存中存储对象的引用。:栈内存的特点是分配和释放速度快,由系统自动管理,主要用于存储局部变量和方法调用的上下文信息。尽量减少局部变量的使用,避免在方法中创建过多的局部变量,尤其是大对象。引用数据类型的变量存储的是对象的引用(内存地址),而不是对象本身。例如,在一个电商系统中,需要使用。

2025-04-29 09:25:07 907

原创 【JAVA】第一个Java程序:从HelloWorld到编译原理(3)

解答思路:字节码是Java程序编译后生成的中间形式的代码,它不是特定于某个平台的机器码。Java使用字节码的主要原因是实现跨平台性。由于字节码可以在任何安装了JVM的平台上运行,开发者只需要编写一次代码,就可以在不同的操作系统和硬件平台上运行,大大提高了开发效率和程序的可移植性。

2025-04-28 13:30:00 791

原创 【JAVA】JDK安装与环境变量配置实战(2)

在开发 Java 项目时,需要安装 JDK 并配置好环境变量,才能使用 Java 编译器和 Java 虚拟机进行代码的编译和运行。在将 Java 应用部署到服务器上时,需要在服务器上安装 JDK 并配置好环境变量,才能保证应用能够正常运行。例如,将一个 Spring Boot 应用部署到 Linux 服务器上,需要先在服务器上安装 JDK,然后配置好环境变量,最后使用。JDK(Java Development Kit)是 Java 开发的基础工具包,包含了 Java 编译器、Java 虚拟机等重要组件。

2025-04-28 09:19:59 1117

原创 【JAVA】Java发展史与生态体系全景解读(1)

Spring 框架的核心是 IoC 和 DI,解释 IoC 是将对象的创建和依赖关系的管理交给 Spring 容器,DI 是通过构造函数、Setter 方法等方式将依赖对象注入到目标对象中。企业级应用通常需要处理复杂的业务逻辑和大量的数据,Java 的面向对象特性和丰富的类库使其成为首选。根据项目的规模和需求选择合适的开发工具,如小型项目可以使用 Eclipse,大型项目可以使用 IntelliJ IDEA。使用高效的算法和数据结构,避免创建过多的对象,及时释放不再使用的资源。

2025-04-27 17:27:46 895

原创 【JAVA】解密 Java 类加载机制:从双亲委派到模块化革命

类加载器(ClassLoader)是 Java 生态中最为神秘的组件之一,它像一位沉默的图书管理员,默默决定着每个类的生死存亡。本文将深入解析类加载的底层运作机制,揭示热部署、模块隔离等高级特性的实现原理。

2025-04-27 08:59:43 254

原创 【JAVA】深入解析类型擦除:泛型的幕后机制与陷阱规避

Java 泛型自 1.5 版本引入后,极大提升了代码的类型安全性和可读性。但隐藏在泛型优雅语法糖背后的类型擦除机制(Type Erasure),却常常成为开发者困惑的根源。本文将深入剖析这一设计决策的底层逻辑,揭示那些容易引发运行时异常的隐患场景。

2025-04-25 15:54:14 678

原创 【JAVA】深入解析类加载机制:从字节码到内存的暗黑旅程

编译时常量(基本类型/String字面量)会内联到使用位置。反射访问可绕过内联优化(见下文验证方法)8. 类没有编译时常量被其他类内联引用。9. 未被 JIT 编译代码持有引用。10. 未参与栈上替换(OSR)优化。尚未初始化(处于默认值0状态)静态字段初始化顺序影响行为。敏感信息禁止使用编译时常量。按代码顺序初始化静态字段。配置参数必须通过方法获取。强制通过方法访问关键值。

2025-04-25 14:58:17 826

原创 【JAVA】深入解读 Java 序列化:那些被忽视的陷阱与实现细节

Java 序列化机制就像一把双刃剑,在提供便利的同时也暗藏风险。深入理解其实现原理和潜在问题,能帮助开发者在实际项目中做出更合理的技术选择。随着云原生和微服务架构的普及,对序列化机制的理解深度将成为区分普通开发者和架构师的重要标尺。

2025-04-24 18:08:55 827

原创 [coze-扣子空间] 邀请码限量开放-需要自取

扣子空间 邀请码

2025-04-24 17:31:02 298 2

原创 【JAVA】:StringBuilder VS StringBuffer VS string

特性String​​可变性​​不可变可变可变​​线程安全​​是(因不可变)否是(synchronized)​​性能​​低(频繁修改时)高中(同步开销)​​适用场景​​常量或少量修改单线程高频修改多线程高频修改​​优先选择顺序​​:单线程 →;多线程 →;不可变场景 →String。

2025-04-23 09:50:11 339

原创 [日常代码优化系列] Java- 1.多个if 和is+elseif 组合

可以预见的是:在这个场景下,测试的结果,testMathod2 优于 testMathod。这是因为,testMathod2 在首次判断第一个条件后,后续的else if 并不会在进行判断,从而更加节省时间;代码咋一看 似乎没什么毛病,跑的问题不大;因此,在同种逻辑条件下,相比较多次用if的组合,建议宝子们 用if+elseif的组合 更加择优!日常工作中,大家会经常遇到条件判断的情况,感兴趣的宝子们可以自己测试下。

2024-08-30 10:14:20 204

原创 Java Springboot MultipartFile 进行Excel文件解析,并返回list map 对象 - 工具类

Java Springboot MultipartFile 进行Excel文件解析,并返回list map 对象。

2024-08-20 15:25:52 452 1

原创 linux docker 镜像存储迁移成功实践

无需重新导出导入镜像,直接迁移docker到新目录

2024-04-27 15:49:58 439 1

原创 Docker 启动maxwell 异常问题2:ERROR Maxwell - SQLException: Communications link failure

基于上一篇博文问题的条件下;我们考虑在另外一台机器上进行maxwell的配置。首先查看docker版本情况:docker versionClient: Docker Engine - CommunityVersion: 20.10.12API version: 1.41Go version: go1.16.12Git commit: e91ed57Built: Mon Dec 13 11:4...

2022-01-24 15:24:47 3744 3

java springboot MultipartFile 根据注解自动识别表头对应对象字段名称,方法返回List-Map 对象

语言:java 框架:SpringBoot, apache.poi 文件对象: MultipartFile 根据注解(ExcelNameAnno)自动识别表头对应对象字段名称,方法返回Map<String, String>对象 -- 有问题请联系:vinfol@qq.com 或私信 -- 主要实现: 通过动态传入对象class,解析class对象中包含ExcelNameAnno注解方式, 表头返回对应的对象,从第2行开始,解析每列的数据,根据表头定义list map对象key值; 方法返回: [ { "fieldName1": "fieldValue1", "fieldName2": "fieldValue2", "fieldName3": "fieldValue3", "fieldName4": "fieldValue4" } ]

2024-08-20

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除