自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(118)
  • 资源 (1)
  • 收藏
  • 关注

原创 为什么分布式中间件常常角色有个leader

Leader 宕机时,Controller 节点(本身也是一个 Leader)会从 ISR(In-Sync Replicas)中选举新 Leader。:在 Redis 主从集群中,Sentinel 集群通过 Raft 算法选举 Leader,由 Leader 执行故障转移(提升从节点为主节点)。:Leader 负责接收所有写请求,确保数据变更按顺序同步到 Follower(如 Kafka 分区的 Leader 副本)。:无 Leader 的系统中,多个节点可能自认为主,导致数据不一致(如双主写入冲突)。

2025-04-03 17:58:36 422

原创 RPC框架需要解决的问题

RPC框架需要解决网络通信、序列化和反序列化、服务注册与发现、负载均衡、容错处理、安全性、服务治理、性能监控以及透明化远程调用和跨语言、跨平台支持等多个方面的问题。这些问题的解决直接关系到系统的高效性、稳定性和可扩展性

2025-04-01 19:48:06 709 1

原创 Vue计算属性和data的属性的名字命名冲突问题

Vue 计算属性的函数名和 data 中的属性可以同名吗?不可以。因为 Vue 会将 data 中的性和计算属性都挂载到 Vue 实例上,如果它们同名,则会发生命名冲突,导致实例中的属性被覆盖,从而引发不可预知的错误

2025-04-01 08:30:00 226

原创 RabbitMQ 的三种集群模式

三种集群模式:标准、镜像、联邦集群。对于标准集群,节点共享元数据,但消息只存在一个节点。元数据的内容:队列、交换机、绑定关系等,而消息本身不复制。性能和资源利用的优势,但单点故障的问题,比如队列所在节点宕机的影响。镜像集群是解决高可用的问题,每个队列的镜像分布在多个节点。需要说明如何配置策略,同步方式,以及自动故障转移的机制。同时要指出资源消耗和网络带宽的问题,适合需要高可用性的场景。联邦集群用于跨地域的多活部署,数据可以异步复制。

2025-03-31 17:32:17 1108

原创 rabbitMQ怎么实现延迟队列

RabbitMQ怎么实现延迟队列。使用死信交换机(DLX)和消息的TTL设置,或者用rabbitmq-delayed-message-exchange插件。可能需要延迟执行的任务:比如订单超时未支付取消,或者定时提醒之类的场景。实际需求:比如,他们是否需要精确的延迟时间,还是可以接受一定的误差?使用死信队列的话,每个消息的TTL需要单独设置,但如果有不同延迟时间的消息,可能需要为每个延迟时间创建不同的队列,这样扩展性不太好。而使用插件的话,可能更方便,但需要确保环境允许安装插件。

2025-03-31 17:10:52 761

原创 锁和线程生命周期

1.竞态条件指的是在多线程环境下,多个线程非同步地访问共享资源,导致数据不一致或结果不符合预期的问题。知识点:多线程、竞态条件、共享资源2.synchronized 关键字用于在 Java 中对方法或代码块加锁,使得同一时刻只有一个线程能够访问该方法或代码块,从而实现线程同步知识点:Java 关键字、synchronized、线程同步3.CountDownLatch 用于确保当计数到达零之前,所有等待的线程都会等待,直到由其他线程触发 latch,知识点:CountDownLatch、并发工具类、同步机

2025-03-28 17:48:02 494

原创 Kafka Rebalance(再平衡)的机制和解决方法

Kafka Rebalance(再平衡)是消费者组内分区重新分配的关键机制,但其频繁触发可能导致重复消费、延迟增加等问题。Rebalance 期间若消费者未及时提交 Offset,新分配的消费者会从已提交的旧 Offset 开始消费,导致数据重复处理。消费逻辑支持重复消息处理(如数据库唯一索引、Redis 去重),缓解 Rebalance 导致的重复消费问题。升级至支持增量 Rebalance 的版本,仅重新分配受影响的分区,减少全量 Rebalance 耗时。

2025-03-28 16:37:29 748

原创 设计秒杀系统(高并发的分布式系统)

针对紧急上线的商品秒杀需求,我将采用分阶段实现、优先保障核心功能的方案,在确保高并发安全性的前提下快速交付。- 数据库:开启MySQL批量提交(innodb_flush_log_at_trx_commit=2)- 流量突增处理:预先准备Nginx静态降级页面(秒杀页自动跳转到维护公告)- JVM:预设秒杀专用线程池(核心线程数=CPU*2,队列容量=0)- 网络:SLB配置TCP快速打开(tcp_fastopen=3)- 第三阶段(上线后2周):引入分布式锁优化热点库存。- 按钮防抖(点击后禁用3秒)

2025-03-27 20:17:07 1653

原创 kafka 如何保证消息不丢失,详细讲解

在 Kafka 中,确保消息不丢失需要从生产者发送消息、Broker 存储消息、消费者消费消息三个核心环节进行全链路保障。

2025-03-27 10:16:45 957

原创 java初学之数组

定义数组的时候直接给数组赋值// 完整格式数据类型[] 数组名 = new 数据类型[]{元素1,元素2 ,元素3… };// 简化格式数据类型[] 数组名 = { 元素1,元素2 ,元素3,… };数组是属于引用数据类型,数组变量名中存储的是存储的数组在内存中的地址信息。

2025-03-26 11:40:19 620

原创 springcloud企业大项目会存在什么特殊的难点,怎么解决的

Spring Cloud企业级项目的核心挑战在于如何在高复杂度下保障系统的可用性、一致性和可维护性。需结合具体业务场景,灵活选用组件(如Nacos替代Eureka实现更高可用注册中心),并辅以完善的监控、自动化工具和团队规范。同时,适时引入Service Mesh(如Istio)解耦治理逻辑,或采用云原生方案(如Spring Cloud Kubernetes)进一步提升弹性,方能在大型项目中游刃有余

2025-03-26 10:27:24 889

原创 netty select/poll/epoll区别

在Netty框架中,select、poll和epoll是不同操作系统提供的I/O多路复用机制,用于高效管理多个网络连接。它们的核心区别在于事件通知方式和性能表现

2025-03-25 19:50:07 801

原创 AQS的重入机制和锁释放逻辑

重入机制通过state计数和线程独占标记实现。释放锁时递减state,归零后唤醒其他线程。必须严格匹配lock()和unlock()的调用次数。学海无涯,志当存远。燃心砺志,奋进不辍。愿诸君得此鸡汤,如沐春风,事业有成。若觉此言甚善,烦请赐赞一枚,共励学途,同铸辉煌!

2025-03-25 16:59:20 1022

原创 AQS是什么,使用应注意什么

理解 AQS 后,可以更深入掌握 JUC 中各种同步工具的工作原理,并能够自定义高性能同步器。AQS 封装通用逻辑(如队列管理、线程阻塞/唤醒),子类只需实现资源获取/释放的具体逻辑。:双向链表,头节点(dummy node)不关联线程,后续节点为等待线程。:将复杂的线程排队、阻塞/唤醒交给 AQS,开发者只需关注资源管理。:通过 CAS 和 CLH 队列减少锁竞争,避免内核态阻塞。独占模式(如锁)与共享模式(如信号量)的区别。表示剩余许可数,共享模式唤醒多个线程。),确保所有等待线程都能被唤醒。

2025-03-24 22:48:46 752

原创 使用ThreadLocal可能导致内存泄漏的原因与其底层实现机制

内存泄漏条件实例被回收 + 线程长期存活 + 未调用remove()。最佳实践始终在finally块中调用remove ()。避免在长生命周期线程中滥用。使用静态实例(减少实例数量,但需更谨慎清理)。通过理解底层机制并遵循最佳实践,可以有效避免的内存泄漏问题。学海无涯,志当存远。燃心砺志,奋进不辍。愿诸君得此鸡汤,如沐春风,事业有成。若觉此言甚善,烦请赐赞一枚,共励学途,同铸辉煌!

2025-03-24 22:11:34 503

原创 java线程池最佳实践

显式创建线程池,避免使用Executors快捷方法、合理配置线程池参数、选择合适的拒绝策略、线程命名与线程工厂、正确关闭线程池、监控与调优、异常处理、线程池复用与资源管理、队列选择策略、动态调整参数、避免任务依赖死锁、定时任务Future超时

2025-03-22 11:00:00 889

原创 Java 中使用 Executors 工具类创建线程池的潜在问题

Executors 工具类虽然便捷,但其预设的线程池参数(如无界队列、无限制线程数)容易引发生产环境中的严重问题。手动创建线程池是更可靠的选择,开发者需根据业务负载、资源限制和容错需求,精细配置核心参数、队列类型及拒绝策略,并结合监控实现动态调优。

2025-03-22 10:00:00 823

原创 java的锁概括

java的锁概括

2025-03-21 09:00:00 1582

原创 Java线程池原理详解

Java线程池是一种基于池化思想管理和使用线程的机制。它通过将多个线程预先存储在一个“池子”内,当有任务需要执行时,直接从池中取出线程来执行任务,避免了频繁创建和销毁线程的开销,提高了程序的性能和响应速度

2025-03-21 08:30:00 540

原创 CopyOnWriteArrayList 源码分析、优缺点及典型使用场景

CopyOnWriteArrayList 通过 写时复制 实现了读操作的无锁和高性能,但牺牲了写操作的效率和数据实时性。其核心价值在于 读多写少的高并发场景,开发者需根据业务特点权衡选择。

2025-03-20 09:00:00 896

原创 ConcurrentHashMap(CHM)如果读时,遇到的是ForwardingNode(FWD)节点,怎样取数据

并继续查找数据即可。这一机制保证了并发环境下扩容和读操作的高效性与线程安全性。在扩容时会将旧表的桶逐个迁移到新表。迁移过程中,旧表的桶会被替换为。实现渐进式扩容,读操作可以无锁访问新表,写操作会协助迁移数据。在 Java 的 ConcurrentHashMap。:读线程永远不会因为扩容而阻塞,总能通过。自身不存储数据,但可以通过它访问新表。在新桶的链表或红黑树中查找目标键值对。,也能通过新表安全地读取数据。操作是无锁的,即使遇到。操作保证多线程可见性。方法已内置这一逻辑。

2025-03-20 08:30:00 363

原创 ConcurrentHashMap为什么不使用AtomicLong统计容量,而用LongAdder

多个线程操作同一缓存行的不同变量时,缓存一致性协议(如 MESI)会导致不必要的缓存行同步,降低性能。时,大量线程会因 CAS 失败而自旋,浪费 CPU 资源。即使在高并发场景下,也能高效统计容量,同时保持线程安全。的 CAS 失败(说明存在竞争),会初始化或扩展。的分段机制,但实现细节略有不同。单元竞争激烈,数组会自动扩容,进一步分散冲突。获取总值时,累加所有分段单元的值和基础值。:分段单元独立存储,减少缓存行同步。,CHM 的设计需要保持向后兼容。单元,通过 CAS 更新其值。

2025-03-19 09:30:00 648

原创 CHM(ConcurrentHashMap)中的 sizeCtl 的作用与值变化详解

sizeCtl是 Java 并发编程中一个关键但容易混淆的概念。sizeCtl是内部用于协调并发操作的核心状态控制变量,用于管理哈希表的初始化和扩容。它是一个类型的变量,通过CAS(Compare and Swap)操作保证线程安全(无锁化。sizeCtl是状态管理:统一控制初始化、扩容、阈值存储。线程协作:通过CAS 和负数标记协调多线程工作。性能优化避免全局锁,分散竞争热点。理解sizeCtl的行为对调试高并发场景下的哈希表问题(如 初始化冲突、扩容卡顿)至关重要。实际开发中可通过。

2025-03-19 08:30:00 2111

原创 ConcurrentHashMap(CHM)如何保证写数据线程安全(put)

这种结合CAS和synchronized的设计,在保证线程安全的同时,显著提升了高并发场景下的性能,成为Java并发编程中的经典实现。:哈希冲突时,桶内结构可能为链表或红黑树(链表长度≥8时转换)。:将旧数组划分为多个区间,每个线程负责一个区间。:迁移时按高位和低位拆分链表,确保数据均匀分布。:仅锁定当前桶的头节点,其他桶仍可并发操作。:基础存储结构,每个桶对应一个哈希槽位。:仅锁定当前操作的桶,最大程度支持并发。:仅锁定单个桶,锁粒度极细,并发度高。:无锁化操作,减少线程阻塞。

2025-03-18 09:30:00 1223

原创 HashMap的put方法源码解析

通过上述流程,HashMap实现了高效的键值对存储与检索,设计上兼顾了时间复杂度与空间利用率。:数组容量翻倍(如16→32),并重新计算阈值(新容量 = 旧容量。遍历旧数组,将每个元素重新哈希到新数组(重新计算每个节点的索引)。创建默认容量16的数组,阈值(threshold)为。:更新对应节点的Value,并返回旧值47。将链表转换为红黑树(否则仅扩容数组)48。的Map实现,用于存储键值对。,确定键值对在数组中的存储位置。方法,按红黑树规则插入新节点。:将新节点插入链表末尾。,但位运算效率更高。

2025-03-18 08:00:00 441

原创 分布式锁: 并发时,redis如何避免删别人的锁

通过唯一标识+原子化操作,Redis分布式锁可有效避免误删问题。正确实现后,能在多数场景下保障并发安全。

2025-03-17 11:18:20 1009

原创 DCL(Double-checked Locking双重校验锁)实现单例模式的原理、问题与解决方案

单例即单实例,只实例出来一个对象。一般在创建一些管理器类工具类的时候,需要用到单例模式,比如JDBCUtil类,我们只需要一个实例即可(多个实例也可以实现功能,但是增加了代码量且降低了性能)。静态内部类。

2025-03-17 08:30:00 2570

原创 synchronized的原理和锁升级

核心机制:synchronized 通过 对象头 Mark Word 和 Monitor 模型 实现锁的获取与释放。锁升级:无锁 → 偏向锁 → 轻量级锁 → 重量级锁,根据竞争动态优化性能。JVM 优化:自旋锁、锁消除、锁粗化等策略减少同步开销。适用场景:简单同步需求优先使用 synchronized,复杂场景(如超时、公平锁)选择 ReentrantLock

2025-03-16 09:00:00 849

原创 CAS有哪些问题,如何解决

ABA 问题→ 版本号(自旋开销→ 退避策略或切换锁。多变量原子性→ 合并变量或锁。优先级反转→ 公平锁和调度优化。合理选择同步机制,结合业务场景权衡性能与复杂度,是并发编程的关键。

2025-03-16 08:30:00 485

原创 voliate不能保证原子性,如何保证原子性

volatile的定位:轻量级的可见性与有序性保证,不解决原子性问题。原子性保障方案简单场景 →。高并发单变量 →Atomic原子类。复杂逻辑 →Lock显式锁。极致性能 → CAS(需谨慎使用)。选择方案时需结合性能需求代码复杂度和业务场景综合评估。

2025-03-15 09:00:00 858

原创 深入解析 as-if-serial 与 happen-before:Java 内存模型的核心规则

无论编译器和处理器如何优化(如指令重排序),

2025-03-15 08:00:00 703

原创 voliate原理

volatile通过缓存一致性协议和内存屏障实现可见性与有序性,是多线程编程中的轻量级同步工具,但需严格限制其使用场景。正确使用volatile可以避免锁竞争,提升性能,但误用可能导致隐蔽的并发问题。

2025-03-14 09:00:00 610

原创 jclasslib, 字节码中的init方法构造方法

在Java字节码中,<init>方法对应类的构造方法,负责实例的初始化

2025-03-14 08:00:00 635

原创 jvm调优-各区域是否存在异常和GC

通过监控各区域内存指标与GC行为关联分析,可精准定位JVM性能瓶颈。对象存活时间仅 2秒,但 Survivor 区容量不足,被迫提前晋升老年代。Eden区在 500ms 内填满,Young GC 频率达 20次/秒。最终触发 Full GC 暂停 3秒。

2025-03-13 09:00:00 434

原创 jmap和HeapDumpOnOutOfMemoryError在OOM分析中的应用

对 jmap -dump 和 -XX:+HeapDumpOnOutOfMemoryError 的详细解析及使用指南

2025-03-13 08:30:00 1293

原创 JVM垃圾收集器合集

JVM(Java虚拟机)中的垃圾收集器是自动管理内存的重要机制,旨在回收不再使用的对象所占用的内存空间

2025-03-12 15:40:11 997

原创 CMS垃圾收集器原理与优化

为目标的垃圾收集器,主要针对**老年代(Old Generation)**的垃圾回收。它的设计目标是减少垃圾收集时的停顿时间(Stop-The-World, STW),适用于对延迟敏感的应用(如 Web 服务器)。但需要注意的是,CMS 已在 JDK 9 中被标记为废弃(Deprecated),并在 JDK 14 中正式移除,建议使用更现代的垃圾收集器(如 G1、ZGC 或 Shenandoah)。:低停顿,与 ZGC 类似,但支持更早的 JDK 版本。,清除未被标记的垃圾对象,回收内存空间。

2025-03-12 09:19:35 717

原创 jvm的gc过程

JVM(Java虚拟机)的垃圾回收(Garbage Collection, GC)是自动管理内存的核心机制,其目标是回收不再使用的对象,释放内存空间,避免内存泄漏。以下是 GC 的核心流程、算法及优化策略的详细说明:

2025-03-11 09:00:00 939

原创 一张表多少记录,会成为大表?如何计算

没有固定阈值,需结合数据量、性能、硬件综合判断。

2025-03-11 08:30:00 613

原创 脏读、不可重复读、幻读、丢失更新及解决

根据业务场景选择合适的隔离级别和锁机制,可以显著提升系统的稳定性和性能。同一事务内多次查询同一范围的数据,结果集的行数不同(因其他事务插入或删除了符合该范围的数据)。一个事务读取了另一个未提交事务的中间数据。如果后者回滚,前者读取的数据就是无效的。同一事务内多次读取同一数据,结果不一致(因其他事务修改了该数据并提交)。两个事务同时读取并修改同一数据,后提交的事务覆盖了先提交的事务的修改。通过快照(MVCC)或行锁,保证事务内多次读取结果一致。事务B取出30,更新X=70(覆盖了事务A的修改)。

2025-03-10 13:30:54 587

AlxcTools.zip

导出的oracle10g的dmp数据库文件,想导入到11g的oracle里面去,导入报错:can't recognize compressed file header.即需要修改dmp文件的文件名里面的版本号,用此软件修改:11g R2:V11.02.00 11g R1:V11.01.00 10g:V10.02.01 填的就是以上对应的版本号,如果查出来的是10.2.0.1.0对应的填V11.02.00

2020-03-31

空空如也

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

TA关注的人

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