- 博客(316)
- 问答 (12)
- 收藏
- 关注
原创 再次理解 MySQL B+ 树:以每页 10 行的聚簇索引为例
本文通过简化模型分析了InnoDB主键聚簇索引B+树的演化过程。设定每页10行记录,展示了从单层到三层的树结构变化,包括根节点、中间节点和叶子节点的组织方式。重点说明了查找路径(如查找id=45的过程)和树高增长条件(当记录数超过120时需增加层级)。与其他结构对比表明,B+树因其范围查询能力、高扇出、低树高和顺序访问优势,成为关系型数据库的最佳选择。虽然存在LSM树等替代方案,但B+树在通用场景下仍是最均衡的索引结构。
2025-11-27 10:16:26
656
原创 在 MySQL 里,不建议使用长事务的根因
MySQL长事务的系统级风险分析 本文深入剖析了MySQL长事务背后的系统级崩溃风险。通过分析InnoDB的MVCC机制,包括事务ID、Undo Log版本链和Read View快照等核心组件,揭示了长事务带来的严重问题:1)即使只读事务也会导致Undo日志无法清理,使磁盘空间耗尽;2)应用层看似合理的长事务会引发雪崩效应,导致主从延迟剧增。文章指出长事务的本质是让数据库为快照背负历史包袱,并总结了长事务的四大系统级危害,包括磁盘耗尽、性能下降等问题。
2025-11-25 14:17:32
1015
2
原创 基于CompletableFuture的主子任务并行处理架构实战:多渠道账单并发导入性能提升5倍的技术方案
本文介绍了一种基于CompletableFuture的并行处理方案,有效解决了企业级财务对账系统中批量处理多支付渠道数据的性能瓶颈问题。通过主子任务双层模型设计,结合线程池调优和异常隔离机制,将原本耗时2.5小时的串行处理优化至30分钟内完成,性能提升5倍。方案实现了细粒度进度追踪、故障隔离和独立重试功能,确保单个渠道异常不影响整体流程,并通过Vue3+JSP混合架构实现任务状态实时展示。技术栈采用Spring Boot+MyBatis-Plus后端框架和Java 17并发工具,为类似批量处理场景提供了可复
2025-11-04 11:20:18
1042
原创 88MB Excel文件导致系统崩溃?看我如何将内存占用降低
本文介绍了通过EasyExcel流式处理+Java 17函数式编程优化财务对账系统的实践。针对传统POI方案处理大文件(30万行/88MB)时内存占用高(2-3GB)、性能差等问题,采用EasyExcel 3.3.4实现了内存占用降低98%(20-50MB)、处理速度提升75%的优化效果。文章详细阐述了:1)主任务+子任务的异步架构设计;2)EasyExcel监听器+BIConsumer回调的流式处理实现;3)模板方法模式实现10+渠道代码复用;4)前端进度反馈机制。该方案已在生产环境验证,支持30万行数据
2025-11-01 13:55:42
790
原创 EasyExcel 流式处理中实现末尾行过滤的技术方案
摘要:本文提出了一种基于延迟缓冲区的流式处理方案,用于解决Excel数据导入时末尾汇总行的过滤问题。通过维护固定大小的滑动窗口缓冲区,当数据超出预定尺寸时触发处理,确保末尾N行始终保留在缓冲区内直至文件读取完毕自动丢弃。该方案采用LinkedList作为缓冲区,实现内存可控的O(batchSize+skipEndRows)空间复杂度,有效规避传统全量加载的内存溢出风险。核心代码仅需3行,支持通过模板方法灵活配置跳过行数,适用于大规模Excel导入及内存受限场景。
2025-10-31 16:47:47
851
原创 处理大型excel文件的技术选型
摘要 本文探讨了处理大型Excel文件的技术方案对比。针对财务系统导入几十万行Excel账单的需求,作者评估了三种主流解决方案:POI SAX模型、excel-streaming-reader和阿里EasyExcel。POI SAX虽然内存占用低但代码复杂度高;excel-streaming-reader API友好但存在POI版本兼容问题。最终推荐阿里EasyExcel,其具有低内存占用、高性能、API简洁等优势,并分享了批量处理、日期格式兼容等实战技巧。通过EasyExcel的流式读取和批量处理,可高效
2025-10-30 12:00:06
885
原创 MySQL InnoDB Redo Log简单介绍
问题答案快递柜类比为什么快?顺序写日志替代随机写数据页投递快于入库为什么安全?WAL + fsync + 崩溃恢复云端备份防丢如何保一致?两阶段提交协调 binlog快递柜 + 邮政系统同步生产怎么配?贵重物品当场上传💡记住“用户看到成功” ≠ “包裹已入库”“数据真正安全” = “快递柜已云端备份”。理解 redo log,就是理解 MySQL 如何在性能与可靠性之间取得精妙平衡。
2025-10-24 15:51:45
816
原创 MySQL 8 查询缓存已废除详解:从架构、历史到替代方案
MySQL 8.0 已彻底移除查询缓存功能,因其存在全局锁争用、粗粒度失效和内存碎片等问题。官方建议转向应用层缓存方案,如Cache-Aside模式结合Redis多级缓存。新架构通过Buffer Pool缓存数据页、优化执行计划等方式提升性能,但不再直接缓存查询结果。开发者需关注缓存命中率和失效策略,采用分层架构实现高效查询。这一变化体现了从数据库级缓存到应用层缓存的演进趋势。
2025-10-24 08:00:00
655
原创 为超过10亿条记录的订单表新增字段
大表新增字段方案对比 传统方案(MySQL 5.6) 直接执行 ALTER TABLE 语句 需4-6小时完成,期间锁表 仅适合业务低峰期操作 现代方案一:MySQL 8.0 Instant ADD COLUMN 仅修改元数据,不重建表 毫秒级完成(<100ms) 限制:必须新增到表尾,且需有默认值或可为空 现代方案二:gh-ost工具 创建影子表并同步数据 通过binlog实时捕获变更 支持限速、监控和回退 最终原子切换表名 建议 优先使用MySQL 8.0的即时加列功能 低版本可使用gh-ost或
2025-10-23 17:51:01
1185
原创 MySQL 8 索引与 B+ 树-初浅理解
MySQL索引的核心是B+树结构,它决定了数据的有序存储和高效查询。索引本质上是数据的有序组织,主键索引直接包含完整数据,二级索引则需通过主键回表查询。随着数据增长,B+树通过页分裂形成多层结构(通常3层即可支持亿级数据),每次查询只需少量I/O操作。自增主键能减少页分裂和碎片,保持索引性能最优。理解B+树结构是掌握MySQL查询优化的关键。
2025-10-23 13:40:20
697
原创 有了 AI IDE 之后,为什么还还要 CLI?
AI编程工具正从IDE插件向“AI IDE×AI CLI”双轨模式演进。AI IDE(如Cursor)擅长代码编辑时的即时辅助,而AI CLI在全局编排、多Agent协作、CI/CD集成等方面更具优势。各大厂商纷纷推出CLI工具,因其能打通项目级上下文、支持脚本化治理、适配云原生环境。研究显示,CLI在批量任务效率、资源管控上表现更优,但需配合审核机制避免效率陷阱。未来,IDE与CLI将分工协作:IDE处理高频交互,CLI承担重任务编排,共同构成AI编程的基础设施。团队落地时需建立治理机制,平衡自动化与可控
2025-09-29 17:46:21
886
原创 用设计模式重构核心业务代码的一次实战
本文通过连锁店订货模板列表展示的业务场景,探讨了如何运用设计模式重构复杂业务代码。原始代码存在单一职责原则违反、开闭原则违反等问题,导致维护困难。针对VO构建、业务规则过滤和特殊处理等不同需求,作者选择了Builder模式、责任链模式和策略模式进行重构,实现了职责分离和可扩展性。重构后的架构通过Handler协调各组件,使Builder、Filter和Processor各司其职,遵循了单一职责、开闭原则等设计原则,提高了代码的可维护性和扩展性,特别适合需要频繁迭代的核心业务模块。
2025-09-14 20:14:37
1325
原创 在Cursor里安装极其好用的Mysql Database Client 插件
本文介绍了Cursor中的Database Client插件,这是一款功能强大的数据库管理工具,提供类似DataGrip的专业级体验。核心功能包括:双击直接编辑数据、实时保存、批量操作、事务控制等。文章详细说明了安装配置步骤、使用方法、快捷键操作,并与SQLTools进行对比,强烈建议用户卸载功能较弱的SQLTools插件。该插件支持多种数据库连接,提供智能提示、多标签页、数据导出等高级功能,界面布局合理,完美集成于Cursor环境中,是开发者管理数据库的高效工具选择。
2025-09-11 18:40:28
1114
原创 彻底让Cursor不要格式化Java代码
本文提供了在Cursor编辑器中彻底禁用Java代码自动格式化的完整解决方案。通过分析问题背景,展示了两阶段配置尝试:基础配置仅部分解决问题,而包含多层防护的进阶配置(基础层、文件层、动作层和Java语言特定层)实现了完全禁用。详细说明了配置步骤、验证方法和常见问题处理,强调需要全面覆盖所有格式化触发点并重启编辑器才能确保生效。这套方案可帮助开发者保持原有代码风格,避免自动格式化带来的干扰。
2025-09-11 09:00:00
904
1
原创 使用Cursor生成【财务对账系统】前后端代码
本文介绍了使用AI工具Cursor快速开发的财务对账系统。该系统采用Vue 3+Spring Boot技术栈,通过工厂模式、策略模式等设计模式实现多平台账单解析功能。核心模块包括登录认证、渠道账单管理、门店映射等,支持抖音、美团等10+平台账单导入。系统特色是一键导入功能,将财务处理时间从2.5天缩短至2小时。技术亮点包括多格式文件解析、异步任务处理、进度回调机制等。开发过程中90%代码由AI生成,仅需少量人工调整,3天完成系统开发。
2025-09-10 14:20:05
1079
原创 在Windows 11上配置Cursor IDE进行Java开发
本文介绍了在Windows 11系统上安装和配置Cursor IDE作为Java开发环境的完整步骤。主要包括:1)下载安装Cursor IDE;2)配置IntelliJ IDEA快捷键;3)安装Java开发扩展包(Extension Pack for Java、Project Manager for Java等);4)优化配置(设置Maven路径、环境变量等)。通过合理配置,Cursor IDE可结合VSCode的灵活性和AI辅助功能,显著提升Java开发效率。文章还提供了保持配置更新、利用AI功能等实用建
2025-09-10 11:17:26
1162
原创 在 Cursor IDE 中配置 SQLTools 连接 MySQL 数据库指南(Windows 11)
本文介绍了在Windows 11环境下,如何在Cursor IDE中通过SQLTools扩展配置连接MySQL数据库。详细步骤包括:安装SQLTools主扩展和MySQL驱动,创建新连接并填写连接信息,测试连接成功后执行SQL查询。文章还提供了创建表、索引等实用SQL示例,以及快捷键使用、连接管理等技巧。通过SQLTools扩展,开发者可在Cursor IDE中实现可视化数据库操作、SQL文件管理等功能,提升开发效率。文末还提供了扩展阅读链接,包括SQLTools官方文档和Cursor IDE使用指南。
2025-09-09 09:56:05
4445
原创 Cursor集成MCP MySQL服务器完整配置指南
本指南介绍了在Cursor IDE中配置MCP MySQL服务器的方法,实现chat窗口直接执行SQL查询。配置步骤包括安装MCP MySQL服务器包、修改配置文件、安装测试工具并重启Cursor。使用时通过"@mysql-local 执行: SQL语句"语法操作数据库,支持查询、统计、表结构查看等功能。文档还提供了故障排查方法、安全注意事项和替代方案,帮助开发者高效完成数据库操作。需准备Cursor IDE、Node.js环境和MySQL访问权限。
2025-09-08 16:20:57
8617
原创 使用JAVA 8的Optional做参数校验
当参数校验不通过,你不想抛出Exception时,也可以考虑使用Optional类来实现,由调用方去处理错误信息。
2024-08-30 13:23:18
638
原创 JAVA 17中List按照组合键分组
之前给公司的供应链同事开发了一个的功能,他们会把订单数据放到excel里,然后导入到管理后台,就能给门店下单了。但是当时上线时,没有做的功能,导致一不小心,就会重复下单。
2024-08-28 13:27:46
1202
2
原创 工作十几年,第一次在线上遇到死锁问题
线程thread_14,是想更新一个用户的手机号信息,对应的代码逻辑会操作两个ConcurrentHashMap,先操作map1,再操作map2,这个两个map是作为本地缓存使用的,都会对其进行computeIfAbsent操作。,当时是没让运维dump pod的运行信息的,因为线上报错的信息比较多了,也影响到了用户,只能先止损。一直等到了3月9号的下午五点多,B服务的接口又开始超时了,这次我赶紧到arms的事件中心大盘里,看看有无异常的事件发生,猜我看到了啥?,避免死锁就可以了。),坐等错误再次发生。
2023-03-21 03:52:30
1352
原创 又一个线上偶发问题-系统短暂无法获取到Redis连接
从配置上看是正常的,每一个A服务的Pod实例,当有100个Redis连接正在处理请求的时候,如果还忙不过来,会继续创建新的Redis连接,一直到300个。是390个,这就有点搞不懂了,占用390个连接没问题,211个反而有问题?😂😂😂😂😂😂😂😂,那到底啥情况?才占用了211连接,不可能导致A服务拿不到Redis连接的,不会是211这个数字有什么玄乎的吧?真的只能承受这么多?)在56分左右,最高占用了211个Redis连接,并不多,难道是A服务的Redis连接配置的不合理?然后就开始漫长且辛苦的定位之路了。
2023-03-18 19:57:26
1420
1
原创 解决一个偶现的503 bug,花了俺不少时间
我赶紧尝试访问了一下,确实如此,但不是每次都不行,而是偶发503的错误提示。群拉完后,我简单同步现象后,就开始分析了,首先想的第一点就是:是不是因为做了线上变更导致的,比如有发版之类的。从这个点切入去想的原因是源于自己处理线上故障的经验,大部分都是发版导致的,能回滚的优先回滚,。因此我打开了发版日历(火速电话公司的安全专家,先临时关闭WAF,但关闭后没有用,访问管理后台还是一直出现503提示,没办法了,得立刻回滚当天上线的内容,正当运维要操作回滚的时候,我反而制止了它。因为:管理后台突然又能访问了。
2023-03-18 19:53:26
1404
原创 读书笔记:用非传统方式做有价值的事之辞职的最佳时间
最近在认真的读着ipod之父托尼·法德尔撰写的《创造:用非传统方式做有价值的事》一书,收获颇多,下面针对书中的【辞职的最佳时间】一章,分享一下读书笔记。
2022-10-23 16:24:17
1302
原创 简历的中上部应该放什么内容
简历的中上部是最关键的位置,因为这个地方是HR重点关注的,需要把最重要的内容放到这个位置上,才能提升简历投递的成功率。
2022-01-12 21:10:09
784
空空如也
数据权限是基于角色还是用户?
2010-08-11
旧系统重构,数据迁移问题
2010-07-29
有两个字段要频繁的查询,如何建立索引?
2010-02-25
url中用 like %林% 做为参数。出现了乱码问题。
2009-12-10
java 完全反编译
2009-12-03
jdk1.5或者jdk1.6如何跟tomcat5.0.27兼容
2009-11-25
javascipt问题:关闭模态对话框,启动新的窗口
2009-11-17
电脑同时插入50个优盘,如何把数据写入50个优盘里面?
2009-07-13
远程访问mysql数据库问题请教
2009-06-24
如何将中央服务器上的数据传到其他的电脑上
2009-06-24
局域网内的A电脑和B电脑之间最好用什么方式进行数据传送?
2009-10-16
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅