- 博客(138)
- 收藏
- 关注
原创 AI应用代码生成平台
本文介绍了一个基于SpringBoot3、LangChain4j和Vue3开发的企业级AI代码生成平台。该平台具备智能代码生成、可视化编辑、一键部署分享和企业级管理四大核心功能。文章详细阐述了后端项目的初始化流程、技术选型、模块设计及实现要点,包括用户模块开发、AI生成应用设计、对话历史模块、可视化修改功能等。重点讲解了后端架构中的关键决策点,如工作流设计、工具调用、流式输出处理、权限控制和安全策略。同时提供了部署上线方案和可观测性实践建议,涵盖日志、指标监控和性能优化等内容,为构建生产级AI代码生成平台提
2026-01-28 19:57:22
707
原创 Spring AI 与 LangChain4j 对比
SpringAI与LangChain4j对比分析 摘要:本文对比了Java生态中两大AI集成框架SpringAI和LangChain4j的核心差异。SpringAI基于Spring生态,采用便携式服务抽象(PSA)和依赖注入设计,强调配置驱动和框架集成;LangChain4j则提供统一API与模块化代理,通过显式构建者模式和动态代理实现声明式开发。在RAG实现上,SpringAI采用ETL管道模式,LangChain4j则提供一体化摄取器;工具调用方面,SpringAI依赖SpringBean管理,Lang
2026-01-09 20:25:59
971
原创 Ollama
Ollama是一个开源的大型语言模型(LLM)本地部署平台,简化了模型的管理和使用流程。其核心特点包括:1) 轻量级架构,支持Docker容器化部署;2) 提供REST API接口,降低开发门槛;3) 内置预训练模型库,支持直接调用。安装方式支持Linux和Windows系统,可通过命令行或Docker快速部署。主要功能命令包括模型下载(pull)、运行(run)、列表查看(list)等操作。典型应用场景涵盖研究开发、智能应用和教育娱乐等领域,特别适合需要私有化部署的企业环境。通过与LobeChat等聊天框
2026-01-07 15:59:16
949
原创 RAG医疗问答系统
本文介绍了基于RAG(检索增强生成)技术的医疗问答系统开发。系统采用开源框架RAGflow实现深度文档理解,通过向量数据库存储医学知识库。文章详细阐述了系统架构设计,包括知识库构建、文件上传处理、异步任务优化等关键技术点。系统整合了多种检索方式(向量检索、网络搜索)并实现结果重排序功能,以提高问答准确性。前端使用Thymeleaf构建交互界面,后端采用Spring Boot框架,通过定时任务和并行处理优化性能。该系统能够高效处理医疗咨询问题,为患者提供准确的医学信息查询服务。
2026-01-07 15:25:30
724
原创 检索增强生成_RAG
摘要:检索增强生成(RAG)是一种结合信息检索系统与生成式大语言模型(LLM)的AI框架,解决了LLM知识更新滞后和私有领域知识缺失的问题。其工作流程包括知识准备、嵌入索引、查询检索、提示增强和生成回答五个步骤。RAG通过降低训练成本(相比GPT3.5/4.0的百万级训练费用)、提高准确性和适应新数据等优势,成为重要解决方案。实现涉及文档解析(Apache Tika工具)、分割(按段落/句子/单词等)和向量存储等关键技术,最终通过检索相关向量生成准确回答。
2026-01-06 19:29:00
1006
原创 LangChain4j 学习
本文介绍了大模型的基础概念、分类和应用场景,探讨了AI是否会替代程序员的问题。重点讲解了JavaAI开发工具LangChain4j的功能和使用方法,包括与Qdrant向量数据库的集成、提示词工程、函数调用、流式输出等关键技术。文章还涉及内容审查助手、敏感词过滤等实用功能,为开发者提供了全面的AI应用开发指南。
2026-01-06 18:43:35
1037
原创 Elasticsearch (ES) 面试题清单(不定时更新)
本文介绍了Elasticsearch的核心概念和使用技巧。主要内容包括:1)倒排索引原理,类比书本索引页;2)文档、字段、索引的数据库类比;3)中文分词器IK的两种模式;4)词库热更新方案;5)match和term查询的区别;6)分页查询与深度分页解决方案;7)bool查询组合多条件;8)结果排序机制。重点讲解了ES特有的数据结构设计、中文处理方案和性能优化方法,适合开发者快速掌握ES核心知识。
2025-12-15 22:46:45
1193
原创 Elasticsearch(全文检索)由入门到精通
本文摘要: Elasticsearch是一个基于Lucene的分布式全文搜索引擎,主要用于处理非结构化数据。文章详细介绍了ES的核心概念(文档、索引、倒排索引)、安装配置步骤(包括Kibana可视化工具)、常用操作(索引/文档CRUD)以及实际应用案例(自动补全功能)。重点对比了ES与Solr的区别,并阐述了ES在GitHub、百度等企业的成功应用。文章还包含ES数据结构与传统数据库的对比,以及域属性的关键参数说明,最后演示了如何实现搜索自动补全功能。
2025-12-15 22:18:21
580
原创 Docker面试题(不定时更新)
Docker核心知识点摘要: Docker与虚拟机区别: 架构:Docker共享宿主机内核,虚拟机需完整OS 性能:Docker接近原生,启动秒级;虚拟机资源损耗大,启动分钟级 体积:Docker镜像MB级,虚拟机镜像GB级 核心概念: 镜像:只读模板,分层存储结构 容器:镜像的运行实例,带可写层 数据卷:持久化存储方案 关键命令: dockerrun:启动容器(-d后台运行,-p端口映射) dockerfile指令:FROM/RUN/COPY/CMD等 docker-compose:多容器编排工具 网络模
2025-12-15 21:59:30
1187
原创 Redis面试题(不定时更新)
Redis核心知识点摘要:1.数据结构:支持String(缓存/计数器)、Hash(对象存储)、List(消息队列)、Set(去重集合)、ZSet(排行榜)等5种常用结构。2.持久化机制:提供RDB(快照恢复快)和AOF(日志安全性高)两种方式,生产环境建议混合使用。3.缓存同步策略:采用CacheAside模式,先更新数据库再删除缓存,防止脏数据。4.缓存问题解决方案:穿透(布隆过滤器/空对象)、雪崩(随机TTL/集群)、击穿(互斥锁/逻辑过期)。5.集群方案:主从复制(读写分离)、哨兵模式(自动容灾)、
2025-12-15 16:55:11
681
原创 RabbitMQ面试题(不定时更新)
RabbitMQ摘要:RabbitMQ是一个基于AMQP协议的消息中间件,核心组件包括生产者、交换机、队列和消费者。交换机有四种类型:直连、广播、主题和头交换机。RabbitMQ提供多种消息模型如简单队列、工作队列、发布订阅等。为确保消息可靠性,需实现生产者确认、消息持久化和消费者手动ACK机制。通过Redis或数据库唯一索引可保证消息幂等性。死信队列处理无法消费的消息,延迟队列可通过TTL+死信队列或插件实现。解决消息堆积可增加消费者或优化消费逻辑。集群方案包括普通集群和镜像队列(高可用)。相比Kafka
2025-12-15 16:22:17
1323
原创 微服务篇面试题(不定时更新)
本文总结了SpringCloud微服务体系的15个核心知识点,涵盖了组件选型、服务注册发现、负载均衡、服务保护、网关路由、分布式事务等关键内容。重点介绍了SpringCloudAlibaba生态组件(Nacos/Sentinel/Seata等)的应用场景和特性对比,详细解析了服务雪崩防护策略、限流算法、CAP/BASE理论等分布式系统核心概念。文章还提供了分布式锁实现方案、接口幂等性保障等实战经验,并附有面试参考回答模板,帮助开发者系统掌握微服务架构设计要点和技术选型考量。
2025-12-15 15:11:02
1079
原创 RabbitMQ高级特性
摘要:本文介绍了RabbitMQ消息队列的实践应用和可靠性保障方案。主要内容包括:1)通过Docker快速部署RabbitMQ服务;2)消息可靠性保障机制(生产者确认、消息持久化、消费者确认和失败重试);3)死信交换机和延迟队列的实现;4)惰性队列解决消息堆积问题;5)RabbitMQ集群模式(普通集群、镜像集群和仲裁队列)。文章详细阐述了各种技术方案的实现原理和配置方法,为构建高可靠的消息系统提供了完整解决方案。
2025-12-14 22:31:54
918
原创 分布式事务Seata
本文介绍了分布式事务的核心理论和Seata框架。首先阐述了ACID原则和CAP定理(一致性、可用性、分区容错性),以及BASE理论。然后重点讲解了Seata分布式事务解决方案,包括其架构部署和TC服务配置方法,详细说明了如何修改启动脚本使其兼容Java17。文章还对比分析了XA、AT、TCC、Saga四种事务模式的原理和实现差异,并提供了Seata高可用配置示例,包括Nacos注册中心设置和各项参数配置。最后给出了事务组映射关系和与TC服务的通信配置细节。
2025-12-14 11:45:40
438
原创 微服务保护学习
本文介绍了阿里巴巴开源的微服务流量控制组件Sentinel的核心功能与应用。首先分析了微服务雪崩问题的四种解决方案,重点阐述了Sentinel在限流、熔断降级等方面的优势。详细讲解了Sentinel的安装配置、与SpringCloud整合方法,以及三种流控模式(直接、关联、链路)和流控效果(快速失败、warmup、排队等待)的实现原理。文章还演示了热点参数限流、线程隔离、授权规则等高级功能,并提供了规则持久化的解决方案。通过实际案例展示了如何利用Sentinel实现服务保护,包括异常处理、自定义返回结果等实
2025-12-13 11:59:32
1149
原创 Springcloud实用篇学习
本文对比了微服务架构与单体架构的差异,详细介绍了SpringCloud微服务框架的核心组件。重点讲解了Eureka服务注册中心、Nacos配置管理和集群搭建、Feign远程调用优化实践,以及Gateway网关的路由配置、过滤器和限流算法。文章还涉及了服务拆分、负载均衡策略、环境隔离等关键技术,并分享了Nacos集群搭建中的常见问题解决方案。通过具体配置示例和性能优化建议,全面展示了微服务架构的核心技术栈实现方案。
2025-12-12 14:16:18
709
原创 Java Ai大模型学习(未完)
大模型(Large Model),通常是指参数量非常庞大的深度学习模型,特别是在自然语言处理(NLP)、计算机视觉(CV)等领域中,模型参数数量达到数十亿甚至数千亿的规模。是一个专为Java开发者设计的开源库,旨在简化将大型语言模型(LLM)集成到Java应用程序中的过程。它于2023年初开发,灵感来源于Python和JavaScript的LLM库,特别是为了填补Java领域在这一方面的空白。官网如何通过低级 API 接入阿里百炼平台的通义模型qwen-max。
2025-12-03 17:37:35
680
原创 Hot100之哈希题
文章摘要:本文介绍了三道经典算法题的解题思路和代码实现,包括"两数之和"(使用哈希表优化查找)、"字母异位词分组"(利用排序和哈希表分组)以及"最长连续序列"(通过哈希集合优化遍历)。每道题目都提供了清晰的描述和高效的解决方案,帮助读者掌握常见算法问题的处理技巧。
2025-11-04 21:29:37
130
原创 538.把二叉搜索树转换为累加树
摘要 题目要求将二叉搜索树转换为累加树,即每个节点的新值等于原树中所有大于等于该节点值的和。解题关键在于利用BST的有序性:通过反向中序遍历(右-中-左)按降序访问节点,并维护一个累加变量sum。递归解法中,先处理右子树,更新当前节点值(sum+=root.val),再处理左子树。迭代法则使用栈模拟反向中序,通过null标记处理节点。两种方法时间复杂度均为O(n),空间复杂度递归为O(h),迭代为O(n)。典型应用包括数据统计和金融累加计算场景。
2025-10-14 12:18:34
787
原创 108.将有序数组转换为二叉搜索树
摘要: 题目要求将升序数组转换为高度平衡的二叉搜索树(BST)。核心思路是递归选取中间元素作为根节点,划分左右子数组构建子树。关键点包括:1) 防止计算中间索引时数值越界;2) 保持左闭右闭区间原则;3) 当数组长度为偶数时,中间位置可选左或右元素,导致答案不唯一。通过递归处理左右子区间,最终返回平衡BST的根节点。时间复杂度为O(n),空间复杂度为O(logn)。
2025-10-14 11:30:56
672
原创 669. 修剪二叉搜索树
这篇文章介绍了如何修剪二叉搜索树,使所有节点值都在给定区间[low,high]内。关键点在于:1)利用BST特性,当节点值小于low时只需处理右子树,大于high时只需处理左子树;2)通过递归返回修剪后的子树,并更新父节点的左右指针来实现节点移除。该方法保持原有相对结构,时间复杂度为O(n)。文章通过具体示例和代码详细解释了递归处理逻辑,强调了如何通过返回值来更新父子关系。
2025-10-14 11:05:52
574
原创 450.删除二叉搜索树中的节点
摘要: 本文介绍了如何在二叉搜索树中删除指定节点。删除操作需要考虑五种情况:未找到节点、叶子节点、左子树空、右子树空,以及左右子树均存在的情况。对于最复杂的第五种情况,需将删除节点的左子树挂到右子树的最左节点下,再返回右子树作为新根。通过递归实现,保持二叉搜索树性质。相比于插入操作,删除节点更复杂,需要处理结构调整和子树移动。代码需注意节点释放和正确返回更新后的树结构。
2025-10-13 11:16:54
598
原创 701.二叉搜索树中的插入操作
题目摘要: 在二叉搜索树(BST)中插入一个新节点,保持BST性质不变。给定BST的根节点root和待插入值val(保证与树中所有节点值不同),返回插入后的根节点。插入位置为遍历路径的第一个空节点处,无需调整树结构。 解法要点: 递归法:若当前节点为空则创建新节点;否则根据val与节点值的大小关系,递归处理左/右子树,并通过返回值更新父节点的子节点指针。 迭代法:遍历树直到找到空节点位置,记录其父节点pre,根据val与pre.val的关系插入左/右子树。 核心代码(递归示例): TreeNode inse
2025-10-13 10:52:00
814
原创 236. 二叉树的最近公共祖先
本文介绍了如何在二叉树中寻找两个节点的最近公共祖先(LCA)。采用后序遍历的递归方法,从底向上查找。算法关键点包括:1)当遇到p或q节点时直接返回;2)递归处理左右子树;3)根据左右子树的返回结果判断LCA:若左右子树均找到目标节点,当前根节点即为LCA;若只有一边找到,则返回该边结果。文章通过具体示例和代码实现,详细解释了回溯过程和结果传递机制,强调了遍历整棵树的重要性,即使已找到目标节点仍需完成遍历以确保正确性。
2025-10-10 11:28:45
747
原创 501.二叉搜索树中的众数(二叉搜索树算法题)
本文介绍了在二叉搜索树(BST)中查找众数(出现频率最高的元素)的迭代解法。通过中序遍历BST并使用栈结构模拟递归过程,统计每个值的出现频率。维护当前最大值和结果列表,遍历过程中动态更新众数集合。当检测到更高频率时清空原有结果并更新最大值。最终将结果列表转换为数组返回。该方法时间复杂度为O(n),空间复杂度为O(n),能够正确处理BST中可能存在多个众数的情况。
2025-10-09 10:12:07
159
原创 530.二叉搜索树的最小绝对差(二叉树算法题)
题目要求在二叉搜索树中找到任意两节点值的最小绝对差。通过中序遍历将二叉搜索树转换为升序数组,然后比较相邻元素的差值即可得到最小差值。算法时间复杂度为O(n),空间复杂度为O(n)。关键点在于利用二叉搜索树的中序遍历特性第二步得到有序数组,使问题转化为在有序数组中寻找相邻元素的最小差值。
2025-10-08 16:40:58
393
原创 98.验证二叉搜索树(二叉树算法题)
摘要: 题目要求验证给定的二叉树是否为有效的二叉搜索树(BST)。BST需满足:左子树所有节点值严格小于根节点,右子树所有节点值严格大于根节点,且左右子树自身也需为BST。 解法: 递归中序遍历法:通过中序遍历将节点值存入列表,检查列表是否严格递增(无重复)。时间复杂度O(n),空间复杂度O(n)。 迭代中序遍历法:利用栈模拟中序遍历,实时比较当前节点与前驱节点值是否满足递增关系。若出现逆序则立即返回false。 两种方法均基于BST中序遍历结果为有序序列的特性。关键点在于严格递增的判定(不允许重复值)及边
2025-10-08 12:23:10
334
原创 700.二叉搜索树中的搜索(二叉树算法)
题目要求在二叉搜索树(BST)中查找值为val的节点并返回该子树。二叉搜索树具有左小右大的特性,可据此优化搜索路径。解法分两种:递归法通过比较节点值与目标值决定搜索方向;迭代法利用BST特性无需回溯,直接沿搜索路径查找。文章还提到一种BFS解法,虽正确但效率不如前两种方法。关键点在于利用BST的有序性避免无效搜索,使时间复杂度优化至O(h),其中h为树高。
2025-10-05 11:08:24
937
原创 617.合并二叉树
摘要 合并两棵二叉树的规则是:对应节点值相加,若某节点在一棵树中为null则直接取另一棵树的节点。可通过递归或迭代实现: 递归法:若任一节点为空则返回另一节点;否则节点值相加后递归处理左右子树。 迭代法:使用队列同步遍历两树,节点值相加后处理子节点,若一方缺失则直接链接另一方的子树。 复杂度:时间O(min(m,n)),空间O(min(m,n))(递归栈或队列深度)。 示例:输入root1 = [1,3,2,5],root2 = [2,1,3,null,4,null,7]时,合并结果为[3,4,5,5,4,
2025-10-05 10:41:21
834
原创 654.最大二叉树(二叉树算法)
题目总结:最大二叉树的构建 本题要求根据不重复整数数组构建最大二叉树,核心是递归分治:每次选取当前区间最大值作为根节点,左侧子数组构建左子树,右侧子数组构建右子树。关键步骤包括:1) 遍历区间确定最大值及索引;2) 创建根节点;3) 划分左右子区间;4) 递归构建子树。采用左闭右开区间处理可简化边界条件,时间复杂度平均O(nlogn),最坏O(n²)。需注意区间划分准确性(如右子树起始索引为maxIndex+1)和空区间终止条件,避免越界或无限递归。典型错误包括初始值设置不当或区间范围混淆。此解法直观体现了
2025-10-03 20:26:19
753
原创 106.从中序与后序遍历序列构造二叉树(二叉树算法题)
摘要: 本文介绍了如何根据二叉树的中序和后序遍历序列(或前序和中序序列)重建原始二叉树。核心思路是:后序序列的末元素(或前序序列的首元素)为根节点,通过在中序序列中找到该根节点位置,分割出左右子树区间,并递归处理。文章详细讲解了切割数组的边界处理(推荐左闭右开原则),并提供了优化方案——使用哈希表存储中序索引以加速查找(O(1))。代码示例展示了递归实现,强调保持区间不变量和正确处理左右子树区间划分。适用于LeetCode 105/106题,需注意避免线性查找和边界错误。
2025-10-03 20:01:15
881
原创 112. 路径总和(二叉树算法题)
该题目要求判断二叉树中是否存在从根节点到叶子节点的路径和等于给定目标值。使用迭代法DFS解决,通过两个栈分别存储节点和对应的路径和。当遇到叶子节点且路径和等于目标值时返回true,否则继续遍历。算法时间复杂度O(n),空间复杂度O(n)。关键点在于栈的同步操作和叶子节点的判断条件。
2025-10-02 12:51:36
602
原创 513.找树左下角的值(二叉树算法题)
【摘要】本文介绍了使用层序遍历(BFS)解决LeetCode 513题"找树左下角的值"的方法。给定一个二叉树,要求返回其最底层最左侧节点的值。算法通过双端队列实现层序遍历,在每一层遍历时记录第一个节点值(最左节点),最终返回最后一层的最左值。代码实现中,先处理根节点,然后逐层遍历并更新结果值,时间复杂度为O(n),空间复杂度为O(n)。该方法比递归更直观,适用于二叉树层序相关问题的解决。
2025-10-02 11:13:23
192
原创 404.左叶子之和(二叉树算法)
这篇文章讲解了如何计算二叉树中所有左叶子节点的和。关键在于准确定义左叶子节点:必须是父节点的左子节点且本身没有子节点。给出了两种解法思路:1)通过父节点判断左叶子;2)使用层序遍历(BFS)方法。代码实现采用BFS方式,遍历时检查每个节点的左子节点是否符合左叶子条件,若符合则累加其值。示例说明根节点3的左子节点9和节点20的左子节点15都是左叶子,因此和为24。文章强调理解左叶子的定义是解题的关键,并提供了清晰的判断条件和实现代码。
2025-10-01 17:18:08
624
原创 本周小结!(二叉树系列二)
本周二叉树学习内容总结:1. 对称二叉树判断:通过比较左右子树的内外侧节点,可采用递归(左右中/右左中)或迭代法(队列/栈)。2. 相同树判断:调整对称二叉树的遍历顺序即可实现。3. 最大/最小深度:前序求深度,后序求高度(根节点高度即最大深度)。4. 节点数量统计:结合深度计算方法。5. 平衡二叉树判断:区分深度(根到节点)和高度(节点到叶子)。6. 路径回溯:递归中隐藏回溯逻辑,如path参数的处理。学习建议:先理解递归三部曲分析过程,再优化代码,避免直接套用简洁代码导致理解不透彻。不同遍历方法需掌握适
2025-10-01 16:59:34
529
原创 110.平衡二叉树(二叉树算法)
本题要求判断二叉树是否为高度平衡的二叉树,即每个节点的左右子树高度差不超过1。解题思路采用后序遍历递归计算子树高度,若发现高度差>1则立即返回-1表示不平衡。主函数通过检查辅助函数返回值是否为-1来确定平衡性。时间复杂度O(n),空间复杂度O(n)(最坏情况下的递归栈空间)。关键点在于结合高度计算与平衡性检查,利用-1作为不平衡标记实现剪枝优化。
2025-09-30 11:55:23
555
原创 222.完全二叉树的节点个数(二叉树算法)
摘要: 题目要求计算完全二叉树的节点个数。给出三种解法:1)递归法(后序遍历),时间复杂度O(n),空间复杂度O(logn);2)精简递归(一行代码);3)迭代法(层序遍历/BFS),利用队列统计节点数,时间O(n),空间O(n)。递归法通过左右子树递归累加节点数,迭代法逐层遍历计数。两种方法均适用于任意二叉树,但题目保证输入为完全二叉树。代码示例包含详细注释,帮助理解递归终止条件与单层逻辑。
2025-09-29 15:38:10
991
原创 101. 对称二叉树(二叉树算法题)
本文介绍了判断二叉树是否对称的两种方法:递归法和迭代法。递归法的核心是比较根节点的左右子树是否互为镜像,通过后序遍历依次比较外侧和内侧节点。迭代法则使用队列模拟层序遍历,成对比较对称位置的节点。两种方法的时间复杂度均为O(n),空间复杂度最坏情况下为O(n)。关键思路是比较左子树的左节点与右子树的右节点,以及左子树的右节点与右子树的左节点是否对称。
2025-09-29 10:49:02
858
原创 二叉树第一周总结
本文系统介绍了二叉树的理论基础与Java实现,重点讲解了二叉树的遍历方法。主要内容包括:1)二叉树的递归遍历(前中后序)及递归三要素;2)使用栈实现的迭代遍历方法,对比了不同写法的优缺点;3)层序遍历(BFS)的队列实现;4)翻转二叉树的多种实现方式及陷阱分析。文章提供了Java代码模板,并对比了递归与迭代的差异,建议先掌握递归再学习迭代写法,最后尝试统一写法。通过经典题目如翻转二叉树,帮助读者建立遍历+处理的思维模式,系统掌握二叉树的核心操作。
2025-09-28 16:40:12
1019
原创 226.翻转二叉树(二叉树算法题)
【摘要】翻转二叉树是LeetCode经典题目(226题),要求交换每个节点的左右子树。文章介绍了递归和层序遍历两种解法,并强调理解遍历顺序的重要性。递归解法采用前序遍历,先交换左右节点再递归处理子树;层序遍历则使用队列按层处理节点。特别指出中序遍历会导致部分节点被翻转两次而不适用。文中提到一个趣闻:Homebrew作者MaxHowell曾因面试时未写出该题被Google拒绝。通过这道简单题目,作者提醒要深入理解二叉树遍历的本质,避免"一看就会,一写就废"。
2025-09-28 13:49:39
721
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅