
Java
文章平均质量分 51
长期研究java后端的前沿技术,深耕分布式系统的一站式解决方案
fengchengwu2012
做技术就要追求卓越
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Qwen集成clickhouse实现RAG
RAG(Retrieval-Augmented Generation,检索增强生成)是一种结合信息检索与语言生成的人工智能技术,旨在通过检索相关文档来增强大模型的生成能力,提高预测的质量和准确性。RAG模型在生成文本或回答问题时,会先从一个庞大的文档集合中检索相关信息,然后利用这些信息来指导文本的生成。RAG的作用在于解决通用大模型的知识局限性、幻觉问题和数据安全性问题。RAG的工作原理分为索引和检索两个阶段,索引阶段包括数据提取、文本分割、向量化和数据入库,检索阶段则包括用户提问、数据检索、注入Promp原创 2025-05-14 16:39:09 · 461 阅读 · 0 评论 -
langchain4j集成QWen、Redis聊天记忆持久化
langchain4j实现聊天记忆默认是基于进程内存的方式,InMemoryChatMemoryStore是具体的实现了,是将聊天记录到一个map中,如果用户大的话,会造成内存溢出以及数据安全问题。位了解决这个问题 langchain4提供了ChatMemoryStore接口,让开发者可以灵活的选择存储策略,常用的可以使用mysql、redis、mongodb等,本文以redis为例,集成百炼平台通义千问实现大模型聊天记忆持久化。原创 2025-05-12 17:10:41 · 670 阅读 · 0 评论 -
Linux本地部署deepseek及SpringBoot集成deepseek
本文以linux安装为例(服务器主机ip:192.168.109.210)原创 2025-03-10 16:27:00 · 995 阅读 · 0 评论 -
Java反射获取对象属性的值
【代码】Java反射获取对象属性的值。原创 2025-02-27 22:57:52 · 362 阅读 · 0 评论 -
Spring Boot启动内嵌tocmat原理
要研究Spring Boot启动内嵌tomcat的原理,就需要先了解一下Spring Boot自动配置的过程,首先简要的梳理一下springboot自动配置的步骤。原创 2025-02-06 16:43:46 · 1055 阅读 · 0 评论 -
validation自定义校验器
**检验手机号参数*//**校验邮件参数*/对于常量的校验,比如性别 1 男 2 女这类枚举值,如何通过检验器校验调用方的传参合法性,可定义一个枚举类的校验器进行校验。/*** 检验枚举*//// 指定校验器/**校验失败时的返回信息*//**分组校验*/Class<?/**负载*/Class<?/**枚举*/Class<?/**枚举编码*/@Override@OverrideClass<?try {/// 遍历枚举值,和传递的枚举值做对比。原创 2024-11-28 22:36:01 · 346 阅读 · 0 评论 -
Spring Boot3远程调用工具RestClient
Spring Boot3.2之后web模块提供了一个新的远程调用工具RestClient,它的使用比RestTemplate方便,开箱即用,不需要单独注入到容器之中,友好的rest风格调用。下面简单的介绍一下该工具的使用。原创 2024-11-21 22:54:12 · 812 阅读 · 0 评论 -
ThreadLocal父子线程、线程池数据传递解决
翻看源码,ThreadLocal是当前线程中属性ThreadLocalMap集合中的某一个Entry的key值Entry(threadlocl,value),虽然不同的线程之间threadlocal这个key值是一样,但是不同的线程所拥有的ThreadLocalMap是独一无二的,也就是不同的线程间同一个ThreadLocal(key)对应存储的值(value)不一样,从而到达了线程间变量隔离的目的,但是在同一个线程中这个value变量地址是一样的。至此完美解决线程变量线程池线程传递。原创 2024-11-18 21:42:14 · 1871 阅读 · 0 评论 -
Spring Boot3自定义starter
2、定义Properties及业务service3、自动配置类 配置自动导入类,在resource创建META-INF/spring目录,在目录下创建org.springframework.boot.autoconfigure.AutoConfiguration.imports文件,写入TestStarterAutoConfiguration 全路径原创 2024-11-16 00:02:34 · 484 阅读 · 0 评论 -
SpEL结合AOP示例
*** spEL* @return*/@Aspect@Component=null){LOGGER.info("TestAopAspect-->doAfter-------后置织入");/// 通过spel表达式获取到形参的中name的值/// 将name追加到返回的listtry {if(result!/**解析spel*//// 方法参数名称=null,"参数列表不能为空");///方法参数值i++) {原创 2024-08-10 17:40:07 · 515 阅读 · 0 评论 -
Spring Boot 集成Minio
minio使用go语言开发的分布式文件系统,支持文件对象存储,性能极高,备受各大互联网公司青睐原创 2022-10-08 11:23:04 · 4703 阅读 · 2 评论 -
pom文件依赖本地jar包
在使用pom统一管理jar时,有时候需要加入本地jar包,加入步骤如下1在类路径的根目录创建lib文件夹,将jar考入2在pom文件中加入依赖<groupId></groupId> <artifactId></artifactId> <version></version> 可以随意填写;<sc...原创 2019-07-17 14:57:44 · 4750 阅读 · 0 评论 -
java线程锁synchronized的几种情况
类方法做是在类加载过程中已经打上标记了,类信息存储在jvm的常量池中,而对象的方法锁是在运行动态确定的,因此类方法锁和不同的对象成员方法锁之间不存在竞争关系。在并发情景,能用无锁的数据块就不要用锁,能锁区块,就不要锁整个方法体,能锁对象就不要用类锁。原创 2024-07-11 12:04:35 · 625 阅读 · 0 评论 -
Sping事件发布机制
对应于观察者模式中的主题,事件源发生某事件是特定事件监听器被触发的原因。Spring的ApplicationEvent是事件类,事件源soruce作为ApplicationEvent的一个属性维护,有用户自定义传入。事件发布器可以认为是事件监听的容器,对外提供发布事监听器的接口,通过publishEvent方法维护事件和事件监听器之间的映射关系,并在事件发生时负责通知事件监听器。Spring事件发布机制是一种非常重要的通信方式,使用观察者设计模式,可以用于状态通知、业务解耦、异步处理的业务场景。原创 2024-06-20 17:44:59 · 279 阅读 · 0 评论 -
graalvm编译springboot3 native应用
云原生时代容器先行,为了更好的拥抱云原生,spring boot3之后,推出了graalvm编译boot项目,利用jvm的AOT( Ahead Of Time )运行前编译技术,可以将javay源码直接构建成机器码二进制的文件,无需jdk静态编译为class字节码,运行时jre解释执行,这样就无需依赖java环境运行,部署到容器中可以直接启动运行。原创 2024-06-12 23:54:04 · 1415 阅读 · 1 评论 -
vscode搭建java开发环境
三、SprignBoot项目启动配置。二、setting配置文件。原创 2023-08-15 16:41:43 · 2853 阅读 · 0 评论 -
java函数式编程
Lambda 表达式是 JDK8以后 的一个新特性,可以取代大部分的匿名内部类,写出更优雅的 Java 代码,尤其在集合的遍历和其他集合操作中,可以极大地优化代码结构。 java提供两类常用的函数,Consumer消费函数,Supplier供给函数。使@FunctionalInterface注解定义函数接口。 在项目开发中,有时候流程控制if语句比较多,可以使用函数编程有效的消除if嵌套原创 2024-05-08 22:22:46 · 7136 阅读 · 0 评论 -
Spring Boot设置io临时目录
在部署springboot项目,使用MultipartFile上传文件会出现以下异常出现这种情况的原因是由于在部署项目的时候没有指定应用的临时io目录,spring会直接使用操作系统的临时目录,而操作系统的临目录会在一定的周期类回收,导致隔一段时间后上传文件会出现上述问题。原创 2024-03-26 11:29:31 · 1717 阅读 · 0 评论 -
Java stream使用TreeSet去重
在使用stream处理集合的时候,有些场景需要使用指定的字段去重,去重的方法有很多,今天介绍一种,通过TreeSet去重。原创 2024-03-20 00:27:01 · 554 阅读 · 0 评论 -
java泛型
java泛型用法原创 2024-03-18 16:53:36 · 425 阅读 · 0 评论 -
JAVA使用JNA调用.so(.dll)动态库
有写开发场景需要调用第三方c/c++的动态库,jdk本身有jni可以实现调用,但是jni的使用非常麻烦,这里提供另一个神器,那就是JNA。原创 2024-03-11 15:37:50 · 9250 阅读 · 2 评论 -
LocalDate计算某月份的日期
locatedate计算某个月份所有日期原创 2024-03-04 23:39:09 · 542 阅读 · 0 评论 -
JAVA集成微信支付V3版JSAPI下单
微信支付jsapi预下单、参数签名原创 2024-02-29 15:00:27 · 8410 阅读 · 0 评论 -
LocalDate 、LocalTime、LocalDateTime基础用法
java新日期类型原创 2023-06-08 10:37:43 · 293 阅读 · 0 评论 -
java stream reduce操作加减乘除
java stream reduce原创 2024-01-20 23:30:27 · 954 阅读 · 0 评论 -
Java Stream 判断字符串是否存在
java stream 流式处理字符串过滤原创 2024-01-12 14:03:22 · 1668 阅读 · 0 评论 -
Java Stream 拼接字符串
java stream 字符串拼接原创 2024-01-11 11:19:04 · 3758 阅读 · 1 评论 -
CompletableFuture多线程执行并发任务工具封装
多线程非阻塞原创 2023-01-17 11:56:39 · 1071 阅读 · 0 评论 -
Java8 Stream分组统计、扁平化操作
java8 stream api 流失操作利器原创 2022-12-16 11:52:49 · 1296 阅读 · 0 评论 -
Mybatis批量增删改查
mybatis批量插入、修改、查询、删除原创 2022-12-15 16:28:42 · 264 阅读 · 0 评论 -
Juc并发编程之CompletableFuture多任务并行
CompletableFuture allof anyof 多任务并行原创 2022-10-14 22:08:05 · 2596 阅读 · 0 评论 -
Java Stream将List<Object>转为Map<Object,Object>
集合流式处理,可涵盖大多数场景对List转Map操作原创 2022-08-20 15:35:09 · 1503 阅读 · 0 评论 -
java SPI实战
本文以实战场景为背景,描述spi的具体使用过程原创 2022-07-06 16:08:27 · 867 阅读 · 0 评论 -
nacos客户端日志输出路劲配置
#指定应用服务端口-Dserver.port=8086#指定客户端日志目录-DJM.LOG.PATH=D:/usr/local/profile/logs/ncaos#客户端缓存配置目录-DJM.SNAPSHOT.PATH=D:/usr/local/profile/logs/ncaos/config#客户端缓存注册服务目录-Dcom.alibaba.nacos.naming.cache.dir=D:/usr/local/profile/logs/ncaos#指定缓存注册服务的子目录-Dna.原创 2022-03-25 11:23:11 · 8853 阅读 · 5 评论 -
Spring Boot 集成canal、RocketMq同步异构数据
一、canal环境搭建1、下载canal服务至指定目录,解压压缩文件 wget -P ./ https://github.com/alibaba/canal/releases/download/canal-1.1.5/canal.deployer-1.1.5.tar.gz tar -zxf canal.deployer-1.1.5.tar.gz2、修改配置文件 修改canal.propertiesvim canal.propertiescanal....原创 2021-09-24 17:40:35 · 1079 阅读 · 0 评论 -
jvm虚拟机栈
1、虚拟机栈 虚拟机栈(stack)是由一个个的栈帧组成,对应着每一的java方法的调用,且线程私有; 栈帧由局部变量表、操作数栈、动态链接、返回方法地址四部分组成; 栈是一个运行时的单位,解决程序如何执行,数据如何处理的,只有进栈出栈操作,不存在内垃圾收问题,而堆(heap)则是处理数据存储问题,解决数据存储在哪里。2、栈帧解析(1)局部变量表 定义一个数字数组, (2) 操作数栈(3)动态链接(4)返回地址 ...原创 2021-08-02 01:02:35 · 539 阅读 · 0 评论 -
spring解决循环依赖的源码依据
spring的ioc容器在处理循环依赖的时候采用的是三级缓存,其实就是将已经初始化的spring bean 放到一级缓存singletonObjects,以及缓存又被称作"单例池";将已经实例化但还未初始化的spring bean 放到二级缓存earlySingletonObjects中;将存放创建spring bean的原始工厂存放到三级缓存singletonFactories,所谓的三级缓存其实就三个Map。源码查看org.springframework.beans.factory.suppor..原创 2021-07-22 09:38:15 · 143 阅读 · 0 评论 -
死锁原因及解决方案
在应用程序开发的过程中,有时候线上会遇到死锁问题,死锁一般有操作系统级别的死锁和应用程序级别的死锁,操作系统级别的死锁通常发生的是进程死锁,应用程序级别的死锁通常是线程的死锁,本文主要谈谈线程死锁问题。 一、java线程死锁 1、死锁的原因 (1) 因竞争资源发生死锁现象:系统中供多个线程共享的资源的数目不足以满足全部进程的需要时,就会引起对诸资源的竞争而发生死锁现象 (2)推进顺序不当发生死锁 2、线程死锁的条件...原创 2021-07-08 14:54:44 · 4334 阅读 · 0 评论 -
Spring Boot集成 Druid数据库密码加密
1、使用AES对称加密数据库密码public class AesUtils { private final static String KEY="112b3b4d5e6f7m8n"; private static final String KEY_ALGORITHM = "AES"; /**"算法/模式/补码方式"*/ private static final String CIPHER_ALGORITHM = "AES/ECB/PKCS5Padding"; private stati原创 2021-07-06 15:34:19 · 384 阅读 · 0 评论 -
spring整合kafka
1、导入pom依赖,kafka的客户端版本要与kafka的服务端版本一致 <dependency> <groupId>org.springframework.kafka</groupId> <artifactId>spring-kafka</artifactId> <version>2.5.12.RELEASE</version>原创 2021-07-02 09:59:47 · 1130 阅读 · 0 评论