java-ee
文章平均质量分 88
旷野说
关注我,从零开始构建基础IT设施;公众号:旷野说;前大厂工程师(10年+研发经验);计算机科班生;
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
为什么 MyBatis 原生二级缓存“难以修复”?
单体应用并非高并发的“原罪”,真正的瓶颈常在于“无状态化缺失 + 数据一致性粗放 + 异常处理失控”。它假设你只有一个应用实例,假设你所有写操作都走同一个 Mapper,假设你数据几乎不变——而这些,在真实高并发系统中,一条都不成立。,需要缓存时,主动选择 Redis + 显式生命周期管理。,想着“开箱即用,省事又快”。“二级缓存可能很危险,除非你使用分布式缓存,否则不要在多服务器环境中启用。但我们忽略了——因为“它太简单了”,简单到让人误以为“开箱即安全”。于是,缓存不仅没提升体验,反而成了。原创 2025-12-03 20:07:55 · 489 阅读 · 0 评论 -
如何用 Redpanda + 本地事务,实现“发消息 + 写 DB” 的强一致性!
摘要: 文章探讨了如何利用Redpanda和本地事务表实现"发消息+写DB"的强一致性。传统同步调用方式存在消息丢失或重复的风险,作者提出采用本地事务表+定时扫表任务的方案,将消息与业务数据写入同一数据库事务,通过独立任务扫描未发送消息并重试发送。该方案结合Redpanda的幂等生产者和消费端幂等处理,确保"至少发一次"和"最多处理一次"的可靠性。文章强调高并发系统的韧性往往源于简单可靠的设计,而非复杂前沿技术,并总结了实现强一致性的关键口诀。原创 2025-11-30 21:09:47 · 1046 阅读 · 0 评论 -
那年夏天,我们的“巨无霸”单体差点压垮整个平台
摘要: 文章以高并发场景下的单体架构优化为核心,通过实战案例揭示:盲目拆微服务并非性能瓶颈的解决方案。作者通过引入Redpanda消息队列,将同步调用改为异步处理(主流程耗时从500ms降至50ms),并强调异常处理三原则(死信队列兜底、幂等消费、监控告警)。指出高并发优化的本质在于代码层面的异步解耦、状态管理和异常控制,而非架构形式。最后提出"先稳微观再谈拆微"的渐进式演进策略,为Spring Boot开发者提供兼容Kafka协议的高性能中间件实践方案。(149字)原创 2025-11-30 20:59:10 · 724 阅读 · 0 评论 -
用 Redis + Lua 守住打赏原子性:我在单体系统中的微观实践(续)
摘要: 在C端高并发打赏场景中,Redis Lua脚本成为保障原子操作的关键防线。本文通过实战案例,详解如何用Spring Boot+Redisson高效集成Lua脚本:从IDEA语法检查、Maven预校验到原子扣款实现,构建"防重-扣款-日志"一体化方案。重点解决脚本管理、主从同步、降级兜底等生产级问题,并给出"慢日志监控+嵌入式测试"的调试方案,最终提炼出血泪总结的Redis Lua实践口诀。在高并发系统中,微观层面的脚本健壮性往往比架构设计更能决定系统稳定性。原创 2025-11-30 20:09:26 · 735 阅读 · 0 评论 -
从单体扛百万并发:我在社交打赏系统中的微观优化实战
本文分享了单体架构应对高并发场景的优化实战经验。作者通过社交打赏系统案例,指出高并发瓶颈往往源于微观设计缺陷,而非架构形态。核心优化策略包括:1)使用Redis+Lua实现原子操作,解决并发扣减问题;2)异步化处理DB操作,解耦核心路径;3)建立对账机制保障最终一致性;4)精细化异常处理和容器选型。实践表明,通过这四大微观优化,单体应用可稳定支撑百万级并发,相比盲目拆分微服务更具性价比。文章强调高并发优化应始于微观层面的精准控制,而非架构层面的过度设计。原创 2025-11-30 19:36:25 · 622 阅读 · 0 评论 -
交友电商平台踩过的坑:高并发抢限量礼物,事务与缓存如何共舞
摘要: 本文以高并发电商平台中的“七夕限量情书”抢购活动为例,剖析了传统事务锁(SELECT ... FOR UPDATE)在高并发场景下的性能瓶颈,以及单纯依赖Redis缓存导致的超发问题。作者提出一套纵深防御体系:通过Redis Lua脚本实现原子预扣、异步消息队列削峰落库、MySQL唯一索引兜底及定时对账补偿,最终实现120,000+ QPS下零超发。关键经验包括:避免串行化锁,缓存操作必须原子化,异步与同步结合,并通过依赖管理规避版本冲突。技术口诀“缓存扛,Lua保;异步落,索引兜;对账在,心不慌”原创 2025-11-30 19:21:33 · 610 阅读 · 0 评论 -
面试官问:maven 版本冲突管理的原理是什么,一句话描述下?
Maven版本冲突管理机制基于三个核心原则:依赖调解、最近优先和显式覆盖。当出现多个版本依赖时,Maven会优先选择依赖路径最短的版本(最近优先),若路径深度相同则先声明者胜。开发者可以通过显式声明依赖或使用dependencyManagement统一版本来强制指定版本。最佳实践包括定期检查依赖树、锁定关键依赖版本以及避免使用版本范围。理解这些规则有助于主动控制依赖版本,确保项目构建的稳定性。原创 2025-11-29 21:07:05 · 842 阅读 · 0 评论 -
一张图看懂:Spring Boot 如何处理请求?Java 21 虚拟线程又带来了什么?
本文介绍了Spring Boot默认使用Spring Web MVC和嵌入式Tomcat的技术栈,并重点讲解了Java 21虚拟线程如何提升Spring Boot性能。文章详细阐述了虚拟线程的三大优势(轻量、挂起、复用),提供了在Spring Boot中启用虚拟线程的配置方法,并给出三种典型应用场景的解决方案。通过对比传统线程模型与虚拟线程模型的差异,指出Spring Web MVC+虚拟线程是简单且高性能的选择。最后总结出"Spring Boot虚拟线程三三三"口诀,为开发者提供清晰的原创 2025-11-29 21:00:07 · 963 阅读 · 0 评论 -
SSO、账号密码和短信验证码我都要-Spring Security 的认证多源登录简记
本文介绍了如何基于Spring Security实现多认证源登录的统一管理。作者通过产品需求引入短信验证码登录的场景,剖析了Spring Security的核心认证机制,提出通过ProviderManager实现多认证源路由的解决方案。文章详细阐述了认证流程的设计哲学,包括类型驱动、职责分离和统一入口三大原则,并给出实战三步法:定义专属Token、实现Provider和统一调用入口。最后提炼出"认、分、统"三字经,强调通过插件化方式应对认证方式的变化,保持系统的灵活性和安全性。原创 2025-11-29 20:42:55 · 637 阅读 · 0 评论 -
一个开发者对 Spring Security 拦截机制的深度追问(续)
本文针对Spring Security中常见的403异常问题,提出了一套系统化的解决方案。通过四步调试法:1)开启DEBUG日志查看安全决策过程;2)自定义异常处理器返回结构化错误信息;3)开发环境临时放行异常查看完整堆栈;4)快速判断拦截层级(Filter或AOP)。文章还总结了"调试403的黄金五步法"口诀,帮助开发者将神秘的403异常转化为可追踪、可解释的普通bug,使Spring Security的安全机制变得透明可控。这套方法既保证了生产环境的友好响应,又提供了开发环境的高效调原创 2025-11-29 20:30:11 · 660 阅读 · 0 评论 -
Java 线程池:像管理餐厅一样简单!
线程池不是魔法,而是一种资源调度的艺术。理解它,就像理解如何高效运营一家餐厅——不多招人浪费钱,也不让顾客等太久。掌握这个比喻,下次面试或开发时,你就能轻松说出线程池的精髓!🍀记住:好的程序员,不光写代码,更懂得“省着用”资源。原创 2025-11-28 21:26:57 · 675 阅读 · 0 评论 -
Java快速开发框架居然没用条件化配置
摘要:本文深入解析Spring Boot条件化配置机制,从核心的@Conditional注解入手,详细介绍了自定义条件实现方法。重点剖析了Spring Boot内置的@ConditionalOn...系列条件注解,包括@ConditionalOnProperty、@ConditionalOnClass、@ConditionalOnBean等常用注解的使用场景和实现原理。文章通过代码示例展示了如何基于环境变量、类路径、Bean存在性等条件动态控制配置加载,为构建灵活可扩展的Spring Boot应用提供了实用原创 2025-11-24 17:07:36 · 1092 阅读 · 0 评论 -
电商交易系统重要概念:什么是脏读、不可重复读、幻读?
数据库并发事务会产生三类数据一致性问题:脏读(读取未提交可能回滚的数据)、不可重复读(同一事务内两次读取同一行结果不同)、幻读(范围查询结果集行数变化)。脏读通过READ COMMITTED隔离级别解决,不可重复读通过REPEATABLE READ解决,幻读需要SERIALIZABLE隔离级别或MySQL的间隙锁机制。MySQL的InnoDB引擎在REPEATABLE READ级别下通过间隙锁可避免幻读。开发建议:关键业务使用REPEATABLE READ及以上隔离级别,范围查询加锁,建立合适索引和约束。三原创 2025-11-03 14:55:43 · 773 阅读 · 0 评论 -
MySQL有5种索引?
MySQL索引类型涵盖主键、唯一、普通、组合及前缀索引,按逻辑用途分类。物理结构上,InnoDB采用聚簇索引(数据与索引存储一体)和二级索引(需回表查询)。特殊场景可使用全文索引(文本搜索)或空间索引(地理数据)。索引设计应遵循主键自增、组合索引合理排序等原则,避免冗余。通过EXPLAIN分析查询性能,确保精准使用索引提升效率。原创 2025-11-03 14:34:48 · 980 阅读 · 0 评论 -
电商交易系统 MySQL + Java 开发实践指南
本文总结了电商交易系统的核心开发规范与常见问题解决方案。主要内容包括:1)业务优先原则,强调理解交易流程(下单-支付-发货-售后)的重要性;2)数据库设计规范,如主键使用BIGINT、金额字段使用DECIMAL等;3)事务与并发控制,演示了正确的锁使用方法;4)防幻读方案;5)支付状态一致性的最终一致性实现;6)性能优化建议;7)新人避坑清单,列出了常见错误及解决方案。文章强调"数据一致性优于性能优化"的原则,并推荐了SQL审核、慢查询监控等工具链。原创 2025-11-03 14:25:37 · 1183 阅读 · 0 评论 -
Spring Boot 1.x、2.x 3.x区别汇总
摘要:Spring Boot 1.x、2.x和3.x是三个主要版本,分别基于Spring Framework 4.x、5.x和6.x,支持Java 6-8、8-19和17+。1.x简化配置,2.x引入响应式编程和云原生支持,3.x强制要求Java 17+,迁移到Jakarta EE,支持GraalVM原生镜像和虚拟线程。新项目推荐3.x,2.x仅维护旧系统,1.x已淘汰。3.x代表云原生和现代化方向,是Spring生态的未来。原创 2025-10-24 18:21:34 · 2267 阅读 · 0 评论 -
【JDK17】Jlink一秒生成精简的JRE
通过上述工具,可灵活实现模块化开发与部署,满足不同场景下的精简 JRE 需求。原创 2025-03-16 14:35:06 · 2196 阅读 · 0 评论 -
javax之后及Jakarta功能现状
Jakarta EE 11 进一步推动云原生和模块化,强化轻量级运行时支持,同时跟进 Java 生态最新进展。开发者可借助这些更新构建更高效、安全的现代化企业应用。建议关注官方发布日志以获取最终功能清单。目前 Jakarta EE 11 尚未正式发布,但其规划中的主要功能和改进方向已明确。手动或通过工具(如 Eclipse Transformer)替换为。(2017年发布)。截至2024年7月,原创 2025-03-13 14:08:36 · 1999 阅读 · 0 评论
分享