自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(22)
  • 收藏
  • 关注

原创 Dubbo 的SPI

Dubbo SPI通过。

2025-08-18 22:38:22 810

原创 openfeign 只有接口如何创建bean的

组件作用启动 Feign 扫描和动态代理生成Spring 的 FactoryBean,负责创建代理生成 JDK 动态代理代理逻辑:解析注解 → 构造请求 → 发送 HTTP 调用集成负载均衡(如 Ribbon)

2025-08-18 22:32:09 368

原创 kafka的pull的依据

方法的主要工作是根据它内部记录的当前位置(offset)去向 Broker 请求消息,并在返回这批消息后。Broker 返回从 offset 100 开始的可用消息(假设是 offset 100 到 150)。提交 offset 是异步或按需进行的,目的是持久化进度。(Rebalance,如新消费者加入、旧消费者退出)时,新接手分区的消费者能知道从哪里开始消费。当消费者组发生再均衡,一个分区被分配给一个新的消费者实例时,这个新消费者实例也会去读取。这个值是持久化的、全局的(对消费者组内其他成员可见)。

2025-08-18 22:10:41 700

原创 Kafak生产者和消费者发分区策略

若默认策略不满足需求(如按业务字段分片),可通过实现重写方法,根据业务规则(如用户 ID 范围、地区等)计算分区号;在生产者配置中通过指定自定义分区器类名。生产者分区策略:核心是通过 key 哈希或轮询将消息分配到分区,平衡负载并保证 key 顺序性,支持自定义扩展。消费者分区策略:核心是通过再均衡将分区分配给消费者组内成员,四种内置策略各有优劣,需根据场景选择。联动关系:两者共同决定了消息的 “生产 - 消费” 路径,合理配置可提升系统吞吐量、均衡负载,并保证业务所需的顺序性。

2025-08-14 21:48:21 582

原创 Kafka到底选哪个副本进行读写的

leader 分区的确定:由控制器基于 ZooKeeper 的元数据管理,通过监控副本状态和isr集合选举 leader,并更新 ZooKeeper 中的状态;生产者找到 leader:通过向 bootstrap server 请求元数据,缓存分区与 leader 的映射关系,结合分区器确定目标 leader 并发送消息,同时通过定时或触发机制动态更新元数据。这一机制保证了生产者能高效、准确地找到 leader 分区,同时通过控制器和 ZooKeeper 实现了 leader 的高可用切换。维度。

2025-08-14 21:19:28 510

原创 Redis两个场景

redissearch作为分库分表的二级索引。redis作为布隆过滤器。redis作为延时队列。

2025-08-12 23:09:18 258

原创 java双亲委派与热部署原理

说到双亲委派一般指的是java类加载器的一种工作方式,用于控制类的加载过程。类加载器是实现双亲委派机制的具体实体。类加载器的主要任务是将类的字节码(.calss文件)加载到内存中,并创建对应的类对象。当Java程序需要使用某个类时,类加载器会在类路径中搜索并加载类的字节码文件。

2025-08-08 17:05:27 797

原创 kafka选举

Kafka 的选举机制是保障其分布式系统高可用性、数据一致性和负载均衡的核心设计,主要涉及三大场景:Controller 选举、分区 Leader 选举和消费者组选举。以下是综合所有场景的详细知识点梳理:Controller 是 Kafka 集群的 “总协调者”,负责管理分区分配、副本同步、Broker 上下线等全局元数据。每个分区有多个副本(Replica),其中仅 Leader 处理读写请求,Follower 同步 Leader 数据。选举确保分区在 Leader 失效后快速恢复服务。触发条件:选举策略

2025-08-06 16:47:04 589

原创 final关键字的作用以及final方法是否可以被动态代理

final。

2025-08-05 17:53:09 324

原创 串行遍历多个future等待返回结果与CompletableFuture并行等待的区别

运行这段代码时,你会看到每次执行可能有不同数量的数组完成处理,具体取决于每个任务的执行时间是否在 100ms 内。下面我将实现一个使用 8 个 Future 线程遍历 8 个数组的 Java 程序,每个线程处理一个数组,设置 100 毫秒超时,并在主线程中进行统计。主线程通过 Future.get (100, TimeUnit.MILLISECONDS) 方法等待每个任务的结果,设置了 100ms 的超时时间。对于超时的任务,调用 future.cancel (true) 尝试取消正在执行的任务。

2025-07-23 21:25:39 255

原创 redis如何建立mysql表的数据,保留联合索引的功能实现

redis如何建立mysql表的数据,保留联合索引的功能实现。

2025-07-23 18:57:05 109

原创 常见rpc与服务注册发现底层原理

本文将分析,常见rpc与服务注册发现底层原理。

2025-07-23 18:55:14 94

原创 如何定位微服务调用超时

现象确认:明确超时的服务、场景、时间阈值;链路追踪:用 Zipkin 等工具锁定超时发生的节点;日志深挖:分析客户端、服务端、中间件日志,定位具体行为;监控分析:通过资源、网络、依赖指标排查瓶颈;环节排查:按 “客户端→网络→服务端→下游” 逐一验证;复现验证:通过测试确认根因。通过这套流程,可逐步从 “宏观链路” 聚焦到 “具体代码 / 配置问题”,高效解决超时问题。

2025-07-23 18:53:04 784

原创 JDK 8、JDK 11、JDK 17比较

新增 List.of() 、 Set.of() 、 Map.of() 创建不可变集合(如 List.of(1,2,3) ),比 Collections.unmodifiableList() 更简洁,且性能更好(底层为专用不可变实现)。新增 String.isBlank() (判断是否全为空白字符)、 strip() (移除首尾空白,支持 Unicode 空白)、 repeat(n) (重复字符串 n 次)等方法,比 trim() 更强大。

2025-07-17 11:56:54 1299

原创 jdk8.jdk11.jdk17新特性

日期时间 API(java.time 包):替代老旧的 Date 和 Calendar ,提供线程安全、易用的日期时间处理(如 LocalDate 、 Instant )。- Optional 类:避免空指针异常(NPE),通过 Optional.of() 、 isPresent() 、 orElse() 等方法优雅处理 null。- Stream API:提供声明式集合操作(如 filter() 、 map() 、 reduce() ),简化数据处理逻辑。

2025-07-17 11:13:41 289

原创 常见中间件集群的同步机制、选举与脑裂问题分析

本篇文章将分析redis,mysql、kafka集群的同步机制、选举机制与脑裂问题。

2025-07-14 23:13:00 355

原创 kafka消息堆积的原理

因此无论是异步提交是拉取玩消息后,丢给一个线程去处理,然后调用异步提交offset的方法,不需要等待offset提交完成,再执行下次poll,反之为同步。消息堆积,一般由于,拉取下一次消息与业务处理逻辑是在一个线程里,这样由于业务处理逻辑慢,导致拉取的慢,生产者网络缓存数据映射到用户态buffeer时,由于长时间没有消费,linux内核不得不将缓存中的数据持久化到磁盘,消费者过一段时间消费数据时需要从磁盘读取,相比于从用户态缓存读取数据,性能更差。

2025-07-10 20:30:52 176

原创 熔断和降级区别以及实现

在网关层(Gateway)集成 Sentinel 后,可直接对路由(Route)或接口(API) 配置熔断降级规则,实现“入口级”的容错,避免请求到达下游服务前就被拦截,减少无效资源消耗。- 慢调用比例:当一定时间内(如 1000ms)的请求中,慢调用(响应时间超过阈值)比例达到设定值(如 50%),且请求数超过最小阈值(如 10 次),触发熔断;- 异常比例:当一定时间内的请求中,异常(如抛出异常)比例达到设定值(如 50%),且请求数超过最小阈值,触发熔断;

2025-07-10 18:10:07 535

原创 java线上问题定位

在Java虚拟机(JVM)中,查看对象数量的命令和工具主要用于分析堆内存使用情况、定位内存泄漏或对象创建频繁的场景。- 分析方式:通过 EU (Eden区已用空间)和对象平均大小,可估算Eden区对象数量(如 EU / 对象平均大小 )。3. jstat -gc <pid> <interval> <count> :查看堆内存统计(间接推断对象数量)通过以上工具和命令,可有效获取JVM中对象的数量分布,帮助定位内存问题或优化对象创建逻辑。- 功能:监控堆各区域的内存使用变化,可通过对象创建速率推断数量。

2025-07-10 14:39:01 44

原创 class对象和其元数据的区别

Class 对象本质上是 java.lang.Class 类的实例,和其他普通 Java 对象(如 new Object() 创建的对象)一样,是 JVM 在堆中创建的实例。元数据是类的底层结构信息,属于“类的模板数据”,在 JDK 8 及以后,这类数据存储在 元空间(Metaspace) 中(元空间是本地内存的一部分,不再占用堆内存)。简单说:Class 对象是“元数据的访问入口”,是一个能被 Java 代码直接操作的普通对象(属于 java.lang.Class 类型)。

2025-07-10 09:42:16 253

原创 mysql可重复读

如果查询的记录不存在,会对该索引值两侧的间隙加锁。在 MySQL 的可重复读(RR)隔离级别下,若一个未提交的事务正在执行 范围删除(如 DELETE FROM t WHERE id BETWEEN 1 AND 10 ),而另一个事务尝试插入的数据恰好落在该删除范围内(如 INSERT INTO t (id) VALUES (5) ),插入操作会被阻塞,直到范围删除的事务提交或回滚后才会继续执行。例如,在一个有序的索引列中,要插入一个值为5的记录,会对小于5的最大索引值和5之间的间隙加锁。

2025-07-09 22:39:34 371

原创 深入理解JVM

通常我们说Java是跨平台的,一个平台编译,多个平台执行,说的就是java代码采用一个平台的jdk编译为字节码,class文件后,可以在不同平台的jvm上运行,因为jvm识别的是字节码。Linux 的jdk和windows的jdk编译同一份java代码得到的java字节码是一样的,都能被jvm所识别。需要注意的是,如果执行的是 native 方法,那么程序计数器记录的是 undefined 地址,只有执行的是 Java 代码时程序计数器记录的才是下一条指令的地址。,虚拟机栈和本地方法栈是线程私有的。

2023-06-03 12:48:41 166 2

空空如也

空空如也

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

TA关注的人

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