自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 SpringAI-Advisors

递归Advisors是一类特殊的Advisors,能够多次循环执行下游的Advisor调用链.循环执行工具调用,直至不再需要调用任何工具校验结构化输出,校验失败则自动重试实现评估逻辑,并按需修改请求内容实现可修改请求参数的重试逻辑CallAdvisorChain.copy(CallAdvisor after) 工具方法是实现递归Advisors模式的核心。它会生成一条全新的Advisors子链:仅包含原调用链中指定 advisor 之后的所有 advisor。

2026-08-26 20:45:42 232

原创 SpringAI-ChatClient

针对不同类型任务选用不同模型(例如,使用能力更强的模型处理复杂推理任务,选用速度更快、成本更低的模型处理简单任务)当某个模型服务不可用时,实现故障降级机制对不同模型或配置开展 A/B 测试根据用户偏好,向用户提供模型选择功能组合多个专用模型(一个用于代码生成,另一个用于创意内容创作,等等)默认情况下,Spring AI 会自动配置单个 ChatClient.Builder Bean。但在应用开发中,你可能需要使用多个对话模型。下面介绍该场景的处理方式。

2026-08-22 19:22:07 173

原创 SpringAI-依赖问题

Spring AI 2.0.x 与 Spring Boot 4.0.x and 4.1.x适配,JDK使用的17,目前没发现问题.

2026-08-22 19:20:19 172

原创 AI大模型开发核心名词速览

当今时代AI大模型风靡世界,作为一个码农,应当紧跟时代潮流、顺应时代步伐,才不会被这个市场抛弃。接下来用尽量通俗的话来讲一下我对大模型开发中常见的一些名次的理解。任何一种实物,都应该从了解它是什么开始。

2026-08-17 20:29:42 214

原创 Agent开发初体验:自然语言转 SQL 智能体,揭开 Agent 的底层真相

当下 AI Agent 概念火热,大量框架、多轮规划、长期记忆、工具链方案层出不穷,很容易让人误以为 Agent 是智能核心。但我的观点很直接:AI Agent 开发本质是文字游戏,Agent 本身并不 “聪明”,真正强大的是背后的基座大模型。Agent 更像一个精密的 “话术调度器”:负责把用户需求包装成合适 Prompt、调用大模型产出结构化内容、对接外部工具、校验输出、整理结果。

2026-08-16 16:37:41 240

原创 MySQL全方位优化方案

进行硬件优化的前提是,在上面的其他方面的优化都已经做到极致(慢查询数量无明显下降、业务响应时间仍高于预期,且数据库的资源使用率已接近硬件上限)。

2026-01-08 20:32:07 643

原创 HashMap原理及源码解析解析

HashMap 在创建对象时,底层的哈希数组(table)并不会立即初始化,而是在第一次调用 put () 方法时,才会真正创建数组并分配内存。负载因子的本质是 「哈希表的填充度」,这个值是空间利用率和哈希冲突率的黄金平衡点,是 Java 官方通过大量测试得出的最优值。当HashMap的元素总数(size) > 阈值(threshold) 时,这是唯一核心条件。原因2(这个原因其实有些牵强,毕竟寻址公式的前提就是低位全1,只能算是锦上添花!HashMap的和心数据结构是数组+链表+红黑树。

2026-01-06 01:20:04 609

原创 MySQL为了提高查询效率,设计思路是怎样的

也叫做datapage,一般页大小是4KB的整数倍,在MySQL的InnoDB存储引擎下,默认一次读取16KB数据。存储K-V格式,可以采用Hash表、二叉树、BST、AVL树、红黑树等等,那么为什么MySQL最终采用B+树存储呢?MySQL持久化数据是通过磁盘上的文件实现的,当磁盘文件太多时,如何定位数据是一个棘手的问题。小结:索引和数据放到一起可以减少IO操作,这也是MySQL普遍使用InnoDB存储引擎的原因。内存跟磁盘进行交互时候,有一个最基本的逻辑单位,称之为。为什么每层树就是一次IO呢?

2024-08-13 23:23:41 998

原创 MySQL死锁问题案例

在并发情况下,多个线程下执行update会有锁,但是update和update直接不会有锁,update和insert之间有锁。insert和update之间相互抢锁形成死锁。这里不知道为什么在没有数据的时候,同时update相同条件的时候不会有锁,而执行insert的时候就有锁,推测是Mysql为了解决幻读问题使用间隙锁的原因。如果有大神知道,多谢指教!

2024-07-28 19:20:52 635

原创 阻塞队列-SynchronousQueue

构造方法中可以传入一个boolean值,如果为true使用队列是数据结构,如果为false默认使用栈的数据结构,无参构造默认false。只需关心transferer变量,所有的存取数据的方法最终都是调用了transferer对象的transfer方法。从结果可以看出,栈结构后插入的数据被先消费;队列结构先添加的数据被先消费。只定义了一个抽象方法transfer。基于队列存储,遵循先进出原则。基于栈存储,遵循先进后出原则。

2024-07-28 15:18:06 536

原创 阻塞队列-DelayQueue

延迟队列是基于优先级队列实现,添加元素不存在阻塞情况,直接调用offer方法。调用优先级队列中的remove方法,返回堆顶元素。除非线程被打断,否则一直等到获取元素。

2024-07-28 15:17:13 397

原创 阻塞队列-PriorityBlockQueue

在PriorityBlackQueue中并没有基于PriorityQueue实现而是基于private transient Object[] queue自己实现的。在分析优先级别队列时候,需要了解一下二叉堆是什么。

2024-07-28 15:16:36 532

原创 阻塞队列-LinkedBlockingQueue

底层基于链表实现,可指定长度,不指定默认。

2024-07-28 15:15:42 464

原创 阻塞队列-ArrayBlockingQueue

基于数组实现队列,使用时必须指定队列长度。

2024-07-28 15:15:08 410

原创 阻塞队列-BlockingQueue接口

在JUC包下有个接口BlockingQueue,它继承了java.util下的Queue接口,在这个接口种规定了一些抽象方法用来存取数据。

2024-07-28 15:14:23 409

原创 ConditionObject

【代码】ConditionObject。

2024-07-28 15:12:58 523

原创 ReentrantLock源码

公平锁和非公平锁释放锁的流程一样,调用sync中的tryRelease方法。NonfairSync非公平锁中,Sync中的默认实现。FairSync公平锁中。默认构造使用非公平锁。

2024-07-21 21:23:14 242

原创 AQS源码

假设A、B、C三个线程,A线程持有锁,B线程先来获取锁,然后C线程获取锁。

2024-07-21 21:22:29 464

原创 synchronized详解

如果在一个循环内部使用synchronized,频繁的获取/释放锁消耗资源。锁膨胀就是将synchronized放到循环体外部,这样就获取/释放一次锁。可以理解为一个临界资源,在同一时间只能有一个线程操作它,实现线程之间互斥的效果。在synchronized修饰的代码块中,如果不存在操作临界资源的情况,触发锁消除,即synchronized无效。在jdk1.6之前,线程在获取不到锁后,立即挂起线程。在创建对象作为锁的时候,会在栈中生成对象的引用,引用指向堆空间,有关锁的内容。

2024-07-15 21:21:52 412

原创 并发编程-锁的分类

假设A线程持有锁,B线程正在等待锁,这个时候C线程来了。

2024-07-15 21:19:33 328

原创 SpringSecurity在SpringBoot中的自动装配

约定大于配置,这里的内容就相当于在web.xml配置文件中配置springSecurityFilterChain的过程由spring自动实现.spring自动注入DelegatingFilterProxy对象,这样就可以将security中的过滤器切到spring中,在请求的时候会被DelegatingFilterProxyRegistrationBean拦截,然后去执行security中的过滤器链。注册逻辑在父类DynamicRegistrationBean中。

2024-07-07 15:57:46 423

原创 SpringSecurity初始化过程

/获取标签} else {//解析自定义标签,获得能解析该标签的HandlerResolver解析器} else {springSecurity解析器SecurityNamespaceHandler/**不同的标签交给不同的解析器去解析*/http标签的解析,HttpSecurityBeanDefinitionParser//注册FilterChainProxy//拿到FilterChainProxy。

2024-07-07 15:56:30 556

原创 SpringSecurity源码分析-过滤器链是如何植入到spring中的

DelegatingFilterProxy中加载FilterChainProxy小结:通过过滤器链代理对象DelegatingFilterProxy找到真正的过滤器链FilterChainProxy,然后去一个一个的过滤器去处理请求

2024-07-07 15:55:40 579 2

原创 SpringSecurity认证逻辑源码分析

类。

2024-07-07 15:55:08 1236

原创 Spring整合SpringSecurity

自定义登录页面只需要在security配置文件中指定登录页面即可--指定登录页面或登录成功页面等,都在这个标签中可以指定--> < form-login login-page = " /login.jsp " login-processing-url = " /login " authentication-success-forward-url = " /home.jsp " />

2024-07-07 15:54:11 953

原创 Nacos架构设计

Nacos1.X架构设计Nacos2.X架构修改

2024-07-07 15:50:43 221

原创 GateWay-基本使用

api网关是只微服务架构下的统一入口,提供服务内部的服务路由中转,为客户端提供统一的服务一些与业务无关的公共逻辑可以在这里实现,比如认证、授权、监控、路由转发等。常用的网关组件有,zuul、nginx+lua、Kong等实现Ordered,GlobalFilter两个接口,重写filter,getOrder两个方法,在filter中可以实现在业务处理之前和之后做一些操作import org/**

2024-07-01 23:28:44 3418

原创 Elasticsearch分词器

自定义的字符串过滤器、令牌过滤器、分词器都要定义名字过滤器、令牌过滤器可定义多个//自定义字符串过滤器},//自定义令牌过滤器"filter":{"is","in","the","a","at"},//自定义分词器?]"},//自定义分析器,将自定义字符串过滤器、自定义令牌过滤器、自定义分词器赋值给分析器"char_filter":["my_char_filter"], //字符串过滤器可定义多个。

2024-06-30 00:57:22 932

原创 Elasticsearch查询上下文和_source

在查询时候,如果不指定排序字段,默认使用相关度评分排序,评分度越高排名越靠前。和Mysql中的select指定查询的字段作用一样。结果:hits中只包含id。

2024-06-30 00:56:36 802

原创 Elasticsearch的Mapping

例子:给user索引创建两个模板,第一个模板将long类型的属性默认转换为integer类型,第二个模板将以sum_开头的字段且不以_text结尾的字段且为String类型的字段转换为keyword类型。映射模板用来解决不确定的类型或字段名索引的创建,可以理解为批量处理索引的mapping。映射参数就是在创建索引时候的mapping中可以配置什么参数,分别代表什么含义。es在增加数据的时候如果没有指定字段的类型,es会自动分配类型。在创建Mapping时候,手动创建类型。

2024-06-30 00:54:16 1474

原创 Elasticsearch的节点、集群和分片

多个节点组成ES集群,其中主节点负责管理整个集群,不存储数据,数据靠数据节点存储当主节点宕机时候,会从有master角色的集群重新选举新的主节点。

2024-06-30 00:53:42 749

原创 Elasticsearch及其相关工具的安装

传送门:https://pan.baidu.com/s/1d83Ak4kHOJHIgCC7Hhjikw 提取码:ABCE推荐使用8.12.12版本,8.14.1没有找到ik分词器。

2024-06-30 00:53:15 514

原创 【雪花算法】

【代码】【雪花算法】

2024-06-23 14:00:30 392

原创 SpringCloud-OpenFeign基础

OpenFeign是一个基于HTTP协议的RPC(远程过程调用)组件,用于简化HTTP请求和响应的处理。它通过声明式的方式定义REST API接口,并自动生成实现该接口的客户端代码,从而简化了RESTful服务的调用过程。

2024-06-22 17:11:21 930

原创 SpringCloud-nacos基础

{spring.cloud.nacos.config.file-extension},其中${spring.cloud.nacos.config.file-extension}只支持yml或者properties。可以在nacos进行分组,通过spring.cloud.nacos.config.group属性指定分组。配置的文件名应该为${spring.name} + “-” +命名空间可以指定多个配置文件。只需要配置注册中心地址即可。

2024-06-22 17:10:13 1440

原创 Spring注解-@RestControllerAdvice

使用@RestControllerAdvice注解配合@ExceptionHandler实现自定义异常处理器。

2024-06-22 17:07:27 801

原创 JVM-GC-常用调优命令和GC参数

定位问题常用命令top:查看内存/CPU占用情况top -Hp pid: 查看进程内线程情况jsp:查看java进程情况jstack 线程pid:查看进程内线程信息,一般查看线程状态,判断是否死锁。重点观察:WAITING、BLOCKED的线程,另外查看waiting on xxx,如果多个线程都在waiting on 某把锁,看哪个线程持有这把锁;jstat -gc:查看GC情况jinfo 线程pid:查看线程信息jstat -gc 线程pid 间隔时间:查看jmap -histo 线

2024-06-17 23:29:17 1095

原创 JVM-GC-G1垃圾回收器

当堆内存空间达到一定的阈值,会触发MixedGC,和CMS回收步骤相似。这个阈值可以通过XX:InitiatingHeapOccupacyPercent参数设置,默认45%它是一个HashMap,记录其他Regin中的对象指向本Regin中的引用。这样不用扫描整个堆就可以知道当前谁引用了当前分区中的对象,只需要扫描RSet即可。用来记录可以被回收的card,即通过算法计算出垃圾多的card;G1的调优是尽量不要FGC。

2024-06-17 23:28:34 544

原创 JVM-GC-CMS垃圾回收器

CMS从提出概念到实际完成用了10年多的时间,在此之前没有过并发回收的垃圾回收器,因此它是一个垃圾回收器的里程碑,后来的G1也是基于CMS做的一些改进。由于CMS是并发清除的新时代,它也存留了很多问题,JDK任何版本都不会使用CMS作为默认垃圾回收器。incremental update:增量更新,关注引用的增加,如果要给黑色对象引用增加,将黑色对象标记为灰色。

2024-06-17 23:27:37 626

原创 JVM-GC-基础知识

JVM中的GC使用Root Searching寻找垃圾单独方式,并结合mark-sweep、copying、mark-compact三种清除算法形成了各有特点的垃圾回收器,且垃圾回收器的演变过程是因为内存空间的不断增大的必然原因。

2024-06-16 12:05:28 508

空空如也

空空如也

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

TA关注的人

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