- 博客(45)
- 资源 (1)
- 收藏
- 关注
原创 单元测试-junit5的spy部分mock
在 JUnit 5 中,结合 Mockito 库可以轻松实现 Spy(部分模拟)和 Mock(完全模拟)的功能。用于创建完全模拟的对象,所有方法默认返回空值或默认值,除非显式定义行为。默认调用真实方法,仅对显式声明的方法进行模拟。用于创建部分模拟对象,保留真实对象的行为,仅对特定方法进行模拟。自动初始化 spy 对象。需手动实例化被 spy 的对象(如。注解,配合 JUnit 5 的扩展机制,能高效完成单元测试。手动创建 spy,适合需要动态控制 spy 对象的场景。),否则会抛出异常。
2025-09-10 11:36:56
532
原创 单元测试-junit5高级MockitoExtension
MockitoExtension 是 Mockito 框架提供的一个 JUnit 5 扩展,用于简化 Mockito 在测试中的使用。通过注解驱动的方式,可以自动初始化 Mock 对象并注入到测试类中。注解用于将 Mock 对象自动注入到被测试的类中。Mockito 会尝试通过构造函数、setter 或字段注入的方式完成依赖注入。MockitoExtension 可以与 JUnit 5 的参数化测试一起使用,为每个测试用例提供不同的 Mock 行为。这是 JUnit 5 的标准方式,不需要额外的配置。
2025-09-10 11:30:57
388
原创 Flyway-单数据源
Flyway 是一个开源的数据库迁移工具,它通过版本化 SQL 脚本来管理数据库结构的变化。Flyway 的设计目标是简单、可靠、可审计,适用于持续交付和 DevOps 场景下的数据库版本管理。Flyway 的使用主要包括以下几个步骤,适用于 Spring Boot、Maven、Gradle 等项目结构。
2025-09-10 10:59:24
909
原创 Flink概述
Flink 提供了强大的流处理能力,支持事件时间处理、状态管理、窗口操作等。Flink 的 API 设计灵活,支持 Java、Scala、Python 等多种编程语言,开发者可以根据需求选择合适的 API 进行开发。在数据管道中,Flink 能够高效地处理数据流,支持数据转换和传输。Flink 的核心是一个分布式流数据流引擎,能够在集群上运行,支持多种数据源和数据接收器。未来,Flink 将继续优化流处理性能,增强批处理能力,扩展生态系统,提供更多的工具和库,以满足不断变化的数据处理需求。
2025-05-19 23:17:42
521
原创 DeferredResult-异步处理机制
- 异步处理:可以在后台线程中处理耗时任务,而不会阻塞主线程。- 超时机制:支持设置超时时间,防止请求无限期等待。- 回调机制:可以通过回调函数监听结果的状态变化(如完成、超时等)。
2025-04-15 20:38:49
415
原创 java进阶-mac x86环境下 实现java native调用
生成.h头文件将在同目录中生成 com_lzz_nativetest_MyNative.h。
2023-07-26 16:37:01
232
原创 Dubbo源码(3)- 扩展点机制
dubbo扩展点 ExtensionLoaderdubbo扩展点加载流程第一步,创建对应的扩展加载类private static final ProxyFactory PROXY_FACTORY = ExtensionLoader.getExtensionLoader(ProxyFactory.class).getAdaptiveExtension();调用getAdaptiveExtension() 进行SPI加载public class ExtensionLoader<T
2022-02-02 20:37:20
330
原创 Dubbo源码(2)- 服务发现流程
服务发现当spring在构建bean时,populateBean对属性填充时,会触发beanPostProcessor流程,然后会进行ReferenceAnnotationBeanPostProcessord的流程,对服务进行发现,注入public class ReferenceAnnotationBeanPostProcessor extends AbstractAnnotationBeanPostProcessor implementsApplicationContextAware, Appli
2022-01-30 23:42:13
660
原创 Dubbo源码(1)-服务注册
dubbo源码学习(1)- 服务注册SimpleApplicationEventMulticasterspring 事件广播器,触发监听器的事件listener.onApplicationEvent(event);DubboBootstrapApplicationListener extends OnceApplicationContextEventListener// 监听器进行启动 dubboBootstrappublic class DubboBootstrapApplication
2022-01-30 22:27:49
2182
原创 spring源码下载以及构建
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Mar
2021-11-09 16:01:17
247
原创 分表分页查询:版本冲突导致分表情况下的分页查询异常问题-Must have sharding column with subquery
版本冲突导致分表情况下的分页查询异常问题前提须知首先明确一点,如果子查询中有分表的查询,同时没有将分表依据的字段作为查询参数,会导致无法进行分表查询处理,即抛出异常mybatisplus 分页查询流程,先查数据总数,再查分页数据问题描述当不传分表字段作为参数查询时,查询报错,报错信息如下Must have sharding column with subquery.意思就是查询参数缺少分表依据的字段。2. 传分表字段查询,可以正常分页查询。3. 但是,对于不传分表字段的情况,
2021-01-21 10:16:56
7361
1
原创 Docker安装YAPI接口管理平台
拉镜像docker pull registry.cn-hangzhou.aliyuncs.com/anoy/yapi创建挂载目录mkdir -p /data/yapi/mongodata运行专用mongodocker run --restart always -v /data/yapi/mongodata:/data/db -d --name yapimongo mongo运行容器初始化docker run -it --rm --link yapimongo:mongo --entryp
2020-10-26 10:32:10
549
8
原创 设计模式之装饰器模式
装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。说明意图:动态地给一个对象添加一些额外的职责。就增加功能来说,装饰器模式相比生成子类更为灵活主要解决:一般的,我们为了扩展一个类经常使用继承方式实现,由于继承为类引入静态特征,并且随着扩展功能的增多,子类会很膨胀。如何解决:将具体功能职责划分,同时继承装饰者模式。关键代码:1、Component 类充当抽象角色,不应该具体实现。2、修饰类引用和继承 Component 类,具体扩展类重写
2020-09-02 21:12:48
129
原创 03.消息中间件RocketMq之顺序消费
消息中间件RocketMq之顺序消费当前情况说明同一个topic 有4个队列队列先天支持FIFO模型,单一生产和消费者下只要保证使用MessageListenerOrderly监听器即可要求保证有序参与因素FIFO队列内保证有序一个线程发送消息一个消费线程顺序消费表示消息消费的顺序同生产者为每个消息队列发送的顺序一致,所以如果正在处理全局顺序是强制性的场景,需要确保使用的主题只有一个消息队列。并行消费不再保证消息顺序,消费的最大并行数量受每个消费者客户端指定的线
2020-08-28 23:32:53
346
原创 Redis入门之 SortedSet
Redis入门之 SortedSetRedis 有序集合和集合一样也是string类型元素的集合,且不允许重复的成员。不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。内存存放位置:左小右大有序集合的成员是唯一的,但分数(score)却可以重复。指令序号命令描述1ZADD key score1 member1 [score2 member2]向有序集合添加一个或多个成员,或者更新已存在成员的分数2ZCA
2020-08-28 23:31:08
142
原创 Redis入门之Set
Redis入门之SetRedis 的 Set 是 String 类型的无序集合。集合成员是唯一的,这就意味着集合中不能出现重复的数据。Redis 中集合是通过哈希表实现的,所以添加,删除,查找的复杂度都是 O(1)。inter 交集union 并集diff 差集具体指令序号命令描述1SADD key member1 [member2]向集合添加一个或多个成员2SCARD key获取集合的成员数3SDIFF key1 [key2]返回第一个集合
2020-08-28 23:30:15
147
原创 Redis入门之String
Redis入门之String能操作的对象stringintbitmap二进制安全redis 获取的是字节流防止IO读取的时候发送编解码问题,因为redis支持异构系统hbase 也是二进制安全的。因此不同语言使用redis进行通信时,选择相同的编码即可stringn操作setgetappendsetrangegetrangestrlen数值操作// 加1> incr k1 // 减1> decr k1 // 减少指定数值DECRBY ke
2020-08-28 23:29:43
137
原创 Redis入门之List
Redis入门之List可描述栈的形式同向命令 push 、pop可用作栈使用队列,方向队列反向向命令 push 、pop可作为队列使用lindex,lset情况下作为数组使用阻塞操作单播队列,FIFOlpush /RPUSH从头添加 LPUSH key value [value ...] summary: Prepend one or multiple values to a list since: 1.0.0从尾添加RPUSH k
2020-08-28 23:29:01
144
原创 02.消息中间件RocketMq之事务消息
消息中间件RocketMq之事务处理分布式系统中的事务可以使用TCC(Try、Confirm、Cancel)、2pc来解决分布式系统中的消息原子性RocketMQ 4.3+提供分布事务功能,通过 RocketMQ 事务消息能达到分布式事务的最终一致RocketMQ实现方式2PCHalf Message:预处理消息,当broker收到此类消息后,会存储到RMQ_SYS_TRANS_HALF_TOPIC的消息消费队列中检查事务状态:Broker会开启一个定时任务,消费RMQ_SYS
2020-08-24 16:55:12
296
原创 01.消息中间件RocketMq之Api使用
消息中间件RocketMq之Api使用简单使用Producer public static void main(String[] args) throws Exception { DefaultMQProducer producer = new DefaultMQProducer("myProducer01"); // 设置nameserver 地址 producer.setNamesrvAddr("127.0.0.1:9876");
2020-08-24 16:53:34
261
原创 设计模式之责任链模式
责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。介绍意图:避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。如何解决:拦截的类都实现统一接
2020-08-22 20:36:37
138
原创 设计模式之策略模式
设计模式之策略模式模式来源如果有一个过程的情况有很多,需要用if-esle语句,这个时候所带来的复杂和难以维护思路实现同一个接口。将这些算法封装成一个一个的类,任意地替换。代码实现例子说明根据条件进行加、减操作定义接口public interface Strategy { public int doOperation(int num1, int num2);}编写策略public class OperationAdd implements Strategy{
2020-08-22 17:43:04
138
原创 设计模式之单例模式
单例模式一个类在内存中只有一个。饿汉式类加载到内存后,就实例化一个单例,JVM保证线程安全简单实用,推荐使用!唯一缺点:不管用到与否,类装载时就完成实例化public class Mgr01 { private static final Mgr01 INSTANCE = new Mgr01(); private Mgr01() {}; public static Mgr01 getInstance() { return INSTANCE;
2020-08-22 17:04:10
131
原创 多线程之Disruptor高性能内存队列
多线程之Disruptor高性能内存队列消息队列容器Disruptor的特点Disruptor是数组实现的无锁,高并发,使用环形Buffer,直接覆盖(不用清除)旧的数据,降低GC频率实现了基于事件的生产者消费者模式(观察者模式)RingBuffer环形队列RingBuffer的序号,指向下一个可用的元素采用数组实现,没有首尾指针对比ConcurrentLinkedQueue,用数组实现的速度更快原素定位假如长度为8,当添加到第12个元素的时候在哪个序号上呢?用12%8决定
2020-08-22 15:22:31
665
原创 高并发多线程之ThreadLocal
ThreadLocal提供了线程内存储变量的能力,这些变量不同之处在于每一个线程读取的变量是对应的互相独立的。通过get和set方法就可以得到当前线程对应的值。ThreadLocal的源码ThreadLocalMap getMap(Thread t) { return t.threadLocals;}```javapublic void set(T value) { Thread t = Thread.currentThread(); ThreadLocalMap
2020-08-17 17:17:23
313
原创 数据结构之HashMap1.8版本源码过程解析
HashMap源码过程解析继承、实现关系相关默认属性默认初始容量:16最大容量:1<<30加载因子:0.75f树化阈值:8树退化阈值:6static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16static final int MAXIMUM_CAPACITY = 1 << 30;static final float DEFAULT_LOAD_FACTOR = 0.75f;stat
2020-08-16 22:13:39
145
原创 MySQL入门之锁机制
mysql的锁机制1. MySQL锁的基本介绍锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除传统的计算资源(如CPU、RAM、I/O等)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一 个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。从这个角度来说,锁对数据库而言显得尤其重要,也更加复杂。相对其他数据库而言,MySQL的锁机制比较简单,其最 显著的特点是不同的存储引擎支持不同的锁机制。MyISAM和MEMO
2020-08-14 22:45:15
156
原创 MySQL入门之 执行计划
mysql执行计划explain可以使用explain+SQL语句来模拟优化器执行SQL查询语句,从而知道mysql是如何处理sql语句的。1、执行计划中包含的信息ColumnMeaningidThe SELECT identifierselect_typeThe SELECT typetable输出行的表partitions匹配的分区type联接类型possible_keys可以选择的索引key实际选择的指数key_len
2020-08-14 21:30:36
162
原创 MySQL入门之索引基础
MySQL入门之索引基础索引数据结构为b+树主键索引:主键索引的叶子节点保存着主键即对应行的全部数据。在InnoDB里,主键索引也被称为聚簇索引(clustered index)。二级索引(非主键索引): 二级索引树中的叶子结点保存着索引值和主键值,当使用二级索引进行查询时,需要进行回表操作。在InnoDB里,非主键索引也被称为二级索引(secondary index)覆盖索引当sql语句的所求查询字段(select列)和查询条件字段(where子句)全都包含在一个索引中(联合索引),
2020-08-14 19:04:01
219
原创 MySQL入门之日志
MySQL入门之日志redo loginnodb存储引擎的日志文件当发生数据修改的时候,innodb引擎会先将记录写到redo log中,并更新内存,此时更新就算是完成了,同时innodb引擎会在合适的时机将记录操作到磁盘中Redolog是固定大小的,是循环写的过程有了redolog之后,innodb就可以保证即使数据库发生异常重启,之前的记录也不会丢失,叫做crash-safeundo logUndo Log是为了实现事务的原子性,在MySQL数据库InnoDB存储引擎中,还用U
2020-08-14 19:01:41
122
原创 多线程之JMH测试
介绍JMH 是 Java Microbenchmark Harness 的缩写。中文意思大致是 “JAVA 微基准测试套件”优势可重复性:可进行重复性的测试,这样做有利于比较每次的测试结果,得到性能结果的长期变化趋势,为系统调优和上线前的容量规划做参考。可观测性:通过全方位的监控(包括测试开始到结束,执行机、服务器、数据库),及时了解和分析测试过程发生了什么。可展示性:相关人员可以直观明了的了解测试结果(web界面、仪表盘、折线图树状图等形式)。真实性:测试的结果反映了客户体验
2020-08-12 19:12:49
918
原创 多线程之ForkJoinPool的使用
多线程之ForkJoinPool无返回结果用法任务定义继承RecursiveAction类,实现compute方法任务分片方式// 创建新的任务AddTask subTask1 = new AddTask(start, middle);AddTask subTask2 = new AddTask(middle, end);// 进行执行subTask1.fork();subTask2.fork();RecursiveAction extends ForkJoinTask<V
2020-08-11 23:00:27
390
原创 JVM之G1垃圾回收器
流程1.初始标记STW后,寻找root节点,时间较短GC ROOT =局部变量、静态变量、常量、jni(native方法)的对象2.并发标记不进行STW并发进行标记,同时可能也会出现垃圾3.重新标记进行STW,并发的进行重新标记4.并发清理不进行STW,并发清理垃圾,可能出现浮动垃圾YGC + MixedGc + serialGc标记算法-三色标记黑色:本身和子引用都被扫描灰色:本身被扫描,子引用未扫描白色:未漏标情况:因为是并发标记,存在已经标记为黑色的对象 增加了一
2020-08-09 16:21:13
298
2
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅