自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(136)
  • 问答 (1)
  • 收藏
  • 关注

原创 java深度调试【第二章通过堆栈分析性能瓶颈】

本文介绍了通过堆栈分析Java系统性能瓶颈的方法。主要内容包括:性能瓶颈的基本原理,如CPU密集型和IO密集型任务的特点;常见的性能问题如CPU滥用/浪费、IO效率和JVM异常;以及如何通过线程堆栈识别锁竞争等阻塞问题。提供了具体代码示例展示算法优化、批量IO处理等技术,并推荐了分析工具。文章强调性能瓶颈是动态变化的,需要结合系统压力情况综合判断,通过堆栈分析定位具体问题根源,为开发者提供了一套实用的性能问题定位和解决方法论。

2025-11-07 10:08:30 1008

原创 java 深度调试【第一章:堆栈分析】

本文介绍了Java堆栈分析的核心技术,重点讲解了如何获取和分析JVM堆栈信息。作者通过一个7年Java开发者的视角,分享了在Linux和Docker环境中获取线程转储的实用命令(如kill -3和jstack),并详细解析了线程堆栈信息的组成要素,包括线程名称、优先级、状态(如TIMED_WAITING)、锁定对象等关键字段。文章还提供了Quartz调度器线程的堆栈分析实例,展示了如何通过堆栈定位问题(如死锁、CPU过高等)。这些诊断技术对Java性能调优和故障排查具有重要参考价值。

2025-11-07 10:07:07 829

原创 【分库分表正在被淘汰】

摘要: NewSQL数据库(如TiDB)正逐步替代传统分库分表架构,旨在解决分库分表带来的跨库查询、事务一致性等复杂性。TiDB具备水平扩展、金融级高可用、HTAP等特性,兼容MySQL协议,适合大数据量、高并发及混合负载场景。但成本较高,且部分MySQL功能不支持。选型需考虑数据规模、业务需求及预算:TiDB适合TB级数据、HTAP需求;MySQL更适合中小规模、简单读写场景。迁移时需验证功能兼容性并调整自增ID等设计。

2025-10-15 15:50:44 667

原创 Where条件顺序会影响索引的使用?

SQL优化器会智能调整查询顺序,不影响索引使用。优化器通过逻辑优化(如常量折叠、谓词下推、连接顺序调整等)和算法选择(基于I/O、CPU、内存成本估算)来提升查询效率。统计信息滞后可能导致成本估算偏差,需定期更新(如数据迁移后执行ANALYZE)。实际案例表明,统计信息不准确可能引发严重性能问题(如错误选择Nested Loop算法导致CPU过载)。

2025-09-28 09:28:10 696

原创 定时任务框架是如何实现定时执行

本文对比了Spring Task和Quartz两种定时任务框架的实现原理。Quartz通过调度线程扫描任务队列执行任务,而Spring Task则采用DelayedWorkQueue优先级队列,基于最小堆算法对任务按执行时间排序。文章重点解析了DelayedWorkQueue的排序机制:使用二叉堆结构,通过上浮和下沉操作确保最早到期任务优先执行,避免长任务阻塞短周期任务。源码分析展示了排序的关键实现,揭示了定时任务背后高效的调度算法设计。

2025-09-28 09:23:57 1095

原创 【Read timed out问题 排查】

程序数据库连接超时问题分析与排查思路 摘要: 程序长期存在"Read timed out"问题,表现为commit指令后数据库响应超时。报错日志显示Kingbase8数据库连接在提交事务时发生I/O错误。初步排查排除了应用层慢SQL问题,怀疑与主从架构或网络问题相关。排查思路包括:检查主从同步状态、网络延迟情况,以及数据库性能问题。当前临时解决方案是延长超时时间从10秒到40秒,但需进一步定位根本原因。

2025-09-25 13:16:06 895

原创 JVM无法分配内存

【系统崩溃事件分析】系统因内存不足崩溃,报错显示JVM无法分配内存。排查发现有人使用vim命令查看超大日志文件logger.out(达数GB),导致内存耗尽。进一步调查发现启动命令存在严重问题,日志未按logback配置滚动输出,而是持续写入单个文件。解决方案:1)规范日志查看方式;2)修复logback配置,添加文件大小限制(如100MB/文件)和滚动策略;3)清理历史大日志文件。此次事故暴露了日志管理不规范和内存监控不足的问题。

2025-09-25 13:13:48 416

原创 深入探索 Java 栈

本文深入探讨了Java中栈(Stack)的实现及其历史遗留问题。Java的Stack类继承自Vector,这种设计导致封装性被破坏且存在不必要的线程安全开销。文章详细分析了Stack类的核心方法(push、pop、peek等)及其内部实现机制,包括数组扩容策略。针对现代开发需求,推荐使用ArrayDeque作为更高效的替代方案,其性能优于Stack且无同步开销。此外,LinkedList也可用于实现栈功能,但性能略逊于ArrayDeque。文章还提供了自定义栈实现的示例代码,供学习或特殊场景使用。最终建议开

2025-09-23 16:15:49 625

原创 shiro框架不持支text/event-stream

本文分享了在Spring Boot项目中调用AI流式API时遇到的问题及解决方案。当使用SseEmitter返回text/event-stream格式的流式响应时,控制台报出两个错误:1)Shiro的SecurityManager不可用;2)无法转换LinkedHashMap为event-stream格式。经排查发现是异步响应时Shiro上下文丢失所致。最终解决方案是通过配置FilterRegistrationBean,将特定URL路径设置为支持异步请求,并正确传递Shiro上下文。文章详细记录了问题定位过

2025-09-23 16:04:24 791

原创 java程序员必须掌握的【InheritableThreadLocal】

本文介绍了 InheritableThreadLocal 的作用、原理及使用注意事项。InheritableThreadLocal 是 ThreadLocal 的子类,解决了父子线程间的数据传递问题,通过在线程创建时复制父线程的 inheritableThreadLocals 实现。文章通过代码示例展示了其基本用法,并重点指出了在线程池中使用时可能存在的上下文污染问题:由于线程复用,会导致后续任务获取到错误的上一次任务保存的值。最后给出了解决方案建议:避免在线程池中直接使用,推荐使用 Spring 的 Ta

2025-09-22 16:21:08 1116

原创 如何正确配置数据库连接时间

摘要:本文分析了国产数据库驱动(KingBase)在使用Druid连接池时,配置connect-timeout和socket-timeout参数可能遇到的问题。作者通过源码调试发现,这两种配置方式存在差异:URL参数会被直接传递给驱动,而连接池参数会先经过默认值处理(未配置时采用10秒默认值)。特别指出在PostgreSQL兼容模式下,参数值会被转换为秒级单位,可能导致实际超时时间扩大1000倍。建议开发者注意配置方式和驱动类型的匹配性,避免参数失效或时间单位错误的问题。

2025-09-22 16:17:42 840

原创 事务报错,为何数据还是插入成功了❓

事务提交异常分析:数据库操作成功但程序报错 一位7年Java开发经验的组长遇到一个棘手问题:程序提交事务后报错(SocketTimeoutException),但数据库中数据已成功提交。该问题在生产环境导致重复报名、定时任务异常等严重问题。 问题根源: 使用人大金仓数据库(kingbase8)时,输入流读取超时设置异常 默认socketTimeout=0表示无限等待,但实际因网络/数据库响应慢触发了超时 主从架构下配置参数未正确生效 解决方案: 通过配置spring.datasource.druid.soc

2025-09-19 09:35:20 676

原创 代码问题,加了锁为何还会重复报名

这篇文章分享了一个关于活动重复报名的生产问题及其解决方案。作者首先分析了代码逻辑,确认锁和事务处理没有问题,但问题依然出现。通过排查日志发现,是由于数据库连接异常导致事务提交失败,但业务逻辑已执行完成。最终定位到根本原因是数据库迁移后频繁出现的连接超时问题。文章提出了三点优化建议:前端增加重复点击控制、后端优化锁机制(改为按用户加锁并设置超时)、缩小事务粒度。同时指出虽然根本问题是数据库引起,但代码优化可以显著降低问题发生概率。文章最后提供了更详细的解决方案链接。

2025-08-25 09:28:47 934

原创 定时任务框架原理剖析,如何选择

本文分析了Spring Task、Quartz和XXL-Job三种主流定时任务框架的实现原理和调度机制。Spring Task基于注解驱动和线程池调度,默认单线程执行,任务阻塞会影响后续调度;Quartz支持分布式调度,通过数据库存储任务信息,包含复杂的初始化流程和核心组件协作;XXL-Job则是分布式任务调度平台。文章特别指出Spring Task单线程池的潜在问题,并建议手动配置线程池以避免任务阻塞影响调度。通过对比各框架特点,为开发者选择合适的定时任务方案提供了参考。

2025-08-25 09:23:04 1128

原创 数据库占用内存过高如何解决

摘要:本文针对数据库内存占用过高问题,提出排查与优化方案。首先通过监控工具定位问题原因,分析可能由大结果集查询、JOIN操作不当或长事务导致。建议优化SQL写法(分页、减少字段查询)、调整数据库配置(缓冲池大小、连接数限制)及引入架构优化(限流、Redis缓存、分库分表)。核心思路为:定位原因→针对性优化→持续监控,高并发场景需结合中间件与架构调整。文中提供PostgreSQL活跃线程查询示例及MySQL关键参数调优建议。(149字)

2025-07-21 15:53:03 3650

原创 Quartz 原理分析

Quartz是一个分布式任务调度框架,核心架构包含调度器、任务、触发器和持久化存储四大组件。它通过JDBCJobStore实现任务状态持久化,将任务详情、触发器配置等数据存入数据库表中(如QRTZ_JOB_DETAILS、QRTZ_TRIGGERS),并利用QRTZ_LOCKS表实现集群环境下的分布式锁机制。调度流程包括触发器轮询、状态变更、任务执行和锁管理,支持故障转移与负载均衡。Quartz通过完善的数据持久化方案和分布式协调机制,确保了任务调度的可靠性和高可用性。

2025-07-17 16:02:03 982

原创 Spring定时任务原理分析

Spring Task 是 Spring 框架提供的轻量级任务调度模块,采用注解驱动和线程池调度机制。其核心原理通过 @EnableScheduling 注解启动,由 ScheduledAnnotationBeanPostProcessor 扫描 @Scheduled 注解方法并注册任务到 ScheduledTaskRegistrar。底层通过 ThreadPoolTaskScheduler 包装 Java 原生的 ScheduledExecutorService 执行任务,支持 Cron 表达式、固定频率

2025-07-16 17:00:11 1082 3

原创 同事的代码问题(第六期)

近期工作遇到的两个典型问题及解决方案: RabbitMQ重复消费问题: 现象:消息ACK未确认导致短信重复发送 原因:配置了手动ACK模式但未显式确认消息 解决方案:捕获异常并手动确认/拒绝消息,避免无限重试 多线程数据更新问题: 现象:分页查询与更新并发导致数据遗漏 原因:查询条件在更新中被修改,导致分页失效 解决方案:改为单线程查询+多线程更新,每次只查第一页数据 这两个案例展示了日常开发中容易忽视的细节问题,通过分析问题本质找到了针对性的解决方案。

2025-07-16 09:09:31 755

原创 Failed to delete D:\work2\uni\target

摘要:解决Java项目启动时的主类加载失败和target目录删除问题 当IDEA启动Java项目出现"找不到主类"和无法删除target目录时,可采取以下解决步骤: 检查端口占用情况并终止相关进程(netstat/taskkill命令) 终止所有Java进程(tasklist | findstr java) 终极方案是系统重启 预防措施包括:定期清理IDE缓存、避免并行构建、将target目录加入.gitignore。这些方法能有效解决因进程占用导致的构建问题(前提是项目本身配置正确)。

2025-07-11 09:48:04 277

原创 时间设置的是23点59分59秒,数据库却存的是第二天00:00:00

运营反馈用户解封时间比预期多1天,排查发现数据库timestamp字段存储时存在精度误差导致时间偏移1秒(如23:59:59变为次日00:00:00)。

2025-07-02 15:04:41 741

原创 不改SQL,也能让SQL的执行效率提升100倍

PostgreSQL中ANALYZE命令的作用及其性能优化原理。该命令收集表数据统计信息,供查询规划器生成高效执行计划。在大量数据变更后建议手动执行,特别是连表查询时统计信息不准确可能导致选择低效执行计划(如Nested Loop)。作者分享了实际案例,说明该命令如何将接口响应时间从几分钟降至2秒,并指出信创环境服务器性能可能影响数据库表现。文章还提供了ANALYZE的使用方法和相关参数说明。

2025-07-02 14:59:55 756

原创 Java 内存管理技巧(新手必看集合篇)

Java中的引用类型在实际开发中的应用 摘要:本文介绍了Java中四种引用类型(强引用、软引用、弱引用和虚引用)的特点及使用场景,重点分析了Spring Boot框架中弱引用的实际应用。文章通过代码示例展示了ConcurrentReferenceHashMap工具类的实现原理,以及在BeanUtils等Spring核心组件中的具体运用。弱引用在内存管理方面具有独特优势,能够有效避免内存泄漏,特别适用于临时关联对象的缓存场景。Spring框架通过引用类型机制优化了资源利用和性能表现,开发者应当理解这些底层原理

2025-07-02 14:57:53 1017

原创 一条SQL把数据库服务器干爆了

在5月16日,一条SQL语句导致数据库服务器崩溃。该SQL语句涉及A表和B表的左连接操作,问题根源在于A表中的b_id字段类型错误地被设置为varchar而非bigint。虽然索引并未失效,但由于类型转换,数据库选择了低效的Nested Loop算法,导致CPU飙高。通过分析执行计划,发现数据库在估算行数时出错,错误地选择了Nested Loop而非更高效的Hash Join。最终解决方案包括修正字段类型、更新统计信息,并建议禁用Nested Loop或使用hint语法指定执行计划。这一事件提醒我们在SQL

2025-05-19 20:56:32 1051

原创 【SQL 如何解锁递归】

SQL中的递归查询是一种处理树形结构数据的有效方法。通过使用RECURSIVE关键字和公共表表达式(CTE),可以查询出某个节点下的所有子节点或指定层级的子节点。递归查询的基本步骤包括定义初始查询、递归查询和终止条件。例如,可以通过递归查询找出某个领导下的所有员工或指定层级的员工。此外,还可以通过维护冗余路径字段来避免使用递归查询。递归查询在处理大数据量时可能存在性能问题,因此需要根据具体情况选择合适的方案。本文通过示例代码详细介绍了递归查询的使用方法,并提供了替代方案的建议。

2025-05-14 22:40:51 632 2

原创 【类拷贝文件的运用】

在处理大文件拆分时,传统的Java代码虽然功能上可行,但效率较低,主要问题包括频繁的堆分配、数据在用户空间和内核空间之间的多次复制,以及高CPU利用率。为了提高效率,建议使用FileChannel的transferTo方法,该方法支持零拷贝技术,直接在磁盘间传输数据,减少不必要的内存操作和上下文切换。此外,为了确保行的完整性,可以在每个块末尾查找最后一个完整行的结束位置,从而避免破坏行结构。这种方法显著提升了文件拆分的性能,减少了资源消耗。

2025-05-12 22:09:00 598

原创 开发者福音MCP

MCP并不是Trae中的独有的插件,‌MCP(Model Context Protocol)是由公司于2024年11月推出的开源协议‌,旨在标准化大型语言模型(LLM)与外部数据源、工具之间的交互方式,解决AI模型访问外部资源时的碎片化问题。trae 中的智能体作为MCP客户端可以选择向MCP Server发起请求,以使用它们提供的工具。你可以自行添加MCP Server,并添加到自定义的智能体中来使用.

2025-04-29 14:58:39 1442

原创 缓存都用redis啊,这样数据不会丢失

Redis 无法完全避免数据丢失,但其持久化机制和高可用架构可显著降低丢失风险。数据丢失的极限仅用 RDB:最多丢失两次快照间隔期间的数据。仅用 AOF(everysec):最多丢失 1 秒内的数据。同时使用 RDB + AOF + 主从复制:数据丢失风险极低,但仍无法完全杜绝(如主从同时故障且无备份)。适用建议若需强一致性(如金融交易),应选择支持事务和持久化的数据库(如 PostgreSQL),Redis 仅作为缓存辅助。若用于缓存或高性能场景。

2025-04-23 21:09:18 950

原创 MQ的事务消息你知道么

本篇文章,介绍了什么是事务消息,以及事务消息的运用场景和使用案例。如果觉得有用欢迎一键三连👍👍👍。

2025-04-15 10:02:24 560

原创 作为一名java技术博主如何突围

初期可先测试不同内容形式,找到最适合自己的风格,再逐步优化。同时,利用AI工具提升效率,减少重复劳动,把更多精力放在核心内容创作上。如果需要更具体的执行方案(如如何制作代码演示视频),可以进一步探讨!技术类账号在抖音上仍有较大增长空间,关键在于。

2025-04-11 15:52:17 704

原创 同样的SQL同样的数据,性能差100倍

本篇文章 通过Explain 分析SQL 的执行计划,定位到了SQL 执行缓慢的原因。然后通过 覆盖 count 自动生成的SQL,从来减少连表查询。最后将SQL的查询时间 从 10s 优化到了10ms,提升了1000倍🚀我想不通的是,一个小的版本,居然执行计划相差这么大. 同时 数据量也不大,估计CPU 和 IO 的国产环境效率很低👎推荐阅读:【hash join推荐阅读:【类型转换之谜。

2025-04-11 14:42:36 417

原创 如何预估一个系统的QPS

当然,以上预估我们有很多假设,比如假设日活用户数是月活用户数的30%,假设每个用户每天产生2次互动,假设峰值QPS是日常的3倍,假设峰值时长持续2小时。但是,一般来说,一个业务的峰值流量会是平时的数倍,在不考虑热点事件的情况下,假设峰值流量是日均流量的3倍,并且每天的峰值流量会维持在2小时左右。通常日活用户数是月活用户数的20%-30%左右,按照30%来算的话,那么日活用户数为2亿。不同的业务类型的QPS是不太一样的,比如B类业务和C类业务,支付业务和购物车业务,这些都是不太一样的。

2025-04-10 14:45:44 1257

原创 SQL 标准的 “操作数类型提升“

当操作数类型不同时,通过固定的优先级规则(如数值 > 时间 > 字符串)进行隐式转换,确保所有数据库实现的行为一致。索引(如B-tree)按列的原生类型组织。若强制转换参数而非列值,存储引擎仍需按列类型重新转换参数,反而增加开销。SQL-92 及后续标准明确定义了类型优先级规则,各数据库(如MySQL、Oracle)需遵循以保证跨平台兼容性。开发者应通过显式类型匹配或函数索引(如MySQL 8.0的表达式索引)优化此类场景。高优先级类型(如数值)通常具有更高效的比较和计算机制。

2025-04-10 09:06:12 504

原创 TCC中,Confirm或者Cancel失败了怎么办?

在TCC模式中,如果Confirm阶段失败,这通常意味着在尝试提交事务的过程中遇到了问题。处理这种情况需要根据特定的失败场景和系统设计来确定最合适的策略。这个方案用的是最多的,主要是因为在Try的过程中已经锁定了资源,那么在Confirm的时候,大概率是可以成功,而如果Confirm失败就执行Cancel,就会导致可能只是因为网络原因导致的时候就使得整个事务都Cancel了,而且这时候如果Cancel再失败怎么办呢?整个方案就会变得更加复杂了。执行Cancel操作。

2025-04-01 15:52:32 533

原创 实现一个分布式锁需要考虑哪些问题

分布式锁是控制分布式系统之间同步访问共享资源的一种方式。

2025-04-01 15:42:01 611

原创 run/start、wait/sleep、notify/notifyAll、join 都有什么含义

start方法启动线程。调用start()方法后,线程进入就绪状态,可能还没有被分配到CPU时间。当线程分配到CPU时间片就会自动执行run方法如果在创建好线程之后,直接调用其run方法,那么就会在单线程中直接运行run方法,不会起到多线程的效果。

2025-03-31 11:11:59 416

原创 System.out.print 困了我五年

小小的System.out.println() 困了我五年,最后 DeepSeek 帮我解决了

2025-03-28 14:36:17 887

原创 深入解析Java中volatile关键字的底层原理

volatile通过内存屏障和缓存一致性协议实现可见性和有序性,是一种轻量级的同步工具。尽管它无法替代锁(如),但在特定场景下能显著提升性能。理解其底层原理,有助于在多线程编程中合理选择同步策略,平衡安全性与效率。

2025-03-26 15:06:00 6346 2

原创 synchronized关键字的底层原理

通过对象头标记和Monitor机制实现锁,结合锁升级策略平衡性能与开销。理解其底层原理,有助于编写高效、线程安全的代码。随着JVM不断优化(如锁消除、锁粗化),的性能已大幅提升,成为高并发场景下的可靠选择。附录:使用反编译字节码,可观察和指令的插入位置。

2025-03-26 14:48:30 1100

原创 Java开发工程师必须掌握的线程知识指南

掌握Java多线程开发需要理解线程基础、同步机制、线程协作等核心概念,同时要熟悉JUC工具包的使用。建议通过实际项目中的并发场景(如秒杀系统、批量处理等)加深理解,并使用VisualVM、Arthas等工具进行线程状态分析。良好的并发程序设计需要平衡性能与线程安全,避免过度同步导致的性能问题。

2025-03-24 22:50:33 802

原创 JDK 24 正式发布:抗量子加密

JDK 24通过多项实验性和预览特性为未来版本铺路,例如分代Shenandoah和紧凑对象头。同时,其安全性和性能优化(如抗量子加密和启动加速)直接回应了现代开发需求。开发者需注意即将被移除的特性(如JNI警告、安全管理器等),及时适配新规范。后续长期支持版本JDK 25预计于2025年9月发布,可能进一步推进结构化并发等特性。

2025-03-24 09:04:36 1278

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除