- 博客(10)
- 收藏
- 关注
原创 基于华为云 Java SDK 实现身份证 OCR 识别接口实践
本文介绍了如何通过Java SDK接入华为云身份证OCR识别服务。主要步骤包括:1) 引入华为云OCR SDK依赖;2) 配置AK/SK和区域信息;3) 设计接口接收前端上传的身份证图片;4) 后端将图片转为Base64格式并调用华为云API;5) 处理返回结果并转换为统一格式。文章强调了使用SDK而非直接HTTP调用的优势,包括简化鉴权流程和强类型模型支持,并详细说明了图片大小限制、正反面识别、异常处理等关键实现细节。最终实现了一个封装华为云复杂性的标准化OCR服务接口。
2026-04-02 13:44:37
479
原创 Spring Cloud Gateway Filter 详解:GlobalFilter 与 GatewayFilter
Spring Cloud Gateway 提供了 GatewayFilter 和 GlobalFilter 两种过滤器机制,分别实现局部和全局功能。GlobalFilter 适用于所有路由,常用于鉴权、日志等全局逻辑,通过实现 GlobalFilter 接口并注册为 Spring Bean 即可生效。GatewayFilter 则针对特定路由,可通过配置文件或代码动态配置,支持自定义过滤器工厂。文章通过鉴权示例详细展示了 GlobalFilter 的实现方式,并解析了过滤器的执行顺序和拦截逻辑,为微服务网关
2026-02-10 18:14:24
985
原创 10亿数据量下的高可用兑换码系统设计与实现
本文介绍了优惠券兑换码生成算法。该算法采用"自增ID+加密混淆+Base32编码"方案,满足10位字符长度、42亿容量、全局唯一等需求。通过自定义Base32编码剔除易混淆字符,结合18位安全校验位保障安全性。使用Redis BitMap实现毫秒级状态验证,存储仅需119MB/10亿条。核心防刷机制借鉴JWT设计,采用动态密钥签名(14位校验码+4位随机因子)和异或混淆,有效防止序列号猜测和暴力破解。算法兼顾高效生成(支持高并发)与安全验证,为优惠券系统提供可靠的技术保障。
2026-02-08 11:20:33
1169
原创 Spring 事务失效的六种常见场景分析与解决方案
本文分析了 Spring 事务失效的四种典型场景:1) 事务方法非 public 访问权限,导致 AOP 代理无法拦截;2) 同类内部方法自调用绕过代理对象,使事务失效;3) 异常被捕获未抛出,导致事务无法回滚;4) 检查型异常不匹配默认回滚规则。针对每种场景,文章提供了具体解决方案,如确保方法为 public、使用代理对象调用、正确处理异常等。这些实践方案能有效保障 Spring 事务的可靠性,特别适用于高并发场景下的数据一致性需求。
2026-02-07 20:21:16
1222
原创 MyBatis-Plus 分页查询报错 BadSqlGrammarException:SELECT COUNT() 异常排查与解决
MyBatis-Plus分页查询时出现BadSqlGrammarException,原因是3.4.3版本在包含特殊字段映射(如反引号包裹的关键字)时,Count优化器可能生成非法SQL。解决方案是在分页对象中设置page.setOptimizeCountSql(false)禁用优化,改为使用标准COUNT(*)方式统计。同时建议数据库设计避免使用关键字,或在实体类中正确使用反引号转义。该问题主要出现在MyBatis-Plus 3.4.x版本中,禁用优化是可靠的临时解决方案。
2026-02-02 20:59:18
662
原创 面试官:如何设计一个高并发、低存储的签到系统?(基于 Redis BitMap 实战)
摘要: 传统数据库存储签到记录存在存储爆炸、性能下降等问题。Redis BitMap方案通过位图映射每月签到状态,每个用户仅需31位(约4字节)存储,极大节省空间。基于String类型实现,支持SETBIT、GETBIT等指令完成签到/查询功能。核心设计包括分月Key(如sign:uid:1024:202601)和位运算统计连续签到天数:通过BITFIELD获取十进制数值,循环右移并与1进行位与运算,直至遇0终止计数。该方案高效支撑千万级用户签到场景,显著降低存储与查询压力。
2026-01-28 21:29:46
952
原创 Synchronized 锁升级机制与底层原理深度解析:从偏向锁到重量级锁
本文深入解析Java中Synchronized关键字的底层实现原理,重点探讨JDK1.6引入的锁升级机制。通过JOL工具分析对象头Mark Word的结构,详细展示了无锁、偏向锁、轻量级锁和重量级锁的状态转换过程。文章包含实战代码验证偏向锁的获取与撤销机制,并解释了JVM启动时偏向锁延迟生效的特性。锁升级机制通过根据不同竞争场景动态调整锁策略,显著提升了并发性能。
2026-01-22 22:33:29
1265
原创 手写 Spring AI Advisor:解耦 ChatMemory 与历史记录,实现聊天记录持久化存储
Spring AI 默认的 MessageWindowChatMemory 会删除超出 maxMessages 限制的早期对话记录,导致数据库持久化失效。本文通过源码分析揭示了该问题:process 方法会丢弃旧消息后覆盖存储,造成历史数据丢失。作者提出需要区分模型短期记忆(需限制上下文长度)和业务聊天记录(需全量保存),并计划通过重写核心组件实现两者并存。最终目标是既能永久保存完整对话历史,又能确保模型只接收最近N条上下文,满足业务审计与性能的双重需求。
2026-01-20 21:17:04
1228
原创 实战:Spring AI 1.1.2 + MongoDB 实现大模型会话记忆持久化
本文演示了如何将Spring AI的会话记忆存储从MySQL平滑切换到MongoDB。首先介绍了通过Docker快速搭建带认证的MongoDB服务,包括创建持久化目录、启动容器和设置管理员用户。然后详细说明了项目集成步骤:替换Maven依赖为MongoDB相关Starter,配置MongoDB连接URI,以及保持原有ChatMemory Bean配置不变。文章验证了切换后的效果,展示了自动创建的数据库和集合结构,并回顾了Spring AI"策略与存储分离"的核心设计思想,强调这种架构可以
2026-01-16 15:31:11
1003
原创 Spring AI + MySQL 实现会话记忆持久化:彻底搞懂 ChatMemoryRepository
摘要:Spring AI通过ChatMemoryRepository和ChatMemory实现了大模型应用的会话记忆功能。ChatMemoryRepository负责与MySQL交互,处理消息的持久化和查询;ChatMemory则管理记忆窗口和历史消息策略。项目配置只需引入相关依赖并设置数据源,Spring AI会自动创建所需组件,无需手动编写SQL。通过分层架构,实现了会话历史的存储、查询和记忆管理,简化了开发流程。
2026-01-14 16:19:23
1328
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅