- 博客(94)
- 收藏
- 关注
原创 详解网盘系统的架构设计
百度网盘的系统设计采用分布式架构,以应对用户庞大的数量和海量的存储需求。客户端层:用于接收和分发不同设备的用户请求,对文件资源进行拆分和组装,直接和后端服务进行交互。应用微服务:处理核心业务逻辑,如文件上传下载、文件共享、权限控制、VIP 限速等。关系型DB系统:用于持久化存储用户的文件和元数据,以及用户权限等基础信息。消息队列:异步削峰解耦,提高写入性能,减轻数据库负载和应用间频繁通信的压力。注册中心和缓存:应用节点定时上报服务器的 IP 节点+端口到注册中心,以便其它服务器实时调用。
2025-12-22 10:01:36
606
原创 Gitea 轻量级的Git方案 - Gitlab的替代品
上图是笔者调研 Gitea 和 GItlab 的对比图,相比之下 ,Gitea 真是轻量级神器 ,能够完美适配公司业务的需求。
2025-12-15 08:34:26
877
原创 OpenFeign的相关问题
本文介绍了OpenFeign服务调用组件的使用指南。主要内容包括:1)OpenFeign作为Feign的升级版,支持SpringMVC注解;2)环境搭建步骤,包括Nacos注册中心和微服务创建;3)四种常见传参方式(JSON、POJO表单、URL参数、另类传参)的实现;4)超时处理的两种配置方案;5)日志增强功能的使用;6)替换默认HttpClient的方法;7)GZIP压缩的优化方案;8)与Sentinel整合实现熔断降级。文章通过详细代码示例展示了OpenFeign的核心功能,适合初学者快速掌握这一微服
2025-12-08 10:00:03
815
原创 常用的6种API网关
API网关在项目中非常重要。今天这篇文章跟大家一起聊聊工作最常用的6种网关,希望对你会有所帮助。end-- API Key验证end-- 验证API Key格式end-- 请求体验证endend-- 业务规则验证endend-- 添加验证通过标记-- 记录审计日志end通过本文的介绍,我们对6种主流API网关有了全面的认识。技术栈匹配:选择与团队技术栈最匹配的方案性能要求:根据业务并发量选择性能合适的网关功能需求:评估需要的功能特性,如限流、认证、监控等运维成本。
2025-11-18 16:23:18
307
原创 智能体 MCP 协议技术原理与应用实践
能够调用外部系统(数据、工具)是 Agent 的关键特征。但外部系统不具有标准时,代码维护大量 Tools 和系统集成的复杂度会非常高。如 OpenAI Function Calling API,只适用于特定 LLM 和平台,每个应用需要单独开发交互逻辑,难以复用和扩展。:Context 是 Agent 和 LLM 之间的传输对象,但 Agent 和 LLM 对话的过程中,往往需要维护复杂的 Context Updating 代码逻辑,难以高效地在 LLM 和外部系统间传递复杂上下文。
2025-11-04 09:17:54
768
原创 如何进行千万级大表的数据删除
Component@Slf4j@Autowired/*** 智能删除决策*/try {// 1. 分析表状态// 2. 根据分析结果选择最佳方案// 3. 执行删除log.error("智能删除失败", e);throw e;// 分析表大小// 分析表结构// 分析系统负载break;break;break;default:// 各种策略的具体实现...
2025-10-29 10:08:15
1091
原创 LatchUtils:简化Java异步任务同步的利器
在Java应用开发中,为了提升系统性能和响应速度,我们经常需要将一些耗时操作(如调用外部API、查询数据库、复杂计算等)进行异步并行处理。当主流程需要等待所有这些并行任务执行完毕后再继续时,我们通常会用到 ExecutorService等并发工具。然而,直接使用这些原生工具,往往意味着需要编写一些重复的、模式化的“胶水代码”,这不仅增加了代码量,也让核心业务逻辑显得不够清晰。为了解决这个问题,我封装了一个名为LatchUtils的轻量级工具类。它能够以一种极其简洁的方式来组织和管理这一类异步任务。
2025-10-24 15:40:48
628
原创 工作中最常用的工作流引擎
传统企业级应用:选择Activiti,生态成熟,文档丰富,遇到问题容易找到解决方案高性能高并发场景:选择Flowable,它在Activiti基础上做了大量性能优化微服务架构:选择Camunda,外部任务模式完美契合微服务理念,运维监控工具完善规则密集型业务:选择jBPM,与Drools规则引擎深度集成,适合风控、保险等场景轻量级服务编排:选择JDEasyFlow,简单灵活,学习成本低,无外部依赖有些小伙伴在工作中可能会想:"能不能一个项目用多种工作流引擎?我的经验是:可以,但要明确边界。
2025-10-17 10:34:05
618
原创 效率神器 Spring Batch
Data// 公共字段// 银行端数据// 内部系统数据// 对账结果MATCHED, // 数据一致AMOUNT_DIFF, // 金额不一致STATUS_DIFF, // 状态不一致ONLY_IN_BANK, // 银行单边账ONLY_IN_SYSTEM // 系统单边账-- 常用监控SQL示例-- 最近5次作业执行情况。
2025-10-15 08:29:47
1022
原创 Redis为什么能够轻松抗住百万级别的并发请求
有些小伙伴可能会疑惑:Redis是单线程的,为什么还能支持这么高的并发?这里需要澄清一个概念,Redis的"单线程"指的是网络IO和键值对读写是由一个线程来完成的,但Redis的整个系统并不是只有一个线程。为什么单线程反而更快?避免了线程切换的开销:多线程环境下,CPU需要在不同线程间切换,这个过程需要保存和恢复线程上下文,开销很大。避免了锁竞争:单线程模型下,不需要考虑线程安全问题,避免了各种锁的开销。CPU缓存友好:单线程执行时,CPU缓存命中率更高,减少了内存访问延迟。让我们看一个简单的对比:1
2025-09-11 09:49:19
612
原创 消息队列(MQ)的10种典型场景
今天我想和大家分享我在实际工作中使用消息队列(MQ)的10种典型场景,希望对你会有所帮助。在深入具体场景之前,我们先来思考一个基本问题:为什么要使用消息队列?系统间的直接调用:引入消息队列后:接下来我们将通过10个具体场景,带大家来深入理解MQ的价值。在我早期参与的一个电商项目中,订单创建后需要通知多个系统:这种架构存在严重问题:紧耦合:订单服务需要知道所有下游服务单点故障:任何一个下游服务挂掉都会导致订单创建失败性能瓶颈:同步调用导致响应时间慢引入MQ后,架构变为:代码实现:技术要点
2025-09-04 11:34:39
1074
原创 开源MCP交易平台
在MCP/API变现这件事上,大多数人要么被复杂的技术栈劝退,要么在使用现有平台时,被高昂的抽成和规则限制。XPack 则提供了一个“两全其美”的方案——既给了你开箱即用的便利,又保留了掌控一切的自由度。近年来AI 疯狂崛起,很多人都在想:我能不能把自己写的 API、MCP 工具、AI 插件,做成一个小服务,让更多人调用,顺便赚点副业收入?真心建议对MCP变现感兴趣的同学,可以去研究一下这个开源项目,打开了MCP交易的新可能。命令,你把它复制到你的服务器上运行,接杯水的功夫,你的专属MCP商店就部署好了。
2025-08-27 15:40:48
834
原创 Token、Session、Cookie、JWT、OAuth2 详解
Cookie是存储在浏览器端的一小段文本数据,由服务器通过HTTP响应头的Set-Cookie字段发送给浏览器,浏览器随后会自动在每次请求中通过Cookie头将其带回给服务器。工作原理Session是存储在服务器端的用户状态信息。服务器为每个用户创建一个唯一的Session ID,并通过Cookie将这个ID传递给浏览器,浏览器后续请求时带上这个ID,服务器就能识别用户身份。Session存储结构// 典型的Session数据结构// 自定义属性// 省略getter/setter。
2025-08-24 00:10:43
958
原创 还在用WebSocket实现即时通讯?试试MQTT吧
消息中间件应用越来越广泛,不仅可以实现可靠的异步通信,还可以实现即时通讯,掌握一个消息中间件还是很有必要的。如果没有特殊业务需求,客户端或者前端直接使用MQTT对接消息中间件即可实现即时通讯,有特殊需求的时候也可以使用SpringBoot集成MQTT的方式来实现,总之消息中间件是实现即时通讯的一个好选择!
2025-08-22 08:43:30
799
原创 MaxKB+合合信息TextIn:通过API实现PDF扫描件的文档审核
摘要:基于MaxKB V2版本,通过文件上传、链接生成、TextIn OCR转换和大模型审核四步流程,将PDF扫描件转为Markdown格式后进行智能审核。系统支持错别字标注、格式修正等审核功能,企业无需自研OCR即可实现高精度文档处理。该方案适配各类OCR服务,可帮助用户突破扫描件处理瓶颈,构建全格式智能审核闭环,显著提升文档处理效率。
2025-08-12 09:23:58
658
原创 画图神器,“手残党”福音,拒绝丑图!
很少有人一上来就能把图画得好看。刚开始画得丑很正常,别急着放弃——循序渐进才是王道。先给大家看看我刚写博客时画的几张图,现在回头看,真是忍不住想抠脚。当然,说了过去的不好看,也不是暗示我现在的图有多惊艳。实话实说,现在画的很多图我自己也不完全满意,更多时候是在时间和回报之间做取舍。最后,画图不是一蹴而就的技能,它需要工具熟练度、审美积累和反复练习的结合。刚开始画得丑没关系,能坚持下去、不断优化细节的人,才会在某一天突然发现——自己的图,也能很好看。
2025-08-11 09:09:25
1027
原创 引入Disruptor内存消息队列,系统性能大幅提升!
摘要:Disruptor是一款高性能内存消息队列,源于LMAX对并发算法的研究。其核心架构包括RingBuffer(数据存储)、Sequence(位置标识)、Sequencer(并发控制核心)等组件。主要特性包括:多播事件(支持多个消费者)、消费者依赖关系管理、内存预分配和无锁并发设计。通过不同的ProducerType(单/多生产者)和WaitStrategy(阻塞/睡眠/Yielding/BusySpin等待策略)可进行性能调优。Disruptor通过减少内存分配和使用CAS操作实现低延迟,适用于对性能
2025-07-09 10:04:11
976
原创 MySQL的三大日志详解
MySQL三大日志系统是保障数据安全的核心机制:RedoLog通过WAL机制和循环写入确保数据持久性,UndoLog实现事务回滚和MVCC多版本控制,Binlog支持主从复制和数据恢复。文章深入剖析了三大日志的协同工作原理,提供了生产环境配置模板和监控指标,并针对常见故障给出解决方案。关键配置包括:innodb_flush_log_at_trx_commit=1保障RedoLog实时刷盘、ROW格式Binlog确保数据一致性、合理设置UndoLog清理策略避免膨胀。掌握日志机制是DBA必备技能,正确配置才能
2025-07-09 09:50:27
726
原创 100万QPS短链系统如何设计?
凌晨两点,监控大屏突然飙红——短链服务QPS突破80万!数据库连接池告急,Redis集群响应延迟突破500ms。这不是演习,而是某电商平台大促的真实场景。当每秒百万级请求涌向你的短链服务,你该如何设计系统?今天这篇文章跟大家一起聊聊100万QPS短链系统要如何设计?希望对你会有所帮助。四大设计原则:无状态设计:跳转服务完全无状态,支持无限扩展读多写少优化:将读性能压榨到极致分而治之:数据分片,流量分散柔性可用:宁可部分降级,不可全线崩溃。
2025-06-23 16:57:19
985
原创 我用Trae+豆包+火山方舟,开发了一个美食推荐助手
前几天火山引擎的豆包大模型1.6正式发布了。火山引擎AI云原生的核心是打造了Agent开发的新范式:大模型+Agent开发平台。大模型我们可以用豆包大模型1.6。Agent开发平台,我们可以使用PromptPilot通过交互式引导与提示词优化,在火山方舟通过MCP协议调用云服务,解决部署繁琐问题。我赶紧试用了一下。这几天我用Trae+豆包1.6+火山方舟的MCP,开发了一个美食推荐助手agent。感觉挺有意思的,这篇文章跟大家一起分享一下。
2025-06-17 09:07:19
1093
原创 数据权限的4种方案
在数字化系统的权限架构演进中,用户、角色、菜单始终构成权限管理的三位一体基础框架。随着企业治理进入精细化阶段,传统RBAC模型在应对多维数据管控需求时日益显现其局限性。基于此,"功能权限-数据权限-审批权限"的三元权限体系逐渐成为行业最佳实践,其中数据权限因其与业务场景的高度耦合性,成为系统架构设计中的关键突破点。本文将系统解构四种典型数据权限实现方案,揭示灵活高效的数据权限建模方法论。
2025-06-17 08:55:35
499
原创 如何理解 Spring 当中的 Bean?
当你把第一个管理page的page放进来的时候,这就是第一层b+树,当数据更多的时候,管理page的page也越来越多,那就需要第三层page来进一步管理,这就是两层b+树,以此类推,最终形成一个层层嵌套的hashmap结构,这就是b+树咯。联合索引就是按照你指定的ABC三个字段,形成先排序A再排序B再排序C的有先后的主键,等于在b+树中用A做key找B,用B做key找C,所以如果查询的时候跳过了A,所有的索引就不生效了,因为你没有key,就没法用hashmap。有A没有B,那A会生效B不生效,原理一样。
2025-06-16 09:06:41
788
原创 MySQL同步ES的6种方案!
对于文章上面给出的这6种技术方案,我们在实际工作中,该如何做选型呢?下面用一张表格做对比:方案实时性侵入性复杂度适用阶段同步双写秒级高低小型单体项目MQ异步秒级中中中型分布式系统Logstash分钟级无低离线分析Canal毫秒级无高高并发生产环境DataX小时级无中历史数据迁移Flink毫秒级低极高实时数仓。
2025-05-26 08:44:29
886
原创 数据脱敏的6种方案
/ 反例:直接将生产数据同步到测试环境// 包含手机号、身份证等敏感字段直接将生产的数据,比如:手机号、身份证等敏感字段,同步到了测试环境。这个案例揭示了数据脱敏的极端重要性。方案安全性性能可逆性适用场景字符串替换★★★★★★不可逆日志/展示加密算法★★★★★★可逆支付信息存储数据遮蔽★★★★★★部分可逆数据库查询数据替换★★★★★★可逆测试数据生成动态脱敏★★★★★★★动态可控生产环境查询K匿名化★★★★★★不可逆医疗/位置数据。
2025-05-19 15:45:24
707
原创 10款优质开源项目(GPS、定位修改、IP定位、地图开发)
通过确定说话人的位置,ODAS可以更好地捕捉说话人的声音,并减少环境噪声和其他干扰因素的影响,从而提高语音识别的准确率。而且,它还有速度测试、ping测试、MTR测试,以及网站可用性检查等功能, 具有查询速度快、、内存占用低、支持多种部署方式等特点,简直就是网络检测的瑞士军刀!简单来说,ODAS可以帮助确定声音来源的位置,并对这些声音进行区分和追踪,这在许多场景中都非常有用,如语音识别、会议系统、智能家居、安全监控等。Air780EG,室内室外都能用,支持北斗+GPS双模卫星定位,卫星定位误差约5米;
2025-03-17 09:05:06
2901
1
原创 常用的接口重试方案!
某个电商平台的订单退款接口突发异常,因为银行系统网络抖动,退款请求连续失败。原本技术团队只是想“好心重试几次”,结果开发小哥写的重试代码竟疯狂调用了银行的退款接口近百次!最终导致用户账户重复退款,平台损失过百万。老板在复盘会上质问:“接口重试这么基础的事,为什么还能捅出大篓子?大家哑口无言,因为所有人都以为只要加个for循环,再睡几秒就完事了……这篇文章跟大家一起聊聊重试的7种常用方案,希望对你会有所帮助。重试就像机房里的灭火器——永远不希望用到它,但必须保证关键时刻能救命。我们工作中选择哪种方案?
2025-03-11 08:56:55
500
原创 分库分表 带来了哪些问题?
分库分表是解决单库单表性能瓶颈的有效手段,但也会引入新的复杂性和技术挑战。这篇文章跟大家一起聊聊,分库分表后带来的7个问题,以及相关的解决方案,希望对你会有所帮助。分库分表本质上是“性能换复杂度”,它虽然能有效提升系统的性能和扩展性,但问题也随之而来。问题解决方案全局唯一 ID雪花算法、号段分配、Leaf跨库跨表查询中间件支持(如 ShardingSphere)或手动合并分布式事务分布式事务框架(Seata)、消息最终一致性分片键设计问题路由表或高效分片键数据迁移问题。
2025-01-17 10:06:50
944
原创 用 Spring AOP 优化数据库 IN 查询,效率提升巨大!
我们在项目中经常遇到IN查询,同时IN的参数太多甚至大几百上千,会导致PG性能下降严重进而接口反应太慢。因为用的地方多,每次都要写很麻烦,所以结合SpringAOP写了一个基于注解优化方案,只需要打上注解就可以提升性能了。加在需要拆分的参数上,只支持一个。这里的加可以是:合并运算,SUM,COUNT以及求TOPN(合并后再取TOPN)线程池,可能阻塞比较大,不要用公共的线程池最好自己定义一个。不适用的典型场景有分页以及不符合上面公式的场景。并行执行,然后将返回结果合并。标记需要拆分参数的注解。
2025-01-13 13:53:34
381
原创 Git代码规范
master 为主分支,也是用于部署生产环境的分支,需要确保master分支稳定性。对于工作量小的功能开发(工时小于1天),可以直接在devolop 分支进行开发,否则由 develop 分支检出 feature 分支进行开发,开发完后合并到develop 分支。develop 为开发环境分支,始终保持最新完成以及bug修复后的代码,用于前后端联调。一般开发的新功能时,feature分支都是基于develop分支创建的。线上出现紧急问题时,需要及时修复,以master分支为基线,创建hotfix分支。
2024-12-24 11:00:54
1700
原创 MyBatis中的 10 个宝藏技巧!
这个轻量级的持久层框架还有很多隐藏的“宝藏技巧”。如果你能掌握这些技巧,不但能让开发更高效,还能避免掉入一些常见的“坑”。今天就从浅入深,分享 10 个让人眼前一亮的 MyBatis 开发技巧,每一个都配上具体的场景和代码示例,务求通俗易懂,希望对你会有所帮助。有些小伙伴会遇到这样的问题:数据库表字段是下划线命名,但 Java 对象是驼峰命名。比如user_name对应userName。如果直接用默认的resultType,MyBatis 是无法自动映射的。这个时候,用resultMap就能完美解决。
2024-12-24 10:59:52
903
原创 MQ的10种经典使用方式
消息队列(MQ)是分布式系统中不可或缺的技术之一。对很多小伙伴来说,刚接触MQ时,可能觉得它只是个“传话工具”,但用着用着,你会发现它简直是系统的“润滑剂”。无论是解耦、削峰,还是异步任务处理,都离不开MQ的身影。下面我结合实际场景,从简单到复杂,逐一拆解MQ的10种经典使用方式,希望对你会有所帮助。消息队列不只是传递消息的工具,更是系统解耦、提升稳定性和扩展性的利器。在这10种经典场景中,每一种都能解决特定的业务痛点。
2024-12-17 08:33:29
980
转载 工作中常用的8种设计模式
设计模式在我们日常的软件开发中无处不在,它们帮助我们编写更易扩展、更具可读性的代码。今天结合我实际工作场景和源码实例,跟大家一起聊聊工作中最常用的8种设计模式,希望对你会有所帮助。这些设计模式不仅在日常开发中有着广泛应用,更在 JDK 和 Spring 中深度体现。了解它们的本质和应用场景,能够让我们写出更优雅、更健壮的代码。
2024-12-11 16:38:20
1186
原创 SkyWalking 和 ELK 链路追踪实战
SkyWalking和 ELK 各自在 APM 与日志管理领域发挥着重要作用,尽管原生 ELK 不直接支持链路追踪,但通过与 SkyWalking 的集成,可以互补优势,共同提升微服务架构下的可观测性。
2024-12-09 15:23:19
1270
原创 10个好用的在线工具
代码生成图片,这个不写博客的小伙伴可能不太常用,像我会时常分享一些技术类的文章,里边难免会贴出代码块,出于观看方便和样式美观就会转成图片。的所有功能,又在其基础上增加了很多实用功能,它几乎可以集成当下所有主流技术,只要勾选相应的模块就可以自动集成进来。里的数据,自动生成对应的统计图形,样式可以自由切换,生成PDF、JPG等格式。是一个自动生成代码的工具,JAVA代码自动生成,还有H5样式布局器。来生成,但用的时间长了发现,它也就仅仅只能帮我们引入一些必要的。这是一个非常强大的工具类站点,我个人常用得就是。
2024-12-05 14:50:11
944
原创 对接第三方接口,并处理异步通知,对接口进行签名验签
*** 是否启用验签功能,默认验签*/@Component//实现 HandlerMethodArgumentResolver 接口/*** 此方法用来判断本次请求的接口是否需要解析参数,* 如果需要返回 true,然后调用下面的 resolveArgument 方法,* 如果不需要返回 false*/@Override/*** 真正的解析方法,将请求中的参数值解析为某种对象* parameter 要解析的方法参数。
2024-11-28 15:25:33
407
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅