- 博客(20)
- 收藏
- 关注
原创 初识XXL-JOB分布式任务调度
将调度行为抽象形成"调度中心"公共平台,而平台自身并不承担业务逻辑,"调度中心"负责发起调度请求。将任务抽象成分散的JobHandler,交由"执行器"统一管理,"执行器"负责接收调度请求并执行对应的JobHandler中的业务逻辑。因此,"调度"和"任务"两部分可以相互解耦,提高系统整体稳定性和拓展性。
2025-03-22 18:50:29
791
原创 Kafka消息队列
作为流处理平台,Kafka集成了Kafka Streams库,该库使得开发者能够构建轻量级的实时流处理应用,直接在Kafka内部执行数据转换和聚合操作,无需依赖外部复杂系统。总而言之,Kafka不仅仅是一个消息队列,而是一个全面的分布式流式处理生态系统,广泛应用于日志聚合、实时监控数据分析、事件驱动架构以及大规模数据管道构建等多个领域,为企业提供了一站式的解决方案来应对现代数据处理的挑战。在Broker上持久化的事件是不可变的、只可追加的,即使是删除也被模拟为删除事件,而不是直接从磁盘上删除数据。
2025-03-13 18:32:19
791
原创 JDK源码系列(二)
/...和ArrayList集合一样,LinkedList集合也实现了Cloneable接口和Serializable接口,分别用来支持克隆以及序列化。List:表明它是一个列表,支持添加、删除、查找等操作,并且可以通过下标进行访问。Deque:继承自Queue接口,具有双端队列的特性,支持从两端插入和删除元素,方便实现栈和队列等数据结构。由于LinkedList底层数据结构是链表,内存地址不连续,只能通过指针来定位,不支持随机快速访问,所以不能实现RandomAccess接口。
2025-02-22 16:40:51
641
原创 JDK源码系列(一)Object
Object类是所有类的基类——java.lang.Object。Object类有七个native方法:registerNatives()、getClass()、hashCode()、clone()、notify()、notifyAll()。
2025-02-21 22:30:40
816
原创 Mysql执行计划及索引下推ICP
索引下推(Index Condition Pushdown,ICP)是 MySQL 中的一项查询优化技术,主要用于提高查询性能,特别是在使用复合索引时,后面部分索引失效,它的核心思想是将查询条件下推到存储引擎层,从而减少回表次数和减少不必要的数据读取。示例假设有一张表ta INT,b INT,c INT,使用索引idx_a_b_c找到a = 1的记录。将这些记录的主键返回给服务器层。服务器层回表,读取完整的数据行。在服务器层过滤b > 2和c < 10。使用索引idx_a_b_c找到。
2025-02-10 21:27:59
688
原创 volatile和synchonized基本原理
同步代码块的实现使用的是monitorenter 和 monitorexit指令,其中指令指向同步代码块的开始位置,指令则指明同步代码块的结束位置。修饰的方法并没有monitorenter 和 monitorexit指令,取而代之的是标识,该标识指明了该方法是一个同步方法。不过,两者的本质都是对对象监视器 monitor 的获取。
2025-02-01 00:56:08
884
原创 JAVA并发一
虚拟机栈:每个Java方法在执行之前会创建一个栈帧用于存储局部变量表、操作数栈、常量池等信息。从方法调用到执行完成的过程,就对应着一个栈帧在Java虚拟机栈中入栈和出栈的过程。本地方法栈:和虚拟机栈发挥的作用相似,区别是:虚拟机栈为虚拟机执行Java方法(也就是字节码)服务,而本地方法栈则为虚拟机使用到的Native方法服务。所以,为了保证线程中的局部变量不被别的线程访问到,虚拟机栈和本地方法栈都是线程私有的。
2025-01-30 01:20:11
764
原创 JAVA反射机制详解
一般情况下,我们使用某个类时必定知道它是什么类,是用来做什么的。于是我们直接对这个类实例化,之后使用这个类对象进行操作。上面这样子进行类对象的初始化,可以理解为反射之前,对于Person的操作,使用这种方式,在Person类外部,不可以通过Person类的对象调用其内部私有结构。而反射则是一开始并不知道我要初始化的类对象是什么,自然也无法使用new关键字来创建对象。这时候,我们使用JDK提供的反射API进行反射调用。上面两段代码的执行结果是完全一样的。
2025-01-11 00:04:57
486
原创 Mybatis专栏---Mapper XML的解析和注册使用
*** 打开一个 session*/这个是一个简单工厂的定义,在工厂中提供接口实现类的能力,也就是SqlSessionFactory工厂中提供的开启SqlSession的能力。SqlSession接口封装了相应的SQL操作,具体由DefaultSqlSession实现。
2024-12-20 20:48:31
783
原创 Spring常用注入使用
1.。构造函数注入在对象创建时就要求所有必须的依赖项都已提供,这有助于确保对象在初始化时就是完整和可用的。如果缺少任何依赖项,对象将无法创建,这有助于在开发早期发现潜在问题。2.。一旦对象通过构造函数初始化,其依赖项被固定下来,无法改变。这有助于确保对象的内部状态在生命周期内保持一致,减少了由于依赖项变化而导致的潜在问题。3.。构造函数注入减少了setter发放的调用次数,这有助于提高性能并减少潜在的错误。
2024-12-06 16:44:18
724
原创 重学JAVA设计模式之六大设计原则
/ 视频清晰级别;// 广告播放方式;无广告、有广告定义出上层接口IVideoUserService,统一定义需要实现的功能,包括视频清晰级别接口definition()、广告播放方式接口advertisement()。然后三种不同类型的用户就可以分别实现自己的服务类,做到职责统一。在面向对象编程领域中,开闭原则规定软件的对象、类、模块和函数对拓展开放、但是对于修改是关闭的。这就意味着应当用抽象定义结构,用具体实现去完善细节。/*** 计算面积,长方形* @param x 长。
2024-12-06 10:15:42
884
原创 JVM结构及堆内存是线程共享的吗?
TLAB是虚拟机在堆内存的eden划分出来的一块专用空间,是线程专属的。在虚拟机的TLAB功能启动的情况下,在线程初始化时,虚拟机会为每个线程分配一块TLAB空间,只给当前线程使用,这样每个线程都单独拥有一个空间,如果需要分配内存,就在自己的空间上分配,这样就不存在竞争的情况,可以大大提升分配效率。注意到上面的描述中"线程专属"、"只给当前线程使用"、"每个线程单独拥有"的描述了吗?所以,因为有了TLAB技术,堆内存并不完完全全是线程共享,其eden区域中还是有一部分空间是分配给线程独享的。
2024-11-21 17:36:39
591
原创 Redis的缓存穿透、缓存击穿、缓存雪崩
缓存雪崩是指在同一时段大量的缓存key同时失效或者Redis服务宕机,导致大量请求到达数据库,带来巨大压力。缓存击穿问题也叫热点Key问题,就是一个被高并发访问并且缓存重建业务较复杂的key突然失效了,无数的请求访问会在瞬间给数据库带来压力。
2024-11-14 22:08:09
514
原创 基于SpringBoot自定义注解类---动态注入RedisTopic
注解(Annotation),又称为元数据。用于在代码中添加元数据(数据的数据),这些元数据可以被编译器、运行时环境或其他工具读取和使用,以改变代码的行为或提供额外的信息。
2024-11-12 12:32:37
484
原创 基于Redis实现延迟队列消息更新Mysql数据
使用Redisson提供的数据结构RBlockingDeque(阻塞队列)和RDelayedQueue(延迟队列)
2024-10-24 21:37:04
671
原创 《重学JAVA设计模式》 责任链模式
这个类是包装了责任链处理过程中返回结果的类,方便处理每个责任链的返回信息。// 级别人员Id// 级别人员姓名// 责任链这是责任链链接起来的核心部分。,重点在于可以通过getNext方式获取下一个链路需要处理的节点。,是责任链中的公用信息,标记了每一个审核节点的人员信息。抽象类中定义了一个抽象方法,,这是每个实现类必须实现的方法,不同审核级别处理不同的业务。
2024-10-12 21:50:30
713
原创 OpenAI代码自动评审组件
技术栈:GitHub Actions、OpenAI(ChatGLM)、Git/GitHub、公众号模板消息。目标:实现从代码提交到通知、Git检出分支变化、使用OpenAI进行代码评审并写入日志,最后通过微信公众号发送消息通知的完整链路。同时也对项目开发有了初步认识。对这个项目最深的印象就是配置脚本文件以及Token对接,前面还了解到JWT技术和RBAC权限模型。期待下次跟进学习!
2024-08-08 02:32:08
1050
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人