- 博客(104)
- 问答 (1)
- 收藏
- 关注
原创 TCC中,Confirm或者Cancel失败了怎么办?
在TCC模式中,如果Confirm阶段失败,这通常意味着在尝试提交事务的过程中遇到了问题。处理这种情况需要根据特定的失败场景和系统设计来确定最合适的策略。这个方案用的是最多的,主要是因为在Try的过程中已经锁定了资源,那么在Confirm的时候,大概率是可以成功,而如果Confirm失败就执行Cancel,就会导致可能只是因为网络原因导致的时候就使得整个事务都Cancel了,而且这时候如果Cancel再失败怎么办呢?整个方案就会变得更加复杂了。执行Cancel操作。
2025-04-01 15:52:32
312
原创 run/start、wait/sleep、notify/notifyAll、join 都有什么含义
start方法启动线程。调用start()方法后,线程进入就绪状态,可能还没有被分配到CPU时间。当线程分配到CPU时间片就会自动执行run方法如果在创建好线程之后,直接调用其run方法,那么就会在单线程中直接运行run方法,不会起到多线程的效果。
2025-03-31 11:11:59
328
原创 深入解析Java中volatile关键字的底层原理
volatile通过内存屏障和缓存一致性协议实现可见性和有序性,是一种轻量级的同步工具。尽管它无法替代锁(如),但在特定场景下能显著提升性能。理解其底层原理,有助于在多线程编程中合理选择同步策略,平衡安全性与效率。
2025-03-26 15:06:00
863
原创 synchronized关键字的底层原理
通过对象头标记和Monitor机制实现锁,结合锁升级策略平衡性能与开销。理解其底层原理,有助于编写高效、线程安全的代码。随着JVM不断优化(如锁消除、锁粗化),的性能已大幅提升,成为高并发场景下的可靠选择。附录:使用反编译字节码,可观察和指令的插入位置。
2025-03-26 14:48:30
1008
原创 Java开发工程师必须掌握的线程知识指南
掌握Java多线程开发需要理解线程基础、同步机制、线程协作等核心概念,同时要熟悉JUC工具包的使用。建议通过实际项目中的并发场景(如秒杀系统、批量处理等)加深理解,并使用VisualVM、Arthas等工具进行线程状态分析。良好的并发程序设计需要平衡性能与线程安全,避免过度同步导致的性能问题。
2025-03-24 22:50:33
751
原创 JDK 24 正式发布:抗量子加密
JDK 24通过多项实验性和预览特性为未来版本铺路,例如分代Shenandoah和紧凑对象头。同时,其安全性和性能优化(如抗量子加密和启动加速)直接回应了现代开发需求。开发者需注意即将被移除的特性(如JNI警告、安全管理器等),及时适配新规范。后续长期支持版本JDK 25预计于2025年9月发布,可能进一步推进结构化并发等特性。
2025-03-24 09:04:36
775
原创 【MVCC的前世今生】
合理设计事务边界优化查询访问路径预防版本膨胀风险制定精准的锁策略在分布式数据库蓬勃发展的今天,MVCC的变种算法(如HLC、TSO)仍在持续演进,但其核心理念——通过多版本实现读写并行——将继续影响数据库技术的发展方向。
2025-03-21 11:00:59
1083
原创 长事务导致undo log堆积
通过上述多层次的机制分析可见,长事务导致的Undo堆积本质上是由于MVCC的版本可见性规则与Purge机制的协同问题。解决该问题需要从事务管理、系统监控、存储引擎优化等多个维度进行综合治理。
2025-03-21 10:52:58
999
原创 面试必问:Kafka如何保证消息不丢失
消息的生产者端,最怕的就是消息发送给Kafka集群的过程中失败,所以,我们需要有机制来确保消息能够发送成功,但是,因为存在网络问题,所以基本没有什么办法可以保证一次消息一定能成功。
2025-03-18 20:43:56
479
原创 下面从源码的角度看Spring Boot设计模式
在Spring Boot中,单例模式是默认的Bean作用域,Spring容器会保证每个单例Bean仅有一个实例。方法是代理对象的核心方法,在调用目标方法时,会先获取拦截器链,接着按顺序执行拦截器逻辑,最后调用目标方法。方法会依据Bean的名称获取对应的Bean实例。是Spring框架里工厂模式的核心体现,它负责创建和管理Bean实例。是Spring JDBC模块里模板方法模式的典型应用。方法定义了查询操作的模板,把具体的结果集处理逻辑委托给。类为例,它是Spring容器实现单例模式的关键类。
2025-03-18 20:19:28
574
原创 一文读懂类加载器以及双亲委派
继承ClassLoader类重写findClass方法定义类加载逻辑调用defineClass完成加载类加载器作为Java生态系统的基石,其设计充分体现了"约定优于配置"的哲学思想。深入理解其工作机制不仅能帮助开发者解决日常开发中的类加载异常,更能为构建高扩展性、高安全性的系统提供理论支持。随着云原生时代的到来,类加载器技术也在持续演进,期待读者在实践中不断探索其更多可能性。
2025-03-07 09:47:31
707
原创 一文读懂java类加载机制
Override// 加载并解密字节码的具体实现...理解类加载机制就像获得了一把打开JVM世界的钥匙。从简单的类加载过程到复杂的框架实现,掌握这些原理不仅能帮助开发者更好地排查类加载相关的问题,更能为构建灵活可扩展的系统架构提供理论基础。当您下次遇到类加载异常时,希望您能胸有成竹地快速定位问题根源。
2025-03-07 09:32:38
623
原创 深入解析主流JVM垃圾回收原理与算法
JVM的垃圾回收机制通过分代收集与多算法结合,在内存利用率和回收效率间取得平衡。参数调优:如新生代与老年代比例()、Survivor区比例(监控工具:使用JVisualVM、GC日志分析工具定位内存瓶颈。避免Full GC:优化代码减少大对象生成,合理设置堆大小与元空间容量。通过理解垃圾回收原理与算法,开发者能更高效地设计Java应用,提升系统稳定性与性能。未来,随着ZGC、Shenandoah等低延迟收集器的成熟,JVM的内存管理将迈向更高阶的实时性目标。
2025-03-06 17:02:50
650
原创 这些部署方式你知道么:灰度发布、蓝绿部署与金丝雀部署
灰度发布✅ 优点支持灵活的用户分群策略,适合A/B测试。风险可控,问题影响范围小。❌ 缺点需长期维护多版本共存,可能增加测试复杂度。对流量路由和用户标识管理要求较高。蓝绿部署✅ 优点发布和回滚极快,几乎无停机时间。环境完全隔离,避免版本冲突。❌ 缺点资源消耗翻倍,成本高昂。数据库版本兼容性需额外处理(如双写迁移)。金丝雀部署✅ 优点资源利用率高,无需冗余环境。自动化程度高,支持渐进式验证。❌ 缺点流量切分逻辑复杂,需结合监控告警体系。不适用数据库结构重大变更的场景。
2025-03-03 14:40:29
1144
原创 集群、分布式与微服务架构 区别
集群是“简单复制”:通过量变应对性能压力。分布式是“分工协作”:通过拆分解决复杂性问题。微服务是“精细治理”:通过解耦支持业务敏捷性。前端层:Nginx集群处理高并发。业务层:微服务实现功能模块化。数据层:分布式数据库保证可扩展性。基础设施:Kubernetes集群管理容器化服务。理解这些架构的本质区别,能帮助开发者在性能、复杂度、开发效率之间找到最佳平衡,从而构建可持续演进的系统。
2025-03-03 14:27:24
888
原创 Java开发工程师必读的JDK源码与框架源码指南
阅读源码是一个从“会用”到“懂原理”的质变过程。建议从JDK集合与并发包入手,逐步深入框架的核心模块。初期可能会感到晦涩,但坚持分析核心流程与设计思想后,你会发现自己对Java生态的理解将远超他人。阅读框架源码 一定要学会debug,debug也是有技巧的比如条件debug等。上面这些都是核心内容,核心内容不管去哪儿做java开发都是用得到的,好的基础能提高你的 代码水平。
2025-02-28 11:31:00
695
原创 AI时代每个程序员都是全栈高手
成为独立开发者的核心不再是“掌握所有技术”,而是“高效整合AI工具与自身创意”。通过本文推荐的技术栈,开发者可将AI作为“超级助手”,专注产品创新与用户体验打磨。未来,随着多模态模型和智能体技术的发展(如商汤LazyLLM框架),独立开发者甚至能挑战此前需团队协作的大型项目。行动建议从一个小型项目开始(如个人博客+AI评论助手),实践全流程工具链。参与开源社区(如Continue平台),共享自定义AI助手并学习他人经验。持续关注AI编程范式演进,例如从“副驾驶”到“自主智能体”的跨越。
2025-02-28 10:57:24
784
原创 如何选择消息队列
新项目优先考虑RocketMQ或Kafka存量系统迁移考虑兼容性因素复杂场景可采用混合架构(如核心交易用RocketMQ+日志用Kafka)技术选型没有银弹,合适的才是最好的。建议通过POC测试验证实际场景表现,最终确定最适合的方案。
2025-02-28 09:34:41
907
原创 Eureka的缓存原理分析
用TimerTask默默守护你的系统性能用小心保管服务列表连随机数都用来防止雪崩(可能是最浪漫的代码)下次当你:🕒 疑惑为什么新服务上线有延迟 → 想想那个30秒的定时任务💔 发现调用失败但服务列表里还有 → 检查60秒一次的清理线程🚀 想要极限优化 → 去源码里找那些藏着的时间常量记住,好的架构师不仅要会用工具,还要懂原理看源码。希望这次源码之旅,让你对Eureka的爱又多了几分~最后收徒ing 🤞。
2025-02-27 09:09:40
1156
原创 Zuul、Gateway、Nginx 三剑客:API 网关与反向代理的江湖对决
在分布式系统架构中,API 网关和反向代理服务器扮演着流量守门人的重要角色。Zuul通常与Netflix的Eureka服务发现框架结合使用,Gateway是Spring Cloud的一部分,Nginx是一个高性能的开源Web服务器和反向代理服务器。下面再从多角度对比以下这几个api网关吧。
2025-02-26 22:32:37
951
原创 【深入探索 Caffeine:Java 缓存利器】
Caffeine 是一个基于 Java 8 开发的高性能缓存库,它借鉴了 Guava Cache 和 ConcurrentLinkedHashMap 的优秀设计思想,并结合了最新的算法和技术进行优化。Caffeine 的目标是提供一个简单易用、性能卓越的缓存解决方案,适用于各种规模的应用程序。Caffeine 作为一款高性能、功能丰富的 Java 缓存库,为开发者提供了强大的缓存解决方案。通过灵活的缓存策略、异步加载和刷新机制以及详细的统计功能,Caffeine 能够满足各种复杂的应用场景需求。
2025-02-26 16:26:25
1141
原创 【outOfMemoryError】排查思路与解决方案
不好啦❗ 天塌了❗ 系统崩了❗快看啊,程序了🙈我的心里活动:“哈哈哈😀哈哈哈😀终于给我碰上了,这个问题可很少发生啊,又积累一个问题。虽然我昨天发了版本,但是作为公司技术最好,长得最帅的我,代码肯定不出现这个问题。不想看废话的直接看【解决过程和方案】 吧由于工程师分组统计方式错误的实现,本来在数据库统计就行了,然而Android老哥却全部查询出来,然后再程序统计导致的内存溢出。本篇文章分享了我去排查有趣的是,上午定位到问题,并确认是Android老哥写的,下午老哥就被约谈了,喜提大礼包。
2025-02-22 22:28:29
822
原创 程序员如何看待deepSeek的
最近,DeepSeek 凭借其强大的人工智能技术,又将AI浪潮推向新的高度。作为一名java开发肯定也是积极拥抱的。不管是GPT 也好 DeepSeek 也好对于我们绝大部分人来说 只是一个提高生产效率的工具,大部分人来说都是停留在其应用层上。所以不同模型的之间的底层算法,对普通人来讲不太关注,无非就是使用体验以及结果准确性。今天谈谈AI 对我工作的影响。
2025-02-13 09:48:08
686
原创 lua脚本执行redis命令能保证“原子性”吗?就能保证“数据一致性”
主要描述了Redis 事务、lua脚本、pipeline 执行过程中出错是如何处理的。以及 对redis 的原子操作以及事务的概念做了阐述,区别于数据库事务。记住redis 事务 、 lua脚本在执行期间出错,不可回滚❗❗❗EXEC。
2025-02-13 09:37:48
741
原创 优惠券领取方案分享
本篇文章分享了,对接三方系统领券业务实现方案,为了解决HTTP接口可能存在丢失响应的情况,我们用了数据对账这一补偿机制,来处理异常数据。
2025-02-07 13:33:00
4238
原创 事务中使用异步引发的问题
本篇文章只有一个案例,分享了在事务中,开启新线程去处理任务引发的问题。有时候这种问题可能在测试环节还不一定能复现,所以大家在开发中遇到这种问题,还不一定能快速定位到问题。本篇文章虽然内容不多,但确实是开发过程中需要引起重视的。同事的代码问题(java)同事的代码问题(第二期)同事的代码问题(第三期)同事的代码问题(第四期)
2025-01-23 14:51:44
438
原创 今天又来审核代码辣
分享了两个案例,一个是优惠券领取,一个是审批、撤回业务。在优化券领取场景中,锁对象还是很有讲究的,以及锁和事务的配合使用 ,使用不当还是存在并发的问题。后面的审批业务,分享了在事务中 因为更新顺序不一致 可能引发死锁的问题。最近发现一些同事的代码问题(java)最近发现同事的代码问题(第二篇)最近发现一些同事的代码问题(java)
2025-01-15 15:35:24
692
原创 产品:大哥,你这列表每次查询返回的数据不一样啊!
本篇文章分析,mybatisPlus 分页插件处理count sql的逻辑,以及优化过程,同时也简单分析order by和limit执行原理。ps:云服务器找我返点;面试宝典私;收徒ING;
2025-01-15 15:34:07
567
原创 如何设计索引!
本篇文章,总结创建索引之前我们需要考虑哪些问题,以及创建完成之后我们还要去查看执行计划,是否使用我们预期的索引来查询数据。最后也给大家简单阐述了 索引不按照预期执行的情况,以及解决方案。今天就到这儿呢,如果大家觉得有帮助,投我几票吧!最近因为在开展活动,所以出了好几篇都是属于八股文类型的文章,活动之后,还是会回归到 实际开发中遇到的问题来写。
2025-01-10 14:48:09
872
原创 分页查询原理分析
本篇文章分析,mybatisPlus 分页插件处理count sql的逻辑,以及优化过程,同时也简单分析order by和limit执行原理。
2025-01-10 14:45:56
681
原创 InnoDB 的页分裂和页合并
在 InnoDB 中,数据以页(Page)的形式存储。每个页的大小通常为 16KB。数据页:存储表中的行数据。索引页:存储索引数据。Undo 页:用于事务回滚的日志信息。插入缓冲页:用于加速插入操作。
2024-12-25 13:06:44
281
原创 mysql的存储碎片
MySQL 的存储碎片是指在数据库存储数据的过程中,数据文件(如 InnoDB 的表空间文件或 MyISAM 的数据文件和索引文件)或者内存缓冲池中,数据的存储变得不连续,出现了一些零散的、未被充分利用的小空间。这些小空间由于各种原因不能有效地组合成连续的、可用于存储完整数据记录或数据块的空间MySQL中的数据库表会存在物理存储碎片,这种情况通常发生在频繁执行插入、删除和更新操作的数据库中。这些操作会导致表中的数据页部分空间未被有效利用或数据在物理存储上的排列不连续,从而形成碎片。
2024-12-25 12:48:19
1053
原创 数据库乐观锁和悲观锁、redis分布式锁使用场景
简单的介绍了乐观锁和悲观,以及基于redis实现分布式锁,对应的应用场景。让我们在实际开发中能够合理的去选择锁方案。!!ps: 买服务器返点;收徒中;面试全集在线文档,需要请私信。
2024-12-14 20:36:24
923
空空如也
在csdn上写博客有收益吗
2024-01-07
mysql root 密码忘了怎么改密码
2017-11-23
TA创建的收藏夹 TA关注的收藏夹
TA关注的人