- 博客(39)
- 收藏
- 关注
原创 redis降级策略
使用Grafana展示监控数据,并设置告警规则,例如当Redis连接失败次数超过一定阈值时触发告警。是自定义的从数据库获取库存和更新库存的方法。判断是否能获取令牌,再结合。获取库存并进行业务处理。在降级策略执行的地方调用。在业务代码中,先调用。
2025-08-04 17:13:01
387
原创 如何系统性的学习dubbo
通过“理论学习→动手实践→源码理解→实战落地”的循环,逐步构建对Dubbo的系统性认知,重点在于将知识点与实际业务场景结合,理解“为什么这么设计”而非仅记住“怎么用”。
2025-07-29 14:49:14
906
原创 MySQL千万量级表添加索引的注意事项与实施方案
若风险较高,建议通过主从切换或第三方工具(如pt-online-schema-change)实现,确保业务不受影响。在千万量级的大表上创建索引是一项高风险操作,可能导致锁表、占用大量磁盘I/O和内存资源,甚至引发数据库崩溃。将活跃数据和历史数据分开存储,只在活跃表上添加索引。针对高频查询,创建预计算表并添加索引,定期同步数据。在千万量级表上添加索引的核心原则是。
2025-07-17 16:28:06
283
原创 docker所有命令总结
以上命令覆盖了Docker日常使用的各个方面,可根据实际需求复制使用。部分命令可能需要管理员权限(如使用。以下是 Docker 常用命令的完整列表,按功能分类整理。
2025-07-17 16:24:31
318
原创 redis为何设计为单线程
利用内存操作的高速性,规避 CPU 瓶颈;借助 I/O 多路复用技术,单线程支撑高并发网络请求;避免多线程的切换、锁竞争等开销,简化设计并提升稳定性。这一设计使得 Redis 在保证高性能的同时,保持了代码的简洁与可维护性,成为分布式系统中高性能缓存的首选方案。
2025-07-11 14:03:06
657
原创 Java 并发编程基础关键字、高级工具类和原子类简述
在Java中,实现并发编程的关键字和工具类众多,主要分为基础关键字、高级工具类和原子类。:基于CAS(Compare-and-Swap)实现无锁的原子操作,性能优于。掌握这些关键字和工具类,能帮助你更高效地编写并发安全的Java代码。:保证变量的可见性(禁止指令重排序,确保变量直接从主内存读写)。:实现线程同步,确保同一时刻只有一个线程访问临界区。:管理和复用线程,避免频繁创建销毁线程的开销。:控制同时访问特定资源的线程数量(信号量)。:允许一个或多个线程等待其他线程完成操作。,提供更灵活的锁控制。
2025-07-10 19:56:49
909
原创 throw和throws的区别
是两个与异常处理相关的关键字,但它们的用途和语法截然不同。理解这两个关键字的区别,有助于编写更清晰、更健壮的异常处理代码。
2025-07-10 19:51:18
587
原创 ReentrantLock详解
在使用时,务必遵循“获取锁后立即 try,释放锁放在 finally”的原则,确保代码健壮性。更灵活、更高级的锁控制能力。同一线程可多次获取同一把锁而不会被阻塞,需通过相同次数的。公平锁适用于需要严格顺序的场景,非公平锁适用于高性能场景。是 Java 中一个强大的可重入锁实现,位于。嵌套锁可能导致死锁,确保锁的获取和释放顺序一致。确保锁无论如何都会被释放,避免死锁。方法获取锁时,线程可被中断。避免锁范围过大,影响并发性能。尝试获取锁,超时可放弃。支持多个等待队列,比。
2025-07-10 17:18:13
469
原创 JDK17新特性详解
JDK 17 的这些特性显著提升了代码简洁性、安全性和性能。特别是密封类模式匹配和Records等语法糖,让Java更接近现代编程语言的易用性,同时保持了类型安全的优势。建议在新项目中优先使用JDK 17 LTS版本。
2025-07-09 14:48:57
428
原创 curl命令详解
curl是一个功能强大的命令行工具,用于在网络上传输数据,支持 HTTP、HTTPS、FTP 等多种协议,常被用于接口测试、文件下载、模拟请求等场景。以下是curl。
2025-07-09 10:01:25
448
原创 定位java应用程序中出现了内存占用飙升异常及解决方案
在 Java 应用程序中,内存占用飙升是常见且可能导致系统崩溃的严重问题。通过这套流程,通常能在 1-2 小时内定位并临时解决内存飙升问题,24 小时内完成根治。关键在于快速响应、工具链高效使用和系统性排查。
2025-07-08 10:34:02
1183
原创 定位java应用程序出现内存溢出异常及解决方案
在 Java 应用程序中,内存溢出(OOM, OutOfMemoryError)是常见且棘手的问题。内存溢出的定位和解决需要结合工具分析(堆转储、GC 日志)和代码审查。通过系统化的方法,可以高效解决内存溢出问题,并提升应用的稳定性和性能。免费工具,用于分析堆转储文件,定位大对象和内存泄漏。JDK 自带工具,集成多种监控功能,可安装插件扩展。在线 GC 日志分析工具,快速生成 GC 报告。商业工具,功能强大,支持实时内存监控和堆分析。:堆内存碎片化严重,GC 频繁且效率低。
2025-07-08 10:28:51
905
原创 在本地Java 应用程序中模拟真实生产环境进行 JVM 调优学习
通过以上步骤,你可以在本地环境完整模拟 JVM 调优的全流程,积累实战经验。在 Java 应用程序中模拟真实生产环境进行 JVM 调优学习,需要从。
2025-07-08 10:23:48
747
原创 mysql数据库的mvcc机制详解
MySQL 的 MVCC(Multi-Version Concurrency Control,多版本并发控制)是实现高性能、高并发事务的核心机制,尤其在可重复读(REPEATABLE READ)隔离级别下发挥重要作用。MVCC 为数据库中的每行记录保存多个历史版本,每个事务读取时会看到特定版本的数据,而非最新数据。事务始终使用启动时的一致性视图,即使其他事务插入新记录,当前事务也看不到(因为新记录的。,在不加锁的情况下实现了事务的隔离性,显著提高了并发性能。),用于标识事务的先后顺序。
2025-07-08 10:12:57
800
原创 关于在 MySQL 的可重复读隔离级别下出现幻读详解
,并在业务层优化查询逻辑,减少长事务持有锁的时间。仅在必要时(如金融交易)才使用 SERIALIZABLE 隔离级别。属于当前读,读取的是最新数据而非快照。若其他事务在两次当前读之间插入了新记录,第二次读取时会看到这些“幻影”记录。(行锁 + 间隙锁),阻止其他事务在锁定范围内插入新记录。插入意向锁允许并发插入不同间隙,但当前读(如。)会重新评估条件,导致前后操作的记录数不一致。MySQL 的可重复读隔离级别默认使用。在 MySQL 的可重复读隔离级别下,,强制事务串行执行。
2025-07-08 09:42:50
614
原创 MySQL主要数据类型详解
合理选择数据类型是优化 MySQL 性能的基础。建议根据数据范围、精度要求、查询模式综合决策,并通过EXPLAIN分析查询性能。在设计阶段多做预研,避免后期因数据类型不合理导致的重构成本。
2025-07-08 08:57:45
523
原创 如何优雅地使用synchronized关键字
锁粒度:优先使用代码块同步,避免方法级同步。锁对象:使用专用锁对象(),避免this或类对象。原子性操作:对于简单原子操作,考虑使用Atomic类替代。线程协作:在同步块内使用wait()notify(),优先使用notify()减少唤醒线程数量。性能考量:高并发场景下可考虑使用或并发容器。通过合理设计锁的范围和对象,结合线程协作机制,关键字可以优雅且高效地解决多线程同步问题。
2025-07-08 08:56:28
543
原创 如何在使用ReentrantLock类时避免死锁?
简化锁设计尽量使用单一锁保护多个资源。避免锁的嵌套使用。标准化锁获取顺序按固定顺序获取锁(如按对象哈希值排序)。使用静态常量定义锁的获取顺序。防御性编程始终在finally块中释放锁。使用带超时的tryLock替代lock。监控与预警定期检查线程状态,及时发现潜在死锁。对关键业务流程设置超时机制。
2025-07-08 08:55:59
668
原创 synchronized关键字和ReentrantLock类有什么区别?
场景推荐方案简单同步需求公平锁可中断锁超时获取锁多条件变量高并发场景合理选择同步工具需要根据具体业务场景权衡代码复杂度和性能需求。在 JDK 1.6 及以后版本中,的性能已大幅提升,对于大多数简单场景,推荐优先使用以减少代码复杂度。
2025-07-08 08:55:04
607
原创 synchronized关键字详解
是 Java 中用于实现线程同步的关键字,它通过获取对象监视器(Monitor)来保证同一时刻只有一个线程可以执行被保护的代码块或方法,从而解决多线程竞争资源导致的线程安全问题。
2025-07-07 17:59:06
557
原创 Java 内存模型(JMM)详解
read:从主内存读取变量值。load:将读取的值存入工作内存。use:从工作内存读取值用于计算。assign:将计算结果存入工作内存。store:将工作内存的值传输到主内存。write:将store的值写入主内存。lock:锁定主内存变量,确保独占访问。unlock:解锁主内存变量,允许其他线程访问。
2025-07-07 17:55:55
657
原创 基于实战项目redis集群方案的实现
系统指标QPS提升40%,响应延迟降低65%集群可用性达到99.995%,全年故障时间<4小时运维成本降低50%,自动扩容功能支持业务快速增长经验总结提前规划:根据业务特性设计合理的数据分片策略,避免后期大规模数据迁移分层防御:从客户端、中间件到DB构建多级保护,防止级联故障监控先行:建立完善的监控体系(性能、大Key、慢查询),实现故障预警最佳实践对写入频繁的场景禁用AOF或使用everysec策略避免在集群中使用Lua脚本(可能导致全集群阻塞)定期执行检查集群健康状态。
2025-07-07 17:39:27
435
原创 关于spring循环依赖问题的解决方案
定义与类型:明确循环依赖的概念和常见类型,指出构造器循环依赖无法解决。核心机制:详细解释三级缓存的作用和工作流程,强调提前暴露半成品Bean的关键思想。源码分析:提及关键类和方法,展示对Spring底层实现的理解。最佳实践:结合实际项目经验,给出避免和解决循环依赖的具体建议。扩展思考:讨论循环依赖对系统设计的影响,以及如何从架构层面减少依赖耦合。通过这种结构化的回答,既能展示技术深度(源码理解),又能体现工程经验(最佳实践),符合资深工程师的能力要求。
2025-07-07 17:24:54
925
原创 如何保证rabbitMQ中消息的幂等性
概念切入:先解释幂等性定义及RabbitMQ重复消费场景,体现对问题的理解;方案分层:从技术(UUID+Redis)、业务(状态机)、架构(分布式锁)多角度给出方案,展示全面性;代码支撑:结合具体代码片段说明实现细节,体现工程能力;场景扩展:对比不同方案的优缺点,说明业务适配性,展现架构思维;升华总结:强调幂等性是“消息可靠性”与“性能”的平衡,需结合业务场景选择最优解。通过以上思路,既能展示对技术细节的掌握,又能体现从架构层面解决问题的能力,符合资深工程师的面试要求。
2025-07-07 17:20:33
907
原创 Spring中Bean的生命周期方法有哪些?
在 Spring 框架中,Bean 的生命周期涵盖了从创建到销毁的完整过程。理解这些生命周期方法有助于实现资源初始化、依赖注入后的处理以及资源释放等功能。@Autowired@ResourceJSR-250 规范注解,在依赖注入完成后立即执行。实现方法,在属性注入后执行。在 XML 配置中指定初始化方法:JSR-250 规范注解,在 Bean 销毁前执行。实现destroy()方法,在 Bean 销毁前执行。
2025-07-07 11:49:01
646
原创 Spring框架中Bean的作用域详解
在 Spring 框架中,Bean 的作用域定义了 Bean 实例的生命周期和可见范围。合理选择作用域可以优化应用性能、确保线程安全并正确管理资源。通过合理配置 Bean 的作用域,可有效提升应用性能和可维护性,避免常见的线程安全和内存泄漏问题。Spring 提供了多种作用域选项,其中最常用的是。,其他作用域需在 Web 环境中使用。
2025-07-07 11:43:26
790
原创 详细介绍一下如何实现延迟双删
延迟双删是一种简单有效的缓存一致性方案,通过牺牲一定的延迟时间(通常为秒级)来换取最终一致性。在实际应用中,需根据业务场景合理配置延迟时间、选择异步执行方案,并做好监控与降级。对于金融级强一致性需求,建议结合分布式事务框架使用;对于高并发场景,可考虑基于Binlog的异步同步方案。
2025-07-07 11:27:37
888
原创 Redis 与 MySQL 数据一致性问题:场景化解决方案
通过以上结构化回答,既能展现对理论的理解,又能体现实践经验,同时展示权衡取舍的能力,符合技术面试的核心考察点。:TCC(Try-Confirm-Cancel)补偿事务 + 分布式锁。三个维度展开,并结合实际案例说明优缺点。:Cache Aside Pattern(旁路缓存)+ 延迟双删。Redis(缓存)与MySQL(数据库)的数据一致性问题本质是。在面试中回答Redis与MySQL的数据一致性问题时,建议从。:主从复制延迟导致读从库时读到旧数据。:基于Binlog的增量订阅与消费。
2025-07-07 11:20:24
834
原创 mysql日志类型详解
作用:记录MySQL服务器启动、运行和关闭过程中的关键事件,包括错误、警告和正常启动信息。核心价值:用于排查服务器启动失败、崩溃原因,以及运行时的异常问题。作用:记录执行时间超过阈值的SQL查询,用于定位性能瓶颈。核心价值:帮助优化慢查询,提升数据库性能。作用:记录所有修改数据的操作(INSERT/UPDATE/DELETE等),用于主从复制和数据恢复。核心价值:实现数据库增量备份、故障恢复及主从同步。作用:记录所有发送到MySQL的查询语句(包括SELECT),用于审计和调试。核心价值。
2025-07-07 11:09:55
950
原创 关于一些jvm面试题的总结
CMS(Concurrent Mark Sweep)和G1(Garbage-First)的区别?JDK8前后方法区的实现差异(永久代→元空间),元空间使用本地内存避免OOM。JVM将热点代码(频繁执行的方法或循环)编译为本地机器码,提高执行效率。四种引用类型(强、软、弱、虚)的区别及应用场景(如缓存用软引用)。破坏双亲委派模型的场景(如Tomcat类加载器、OSGi)。G1的Region分区机制、Mixed GC的触发条件。热点代码的检测机制(基于计数器的采样)。:加载→验证→准备→解析→初始化。
2025-07-07 10:35:31
830
原创 java中一个方法的执行流程
理解方法执行机制有助于排查性能问题(如栈溢出)、调试代码,以及掌握多线程编程中的线程安全问题。在 Java 中,方法的执行是程序运行的核心机制。方法打印字符串为例,详细解析方法执行的完整过程。
2025-07-07 10:28:07
922
原创 Spring中Bean的生命周期
在 Spring IoC 容器中,Bean 的生命周期是一个非常重要的概念,它定义了 Bean 从创建到销毁的完整过程。了解这一过程有助于开发者在合适的阶段对 Bean 进行定制化处理(如初始化资源、销毁资源等)。通过掌握 Bean 的生命周期,开发者可以更精准地控制 Bean 的行为,实现复杂的初始化逻辑和资源管理,提升 Spring 应用的健壮性和灵活性。
2025-07-07 10:27:24
824
原创 事务传播机制总结
事务传播机制是 Spring 框架中处理嵌套事务的核心能力,通过合理配置传播行为(如REQUIREDNESTED),可灵活控制多个事务方法之间的关系,满足复杂业务场景的原子性、隔离性需求。在实际开发中,需结合业务逻辑和数据库特性选择合适的传播行为,并注意事务边界和异常处理,以确保数据一致性和系统稳定性。
2025-07-03 19:30:22
661
原创 JAVA应用程序远程调用方式
微服务模式通过引入服务治理组件(注册中心、负载均衡、熔断)解决了传统调用方式的痛点,但也增加了架构复杂度。选择时需根据业务规模、团队能力和性能需求综合评估,避免“为了微服务而微服务”。Java应用调用其他系统接口的方式可分为传统模式和微服务模式,两者在架构设计、调用方式、服务治理等方面存在显著差异。在实际项目中,常采用。
2025-07-02 14:38:13
657
原创 互联网大厂Java面试:面试官与程序员谢飞机的搞笑对话
在一家知名互联网大厂的面试现场,面试官面色严肃地坐在桌子一侧,而对面坐着的是一脸自信但略显滑稽的程序员——谢飞机。:JVM嘛,就是Java虚拟机,我记得有堆、栈……还有其他的,反正就是堆里放对象,栈里放方法。:MyBatis好像是把SQL语句放在XML里,具体的我就不太清楚了。:Spring的依赖注入就像是自动加料机,把我需要的东西自动放进来。:Java的核心就是面向对象,封装、继承、多态,简单得很!:ArrayList就是一个可变长的数组,想放多少放多少。:好吧,谢先生,今天就到这里,请回去等通知。
2025-05-20 22:52:10
263
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人