学海无涯
naocs、swagger、rabbitmg、redis、xxl-job、ruoy、security、 JWT、 sentinel, seata、 mybatis-plus, TDengine,nebula graph、 milvus、 MinlO/ FastDFS/ 七牛云、XXL-J0B.APIFOX、pageHelper、自定义注解、雪花算法、策略模式、python脚本、git、github
文章作者: coder-xuyong
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 coder-xuyong!
相关推荐

2025-09-25
jvm类加载
类加载机制 类是在运行期间动态加载的。 类的加载指的是将类的 .class 文件中的二进制数据读入到内存中,并转为可执行的代码的过程。 类的生命周期 Java 类的完整生命周期包括图片中这几个阶段: 加载、验证、准备、初始化和卸载这 5 个阶段的顺序是确定的,类的加载过程必须按照这种顺序按部就班地开始。而解析过程在某些情况下可以在初始化阶段之后再开始,这是为了支持 Java 的动态绑定。 类加载过程是指加载、验证、准备、解析和初始化这 5 个阶段。 (一)加载加载流程: 通过类的全限定名获取定义此类的二进制字节流 将字节流所代表的静态存储结构转换为方法区的运行时数据结构 在内存中生成一个代表该类的java.lang.Class对象 加载来源: 本地文件系统: .class文件 网络下载: Applet 压缩包: JAR、WAR文件 运行时计算生成: 动态代理 其他文件生成: JSP (二)验证验证是链接阶段的第一步。验证的目标是确保 Class 文件的字节流中包含的信息符合当前虚拟机的要求,并且不会危害虚拟机自身的安全。 验证阶段大致会完成 4 个阶段的检验动作: 文...

2026-07-31
场景分析
⭐海量数据下的实时模糊检索问题核心思路是:将“模糊检索”工作从关系型数据库(如MySQL)中剥离,交给专业的搜索/分析引擎来处理。 例如人:通过名字模糊查询用户,2000w数据,20%每月数据量增长,返回列表要怎么做?方案一:mysql硬撑方案二:引入第三方专业引擎,如ES,这是处理海量数据模糊搜索的标准工业级方案。方案三:高阶方案——分库分表 + ES 线程安全问题下面这段代码有什么线程安全问题,有几种方案解决? 12345678910public class demo { public void test(){ ReentrantLock lock = new ReentrantLock(); lock.lock(); //处理业务 lock.unlock(); }} 问题: 锁是局部变量,无法实现线程间互斥 未使用 try-finally,可能造成锁永不释放 解决方案一:将锁提升为成员变量,并配合使用try-finally 123456789101112...

2025-06-22
Java查漏补缺
基础工具类String String 类能被继承吗? String,StringBuffer,StringBuilder 的区别。 String 类不能被继承。因为其被 final 修饰,所以无法被继承。 StringBuffer,StringBuilder 拼接字符串,使用 append 比 String 效率高。因为 String 会隐式 new String 对象。 StringBuffer 主要方法都用 synchronized 修饰,是线程安全的;而 StringBuilder 不是。 面向对象 抽象类和接口的区别? 类可以继承多个类么?接口可以继承多个接口么?类可以实现多个接口么? 类只能继承一个类,但是可以实现多个接口。接口可以继承多个接口。 继承和聚合的区别在哪? 一般,能用聚合就别用继承。聚合是“has-a”,类似 school 类存在 teachers 的变量。 反射⭐ 创建实例 反射创建实例有几种方式? 通过反射来创建实例对象主要有两种方式: 用 Class 对象的 newInstance 方法。 用 Constructor 对象的 newIns...

2025-09-15
Java 编码和加密
Java 编码和加密Base64 编码Base64 原理Base64 内容传送编码是一种以任意 8 位字节序列组合的描述形式,这种形式不易被人直接识别。 Base64 是一种很常见的编码规范,其作用是将二进制序列转换为人类可读的 ASCII 字符序列,常用在需用通过文本协议(比如 HTTP 和 SMTP)来传输二进制数据的情况下。Base64 并不是加密解密算法,尽管我们有时也听到使用 Base64 来加密解密的说法,但这里所说的加密与解密实际是指编码(encode) 和 解码(decode)的过程,其变换是非常简单的,仅仅能够避免信息被直接识别。 Base64 算法主要是将给定的字符以字符编码(如 ASCII 码,UTF-8 码)对应的十进制数为基准,做编码操作: 将给定的字符串以字符为单位,转换为对应的字符编码。 将获得字符编码转换为二进制 对二进制码做分组转换,每 3 个字节为一组,转换为每 4 个 6 位二进制位一组(不足 6 位时低位补 0)。这是一个分组变化的过程,3 个 8 位二进制码和 4 个 6 位二进制码的长度都是 24 位(3*8 = 4*6 = 24)。...

2025-09-16
理解 Java 类加载器
深度理解 Java SPISPI 简介SPI 全称 Service Provider Interface,是 Java 提供的,旨在由第三方实现或扩展的 API,它是一种用于动态加载服务的机制。它的作用是让程序能够自动发现、加载和使用第三方提供的实现,从而实现基于接口的解耦和可插拔的扩展架构。 Java SPI 有四个要素: SPI 接口:为服务提供者实现类约定的接口或抽象类。 SPI 实现类:实际提供服务的实现类。 SPI 配置:Java SPI 机制约定的配置文件,提供查找服务实现类的逻辑。配置文件必须置于 META-INF/services 目录中,并且,文件名应与服务提供者接口的完全限定名保持一致。文件中的每一行都有一个实现服务类的详细信息,同样是服务提供者类的完全限定名称。 ServiceLoader:Java SPI 的核心类,用于加载 SPI 实现类。 ServiceLoader 中有各种实用方法来获取特定实现、迭代它们或重新加载服务。 SPI 示例 定义接口需要定义一个 SPI 接口,和普通接口并没有什么差别。 123public interface Dat...

2025-10-16
Java并发核心机制
Java 并发核心机制 Java 对于并发的支持主要汇聚在 java.util.concurrent,即 J.U.C。而 J.U.C 的核心是 AQS。 J.U.C 简介Java 的 java.util.concurrent 包(简称 J.U.C)中提供了大量并发工具类,是 Java 并发能力的主要体现(注意,不是全部,有部分并发能力的支持在其他包中)。从功能上,大致可以分为: 原子类 - 如:AtomicInteger、AtomicIntegerArray、AtomicReference、AtomicStampedReference 等。 锁 - 如:ReentrantLock、ReentrantReadWriteLock 等。 并发容器 - 如:ConcurrentHashMap、CopyOnWriteArrayList、CopyOnWriteArraySet 等。 阻塞队列 - 如:ArrayBlockingQueue、LinkedBlockingQueue 等。 非阻塞队列 - 如: ConcurrentLinkedQueue 、LinkedTransferQueue...
评论
