- 博客(113)
- 收藏
- 关注
原创 Spring中 BeanFactory和FactoryBean分别是什么?
BeanFactory其实就是IoC的底层容器,它本身只是一个接口,顾名思义Bean工厂,定义了Spring的基本功能框架
2025-07-01 17:02:38
617
原创 Spring事务传播行为?失效情况?(详解)
Spring事务传播行为定义了事务方法间的调用规则,包括7种类型:REQUIRED(默认)、REQUIRES_NEW、NESTED、SUPPORTS等。不同传播类型决定了事务是否新建、加入现有事务或独立运行。例如,REQUIRED会加入当前事务,REQUIRES_NEW始终新建独立事务。事务失效常见原因包括:非public方法、异常被捕获未抛出、rollbackFor配置错误、非事务方法调用事务方法等。传播行为核心作用是控制事务边界,如NESTED允许内层事务独立回滚不影响外层事务。
2025-07-01 17:00:51
709
原创 什么是RAG检索生成增强?
智能健康助手知识库构建流程 该文介绍了智能健康助手知识库的构建工作流程和关键技术: 核心流程: 文档处理:收集健康类文档(PDF/Markdown等),进行清洗、分类和语义切割 向量转换:使用Embedding模型将文本转为高维向量,存储到专用数据库 智能检索:通过混合检索(关键词+向量)匹配用户问题,结合精排算法筛选最优结果 答案生成:将检索内容与问题组合,由大模型生成带引用的准确回答 技术亮点: 采用SpringAI的tika+markdown解析器处理多格式文档 基于文件名关键词自动分类
2025-06-29 20:31:44
789
原创 MCP协议是什么?MCP入门实战
MCP协议:增强AI与外部系统交互的开放标准MCP(Model Context Protocol)是一种类似"USB-C接口"的开放协议,旨在标准化AI与外部工具和数据的交互方式。其核心采用客户端-服务器架构,通过SDK实现三层通信:客户端/服务器层、会话层和传输层。MCP提供六大核心功能,其中最实用的是"Tools"工具调用功能,使AI能执行外部操作。使用方式包括通过云平台(如阿里云百炼)或本地运行MCP服务,支持多种客户端软件和编程语言集成。
2025-06-29 20:03:56
1294
原创 OSI七层模型(通俗易懂)
计算机网络体系结构分为七层模型。物理层负责比特流传输;数据链路层实现数据帧封装与校验;网络层处理路由寻址;传输层确保端到端通信质量;会话层管理连接建立/断开;表示层解决数据格式转换;应用层提供用户接口。关键设备对应层次:网卡在物理层,交换机在链路层,路由器在网络层。每层数据单元不同:比特(物理层)、帧(链路层)、包(网络层)、段(传输层)。该分层模型实现了从物理连接到应用服务的完整通信体系,确保异构系统间的可靠数据传输。
2025-06-19 22:29:13
356
原创 编程式长事务优化实战
摘要:长事务会引发连接池耗尽、锁竞争等问题。通过TransactionTemplate手动管理事务,可精准控制边界、拆分长事务为短事务,提升性能。典型优化场景包括:1)批量导入时分批提交;2)外部RPC调用前提交独立事务;3)异步操作在事务提交后触发;4)多阶段操作配合补偿机制。需注意异常处理、避免嵌套陷阱和监控时长。该方案尤其适用于金融系统的高频批量操作和分布式事务场景,有效降低锁竞争,提高容错性。
2025-06-19 22:10:53
1022
原创 MySQL嵌套集模型(详解)
在基于数据库的一般应用中,查询的需求总要大于删除和修改。为了避免对于树形结构查询时的“递归”过程,基于Tree的前序遍历设计一种全新的无递归查询、无限分组的左右值编码方案,来保存该树的数据。
2025-06-16 11:23:37
787
原创 PostgreSQL 快速入门
PostgreSQL 是一个功能强大的开源关系型数据库系统,它使用并扩展了 SQL 语言,并结合了许多功能,可以安全地存储和扩展复杂的数据工作PostgreSQL 因其经过验证的架构、可靠性、数据完整性、强大的功能集、可扩展性以及软件背后的开源社区始终如一地提供高性能和创新解决方案的奉献精神而赢得了良好的声誉。**PostgreSQL 可在所有主要操作系统上运行**,自 2001 年以来一直符合ACID,并且具有强大的附加组件,例如流行的PostGIS地理空间数据库扩展器。
2025-06-16 11:19:13
1277
原创 什么是分库分表?带你通俗理解分库分表
分库分表是应对数据库性能瓶颈的核心方案,包括水平/垂直分库和水平/垂直分表四种方式。水平拆分依据字段值(如用户ID),垂直拆分按业务或字段活跃性。分表策略推荐range+hash组合,解决热点问题。实施需考虑:1)分表键选择;2)非键查询通过ES冗余;3)分布式事务处理;4)跨库join采用字段冗余或数据同步;5)聚合运算应用层合并结果。迁移应采用双写方案逐步切换,避免停服。合理分库分表可有效提升系统扩展性和性能。
2025-06-15 22:37:44
1259
原创 SpringAI+DeepSeek大模型应用开发——6基于MongDB持久化对话
持久化对话实现方案本文介绍了如何将聊天消息从内存存储转移到持久化存储的方案。主要内容包括:MongoDB选择:分析了文档型数据库MongoDB在存储半结构化聊天数据时的优势,特别适合多样化的消息格式。技术实现:通过Spring Boot整合MongoDB设计ChatMessages实体类映射数据库文档开发MessageSerializer序列化器处理消息转换实现MongoChatMemory持久化类完成存储逻辑核心功能:实现了消息的序列化/反序列化,支持多态消息类型处理,确保
2025-06-15 22:30:28
589
原创 Java设计题:如何设计一个线程池
本文探讨了如何设计一个高效灵活的线程池。设计要点包括线程管理、任务编排、超负荷处理及监控机制。关键配置参数包括核心线程数、最大线程数、空闲线程存活时间等,支持根据任务类型(I/O密集或CPU密集)动态调整。实现上采用自定义ThreadFactory、任务提交/执行接口、线程回收机制等。文中还提供了Java实现示例,展示了线程池创建、任务提交、关闭及监控功能,具备拒绝策略和任务统计等增强特性。该设计平衡了灵活性与性能,适用于多种并发场景。
2025-06-14 18:32:51
556
原创 设计模式-创建型模式(详解)
本文介绍了三种创建型设计模式:单例模式、原型模式和工厂模式。单例模式通过多种实现方式确保类仅有一个实例,包括线程安全的懒汉式、饿汉式、静态内部类和枚举实现;原型模式通过克隆创建新对象,区分浅拷贝与深拷贝;工厂模式则分为简单工厂和抽象工厂,前者通过参数控制产品创建,后者提供产品族创建接口。这些模式分别解决了对象创建过程中的不同问题,如资源控制、性能优化和灵活性需求。文章还提供了各模式的代码示例,展示了具体实现方法。
2025-06-14 18:30:43
644
原创 Hot100 哈希题型思路解法
本文总结了三个使用哈希表解决的算法问题:1)两数之和,通过哈希表存储元素和索引,快速查找目标差值;2)字母异位词分组,将排序后的字符串作为键分组;3)最长连续序列,采用动态规划或哈希表存储数字及其序列长度。三种解法均利用哈希表优化了时间复杂度至O(n),空间复杂度也为O(n)。哈希表在高效查找和分组数据方面展现出强大优势。
2025-06-11 09:43:16
420
原创 Redis-ZipList实现原理
ZipList 是一种特殊的“双端链表”由一系列特殊编码的连续内存块组成。可以在任意一端进行压入/弹出操作,并且该操作的时间复杂度为 O(1)。
2025-06-09 10:41:13
100
原创 如何实现高可用评论服务
可以把前N条评论按照热度展示,后N条仍然按照时间顺序排序,这意味着同一条评论可能同时出现在热度和时间里面,当进行分页查询时,需要判断上次读取是热度还是时间,所以入参需要有标识,如果是热度,本次继续是热度(可能不够,那就夹杂时间),如果是时间,本次继续是时间
2025-06-09 10:37:11
1064
原创 设计模式-结构型模式(详解)
适配器模式、桥接模式和组合模式是三种常见的设计模式,分别用于解决不同的问题。适配器模式通过将一个类的接口转换为客户端期望的接口,解决接口不兼容问题,分为类适配器和对象适配器。
2025-05-23 21:18:22
1241
原创 设计模式-行为型模式(详解)
模板方法、策略模式和责任链模式是三种常见的行为型设计模式,分别用于解决不同的设计问题。模板方法模式通过定义算法的骨架,将不变部分放在抽象类中,可变部分由子类实现,实现代码复用和扩展。策略模式通过定义策略接口和具体策略实现,允许在运行时动态选择策略,提升系统灵活性和可扩展性,适用于多策略场景如支付方式切换。责任链模式将多个对象连接成链,请求沿链传递,直到某个对象处理为止,常用于日志处理、过滤器等场景。
2025-05-23 21:17:18
978
原创 系统性能优化指标
面试官询问性能优化相关工作时,旨在考察面试者的实际经验和理论理解。面试者应详细描述其性能优化经验,并阐述对性能优化指标的理解,如吞吐量、响应时间和并发数。吞吐量涉及系统单位时间内的请求处理能力,常用指标包括QPS和TPS。
2025-05-21 21:32:38
299
原创 Redlock算法和底层源码分析
lock()加锁关键逻辑 || ------------------------------------------------------------ || 加锁的Lua脚本,通过redis里面的hash数据模型,加锁和可重入性都要保证 || 加锁不成,需要while进行重试并自旋 |
2025-05-17 11:06:44
754
原创 bitmap/hyperloglog/GEO详解与案例实战
本文探讨了如何处理亿级用户访问量的大数据统计问题,提出了“存得进、取得快、多维度”的核心思路。通过Redis的多种数据结构(如Set、Zset、Bitmap、HyperLogLog等)实现聚合统计、排序统计、二值统计和基数统计。重点介绍了HyperLogLog的概率算法,通过分桶和Kmax估算去重数据量,适用于UV、PV等统计场景,误差仅为0.81%,且内存占用低。此外,还介绍了Redis的GEO命令,用于地理位置计算,如添加坐标、获取距离等,并提供了代码实例。整体方案旨在高效处理海量数据,满足实时统计需求
2025-05-17 11:01:05
988
原创 分布式ID全解决方案
分布式ID是分布式系统中用于唯一标识数据的ID,尤其在分库分表场景中至关重要。它需满足全局唯一、高性能、高可用、方便易用和安全有序递增等要求。常见的实现方案包括基于数据库和雪花算法。基于数据库的方案通过批量生成ID提升性能,但存在单点问题和安全性隐患。雪花算法利用时间戳、机器ID和自增序列生成ID,具有有序性和灵活性,但依赖时钟且可能发生时钟回拨。在实际应用中,如订单系统,分布式ID用于生成订单号、优惠券码等,确保唯一性和安全性。通过预处理思想和本地缓存,可以优化ID生成性能,避免数据库故障或时钟回拨带来的
2025-05-15 14:09:08
602
原创 LangChain4j +DeepSeek大模型应用开发——10 检索增强生成 RAG
例如,在处理一般性的文本资料,且使用的模型上下文窗口较大(如 4096 个 token)时,设置文本片段最大大小为 600 - 800 个 token,重叠部分为 30 - 50 个 token 可能是一个不错的选择。但最终的设置还需要通过实验和实际效果评估来确定,以找到最适合具体应用场景的参数值。
2025-05-15 13:32:15
1171
1
原创 亿级流量系统架构设计与实战 一
本文探讨了高并发架构的基础组件及其优化策略。首先介绍了DNS轮询、LVS和Nginx的工作原理及其在负载均衡中的应用。LVS作为网络层的转发工具,能够提升系统的高并发处理能力,而Nginx则在应用层提供代理服务,增强系统的稳定性和可扩展性。文章还讨论了服务注册中间层的故障处理机制,以及如何通过增量推送和集群部署来缓解服务地址变动带来的推送风暴。最后,文章分析了高并发架构的三个关键指标:高性能、高可用性和可扩展性,并提出了相应的优化策略,如使用PCTn指标衡量性能、确保系统可用性达到99.95%以上,以及通过
2025-05-08 21:22:27
661
原创 后端设计题---说说扫码登录的实现?
核心就是二维码,然后二维码可以 由前端或者后端生成,然后这块需要在二维码中。比如 在用户打开前端登录页面时,前端通过请求服务器生成一个唯一的二维码。前端轮询(长连接,websocket)请求服务器,获取二维码状态。移动端确认登录后,再次向后端发起请求,后端就更新token状态为。这个token也会设置一个有效期,过期了二维码就失效了。,同时把用户基本信息 解析出来,返回给移动端,问。,并携带token令牌,向后端发出扫描请求。,把用户信息传给电脑端,完成登录操作。用户移动端扫描二维码后,这块就是。
2025-05-06 14:42:42
158
原创 编译原理期末重点-个人总结——2 文法与语言
α→β或α∷=βα称为规则的左部(或生成式的左部)β称为规则的右部(或生成式的右部)文法习惯上只将产生式写出,用尖括号括起的是非终结符,否则为终结符。
2025-05-05 17:55:24
833
原创 编译原理期末重点-个人总结——1 概论
计算机语言的分类低级语言:机器语言(唯一能被计算机执行的),汇编语言高级语言:JAVA ,C++执行高级语言或汇编语言的步骤高级语言程序或汇编语言程序==> (通过解释 或 翻译)转成机器语言==>运行机器语言程序解释程序⭐核心就是边解释边执行源程序本身翻译程序把一种语言的程序翻译成另一种语言的程序 ,包括如下编译程序⭐源语言(高级语言)==> 目标语言(低级语言,如汇编或机器语言)汇编程序源语言(汇编语言)==> 目标语言(机器语言)过程高级语言程序的处理过程。
2025-05-05 17:47:29
219
原创 基于注解脱敏+链路追踪traceId 快速定位错误
脱敏注解相关方法加上注解后隐藏参数信息,脱敏前 密码没加密时会暴露用户密码等敏感信息//可以用在参数列表或者方法上,屏蔽不愿意记录的参数日志配置展示TraceId。
2025-05-04 11:38:05
1327
原创 LangChain4j +DeepSeek大模型应用开发——8 Function Calling 函数调用
Function Calling 函数调用也叫Tools 工具`
2025-05-04 11:29:37
351
原创 LangChain4j +DeepSeek大模型应用开发——7 项目实战 创建硅谷小鹿
这部分我们实现硅谷小鹿的基本聊天功能,包含聊天记忆、聊天记忆持久化、提示词。
2025-05-01 11:09:15
725
原创 LangChain4j +DeepSeek大模型应用开发——6 提示词
如果要显示今天的日期,我们需要在提示词中添加当前日期的占位符{{current_date}}设定角色,塑造AI助手的专业身份,明确助手的能力范围。中的内容每次都会被和用户问题组织在一起发送给大模型。**@UserMessage:**获取用户输入。如果有两个或两个以上的参数,我们必须要用。一起发送给大语言模型(LLM)。SystemMessaged的内容。结合使用 动态编写占位符,明确指定传递的参数名称。类的chat方法上添加。的内容将在后台转换为。中添加方法chat3。
2025-05-01 11:07:13
386
原创 LangChain4j +DeepSeek大模型应用开发——5 持久化聊天记忆 Persistence
MongoDB 是一个基于文档的 NoSQL( 非关系型的数据库 ) 数据库,设计理念是为了应对大数据量、高性能和灵活性需求。MongoDB使用集合()来组织文档(Documents),每个文档都是由键值对组成的。数据库(Database):存储数据的容器,类似于关系型数据库中的数据库。集合(Collection):数据库中的一个集合,类似于关系型数据库中的表。文档(Document):集合中的一个数据记录,类似于关系型数据库中的行(row),以 BSON 格式存储。
2025-04-29 20:43:07
913
原创 LangChain4j +DeepSeek大模型应用开发——4 聊天记忆 Chat memory
由多个组件(大模型,聊天记忆等)组成的时候,我们就可以称他为。可以封装多轮对话的复杂性,使聊天记忆功能的实现变得简单。很显然,目前的接入方式,大模型是没有记忆的。为每个用户的新聊天或者不同的用户区分聊天记忆。测试聊天记忆的隔离效果。
2025-04-29 13:20:36
211
原创 LangChain4j +DeepSeek大模型应用开发——3 人工智能服务 AIService
AIService使用面向接口和动态代理的方式完成程序的编写,更灵活的实现高级功能。在LangChain4j中我们使用AIService完成复杂操作。底层组件将由AIService进行组装。为大语言模型格式化输入内容解析大语言模型的输出结果聊天记忆 Chat memory工具 Tools检索增强生成 RAG。
2025-04-28 18:14:54
510
原创 LangChain4j +DeepSeek大模型应用开发——2 接入其他大模型
而 Ollama 本地部署,只需一次性投入硬件成本,对于需要频繁使用大语言模型且对成本敏感的用户或企业来说,能有效节约成本。它集成了阿里的通义系列大模型和第三方大模型,涵盖文本、图像、音视频等不同模态。部署流程简单:只需通过简单的命令 “ollama run < 模型名>”,就可以自动下载并运行所需的模型。将配置参数上的base-url参数指定到百炼平台,使用百炼上的大模型名称和apiKey即可。为了apikay的安全,建议将其配置在服务器的环境变量中。(2)查看模型列表,选择要部署的模型,
2025-04-28 15:40:20
959
原创 LangChain4j +DeepSeek大模型应用开发——1 入门
LangChain4j 的目标是简化将大语言模型集成到 Java 应用程序中的过程。
2025-04-26 22:13:16
700
原创 SpringAI+DeepSeek大模型应用开发——5 ChatPDF
目前已经有了以下这些工具PDFReader:读取文档并拆分为片段;向量大模型:将文本片段向量化;向量数据库:存储向量,检索向量;要解决大模型的知识限制问题,需要外挂知识库;受到大模型上下文限制,知识库不能直接拼接在提示词中;需要从庞大的外挂知识库中找到与用户问题相关的一小部分,再组装成提示词;这些可以利用文档读取器、向量大模型、向量数据库来解决;RAG要做的事情就是将知识库分割==>利用向量模型做向量化==>存入向量数据库==>查询的时候去检索;每当用户询问AI时,
2025-04-18 17:20:51
1759
1
原创 SpringAI+DeepSeek大模型应用开发——4 对话机器人
前面的两种方案,都面临一个问题,SpringAI中的Message类未实现Serializable接口,也没提供public的构造方法,因此无法基于任何形式做序列化。所以必须定义一个可序列化的Message类,方便后续持久化。定义一ai.entity.po@Data//将SpringAI的Message转为我们的Msg//实现将我们的Msg转为SpringAI的Message基于Redis来实现自定义ChatMemory;包中新建一个RedisChatMemory。
2025-04-17 21:36:03
1409
2
原创 SpringAI+DeepSeek大模型应用开发——3 SpringAI简介
模型能够接收的输入类型、输出类型不一定相同。SpringAI整合了全球(主要是国外)的大多数大模型,而且对于大。目前SpringAI支持的大约19种对话模型,以下是一些功能对比。其中功能最完整的就是OpenAI和Ollama平台的模型了。的三种技术架构都有比较好的封装和支持,开发起来非常方便;
2025-04-17 11:27:49
315
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人