自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 算法日常记录

先让fast跑n步,然后slow和fast再一起跑,fast到达末尾时,slow刚好为倒数第n+1个节点,下面代码使用了虚拟结点,所以跑n+1步。删除倒数第二个结点,即4;那么要使得3的指针指向5,即3 -> 5,在原链表上表现为 3.next = 3.next.next;问题描述:给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。输入:head = [1,2,3,4,5], n = 2。即删除结点的前一个结点 指向 该结点的后一个结点。输出:[1,2,3,5]

2025-04-02 20:22:59 100

原创 Kafka的零拷贝

Kafka通过零拷贝技术,结合操作系统的sendfile和mmap机制,最大化减少了数据传输过程中的冗余步骤。这种设计使其在消费者拉取消息时能够高效利用系统资源,显著提升吞吐量并降低延迟,成为高并发场景下消息系统的理想选择。kafka使用sendfile:返回的是成功发送了几个字节数,具体发了什么应用层不知道。rocketMQ使用mmap:因为mmap返回的是数据的内容,应用层能获取到消息内容进行一些逻辑处理。rocketmq的一些消息需要获取到消息内容,比较将失败的消息重新投递到死信队列中。

2025-03-15 14:50:06 823

原创 MQ保证消息的顺序性

生产者:按业务标识将消息路由到同一队列。MQ服务端:确保队列内消息存储有序。消费者:单线程消费队列,失败时阻塞重试。通过合理设计业务标识和MQ配置,可以在分布式系统中高效实现局部顺序性,平衡一致性与性能。2. 不同MQ如何选择三种MQ相比较而言,RocketMQ更适合顺序消费的业务场景. RabbitMQ需要设定交换机Exchange与队列Queue的绑定关系,并且一个队列只对应一个消费者Consumer才可以保证顺序消费,但是队列中的消息被消费者拉去后会从队列删除,如果。

2025-03-05 17:14:22 1392

原创 RocketMQ事务消息机制

RocketMQ事务消息通过两阶段提交和定时回查机制,结合半消息、Op消息的存储设计,实现了分布式事务的最终一致性。其源码核心在于和对消息状态的管理,以及的补偿逻辑。具体实现细节可参考官方文档及源码中的关键类(如和。

2025-03-04 13:09:06 592

原创 RocketMQ定时/延时消息实现机制

RocketMQ 的延迟消息是其核心特性之一,允许消息在指定延迟时间后才被消费者消费。定时消息生命周期。

2025-03-03 18:41:46 1131

原创 RocketMQ顺序消费机制

RocketMQ的顺序消费通过生产端路由策略消费端锁机制及Broker协同管理实现。其设计在保证局部顺序的同时兼顾性能,适用于多数业务场景。源码层面,和是核心模块,通过定时加锁单线程消费及队列快照管理确保顺序性。实际使用时需结合业务特点设计Sharding Key,并处理可能的异常情况。

2025-03-03 16:04:42 1382

原创 RocketMQ消息过滤机制

Tag 过滤:通过哈希匹配,性能最优,适合简单场景。SQL92 过滤:通过表达式解析,灵活性高,适合复杂业务逻辑。源码核心:过滤逻辑在 Broker 端处理,通过和实现高效匹配。

2025-03-03 11:58:13 868

原创 RocketMQ 集群消费与广播消费

每个消费者分组只初始化唯一一个消费者,每个消费者可消费到消费者分组内所有的消息,各消费者分组都订阅相同的消息,以此实现单客户端级别的广播一对多推送效果。:,每个消费者分组下初始化了多个消费者,这些消费者共同分担消费者分组内的所有消息,实现消费者分组内流量的水平拆分和均衡负载。该方式一般可用于网关推送、配置推送等场景。该方式一般可用于微服务解耦场景。消费者启动时指定消费模式,通过。处理,根据分配的队列拉取消息。处理消息,区分并发/顺序消费。:消费完成后提交进度。

2025-03-02 11:58:51 1043

原创 RocketMQ客户端消息确认机制

生产者确认:通过同步/异步回调确保消息发送到 Broker。消费者确认:通过返回状态或手动 ACK 控制消息重试逻辑。可靠性保障:结合重试队列、消费进度持久化和死信队列实现端到端可靠性。源码中的关键逻辑集中在(发送)和(消费),通过状态机管理消息生命周期。

2025-03-02 11:34:43 1003

原创 RocketMQ的运行架构

RocketMQ 的架构通过 NameServer 实现解耦,Broker 主从设计保障高可用,生产者与消费者的分布式部署支持水平扩展。其高性能、可靠性和丰富的功能(如事务、顺序消息)使其适用于电商、金融等对消息一致性要求高的场景。

2025-03-01 16:06:51 1052

原创 RocketMQ消费者重平衡机制

触发条件消费者启动或关闭。定时触发(默认20秒一次)。Topic的队列数量变化。消费者组内成员变化(通过心跳检测)。目标:在集群模式下,每个队列仅被一个消费者消费,确保负载均衡。流程获取Topic的队列列表和当前消费者组成员。根据分配策略重新分配队列。释放不再属于当前消费者的队列,并申请新分配的队列。RocketMQ通过定期触发重平衡,利用分配策略调整队列分配,确保负载均衡。源码核心在于的队列计算与管理,结合心跳机制维护消费者组状态。

2025-02-28 12:48:44 1118

原创 模板方法模式

模板方法模式(Template Method Pattern)是一种行为型设计模式,它定义了一个算法的骨架,允许子类在不改变算法结构的情况下重写某些步骤的具体实现。

2025-02-24 18:08:00 421

原创 高并发系统设计

设计高并发系统是一个复杂的系统工程,需要从架构设计、技术选型、资源优化、容错机制等多方面综合考虑。,需结合业务特点选择合适的技术组合。,通过迭代优化应对不断增长的流量挑战。高并发系统的核心目标是。

2025-02-23 17:17:39 725

原创 线程池异常处理机制

在Java线程池中,当线程执行任务发生异常时,处理方式取决于任务的提交方式和线程池的配置。

2025-02-22 12:18:42 376

原创 线程池的状态流转

线程池的状态流转由关闭方法的调用(shutdown())和任务执行完成情况共同驱动,确保资源有序释放。理解状态流转有助于合理管理线程池生命周期,避免任务丢失或资源泄露。

2025-02-22 11:52:45 416

原创 线程池提交任务的具体流程

这一流程平衡了资源利用与任务处理效率,确保在高负载下仍能合理分配系统资源。:内部通过锁或CAS操作确保线程安全,避免多线程提交导致状态不一致。

2025-02-22 09:55:13 376

原创 线程池如何保证线程安全

线程池通过多种机制确保其内部的线程安全,核心在于。通过上述机制,线程池在。,同时保持高效运行。

2025-02-22 09:02:50 1068

原创 MySQL多列索引查询优化

单列索引场景:通常只用一个索引,其他条件回表过滤。索引合并场景:可能用多个索引,但需满足优化器策略。最佳实践:优先使用联合索引(a, b, c),效率最高。建议根据实际查询模式设计联合索引,并通过EXPLAIN验证优化器的选择。

2025-02-20 16:11:27 439

原创 XXL-Job实现原理

XXL-Job 是一个分布式任务调度平台,其设计旨在解决分布式环境下定时任务的调度与管理问题。

2025-02-14 09:44:49 890

原创 SpringBoot和Spring主要区别

Spring是基础框架,强调灵活性,适合复杂定制场景。是 Spring 的“脚手架”,通过自动化配置和约定简化开发,适合快速构建现代应用。关系:Spring Boot 基于 Spring 实现,核心功能(如 IoC、AOP)完全依赖 Spring Framework。

2025-02-10 15:49:17 527

原创 Dubbo高级特性

具体实现上,Dubbo 提供的是客户端负载均衡,即由 Consumer 通过负载均衡算法得出需要将请求提交到哪个 Provider 实例。在集群负载均衡时,Dubbo 提供了多种均衡策略,缺省为 weighted random 基于权重的随机负载均衡策略。目前 Dubbo 内置了如下负载均衡算法,可通过调整配置项启用。建议:超时时间建议定义在服务提供方,而不是调用方。注册中心挂了,服务是否可以正常访问?服务消费者指定集群容错的模式。服务消费者指定负载均衡算法。服务提供者可以设置权重。

2025-02-09 15:56:58 1044

原创 Dubbo快速入门

如果调用的接口很多,为方便管理以及提高开发效率,可以创建一个公共模块,用于定义、管理远程调用的接口,如dubbo-interfance。服务提供者和消费者只需要引入该模块即可。

2025-02-09 14:16:30 192

原创 服务发现(Dubbo-zookeeper)

Dubbo 提供的是一种 Client-Based 的服务发现机制,依赖第三方注册中心组件来协调服务发现过程,支持常用的注册中心如 Nacos、Consul、zookeeper。

2025-02-09 11:49:17 461

原创 Dubbo概述

Dubbo 作为服务开发框架包含的具体内容如下:

2025-02-09 10:55:50 179

原创 分布式系统中的相关概念

集群分布式架构

2025-02-09 10:39:20 288

原创 Thrift与Dubbo的区别

Thrift与Dubbo的主要差异以及实际应用如何选择

2025-02-07 09:52:54 833

原创 String、StringBuffer、StringBuilder

String、StringBuffer、StringBuilder

2025-01-21 16:21:16 416

原创 调用第三方接口-OkHttpClient

服务端接口http://12.131.23.1/user/list。使用OkHttpClient发送GET请求,如查询列表。参数(UserReqDto userReqDto)使用OkHttpClient发送post请求。例如后端接口接收参数为 User user。

2024-07-19 17:40:52 489

原创 调用第三方接口-RestTemplate

服务端接口http://12.131.23.1/user/get/{userId}参数(PathVariable(“userId”) String userId)服务端接口http://12.131.23.1/user/list。使用RestTemplate发送post请求,暂未进行异常处理。使用RestTemplate发送GET请求,如查询列表。使用RestTemplate发送post请求。例如后端接口接收参数为 User user。例如后端接口接收参数为List users。

2024-07-19 17:18:57 619

原创 异步线程池(SpringBoot)

对于异步方法调用,从Spring3开始提供了@Async注解,我们只需要在方法上标注此注解,此方法即可实现异步调用。当然,我们还需要一个配置类,通过Enable模块驱动注解来开启异步功能。

2024-02-29 22:14:54 1306 1

原创 redis命令

同时设置一个或多个key-value对,当且仅当所有给定的key都不存在时成功。用value覆写key中所储存的字符串值,从起始位置开始(索引从0开始)ttl key 查看还有多少秒过期,-1表示永不过期,-2表示已过期。将key中储存的数字值减1,只能对数字操作,如果为空,新增值为-1。exist key 判断某个key是否存在,1存在,0不存在。获取值的范围,类似java中的subString,前包,后包。设置键值的同时,设置过期时间,单位为秒。只有在key不存在时,设置key的值。

2024-02-17 17:05:13 411

原创 You can‘t specify target table ‘dps_result‘ for update in FROM clause

在MySQL中,可能会遇到You can't specify target table '表名' for update in FROM clause这样的错误。意思是说,不能在同一语句中,先select出同一个表中的某些值,再update这个表,即不能依据某字段值做判断再来更新某字段的值。,就可以避免这个错误。

2023-12-28 17:06:32 727

原创 Java线程

FutureTask 能够接收 Callable 类型的参数,用来处理有返回结果的情况。分析 Thread 的源码,理清它与 Runnable 的关系。原理之 Thread 与 Runnable 的关系。把【线程】和【任务】(要执行的代码)分开。

2023-12-25 16:41:25 75

原创 进程与线程

单核 cpu 下,多线程不能实际提高程序运行效率,只是为了能够在不同的任务之间切换,不同线程轮流使用cpu ,不至于一个线程总占用 cpu,别的线程没法干活多核 cpu 可以并行跑多个线程,但能否提高程序运行效率还是要分情况的有些任务,经过精心设计,将任务拆分,并行执行,当然可以提高程序的运行效率。但不是所有计算任务都能拆分(参考后文的【阿姆达尔定律】)也不是所有任务都需要拆分,任务的目的如果不同,谈拆分和效率没啥意义。

2023-12-25 15:33:01 159

原创 数据存储(k8s)

容器的生命周期可能很短,会被频繁地创建和销毁。那么容器在销毁时,保存在容器中的数据也会被清除。这种结果对用户来说,在某些情况下是不乐意看到的。为了持久化保存容器的数据,kubernetes引入了Volume的概念。Volume是Pod中能够被多个容器访问的共享目录,它被定义在Pod上,然后被一个Pod里的多个容器挂载到具体的文件目录下,kubernetes通过Volume实现同一个Pod中不同容器之间的数据共享以及数据的持久化存储。Volume的生命容器不与Pod中单个容器的生命周期相关,

2023-12-21 14:39:49 123 2

原创 RabbitMQ知识分享

如何确保消息可靠性:(1).开启生产者确认机制,确保生产者的消息可以到达队列(2).开启持久化功能,确保消息未消费前在队列不会消失(3).开启消费者确认机制auto,由spring确认消息处理完成后返回ack(4).开启消费者失败重试机制,并且设置Messagerecoverer,多次重试失败后,将消息投递至异常交换机,交由人工处理。

2023-12-21 13:25:15 168

原创 Service详解

在kubernetes中,pod是应用程序的载体,我们可以通过pod的ip来访问应用程序,但是pod的ip地址不是固定的,这也就意味着不方便直接采用pod的ip对服务进行访问。为了解决这个问题,kubernetes提供了Service资源,Service会对提供同一个服务的多个pod进行聚合,并且提供一个统一的入口地址。通过访问Service的入口地址就能访问到后面的pod服务。

2023-12-19 15:26:51 210

原创 Pod控制器详解

自主式pod:kubernetes直接创建出来的Pod,这种pod删除后就没有了,也不会重建控制器创建的pod:kubernetes通过控制器创建的pod,这种pod删除了之后还会自动重建什么是Pod控制器?Pod控制器是管理pod的中间层,使用Pod控制器之后,只需要告诉Pod控制器,想要多少个什么样的Pod就可以了,它会创建出满足条件的Pod并确保每一个Pod资源处于用户期望的目标状态。如果Pod资源在运行中出现故障,它会基于指定策略重新编排Pod。

2023-12-15 10:39:48 180

原创 Service

利用Deployment已经可以创建一组Pod来提供具有高可用性的服务。Pod IP 会随着Pod的重建产生变化Pod IP 仅仅是集群内可见的虚拟IP,外部无法访问这样对于访问这个服务带来了难度。因此,kubernetes设计了Service来解决这个问题。Service可以看作是一组同类Pod对外的访问接口。借助Service,应用可以方便地实现服务发现和负载均衡。

2023-12-12 13:31:36 67

原创 Label标签

Label是kubernetes系统中的一个重要概念。它的作用就是在资源上添加标识,用来对它们进行区分和选择。

2023-12-12 13:30:51 192

springfox-boot-starter-3.0.0.pom

springfox-boot-starter-3.0.0.pom

2023-09-27

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

TA关注的人

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