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