- 博客(126)
- 收藏
- 关注
原创 大模型开发之Langchain4j(看这一篇就够了)
本文介绍了SpringBoot与Langchain4j结合开发AI应用的技术方案。首先阐述了大模型的定义、特点及其在NLP、CV等领域的分类,包括通用(L0)、行业(L1)和垂直(L2)三个层级,并列举了大语言模型的主要应用场景。随后对比了Java生态的三大AI开发工具:LangChain4J(功能全面,支持15+主流模型)、Spring AI(深度集成Spring生态)和Spring AI Alibaba(对接阿里云大模型)。重点分析了LangChain4j作为Java专用LLM集成库的核心功能,包括多模
2025-06-21 17:33:21
3530
1
原创 JAVA JUC并发编程学习笔记(二)
AQS:AbstractQueuedSynchronizer,是阻塞式锁和相关的同步器工具的框架,许多同步类实现都依赖于该同步器AQS 用状态属性来表示资源的状态(分独占模式和共享模式),子类需要定义如何维护这个状态,控制如何获取锁和释放锁AQS 核心思想:如果被请求的共享资源空闲,则将当前请求资源的线程设置为有效的工作线程,并将共享资源设置锁定状态请求的共享资源被占用,AQS 用队列实现线程阻塞等待以及被唤醒时锁分配的机制,将暂时获取不到锁的线程加入到队列中CLH 是一种基于单向链表的高性能、公平的自旋锁
2025-02-21 17:29:05
1373
原创 JAVA JUC 并发编程学习笔记(一)
进程:程序是静止的,进程实体的运行过程就是进程,是系统进行资源分配的基本单位进程的特征:并发性、异步性、动态性、独立性、结构性线程:线程是属于进程的,是一个基本的 CPU 执行单元,是程序执行流的最小单元。线程是进程中的一个实体,是系统独立调度的基本单位,线程本身不拥有系统资源,只拥有一点在运行中必不可少的资源,与同属一个进程的其他线程共享进程所拥有的全部资源关系:一个进程可以包含多个线程,这就是多线程,比如看视频是进程,图画、声音、广告等就是多个线程线程的作用:使多道程序更好的并发执行,提高资源利用率和系
2025-02-21 17:16:20
1659
原创 MinIO(看这一篇就够了)
对象存储是一种数据存储架构,设计用于管理和处理大量非结构化数据。与传统的文件存储和块存储不同,对象存储通过将数据分解为离散的、独立的单元或“对象”来存储每个对象包含数据本身、相关的元数据和一个唯一的标识符。特性对象存储服务器磁盘分布式文件系统存储方式以对象为基本单位存储数据,每个对象包含数据、元数据和唯一标识符数据直接存储在服务器的本地磁盘上数据分布在多个服务器节点上,通过网络进行数据访问优点能够轻松扩展至数十乃至数百EB的容量。扁平化结构,不受复杂目录系统对性能的影响。
2025-01-10 14:50:24
22825
原创 WebSocket(看这一篇就够了)
WebSocket是基于 TCP 的一种新的应用层网络协议。它提供了一个全双工的通道,允许服务器和客户端之间实时双向通信。因此,在 WebSocket 中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输,客户端和服务器之间的数据交换变得更加简单。WebSocket 的其他特点包括:(1)建立在 TCP 协议之上,服务器端的实现比较容易。(2)与 HTTP 协议有着良好的兼容性。
2024-12-09 12:16:39
42179
4
原创 Seata(看这一篇就够了)
指一次大的操作由不同的小操作组成的,这些小的操作分布在不同的服务器上,分布式事务需要保证这些小操作要么全部成功,要么全部失败。从本质上来说,分布式事务就是为了保证不同数据库的数据一致性。
2024-12-04 10:55:59
930
原创 SkyWalking(看这一篇就够了)
SkyWalking是开源的可观测平台,主要用于收集,分析,聚合和可视化服务和云原生基础设施的数据。Skywalking提供了一种简单得方式来维护分布式系统得视图关系。SkyWalkingSkyWalking是开源的一款分布式追踪,分析,告警的工具,现已属于Apache旗下开源项目, SkyWalking为服务提供了自动探针代理,将数据通过gRPC或者HTTP传输给后端平台,后端平台将数据存储在Storage中,并且分析数据将结果展示在UI中。
2024-12-03 20:44:36
1904
原创 MongoDB(看着一篇就够了)
MongoDB 是免费开源的跨平台 NoSQL 数据库,命名源于英文单词 humongous,意思是「巨大无比」,可见开发组对 MongoDB 的定位。age: 18,文档型的数据存储方式有几个重要好处:文档的数据类型可以对应到语言的数据类型,如数组类型(Array)和对象类型(Object);文档可以嵌套,有时关系型数据库涉及几个表的操作,在 MongoDB 中一次就能完成,可以减少昂贵的连接花销;文档不对数据结构加以限制,不同的数据结构可以存储在同一张表。
2024-11-02 15:45:18
1219
原创 MyCat(看这一篇就够了)
Mycat是数据库中间件,所谓中间件数据库中间件是连接Java应用程序和数据库中间的软件。一个彻底开源的,面向企业应用开发的大数据库集群支持事务、ACID、可以替代MySQL的加强版数据库一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群一个融合内存缓存技术、NoSQL技术、HDFS大数据的新型SQL Server结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品一个新颖的数据库中间件产品Mycat作用为:能满足数据库数据大量存储;提高了查询性能。
2024-10-17 14:47:54
7767
1
原创 Shiro(看这一篇就够了)
Shiro是apache旗下的一个开源安全框架,它可以帮助我们完成身份认证,授权、加密、会话管理等功能。易于理解的API简单的身份认证,支持多种数据源简单的授权和鉴权简单的加密API支持缓存,以提升应用程序的性能内置会话管理,适用于Web以及非Web的环境不跟任何的框架或者容器捆绑,可以独立运行认证认证即系统判断用户的身份是否合法,合法可继续访问,不合法则拒绝访问。常见的用户身份认证方式有:用户名密码登录、二维码登录、手机短信登录、脸部识别认证、指纹认证等方式。
2024-10-15 22:36:00
1063
原创 SpringMVC(看这一篇就够了)
MVC全称Model View Controller,是一种设计创建Web应用程序的模式。这三个单词分别代表Web应用程序的三个部分:Model(模型):指数据模型。用于存储数据以及处理用户请求的业务逻辑。在Web应用中,JavaBean对象,业务模型等都属于Model。View(视图):用于展示模型中的数据的,一般为jsp或html文件。Controller(控制器):是应用程序中处理用户交互的部分。接受视图提出的请求,将数据交给模型处理,并将处理后的结果交给视图显示。SpringMVC是一个基于MVC
2024-10-15 17:13:41
29167
1
原创 Mybatis(看这一篇就够了)
框架即一个半成品软件。开发者从头开发一个软件需要花费大量精力,于是有一些项目组开发出半成品软件,开发者在这些软件的基础上进行开发,这样的软件就称之为框架。如果将开发完成的软件比作是一套已经装修完毕的新房,框架就好比是一套已经修建好的毛坯房。用户直接购买毛坯房,保证建筑质量和户型合理的同时可以进行风格的自由装修。ORM(Object Relationl Mapping),对象关系映射,即在数据库和对象之间作映射处理。之前我们使用JDBC操作数据库,必须手动进行数据库和对象间的数据转换。这段代码中,数据库数据
2024-10-13 16:06:36
1471
2
原创 Elasticsearch(看这一篇就够了)
Elasticsearch是一个全文检索服务器全文检索是一种非结构化数据的搜索方式结构化数据:指具有固定格式固定长度的数据,如数据库中的字段。非结构化数据:指格式和长度不固定的数据,如电商网站的商品详情。结构化数据一般存入数据库,使用sql语句即可快速查询。但由于非结构化数据的数据量大且格式不固定,我们需要采用全文检索的方式进行搜索。全文检索通过建立倒排索引加快搜索效率。真实开发中我们往往需要对一段内容既进行文字分词,又进行拼音分词,此时我们需要自定义ik+pinyin分词器。创建自定义分词器。
2024-10-10 11:17:27
16765
原创 关于在使用Redssion发布的订阅遇到大bug
我无可奈何,想到了消息中间件的rabbitMQ的发布订阅,既然已经到此何不放手一搏,我直接打算换一个技术栈,我创建了rabbitMQ的配置。最后我选择更新版本,我将pom.xml中的redission的版本调到了最高,redis的版本也调到了最高 然后运行发现成功了。经过仔细查找 ,配置问题也没有问题,我以为是@Async 不对我重新创建了一个线程去执行这个方法发现也不是。在我开发一个仿微信的一个项目的时候,有一个功能在服务端接受到客户端消息时需要做出反应。创作不易,大家的支持就是我坚持下去的动力。
2024-09-04 16:07:50
1341
原创 出现Cannot invoke “javax.script.ScriptEngine.eval(String)“ because “engine“ is null报错
dk8中内置的JavaScript引擎 nashorn 被移除,导致报错Cannot invoke “javax.script.ScriptEngine.eval(String)” because “engine” is null。我在使用一个验证码生成的工具asy-captcha库的验证码接口遇到javax.script.ScriptEngine.eval调用失败的问题,因为engine为null。脚本引擎执行脚本语句报错,因为执行引擎为空。创作不易,大家的支持就是我坚持下去的动力。
2024-08-24 20:17:12
856
原创 关于Java中@Component的使用中出现@Autowired为NULL的问题
这是因为spring加载它们的顺序不同,在使用@Component注解将bean实例化到spring容器内的时候,因为@Autowired是在这个bean之中的,此时@Autowired还未完成自动装载,所以导致依赖注入的service为null。让我百思不得其解(就好比你在北京拿了一锁和钥匙在北京就能打开,但是去了山西就不行了,这把锁也没有收到任何环境的影响还是原本的那把锁);所以如果在这些对象中使用@Autowired去注入对象,得到的结果也是为null。创作不易,大家的支持就是我坚持下去的动力。
2024-08-24 17:17:45
987
原创 出现Property ‘sqlSessionFactory‘ or ‘sqlSessionTemplate‘ are requiredProperty报错
SpringBootApplication,它组合了@Configuration, @EnableAutoConfiguration, 和 @ComponentScan注解的功能。我在使用一个验证码生成的工具asy-captcha库的验证码接口遇到javax.script.ScriptEngine.eval调用失败的问题,因为engine为null。1.启动类 里配置的 (@MapperScan(“com.example.demo.dao.mapper”)),这里开始配置错了。n若有添加,尝试删除。
2024-08-23 10:49:29
1312
原创 RocketMQ(看这一篇就够了)
RocketMQ是一个纯Java、分布式、队列模型的开源消息中间件,前身是MetaQ,是阿里参考Kafka特点研发的一个队列模型的消息中间件,后开源给apache基金会成为了apache的顶级开源项目,具有高性能、高可靠、高实时、分布式特点。应用场景RocketMQ在阿里集团也被广泛应用在订单,交易,充值,流计算,消息推送,日志流式处理,binglog分发等场景。所拥有的功能是一个队列模型的消息中间件,具有高性能、高可靠、高实时、分布式特点;Producer、Consumer、队列都可以分布式;
2024-08-19 00:17:13
3048
原创 Sentinel(看这一篇就够了)
假设我有一个微服务系统,这个系统内包含了 ABCD 四个微服务,这四个服务都是以集群模式构建的。雪崩问题微服务之间相互调用,因为调用链中的一个服务故障,引起整个链路都无法访问的情况。监控应用流量的 QPS 或并发线程数,当达到指定的阈值时对流量进行控制,以避免被瞬时的流量高峰冲垮,从而保障应用的高可用性。流量控制设计理念资源的调用关系:例如资源的调用链路,资源和资源之间的关系;运行指标:例如 QPS、线程池、系统负载等;控制的效果:例如直接限流、冷启动、排队等。
2024-08-18 23:20:34
986
原创 Higress(看这一篇就够了)
概述HTTP认证是一种用于保护Web应用程序的一种身份验证机制。它通过在HTTP请求的头部添加认证信息,来验证用户的身份和权限。HTTP认证可以用于保护敏感信息,限制访问某些资源,或者在访问某些操作之前要求用户提供凭据。HTTP 基本认证常见的验证方案包括1、Basic Authentication(基本认证)Basic认证是最常见的HTTP认证方式之一。在Basic认证中,客户端发送请求时,会在请求头中包含一个"Authorization"字段,该字段包含了经过Base64编码的用户名和密码。
2024-08-14 21:40:58
9668
2
原创 Dubbo(看这一篇就够了)
两大主流远程调用技术RESTfulHttp其实是一种网络传输协议,基于TCP,规定了数据传输的格式。现在客户端浏览器与服务端通信基本都是采用Http协议,也可以用来进行远程服务调用。缺点是消息封装臃肿,优势是对服务的提供和调用方没有任何技术限定,自由灵活,更符合微服务理念。现在热门的Rest风格,就可以通过Http协议来实现。实现方案Java开发中,使用Http连接,访问第三方网络接口,通常使用的连接工具为RestTemplate、HttpClient和OKHttp。RPC协议。
2024-08-14 20:27:43
1237
原创 SpringSecurity(看这一篇就够了)
Spring Security是Spring项目组提供的安全服务框架,核心功能包括认证和授权。它为系统提供了声明式安全访问控制功能,减少了为系统安全而编写大量重复代码的工作。认证认证即系统判断用户的身份是否合法,合法可继续访问,不合法则拒绝访问。常见的用户身份认证方式有:用户名密码登录、二维码登录、手机短信登录、脸部识别认证、指纹认证等方式。认证是为了保护系统的隐私数据与资源,用户的身份合法才能访问该系统的资源。授权授权即认证通过后。
2024-08-08 23:55:21
12822
5
原创 Spring(看这一篇就够了)
Spring是一个开源框架,为简化企业级开发而生。它以IOC(控制反转)和AOP(面向切面)为思想内核,提供了控制层SpringMVC、数据层SpringData、服务层事务管理等众多技术,并可以整合众多第三方框架。Spring将很多复杂的代码变得优雅简洁,有效的降低代码的耦合度,极大的方便项目的后期维护、升级和扩展。Spring官网地址:https://spring.io/.\Spring框架根据不同的功能被划分成了多个模块,这些模块可以满足一切企业级应用开发的需求,在开发过程中可以根据需求有选择性地使
2024-08-01 22:00:59
8697
3
原创 Nacos(看这一篇就够了)
Spring Cloud Alibaba致力于提供微服务开发的一站式解决方案。此项目包含开发分布式应用微服务的必需组件,方便开发者通过 Spring Cloud 编程模型轻松使用这些组件来开发分布式应用服务。官网Spring Cloud Alibaba 定位为什么需要搭建Nacos集群在实际开发过程中,如果使用Nacos 的话,为了确保高可用,我们一般都会对其进行集群的部署。Nacos 规定集群中 Nacos 节点的数量需要大于等于 3 个;
2024-07-31 23:19:20
699
原创 Thymeleaf(看这一篇就够了)
它可以轻易的与SpringMVC等Web框架进行集成作为Web应用的模板引擎。Thymeleaf在有服务和无服务的环境下皆可运行,它即可以让美工在浏览器查看页面的静态效果,也可以让程序员在服务器查看带数据的动态页面效果。当有数据返回到页面时,Thymeleaf会动态地替换掉静态内容,使页面动态显示。Thymeleaf最大的特点是能够直接在浏览器中打开并正确显示模板页面,而不需要启动整个Web应用。Thymeleaf提供了一些内置对象可以操作数据,内置对象可直接在模板中使用,这些对象是以#引用的。
2024-07-30 23:05:40
2778
原创 SpringBoot(看这一篇就够了)
Spring是一个非常优秀的轻量级框架,以IOC(控制反转)和AOP(面向切面)为思想内核,极大简化了JAVA企业级项目的开发。虽然Spring的组件代码是轻量级的,但它的配置却是重量级的。使用Spring进行项目开发需要在配置文件中写很多代码,所有这些配置都代表了开发时的损耗。除此之外,Spring项目的依赖管理也是一件耗时耗力的事情。在环境搭建时,需要分析要导入哪些库的坐标,而且还需要分析导入与之有依赖关系的其他库的坐标,一旦选错了依赖的版本,随之而来的不兼容问题就会严重阻碍项目的开发进度。比如Spri
2024-07-30 22:46:40
63488
13
原创 7.29日学习打卡----初学Redis(七)
Redis的集群脑裂是指因为网络问题,导致Redis Master节点跟Redis slave节点和Sentinel集群处于不同的网络分区,此时因为sentinel集群无法感知到master的存在,所以将slave节点提升为master节点。注意此时存在两个不同的master节点,就像一个大脑分裂成了两个。
2024-07-29 23:20:08
1043
原创 项目开发之文件上传 (秒传、断点续传、分片上传)(看这一篇就懂了)
文件上传在项目开发中再常见不过了,大多项目都会涉及到图片、音频、视频、文件的上传,通常简单的一个Form表单就可以上传小文件了,但是遇到大文件时比如1GB以上,或者用户网络比较慢时,简单的文件上传就不能适用了,用户辛苦传了好几十分钟,到最后发现上传失败,这样的系统用户体验是非常差的。或者用户上传到一半时,把应用退出了,下次进来再次上传,如果让他从头开始传也是不合理的。本文主要通过一个Demo从前端、后端用实战代码演示小文件上传、大文件分片上传、断点续传、秒传的开发原理。通俗的说,你把要上传的东西上传,服务
2024-07-19 19:54:43
1267
2
原创 7.11日学习打卡----初学Redis(六)
在现有企业中80%公司大部分使用的是Redis单机服务,在实际的场景当中单一节点的Redis容易面临风险。
2024-07-11 22:58:04
1246
1
原创 7.10日学习打卡----初学Redis(五)
经历了 1次pipeline(n条命令) = 1次网络时间 + n次命令时间,这大大减少了网络时间的开销,这就是流水线。执行一条命令在redis端可能需要几百微秒,而在网络光纤中传输只花费了13毫秒。注意在执行批量操作而没有使用pipeline功能,会将大量的时间耗费在每一次网络传输的过程上;而使用pipeline后,只需要经过一次网络传输,然后批量在redis端进行命令操作。这会大大提高了效率。
2024-07-11 00:09:47
1322
1
原创 最近写javaweb出现的一个小bug---前端利用 form 表单传多项数据,后端 Servlet 取出的各项数据均为空
在前端用了 multipart/form-data 封装 form 表单数据,后端接受到的数据是一个含文本、二进制数据的复杂数据对象,这时候肯定不能直接通过 getParameter() 获取。因为 getParameter() 方法是不能对这种 “打包数据对象” 进行解析的。这时候最简单的解决办法就是在 servlet 处添加 @MultipartConfig 注解,以告知 servlet,此时接受到的数据是同时含文本、二进制数据的,需要在 getParameter() 前进行适当预处理。
2024-06-29 11:46:47
1478
原创 4.27日学习打卡----初学Redis(四)
Redis只有一个配置文件,如果多个人进行开发维护,那么就需要多个这样的配置文件,这时候多个配置文件就可以在此通过 include /path/to/local.conf 配置进来,而原本的 redis.conf 配置文件就作为一个总闸。微服务场景下,多个微服务使用一个大缓存,流数据业务下,高频读取缓存对Redis压力很大,我们使用本地缓存结合Redis缓存使用,降低Redis压力,同时本地缓存没有连接开销,性能更优。不可变集合是Guava的一个重要特性,它可以确保集合不被修改,从而避免并发访问的问题。
2024-04-27 12:10:07
756
原创 每日五道java面试题之ZooKeeper篇(三)
zookeeper 采用了全局递增的事务 Id 来标识,所有的 proposal(提议)都在被提出的时候加上了 zxid,zxid 实际上是一个 64 位的数字,高 32 位是epoch( 时期;∙ 场景:当新的 Leader 服务器发现某个 Learner 服务器包含了一条自己没有的事务记录,那么就需要让该 Learner 服务器进行事务回滚–回滚到 Leader服务器上存在的,同时也是最接近于 peerLastZxid 的 ZXID仅回滚同步(TRUNC 同步)表明当前服务器角色是 Leader。
2024-04-06 14:03:53
984
原创 4.5日学习打卡----学习Apache HttpClient 5
Apache HttpClient 组件是为扩展而设计的,同时提供对基本HTTP协议的强大支持。http://java.net包提供了通过HTTP访问资源的基本功能,但它并没有提供许多应用程序所需的全部灵活性或功能。HttpClient 组件通过提供一个高效、最新、功能丰富的包来填补这一空白,该包实现了最新HTTP标准的客户端。HttpClient 过去是 Commons 的一部分,现在是 Apache HttpComponents 的一部分。Apache HttpComponents 是 Apache 的
2024-04-05 22:51:30
2267
原创 每日五道java面试题之ZooKeeper篇(二)
接收到客户端请求,处理请求判断是否需要注册 Watcher,需要的话将数据节点的节点路径和 ServerCnxn(ServerCnxn 代表一个客户端和服务端的连接,实现了 Watcher 的 process 接口,此时可以看成一个 Watcher 对象)存储在WatcherManager 的 WatchTable 和 watch2Paths 中去。(3)World:最开放的权限控制方式,是一种特殊的 digest 模式,只有一个权限标识“world:anyone”是一种粗粒度的文件系统权限控制模式。
2024-04-04 23:25:02
1088
原创 每日五道java面试题之ZooKeeper篇(一)
(4)watcher event 异步发送 watcher 的通知事件从 server 发送到 client 是异步的,这就存在一个问题,不同的客户端和服务器之间通过 socket 进行通信,由于网络延迟或其他因素导致客户端在不通的时刻监听到事件,由于Zookeeper 本身提供了 ordering guarantee,即客户端监听事件后,才会感知它所监视 znode发生了变化。实现这个机制的协议叫做 Zab 协议。因此,随着 zookeeper 的集群机器增多,读请求的吞吐会提高但是写请求的吞吐会下降。
2024-04-04 21:40:18
1168
原创 每日五道java面试题之消息中间件MQ篇(三)
跟普通集群模式不一样的是,在镜像集群模式下,你创建的 queue,无论元数据还是queue 里的消息都会存在于多个实例上,就是说,每个 RabbitMQ 节点都有这个 queue 的一个完整镜像,包含 queue 的全部数据的意思。RabbitMQ 有很好的管理控制台,就是在后台新增一个策略,这个策略是镜像集群模式的策略,指定的时候是可以要求数据同步到所有节点的,也可以要求同步到指定数量的节点,再次创建 queue 的时候,应用这个策略,就会自动将数据同步到其他的节点上去了。点以后,用户都睡觉了。
2024-04-02 21:54:53
962
原创 每日五道java面试题之消息中间件MQ篇(二)
2.消息的消费者(consumer) 监听 消息队列,如果队列中有消息,就消费掉,消息被拿走后,自动从队列中删除(隐患 消息可能没有被消费者正确处理,已经从队列中消失了,造成消息的丢失,这里可以设置成手动的ack,但如果设置成手动ack,处理完后要及时发送ack消息给队列,否则会造成内存溢出)。1.消息生产者将消息发送给交换机按照路由判断,路由是字符串(info) 当前产生的消息携带路由字符(对象的方法),交换机根据路由的key,只能匹配上路由key对应的消息队列,对应的消费者才能消费消息;
2024-04-02 21:33:22
819
原创 项目开发---用户登录发送短信实现(使用阿里云短信接口)(看这篇就够了)
因为申请的是阿里云短信个人服务,而不是企业服务,需要测试的发送手机号都必须在短信控制台进行绑定才能进行发送成功。创作不易,大家的支持就是我坚持下去的动力。创建springboot项目。点击Accesskey管理。如果我的内容对你有帮助,请。
2024-04-01 12:25:16
1935
原创 每日五道java面试题之消息中间件MQ篇(一)
所以消息队列实际是一种非常复杂的架构,你引入它有很多好处,但是也得针对它带来的坏处做各种额外的技术方案和架构来规避掉,做好之后,你会发现,妈呀,系统复杂度提升了一个数量级,也许是复杂了 10 倍。但是关键时刻,用,还是得用的。除此之外,RabbitMQ的开源社区很活跃,较高频率的迭代版本,来修复发现的bug以及进行各种优化,因此综合考虑过后,公司采取了RabbitMQ。然后可以聊聊RocketMQ,是阿里开源的,经过阿里的生产环境的超高并发、高吞吐的考验,性能卓越,同时还支持分布式事务等特殊场景。
2024-03-31 09:36:34
1231
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅