自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(123)
  • 收藏
  • 关注

原创 零基础入门Spring源码

本文主要介绍Spring的执行流程梳理,主线为Spring源码中bean创建到销毁的流程梳理和其中关键的接口,如:BeanFactory、BeanDefinition、PostProcessor等。

2024-12-24 17:52:13 1891

原创 一文看懂MySQL索引下推(ICP)

本文主要介绍MySQL索引下推(ICP)和索引下推底层原理

2024-12-10 12:48:49 1846 4

原创 一文搞懂 URI 和 URL

本文主要介绍URI、URL和URN的结构与区别

2024-10-14 19:04:12 4919

原创 Springboot整合websocket(附详细案例代码)

本文主要介绍WebSocket的概念,和在springboot项目中的使用。

2024-09-09 21:00:00 9233

原创 Java实现MQTT通信(发布订阅消息)

java实现MQTT的消息发布与订阅

2024-08-20 22:17:46 6987

原创 JVM类加载器详解

类加载器虽然只用于实现类的加载动作,但它在Java程序中起到的作用却远超类加载阶段。对于任意一个类,都必须由加载它的类加载器和这个类本身一起共同确立其在Java虚拟机中的唯一性,一个类加载器,都拥有一个独立的类名称空间。

2025-03-30 22:01:25 646

原创 JVM类加载过程详解

类从被加载到虚拟机内存中开始到卸载出内存为止,它的整个生命周期可以简单概括为 7 个阶段:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)和卸载(Unloading)。其中,验证、准备和解析这三个阶段可以统称为连接(Linking)。

2025-03-23 22:13:33 1112

原创 JVM类文件结构详解

在 Java 中,JVM 可以理解的代码就叫做字节码(即扩展名为 .class 的文件),它不面向任何特定的处理器,只面向虚拟机。Java 语言通过字节码的方式,在一定程度上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言可移植的特点。所以 Java 程序运行时比较高效,而且,由于字节码并不针对一种特定的机器,因此,Java 程序无须重新编译便可在多种不同操作系统的计算机上运行。

2025-03-23 19:41:56 943

原创 JVM垃圾回收笔记02-垃圾回收器

如果说回收(收集)算法是内存回收的方法论,那么垃圾回收(收集)器就是内存回收的具体实现。虽然有各种的收集器,但并非要挑选出一个最好的收集器。因为直到现在为止还没有最好的垃圾收集器出现,更加没有万能的垃圾收集器,我们能做的就是根据具体应用场景选择适合自己的垃圾收集器。

2025-03-22 23:46:49 1418

原创 JVM垃圾回收笔记01-垃圾回收算法

Java 堆是垃圾收集器管理的主要区域,因此也被称作 GC 堆(Garbage Collected Heap)。从垃圾回收的角度来说,由于现在收集器基本都采用**分代垃圾收集算法**,所以 Java 堆被划分为了几个不同的区域,这样我们就可以根据各个区域的特点选择合适的垃圾收集算法。

2025-03-22 23:44:56 1042

原创 JVM内存结构笔记06-HotSpot虚拟机对象探秘

Java是一门面向对象的编程语言,Java程序运行过程中无时无刻都有对象被创建出来。在语言层面上,创建对象通常(例外:复制、反序列化)仅仅是一个new关键字而已,而在虚拟机中,对象(文中讨论的对象限于普通Java对象,不包括数组和Class对象等)的创建又是怎样一个过程呢?基于实用优先的原则,本文以最常用的虚拟机HotSpot和最常用的内存区域Java堆为例,深入探讨一下HotSpot虚拟机在Java堆中对象分配、布局和访问的全过程。

2025-03-20 19:39:31 637

原创 JVM内存结构笔记05-直接内存

直接内存是一种特殊的内存缓冲区,并不在 Java 堆或方法区中分配的,而是通过 JNI 的方式在本地内存上分配的。直接内存并不是虚拟机运行时数据区的一部分,也不是虚拟机规范中定义的内存区域,但是这部分内存也被频繁地使用。而且也可能导致 OutOfMemoryError 错误出现。

2025-03-13 19:02:16 652

原创 JVM中常量池和运行时常量池、字符串常量池三者之间的关系

在Java虚拟机(JVM)中,常量池、运行时常量池和字符串常量池是三个相关但又有所区别的概念。本文将详细解释这三个概念及其相互的联系。

2025-03-13 19:01:42 1028

原创 JVM内存结构笔记04-字符串常量池

字符串常量池 是 JVM 为了提升性能和减少内存消耗针对字符串(String 类)专门开辟的一块区域,主要目的是为了避免字符串的重复创建。

2025-03-12 23:20:13 1030

原创 JVM内存结构笔记03-方法区

方法区属于是 JVM 运行时数据区域的一块逻辑区域,是各个线程共享的内存区域。当虚拟机要使用一个类时,它需要读取并解析 Class 文件获取相关信息,再将信息存入到方法区。方法区会存储已被虚拟机加载的 类信息、字段信息、方法信息、常量、静态变量、即时编译器编译后的代码缓存等数据。

2025-03-12 21:46:42 968

原创 JVM内存结构笔记02-堆

堆是Java 虚拟机所管理的内存中最大的一块,Java 堆是所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例以及数组都在这里分配内存。

2025-03-11 22:18:32 972

原创 JVM内存结构笔记01-运行时数据区域

对于 Java 程序员来说,在虚拟机自动内存管理机制下,不再需要像 C/C++那样为每一个 new 操作去写对应的 delete/free 操作,不容易出现内存泄漏和内存溢出问题。正是因为 Java 程序员把内存控制权利交给 Java 虚拟机,一旦出现内存泄漏和溢出方面的问题,如果不了解虚拟机是怎样使用内存的,那么排查错误将会是一个非常艰巨的任务。

2025-03-11 22:18:14 767

原创 前后端实时通信的四种方式(附详细案例代码)

后端实现实时通信的几种方式主要包括轮询、长轮询、WebSocket 和 Server-Sent Events (SSE)。本文详细介绍每种方式的适用场景、优缺点和代码实现方式。

2025-03-10 23:41:32 901

原创 MySQL中 IN 到底走不走索引?

在 MySQL 中,IN 语句是否能够利用索引取决于多个因素,包括但不限于查询的具体形式、表的统计信息、索引的选择度等。本文通过几个案例来帮助理解 IN 语句与索引使用的关系。

2025-03-10 13:17:09 1744

原创 Synchronized 锁升级过程

在Java中,synchronized 是一种内置锁机制,用于确保多个线程对共享资源的同步访问。从JDK 1.6开始,为了提高性能和减少锁竞争带来的开销,Java引入了锁升级的概念。

2025-03-09 20:40:15 531

原创 一文看懂Spring ObjectFactory

ObjectFactory 是 Spring 框架中的一个接口,它提供了一种延迟获取对象实例的方式。与直接从 BeanFactory 或 ApplicationContext 中获取 Bean 不同,ObjectFactory 允许在需要时才创建或返回对象实例,这可以有助于优化资源使用和提高性能。

2025-03-06 20:32:26 926

原创 JVM内存结构和各种结构的作用

JVM(Java Virtual Machine)的内存结构是 Java 程序运行的基础,JVM的内存结构主要分为程序计数器、虚拟机栈、本地方法栈、堆、方法区等区域,本文重点介绍了内存结构中各个区域的作用。

2025-03-06 20:31:48 911

原创 Jetcache快速入门

JetCache是一个基于Java的缓存系统封装,提供统一的API和注解来简化缓存的使用。 JetCache提供了比SpringCache更加强大的注解,可以原生的支持TTL、两级缓存、分布式自动刷新,还提供了Cache接口用于手工缓存操作。 当前有四个实现,RedisCache、TairCache(此部分未在github开源)、CaffeineCache(in memory)和一个简易的LinkedHashMapCache(in memory),要添加新的实现也是非常简单的。

2025-03-04 12:26:25 1089

原创 HashMap、LinkedHashMap、TreeMap三者的区别

HashMap、LinkedHashMap 和 TreeMap 都是 Java 集合中用于存储键值对的 Map 接口的实现类,本文重点介绍它们在底层数据结构、元素顺序、性能以及使用场景等方面存在的区别。

2025-03-04 12:25:09 841

原创 工具类-根据经纬度计算两点之间在地图上的距离和方向

通过经纬度计算地图上两个点的距离和方向,有需要的自取。

2025-03-03 12:07:44 191

原创 SpringBoot整合SSE(附详细案例代码)

SSE(Server-Sent Events,服务器发送事件)是一种允许服务器向浏览器推送实时更新的技术。它是一个基于HTTP的轻量级协议,专门用于从服务器到客户端的单向消息传递。与 WebSocket 不同,SSE 是单向的,服务器可以主动向客户端发送数据,而客户端只能接收数据。

2025-03-03 12:06:31 2185

原创 Redis中的数据类型

本文主要介绍Redis的五种常用数据类型和几种特殊数据类型

2024-12-26 23:01:01 1326

原创 快速入门Spring AI Alibaba

本文主要内容为Spring AI Alibaba的快速入门demo,基于Spring Boot集成Spring AI Alibaba并完成一个简单的对话模型。

2024-12-26 18:02:53 740

原创 BeanFactory和FactoryBean

本文主要介绍BeanFactory和FactoryBean的区别和联系

2024-12-25 22:26:05 795

原创 String.intern()

String.intern() 是 Java 中的一个方法,它用于返回字符串池中与给定字符串内容相同的字符串引用。如果字符串池中不存在这样的字符串,则将该字符串添加到池中,并返回这个新添加的字符串引用。本文是关于String.intern()的相关介绍。

2024-12-25 22:25:47 774

原创 使用Netty实现同时多端口监听

本文主要内容为SpringBoot项目使用Netty监听多个端口接受客户端数据

2024-12-24 13:35:28 555

原创 Netty内存泄漏:LEAK: ByteBuf.release() was not called before it‘s garbage-collected.

本文主要介绍Netty中未及时调用ByteBuf.release()导致的内存泄漏问题

2024-12-23 20:10:47 1375

原创 一文看懂 Spring Aware 接口

本文主要介绍了Spring中的Aware接囗和其子接口的相关用途与其在源码中的调用时机。

2024-12-23 12:15:58 785

原创 快速入门mybatis二级缓存(<cache>标签)

本文主要介绍mybatis二级缓存标签的快速入门

2024-12-13 18:08:22 1001

原创 一文看懂 BeanFactoryPostProcessor 与 BeanPostProcessor 接口

本文主要介绍了spring中的BeanFactoryPostProcessor与BeanPostProcessor接口的作用和联系

2024-12-13 12:35:21 846

原创 SpringBoot项目监听端口接受数据(NIO版)

本文主要内容为SpringBoot项目使用原生的NIO监听端口接受数据

2024-12-11 18:21:20 495

原创 SpringBoot项目监听端口接受数据(Netty版)

本文主要内容为SpringBoot项目使用Netty监听端口接受数据

2024-12-11 18:20:01 439

原创 Netty客户端接收不到服务端发送的数据问题

本文内容为Netty客户端接收不到服务端发送的数据问题

2024-12-10 22:05:38 552

原创 Postman携带当前时间戳发送请求

本文介绍Postman如何携带当前时间戳发送http请求

2024-12-09 12:19:31 733

原创 一文看懂BeanFactory 和 ApplicationContext

本文重点介绍了BeanFactory 和 ApplicationContext,以及两者的区别与联系。

2024-12-09 12:18:05 1029

空空如也

空空如也

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

TA关注的人

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