- 博客(57)
- 收藏
- 关注
原创 Android 16 下 uni-app APP 提示“网络连接失败”的排障与修复
Android 16 下 uni-app APP 提示“网络连接失败”,经排查非服务器或权限问题,根源在于旧版 DCloud 原生网络适配器强制启用已废弃的 TLSv1 协议。在 Android 16(API 36)环境下,该协议被系统拒绝,导致请求未发出即失败。修复方案为升级 HBuilderX 至 5.24,同步更新 @dcloudio/uni-* 依赖至 3.0.0-5020420260812001 版本,重新云打包并覆盖安装新 APK。验证通过后,前端正常显示验证码,日志无异常,服务端收到真实请求,
2026-09-11 13:52:48
346
原创 MySQL → 达梦 DM8 数据迁移笔记
MySQL迁移达梦DM8数据库实践指南 本文记录从MySQL迁移至达梦DM8数据库的完整过程,总结关键问题和解决方案。迁移工作包含环境准备、DTS工具使用、常见兼容性问题处理和应用层改造。 核心问题包括: 表结构差异:如ON UPDATE时间戳限制、自增列语法不同 数据一致性:非空约束、外键约束的校验处理 应用兼容:分页方言、GROUP_CONCAT函数替代 迁移流程优化:对象迁移顺序、历史残留清理 特别强调分页处理应采用MyBatis-Plus自动方言识别,函数调用建议使用COALESCE替代IFNULL
2026-08-21 09:53:09
232
原创 AES + RSA 混合加密方案
措施实现机密性AES-GCM 加密消息内容,密钥通过 RSA-OAEP 传输完整性GCM 模式自带 128-bit 认证标签,篡改即解密失败防重放随机 nonce(32位十六进制)+ Redis 去重 + 时间戳 5 分钟容差前向安全AES 密钥每次登录重新交换,RSA 私钥用后即删密钥隔离AES 密钥按 userId 隔离存储(key =最小暴露RSA 私钥仅存 Redis 10 分钟,AES 密钥前端仅存内存降级兼容未交换密钥时自动降级为明文传输,不影响基本功能SSE 豁免/stream。
2026-06-25 16:03:50
242
原创 在 Windows 本地用 Docker 部署向量模型(bge-m3)
本文介绍了在Windows环境下使用Docker部署Ollama向量模型的详细步骤。主要内容包括:1)两种Docker启动方案(推荐单行执行);2)模型拉取流程及验证方法(含低配设备替代方案);3)接口测试的PowerShell和CMD两种实现方式;4)WSL2和Docker资源配置建议;5)常见问题解决方案(如模型未找到、JSON解析错误等);6)数据存储位置和内存占用说明;7)服务验证方法。重点提示了bge-m3模型需要6GB以上内存,低配设备可改用bge-small-zh-v1.5模型。
2026-06-15 18:46:38
637
原创 一端运行,多端踩坑:uni-app APP 端 SSE 流式输出只能靠 RenderJS
uni-app APP 端 SSE 流式输出解决方案 问题背景: 在 uni-app 开发 AI 聊天应用时,APP 端无法实现 SSE 流式输出效果(H5 端正常),导致 AI 回复一次性显示而非逐字输出。 核心问题: APP 端 JS 运行环境受限,缺乏完整 Web API,且 WebView 底层对 HTTP 响应存在缓冲机制。 解决方案: 采用 RenderJS + XMLHttpRequest
2026-06-14 02:22:18
546
原创 Spring AI Alibaba 的 Function Calling 使用 @Tool 调用中,无法获取用户ID踩坑记录
开发AI对话功能时,遇到异步线程中用户ID获取失效问题。Spring AI流式输出采用异步线程池,导致基于ThreadLocal的若依框架SecurityUtils无法跨线程传递用户身份。尝试改用InheritableThreadLocal和手动传递SecurityContext均失败,最终发现还需同步传递RequestContextHolder。该问题揭示了异步场景下身份认证的复杂性,建议采用显式参数传递或消息头注入等方案替代ThreadLocal,确保跨线程数据一致性。(149字) 核心问
2026-04-11 02:07:55
614
原创 Spring AI Alibaba 模块化重构:从单体到分层架构实践
本文介绍了MindCampus高校心理健康平台的AI模块重构方案。原架构存在代码耦合、职责混乱等问题,AI功能与业务逻辑混杂在mc-project模块中。重构后新增独立mc-ai模块,专注于AI底层能力,与业务层形成单向依赖关系。关键设计包括: 模块职责分离:mc-ai负责AI交互,mc-project处理业务逻辑和数据库操作 解决循环依赖:通过运行时动态扫描Spring Bean实现工具注册,避免编译期依赖 架构优化:形成清晰的分层结构,提升代码复用性和可维护性 重构后的系统实现了AI能力与业务逻辑的解耦
2026-04-02 11:22:30
555
原创 Spring AI Alibaba 多模态模型踩坑记录
ChatClient中defaultOptions和多模态参数的使用要点。defaultOptions用于配置全局默认的大模型调用参数(如模型类型、Temperature、MaxTokens),支持局部覆盖。多模态模式需开启.withMultiModel(true),以适配底层API协议差异,包括请求报文结构和流式响应解析。文章强调应根据请求是否含附件动态选择客户端实例,并严格区分纯文本与多模态场景的消息构建逻辑:多模态需显式附加媒体资源,纯文本则禁止调用.media()方法。最后提供了流式对话响
2026-04-01 09:32:47
413
原创 SQL转ER图神器
推荐一款实用的SQL转ER图在线工具(sql.cengxuyuan.cn),支持MySQL等主流数据库,可批量解析多表SQL语句并自动生成ER图。工具能智能识别外键关系,提供多种配色和布局选项,支持导出PNG/SVG格式。适用于数据库设计、教学演示等场景,操作简单高效,完全免费使用。
2026-02-26 11:11:38
172
原创 Docker Compose 部署 Spring Boot 应用 502 Bad Gateway 问题排查与解决
Docker Compose部署周报系统时出现502错误,原因是后端jar包缺少主清单属性导致无法启动。排查发现pom.xml配置错误或网络问题导致打包失败。解决方案包括:修正pom.xml主类配置、移除skip标签、重新打包生成完整Spring Boot jar包,并重新构建Docker镜像。验证清单文件应包含Main-Class和Start-Class等关键属性,确保后端服务正常启动后502问题即可解决。
2026-02-02 16:58:16
1207
原创 使用Docker Compose 部署时网络冲突问题排查与解决
Docker Compose部署周报系统时遇到网络创建失败问题,主要有两种错误:1) Docker默认IPv4地址池耗尽;2) 子网地址冲突。分析发现,默认地址池(172.17.0.0/16系列)被占用或指定子网(172.20.0.0/24)与现有网络冲突。解决方案包括:更换子网地址(如改用10.0.0.0/24)、清理未使用网络、移除过时version字段等。最佳实践建议使用10.x.x.x私有地址段、规范项目命名,并定期清理无用网络。最终通过指定10.0.0.0/24子网成功解决问题,强调多项目
2026-02-02 14:04:53
978
原创 WebRTC技术实现简易直播平台
本基于WebRTC的直播系统技术实现方案。前端采用WebRTC实现实时音视频通信,配合WebSocket进行信令传递,使用MediaRecorder API录制视频流。后端使用Spring Boot+STOMP构建WebSocket服务器。重点解决了网络穿透、视频质量优化等关键技术问题,包括STUN/TURN服务器配置、自适应码率调整等。系统实现了主播端开播、用户观看、实时互动等功能,展示了完整的直播流程。该方案充分利用现代Web技术,实现了低延迟、跨平台的直播解决方案。
2026-02-01 20:47:38
1006
原创 手把手教你将 7 年前的 OpenSC2K 开源游戏项目重见天日运行教程
开源项目OpenSC2K(《模拟城市2000》JavaScript重制版)时遇到的五个主要问题及解决方案。问题包括:1)依赖包404错误,通过改用官方npm版本解决;2)Webpack配置路径问题,修正引号使用;3)Node.js与Webpack4兼容性问题,通过设置环境变量解决;4)游戏资源缺失导致黑屏,需从原版游戏提取文件;5)bmp-js库API兼容性问题,需调整代码调用方式。最终成功运行该项目需要合法获取原版游戏资源并完成上述修复步骤。
2026-01-28 09:31:13
1051
原创 Docker部署旧版本系统MySQL5.7+乱码问题解决方案
将基于JSP技术的周报管理系统从Windows迁移到Docker环境时遇到的中文乱码问题及其解决方案。通过多维度排查发现,乱码问题主要由Tomcat编码设置、MySQL字符集配置和数据库连接参数不当引起。最终通过修改Dockerfile添加UTF-8支持、优化MySQL配置参数以及简化JDBC连接字符串,成功解决了中文显示问题。文章详细记录了完整的解决方案,包括Tomcat URI编码设置、MySQL字符集配置调整以及数据库连接参数优化,并提供了完整的Dockerfile和docker-co
2026-01-14 17:21:56
976
原创 使用 Cloudflare平台 + Docker + Nginx 完成网站 HTTPS 部署实战记录
通过Cloudflare平台+Docker+Nginx实现网站HTTPS部署的完整流程。主要内容包括:1) 将域名DNS解析托管至Cloudflare并配置代理状态;2) 使用Docker Compose编排MySQL、Redis、前后端服务;3) 通过Nginx容器统一代理多个站点,解决Cloudflare不支持81端口的问题;4) 配置Cloudflare的Edge SSL和Origin Certificate实现端到端HTTPS加密。
2026-01-07 20:34:56
1862
原创 Spring AI Alibaba 对话记忆丢失问题:Redis 缓存过期后如何恢复 AI 上下文
Spring AI Alibaba 对话记忆丢失问题解决方案 问题描述:当 Redis 缓存过期后,AI 无法记住历史对话内容,尽管用户能看到完整的聊天记录。 问题根源: 系统存在两套独立存储机制 消息缓存系统:存储聊天记录供前端展示 AI 记忆系统:存储对话上下文供 AI 推理使用 Redis 过期后仅恢复了消息缓存系统,AI 记忆系统未被恢复 解决方案: 配置 ChatMemory Bean 供其他服务注入 修改消息服务,在从数据库加载历史消息时: 同时恢复两套系统数据 将数据库消息转换为 Spring
2025-12-15 15:53:17
777
原创 Spring AI Alibaba 的 ChatClient 工具注册与 Function Calling 实践
使用Spring AI开发聊天应用时工具注册与函数调用的实践经验。主要内容包括:1) ChatClient Builder的核心配置方法,如系统提示、会话记忆和工具注册;2) 两种函数调用实现方式:Supplier/Function Bean和@Tool注解方法;3) 重点区分.defaultTools()与.defaultToolNames()的使用场景;4) 提供自动收集Bean注册工具的优化方案;5) 解释Supplier与Function的适用场景差异。
2025-12-12 11:24:24
1297
原创 SSE 流式输出 Markdown 实时渲染问题解决方案
使用 fetch + ReadableStream 实现 SSE 流式输出时 Markdown 格式丢失的问题。原方案因错误地过滤空行和使用 trim() 导致换行符丢失,使 Markdown 内容挤成一团。通过分析 SSE 规范,发现空 data: 行代表换行符,需保留空白字符并拼接多行数据。最终解决方案改进了解析逻辑:避免过滤空行、用 buffer 处理跨块数据,并通过 \n 连接同一事件的多个 data: 行,成功恢复了 Markdown 的实时渲染效果。
2025-12-05 14:07:37
1371
原创 基于Spring AI Alibaba的AI聊天系统中,流式输出暂停时出现重复插入问题的分析与解决
基于Spring AI Alibaba的AI聊天系统中SSE流式输出暂停时出现的重复插入问题。当用户暂停流式输出时,系统会同时触发doOnCancel和doOnComplete回调,导致同一条AI消息被重复保存两次。解决方案采用CAS(Compare-And-Set)机制,通过原子操作确保消息只保存一次。具体实现包括添加消息保存标识、初始化标识状态,以及在完成回调中使用CAS进行幂等性控制,有效解决了重复插入问题。
2025-12-03 13:31:15
1009
原创 若依框架集成Spring AI Alibaba流式对话遇到的认证问题及解决方案
若依框架中集成Spring AI Alibaba实现流式对话接口时,遇到Spring Security认证冲突问题。同步接口正常,但流式接口因异步响应已提交后触发二次权限检查而报错。问题根源在于Spring Security过滤器链与流式响应的时序冲突。通过分析错误日志和机制,发现需确保Security正确处理异步请求的认证信息,最终通过修改SecurityConfig配置,添加对异步请求的支持解决问题。该方案避免了直接放行接口导致的安全隐患,同时保留了JWT认证功能。
2025-10-11 11:11:35
1790
原创 若依框架 (Spring Boot 3) 集成 knife4j 实现 OpenAPI 文档增强
本文详细介绍若依框架(Spring Boot 3)集成knife4j实现OpenAPI文档增强的全过程。主要内容包括:添加knife4j依赖、配置安全框架权限、设置knife4j和SpringDoc参数、业务模块集成方法,以及OpenAPI 3.0注解使用详解和版本对比。提供完整的配置示例和注解案例,帮助开发者快速实现功能强大的API文档系统,并可通过/doc.html访问增强后的文档界面。
2025-09-23 16:41:24
1533
原创 SpringAI智能客服Function Calling兼容性问题解决方案
SpringAI智能客服系统在使用阿里云百炼平台时出现Function Calling兼容性问题,表现为工具输入参数被异常分片。通过源码分析发现,问题源于平台返回数据格式与OpenAI标准不一致。本文提出并实现了一个自定义兼容层解决方案,通过重写OpenAiChatModel类来合并分片参数,同时保持流式响应特性,相比简化方案更优。最终通过Spring Bean配置注册自定义模型,解决了兼容性问题。
2025-08-01 21:32:49
1757
1
原创 Spring AI 使用阿里百炼平台实现流式对话:基于 SSE 的实践
本文介绍如何利用Spring AI和SSE实现流式对话功能。文章首先对比了SSE与WebSocket的特性差异,指出SSE更适合单向推送场景。随后详细展示了项目搭建过程,包括依赖配置和模型服务设置。核心实现部分包含ChatClient配置(支持记忆功能和参数调节)和流式对话控制器(具备中断机制和日志记录)。通过Flux实现响应式流式输出,takeWhile控制动态中断,concatWithValues添加结束标记,为开发者提供了一套完整的流式对话解决方案。
2025-08-01 11:47:54
2038
原创 Redis高频问题全解析
Redis作为高性能内存数据库,具备极速读写能力,主要得益于内存操作、单线程模型、高效数据结构和多路I/O复用机制。它提供五种基础数据类型(String、List、Hash、Set、Sorted Set),满足不同业务场景需求。Sorted Set底层采用压缩列表或跳跃表实现,相比B+树更适合内存环境。Redis支持三种持久化方案(RDB、AOF及混合模式)和三种集群方案(主从、哨兵、Cluster),广泛应用于缓存、消息队列、分布式锁等场景。使用中需注意缓存穿透/击穿/雪崩等问题,可通过布隆过滤器、互斥锁
2025-07-31 18:16:06
779
原创 Java多线程锁机制 无锁 → 偏向锁 → 轻量级锁 → 重量级锁
本文系统介绍了Java的锁机制及其优化策略。首先分析了多线程并发问题的三大根源:可见性、有序性和原子性问题。随后详细解析synchronized如何通过内存屏障等技术解决这些问题。重点阐述了JDK1.6引入的锁升级机制:从偏向锁(无竞争)→轻量级锁(短时间竞争)→重量级锁(激烈竞争),根据实际竞争强度动态调整锁策略。同时深入剖析了Monitor机制的核心组成,包括Owner字段、重入计数器、锁池与等待池的区别。最后强调锁升级的核心思想是在保证线程安全的前提下,针对不同并发场景选择最优锁策略,从而显著提升系统
2025-07-30 10:51:58
1036
原创 CAS原理与实战:解锁并发编程新姿势
CAS(比较再交换)是一种乐观锁机制,通过硬件原子操作实现线程安全,避免传统锁的性能开销。其核心是比较内存值、预期值和新值,匹配则更新。Java中通过AtomicXXX类实现,依赖Unsafe类的CPU原子指令,适用于读多写少场景。优势包括非阻塞、无死锁和高性能,但存在ABA问题(可通过版本号解决)和循环开销问题。CAS广泛应用于AQS框架、并发容器等,是高效并发编程的重要技术。
2025-07-30 00:44:20
803
原创 RAG、Function Call、MCP技术笔记
本文对比分析了RAG、Function Call和MCP三种AI增强技术。RAG通过向量检索连接外部知识库,适用于知识问答系统;Function Call让模型调用外部函数,适合API集成;MCP则是统一工具调用的协议标准。三者各有侧重:RAG侧重知识扩展,Function Call侧重能力调用,MCP侧重标准化集成。技术选型需考虑实时性、复杂度等维度,Java实现难度从简单到复杂不等。理解这些差异对构建AI应用至关重要。
2025-07-25 17:57:29
716
1
原创 Java线程基础面试复习笔记
本文介绍了多线程编程的核心概念与实现方法。主要内容包括:1)线程与进程的区别,重点在内存空间、资源开销和通信方式的差异;2)并发与并行的概念解析;3)四种线程创建方式及其特点;4)线程状态转换机制;5)线程控制方法(join、wait/notify等);6)线程安全停止的最佳实践。文章通过对比分析(如run()与start()、wait()与sleep()等)和代码示例,系统性地阐述了多线程编程的关键技术与注意事项,为开发者提供了实用的参考指南。
2025-07-25 15:53:33
968
1
原创 Redis高可用架构演进面试笔记
Redis集群架构演进与核心技术解析:从单机到分片集群的完整解决方案。文章详细剖析了主从复制(读写分离、全量/增量同步)、哨兵机制(故障检测/转移)、脑裂问题(预防方案)和分片集群(哈希槽分片)四部分核心内容。重点展示了Redis如何通过架构升级解决性能瓶颈(主从复制)、高可用问题(哨兵)、数据一致性(脑裂防护)及海量存储需求(分片集群),最后总结了架构演进路径与各方案的核心价值。技术要点涵盖数据同步机制、故障转移算法、哈希槽路由等关键设计。
2025-07-24 15:28:01
1211
1
原创 HashMap面试知识点笔记
HashMap基于数组+链表/红黑树实现哈希表,通过key的hash值计算数组下标存储数据。JDK1.8引入红黑树优化,在链表长度>8且数组长度≥64时转换为红黑树,解决了JDK1.7头插法导致的死循环问题。put操作包含初始化检查、计算索引、插入逻辑和扩容检查四个步骤,当元素数量达到阈值时会扩容为原容量的2倍。数组长度设计为2的幂次方,通过位运算提升计算效率。HashMap非线程安全,建议在多线程环境下使用ConcurrentHashMap。负载因子默认为0.75,是时间和空间的平衡选择。
2025-07-23 16:13:57
494
1
原创 ArrayList 面试知识点笔记
ArrayList是基于动态数组实现的线性结构,默认初始容量为10,扩容时按1.5倍增长。相比LinkedList,ArrayList随机访问快(O(1)),但插入删除效率低(O(n))。核心区别在于ArrayList内存连续,LinkedList通过指针连接。重要考点包括线程不安全特性、扩容机制(建议预估容量避免频繁扩容)和迭代器的fail-fast机制。实际开发中需注意遍历删除的正确用法、性能优化(如批量操作)和避免内存泄漏。
2025-07-21 17:34:10
967
1
原创 MQ 核心知识点笔记
本文总结了MQ消息队列的核心面试要点:1)消息防丢失需生产者确认、持久化和消费者ACK机制;2)避免重复消费需保证幂等性,如唯一ID和分布式锁;3)死信交换机处理失败消息,延迟队列实现定时任务;4)消息堆积可通过扩容消费者和使用惰性队列解决;5)高可用方案推荐仲裁队列。全文涵盖消息可靠性、延迟处理、系统扩展等关键场景,适合结合实际项目案例回答。
2025-07-21 15:41:37
762
1
原创 ThreadLocal内存泄漏面试笔记
ThreadLocal在Web应用中的内存泄漏问题源于线程复用机制与引用设计的矛盾。Tomcat等容器的线程池会复用工作线程,而ThreadLocalMap中存储的Value是强引用,即使Key(ThreadLocal对象)因弱引用被GC回收,Value仍会驻留内存。典型场景是局部ThreadLocal变量处理完请求后未清理,导致线程复用时内存泄漏。解决方案包括:1)在finally块中手动remove();2)声明为static final变量;3)使用重写remove方法的子类。理解ThreadLoca
2025-07-21 14:40:57
612
原创 Spring Cloud 业务方面笔记
分布式系统架构中的核心技术与解决方案。限流机制部分对比了Tomcat、Nginx和网关的限流实现,重点分析了漏桶与令牌桶算法的差异。分布式理论章节阐述了CAP三选二原则和BASE理论的实践应用。分布式事务解决方案详细说明了Seata框架的三种模式(XA、AT、TCC)及MQ实现方式。接口幂等性设计提供了Token+Redis等四种实现方案。最后概述了Quartz、XXL-Job等分布式任务调度框架。全文通过图表结合的方式,系统性地讲解了高并发分布式系统的关键设计要点。
2025-07-17 15:14:45
743
原创 SpringCloud面试笔记
SpringCloud微服务架构的五大核心组件:注册中心(Eureka/Nacos)、服务调用(Feign)、负载均衡(Ribbon)、熔断(Hystrix/Sentinel)和服务网关(Gateway)。重点阐述了服务注册发现机制、Ribbon负载均衡策略、熔断降级原理,以及Gateway和Feign的使用特点。同时对比了SpringCloud Alibaba生态组件与原生组件的差异,并提供了常见面试问题的解答。文章还涵盖了配置中心、服务监控等微服务关键话题,为构建高可用分布式系统提供了实践指导
2025-07-17 11:35:54
765
原创 Spring面试核心知识点整理
总结了Spring框架的五个核心知识点:1) 单例Bean的线程安全问题及解决方案;2) AOP编程的概念、组件与应用;3) 事务管理的两种方式及常见失效场景;4) Bean生命周期的完整流程;5) SpringBoot自动装配原理与实现机制。文章通过代码示例和原理分析,详细讲解了Spring框架的关键技术点,涉及线程安全、切面编程、事务控制、Bean管理及自动配置等内容,为开发者提供了Spring技术栈的实践指导。
2025-07-15 14:40:30
1047
原创 若依框架集成阿里云OSS实现文件上传优化
将阿里云OSS集成到若依框架中的方案,以解决传统服务器本地存储的硬件要求高、管理难度大、性能瓶颈和单点故障等问题。通过创建OSS文件存储服务类(OSSAliyunFileStorageService)封装上传和删除操作,并配置OSS客户端自动初始化(OssAliyunAutoConfig),实现高效、稳定的文件存储管理。该方法可提升文件访问性能,降低维护成本,同时适用于MinIO等其他对象存储服务。
2025-07-13 22:25:53
887
原创 Git 使用笔记
Git版本控制的基本使用方法和核心概念。主要内容包括:1)首次使用前的全局配置;2)Git的三个重要区域(工作区、暂存区、版本库)和文件状态;3)常用操作命令(查看状态、文件操作、分支管理);4).gitignore文件使用;5)远程仓库操作;6)实用技巧与撤销操作;7)最佳实践建议;8)常见问题解决方法。文章通过代码示例和图示,帮助开发者快速掌握Git的基本操作,建立规范的版本控制流程。
2025-07-13 22:10:27
1202
原创 Redis分布式锁面试笔记
本文系统介绍了Redis分布式锁的实现原理与应用实践。在微服务架构下,传统本地锁无法跨进程协调资源访问,Redis通过SETNX命令实现互斥性锁机制,并配合超时设置和唯一标识确保安全。文章详细解析了锁续期、可重入锁实现及RedLock高可用方案,同时指出主从异步复制的潜在风险。针对实际开发,推荐使用Redisson框架提供的自动续期、可重入等完善功能,避免重复造轮子。最后总结了分布式锁设计需考虑的互斥性、超时控制等核心要素,为分布式系统开发提供重要参考。
2025-07-12 13:05:19
761
原创 Redis过期策略与内存淘汰机制面试笔记
Redis采用惰性删除和定期删除相结合的过期策略,平衡CPU和内存使用。内存淘汰策略包括多种算法(LRU/LFU等),针对不同场景选择合适的策略(如allkeys-lru适合缓存热点数据)。默认noeviction策略会拒绝写入,生产环境建议配置其他策略。合理配置过期和淘汰机制对优化Redis性能至关重要,需根据业务特点选择适当策略,确保缓存有效性和服务可用性。(148字)
2025-07-12 13:00:53
456
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅