自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

.

  • 博客(429)
  • 资源 (3)
  • 收藏
  • 关注

原创 深入理解Redis分布式锁

Redis 分布式锁

2022-11-15 09:15:00 1378 2

原创 深入理解CyclicBarrie

深入理解CyclicBarrier

2022-11-05 20:29:39 1015

原创 深入理解CountDownLatch计数器

CountDownLatch实现原理

2022-11-03 09:00:00 949

原创 深入理解AQS

AQS

2022-11-01 09:30:00 880

原创 并发编程之深入理解CAS与Atomic原子操作类

Java并发之CAS

2022-10-26 09:30:00 857 3

原创 深入理解并发三大特性

JMM 与 CPU 缓存一致性

2022-10-21 09:00:00 848

原创 Future 用法详解

Future 用法详解前言为什么出现Future机制常见的两种创建线程的方式。一种是直接继承Thread,另外一种就是实现Runnable接口。这两种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果。从Java 1.5开始,就提供了Callable和Future,通过它们可以在任务执行完毕之后得到任务执行结果。Future模式的核心思想是能够让主线程将原来需要同步等待的这段时间用来做其他的事情。因为可以异步获得执行结果,所以不用一直同步等待去获得执行结果。Future 用法详解用法很

2022-04-21 23:03:21 2888

原创 ExecutorCompletionService使用详解

ExecutorCompletionService使用详解前言ExecutorCompletionService 为什么需要使用这个类?jdk8提供的 CompletionService 接口,实现类 ExecutorCompletionService。我们先来看一个例子?很明显下面任务批量提交线程池,等待线程池运行,每个任务执行时间不同。 //此线程池线程递增 ExecutorService executorService = Executors.newCache

2022-04-16 16:45:14 4904 4

原创 CompletableFuture用法详解

CompletableFuture用法详解前言JDK汇总已经提供了异步编程的类Future<T>,为什么还要CompletableFuture这个类呢?我们通常在使用Future接口异步编程时,获取结果都需要阻塞获取。主线程中会阻塞,其实最好的结果是让它执行完结果后通知我们获取。还有一种情况,当我们需要多个异步结果嵌套时候,Future这个接口就就不能满足我们的实用场景了,可能需要我们手动在里面进行嵌套。对此,从JDK 8开始,在Concurrent包中提供了一个强大的异步编程工具 C

2022-04-05 19:20:34 2920

原创 线程池用法详解

线程池用法详解前言为什么需要用到线程池?众所周知线程是操作系统一种宝贵的资源,创建和销毁都很耗费资源,对此,java中针对这种情况实现出线程池思想,维护一定数量的线程,用到时候就不需要去创建,不使用时候,就销毁一定量的,保留一部分线程数量。Java线程池的工作流程Java线程池的工作流程为:线程池刚被创建时,只是向系统申请一个用于执行线程队列和管理线程池的线程资源。在调用execute()添加一个任务时,线程池会按照以下流程执行任务。如果正在运行的线程数量少于corePoolSize(用户定

2022-04-04 19:22:11 1680 6

原创 深入理解 ReentrantLock

ReentrantLock用法详解前言我们都知道JDK中已经有了synchronized 锁,为什么还要提供 ReentrantLock锁与 相比 ReentrantLock锁有什么优势?为什么需要提供这个锁?ReentrantLock 锁 和 synchronized 锁 该怎么选择?synchronized 锁隐式锁可冲入锁自动释放锁不能人为控制synchronized 锁 ,自动释放锁,好处是不需要我们担心释放锁,但也带来一个问题,如果下面代码锁总执行时间很长,也就意味着长时间

2022-04-04 16:27:59 4406 2

原创 深入理解读写锁ReentrantReadWriteLock

读写锁ReentrantReadWriteLock用法详解

2022-04-03 23:08:11 4269

原创 深入理解信号量Semaphore

Semaphore用法详解

2022-03-28 22:57:41 3788 1

原创 自定义一个显示锁,并且这个锁存在超时机制

synchronized 锁存在几个问题我们在使用synchronized锁时候,由于synchronized(锁升级和锁竞争本文不讨论)特定锁机制,导致我们不能针对锁进行控制如果到获取到锁,但迟迟没释放锁,或者说执行时间过长,但是没有出现异常,就不会释放锁。static final Object lock = new Object(); synchronized (lock){ while (true){ //

2022-03-27 14:59:26 1291

原创 AI Agent 落地避坑:从多Agent路由翻车,最终收敛到「域聚合Agent+多Tool」最优架构

架构模式优点致命缺点落地推荐度纯多Agent意图路由工具隔离、单Agent轻量化、Token开销低上下文互相污染、混合意图无解、路由易判错、补丁泛滥、维护成本高❌ 不推荐纯单Agent多Tool无路由错误、支持混合意图、代码极简工具过多幻觉严重、闲聊易乱调用工具、推理开销大⭐ 简单场景可用域聚合Agent+多Tool1. 同域混合意图完美支持 2. 路由极简、极少判错 3. 工具域隔离、幻觉低 4. 前置降噪杜绝上下文污染 5. 代码复用高、维护简单。

2026-08-27 17:12:49 431

原创 Spring AI2.0 + DeepSeek 完整版实战:上下文记忆|内存/Redis/官方ChatMemory三种方案|流式SSE|Tool工具调用|结构化输出|超时异常处理

摘要:本文介绍了基于Spring AI 2.0与DeepSeek的工业级对话服务实现方案,包含三种上下文记忆管理(内存管理器、Redis存储、官方ChatMemory)、SSE流式输出、Tool工具调用、结构化输出等功能。文章提供了完整的Maven依赖配置和YAML配置文件,并解决了Spring AI 2.x中baseUrl不生效的问题,为开发者构建高效、稳定的AI对话服务提供了详细指南。

2026-08-21 09:58:20 333

原创 从零搭建企业级RAG知识库|Spring‑AI+PGVector多路召回+BGE重排+SSE流式输出完整实战

本文介绍了企业级RAG知识库的完整实现方案,基于Spring-AI 2.0.0、PGVector等技术栈。作者分享了从简单Demo到生产级系统的迭代过程,解决了口语化查询召回差、噪声文档多、Token超限等典型问题。核心架构包括文档分块入库(带Token级重叠分块)、多路召回(向量+关键词)、BGE-Rerank重排、Redis会话记忆、熔断防护等功能模块。文章详细讲解了文档解析、向量检索、相似度过滤等关键实现代码,并提供了两种接口方案对比。特别强调了Rerank需使用原始用户问题打分,以及重叠分块对知识点

2026-08-21 09:29:11 276

原创 从零到一搭建Spring‑AI原生Tool‑Calling AI Agent|架构对比+完整实战源码+踩坑实录

只要把文档切片、向量化、向量检索、把检索到的文档塞给大模型,就能解决私有知识库问答。但是随着业务需求变复杂,问题来了:用户不仅仅是查文档。用户可能需要先查知识库制度,再查销售报表数据,合并两份信息之后再给出最终答案。最开始我采用行业早期最通用的手写编排Agent写一大段System Prompt,强制大模型输出固定格式JSON(toolNametoolParam后端拿到字符串,手动解析JSON做一大堆异常兼容:模型输出markdown代码块、JSON漏逗号、字段缺失、中英文引号。

2026-08-20 17:30:36 469

原创 Java应用从零接入阿里云ARMS监控+SLS日志采集完整实战指南

本文详细介绍了Java应用从零开始接入阿里云ARMS应用监控和SLS日志服务的完整实战流程。内容包括:1)前置环境与权限准备,涵盖网络白名单、目录挂载和参数配置;2)ARMS Java Agent无侵入探针接入,实现应用性能监控;3)SLS ilogtail日志采集器部署配置,完成日志集中采集;4)ARMS与SLS关联打通,实现链路与日志双向溯源;5)接入效果校验与常见问题排查。通过本文指南,读者可快速搭建企业级可观测体系,无需修改业务代码即可实现全链路监控与日志关联。

2026-08-20 17:14:48 496

原创 关于最近项目中优化的一些思考

最近有一天领导突然跟对我说:让我负责一个项目优化,而我当时心里一万个xxx在飞,当时瞬间心里一激动,我平时吹牛逼划划水配合别人打打小手还可以,让我主动去负责一个项目优化,这不是要我的老命吗?表面的我我曹?????我曹????我只想摸鱼啊。内心的我我曹?不就是个优化吗?没啥问题,这次轮到我大显身手了,瑟瑟发抖吧 我的同事们!

2023-06-03 14:07:51 1191

原创 Redis缓存架构详解

一般开发中我们都会使用 Redis 作缓存,提高查询效率,但 Redis 缓存在使用时还会有很多问题,如,缓存穿透,击穿,雪崩等。一般对于不同的业务我们使用不同的缓存结构。1、对于并发几率很小的数据(如个人维度的订单数据、用户数据等),这种几乎不用考虑这个问题,很少会发生 缓存不一致,可以给缓存数据加上过期时间,每隔一段时间触发读的主动更新即可。2、就算并发很高,如果业务上能容忍短时间的缓存数据不一致(如商品名称,商品分类菜单等),缓存加上过期 时间依然可以解决大部分业务对于缓存的要求。

2023-05-15 09:00:00 1602

原创 Tomcat线程池扩展总结

Tomcat线程池默认实现StandardThreadExecutor。自定义了拒绝策略,Tomcat 在线程总数达到最大数时,不是立即执行拒绝策 略,而是再尝试向任务队列添加任务,添加失败后再执行拒绝策略。TaskQueue 重写了 LinkedBlockingQueue 的 offer 方法。只有当前线程数大 于核心线程数、小于最大线程数,并且已提交的任务个数大于当前线程数时,也就是 说线程不够用了,但是线程数又没达到极限,才会去创建新的线程。

2023-05-08 22:58:10 1064

原创 Redis 布隆过滤器总结

大数据判断是否存在来实现去重:这就可以实现出上述的去重功能,如果你的服务器内存足够大的话,那么使用 HashMap 可能是一个不错的解决方案,理论上时间复杂度可以达到 O(1) 的级别,但是当数据量起来之后,还是只能考虑布隆过滤器。解决缓存穿透:我们经常会把一些热点数据放在 Redis 中当作缓存,例如产品详情。

2023-05-07 12:53:09 1263

原创 简单部署java 的sh脚本,免得每次 Kill 再启动

简单部署java 的sh脚本,免得每次 Kill 再启动。

2023-05-01 16:09:02 484

原创 Lock wait timeout exceeded; try restarting transaction\n; Lock wait timeout exceeded; try restarting

Lock wait timeout exceeded; try restarting transaction\n; Lock wait timeout exceeded; try restarting 问题解决

2023-03-01 14:38:11 1431

原创 Multi-statement transaction required more than ‘max_binlog_cache_size‘ bytes of storage;

但这样是治标不治本的解决方法,归根结底还是事务太大了,应当从业务角度去解决,避免出现大事务。我们都知道提交事务过程,先写入binlog,然后再提交处于commit事务状态。经百度查询是提交事务大小超过 mysql binlog 大小。最大可能设置为 16EB (exabytes)。推荐最大设置为40G,

2023-03-01 13:47:23 699

原创 授权验证方式有很多、但AOP最为优雅。

有时候项目中需要对接口进行校验,增加鉴权,确保 API 不被恶意调用。

2023-02-17 20:08:20 1023

转载 AOP 切点指定多个包

我的问题是如何在表达式中指定多个不同的包(* package1 …))** 现在我正在为每个包声明一个单独的切入点,并且在一个单独的aop:before和aop:每个切入点的入口之后声明一个单独的切入点。但我认为这应该是定义多个包的切入点的理想方法。我使用Aspect在基于spring mvc的应用程序中记录活动。我使用@controller注释来定义应用程序中的任何控制器。我在两个不同的包中使用了两个不同的控制器, com.package1包含控制器1类,让它命名为AController。

2023-02-17 14:05:09 1697

原创 Java 类加载机制与双亲委派

Java 类加载机制与双亲委派

2022-11-09 23:21:45 366

原创 又是一年1024

又是一年1024,大家1024 快乐,吃好喝好玩好。

2022-10-24 09:00:00 205

原创 JAVA 根据身份证计算年龄 + 性别 + 身份证号码验证

【代码】JAVA 根据身份证计算年龄 + 性别 + 身份证号码验证。

2022-10-10 14:36:36 588

原创 模板模式+策略模式优化

模板模式+策略模式来进行优化实际应用

2022-09-25 21:59:29 1311

原创 关于线程池需要注意的几点

关于线程池优化

2022-06-10 17:39:37 768 1

原创 关于局部变量的线程池,会不会被回收

关于局部变量的线程池,会不会被回收遇到个问题,模拟一下,得出结论。线上监控线程数量一直增加,经过查询是同事在使用线程池没有关闭伪代码如下 static void test(){ //方法内 定义线程池 ExecutorService pool = new org.apache.tomcat.util.threads.ThreadPoolExecutor(1, 2, 10, TimeUnit.SECONDS, new Synchronou

2022-05-23 22:19:19 2012 1

原创 aop记录日志到db

前言业务开发中,某些业务需要记录用户操作前后的日志,做一些log操作证据。实现在业务代码前后加save log 操作到 db使用aop 不改变业务代码的情况下记录Logaop记录日志到db业务中全部打印日志记录部分日志到db部分日志需要记录到db这里我们自定义Log注解然后使用aop扫描次注解记录该日志操作Log注解import java.lang.annotation.*;@Target({ElementType.METHOD})@Retention(Retenti

2022-05-21 18:47:57 404

原创 AOP记录日志

AOP记录日志package com.xxxxxxx.config;import com.alibaba.fastjson.JSON;import com.ly.traffic.ground.cxy.config.util.AopUtil;import com.ly.traffic.ground.saas.base.helper.LoggerHelper;import com.ly.traffic.ground.saas.util.Constants;import org.aspectj.la

2022-05-21 18:40:14 397

原创 基于 Nacos 实现 Sentinel 规则持久化

基于 Nacos 实现 Sentinel 规则持久化前言Sentinel Dashboard中添加的规则数据存储在内存,微服务停掉规则数据就消失,在⽣产环境下不合适。我们可以将Sentinel规则数据持久化到Nacos配置中⼼,让微服务从Nacos获取规则数据。构建依赖 <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>sp

2022-05-08 19:17:03 833

原创 Sentinel 降级规则模块

Sentinel 降级规则模块流控是对外部来的⼤流量进⾏控制,熔断降级的视⻆是对内部问题进⾏处理。Sentinel 降级会在调⽤链路中某个资源出现不稳定状态时(例如调⽤超时或异常⽐例升⾼),对这个资源的调⽤进⾏限制,让请求快速失败,避免影响到其它的资源⽽导致级联错误。当资源被降级后,在接下来的降级时间窗⼝之内,对该资源的调⽤都⾃动熔断。Sentinel不会像Hystrix那样放过⼀个请求尝试⾃我修复,就是明明确确按照时间窗⼝来,熔断触发后,时间窗⼝内拒绝请求,时间窗⼝后就恢复。RT平均响应

2022-05-08 00:29:33 503

原创 sentinel 自定义返回限流信息

版本 <!--sentinel 核心环境 依赖--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> </dependency> &lt

2022-05-07 20:07:25 1043

原创 nacos集群模式配置

集群更改这么几个地方更改新增集群配置文件绿色的例子文件更改内容为,集群的ip配置启动模式sh startup.sh -m cluster分别启动8848 8849 8850如果打不开管理页面,查看启动日志,可能是自己mysql没导入将这两个导入自己本地Mysql同时检查自己的mysql 账号密码是否正确。...

2022-05-04 23:19:32 901

springboot连接数据库,连接redis,jsp展示数据

springboot整合jsp,mybatis查询并展示数据到jsp页面,连接redis实现缓存展示数据,附带数据库(增删改没写,有查,数据库成功连接,我懒所以没写。)

2018-07-19

ssi增删改查

ssi增删改查 ,第一个表增删盖查,第二个表方法只写了,表连接两个表一对一,含数据库

2017-10-09

js正则基本语法+例子

js一些简单的正则基本语法+例子,附带源代码,直接浏览器中打开即可

2018-08-01

空空如也

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

TA关注的人

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