RocketMQ面试指南-事务消息
摘要本文深入解析了RocketMQ事务消息的实现原理,探讨其核心机制、底层存储、事务状态管理以及与分布式事务的关系。通过代码示例和Mermaid流程图,帮助读者理解事务消息的完整流程及最佳实践。 1. 引言在分布式系统中,保证数据的一致性是一个重要的挑战。RocketMQ 作为国内广泛应用的消息队列(MQ)中间件,提供了一种独特的 事务消息(Transaction Message) 机制,能够有效保证跨系统的最终一致性。在面试中,RocketMQ 事务消息的原理和应用场景往往是重点考察内容,因此深入理解其实现方式至关重要。 2. 主要内容2.1 事务消息的基本概念事务消息是 RocketMQ 为了解决分布式事务问题而引入的机制,它允许生产者在发送消息时,先将消息存储为 半消息(half message),然后执行本地事务逻辑,并最终提交或回滚该消息,从而实现分布式事务的最终一致性。 RocketMQ 事务消息遵循以下流程: 生产者发送 半消息 到 Broker,消息暂不可被消费者消费。 生产者执行本地事务逻辑。 根据事务执行结果,生产者向 Broker 提交...
无版权图片网站
收集到的一些可商用无版权图片网站 Pixabay:提供超过 2.7 百万张高质量的图片和视频素材,完全免费用于商业用途。 Pexels:由摄影师免费分享的精彩图片和视频素材,适用于各类设计。 Unsplash:提供高质量的摄影作品,可以自定义商用或修改,非常适合创作和设计。 Designerspics:专注于生活、工作、休闲类的图片,免费商用。 Piqsels:免版税图库,支持个人和商业免费使用,无需归属。 Streetwill:提供免费的复古风格照片,适合各种创作需求。 visualhunt:提供丰富的免版权图片,供个人和商业使用。 stocksnap:一个免费的高清摄影图库,提供许多实用的图片素材。 picjumbo:提供流行的免费库存照片,适用于各类设计项目。 Stickpng:提供无版权限制的图片、插画、矢量图等素材,适合设计使用。 Freeimages:包含三十万张免费的图片,分类清晰,适合不同场景的使用。 Shotstash:一个提供舒适且高级感十足图片的网站,适合细致挑选需要的图片。
ubuntu安装selenium
查看ubuntu版本 12>> cat /etc/issueUbuntu 20.04.6 LTS 编写测试程序 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859from selenium import webdriverfrom selenium.webdriver.chrome.options import Optionsfrom selenium.webdriver.chrome.service import Servicefrom selenium.webdriver.common.by import Byfrom selenium.webdriver.common.keys import Keysimport timedef test_google_search(): # 指定 ChromeDriver 的路径 service =...
Java并发(三)——Synchronized关键字和锁升级
一、Synchronized使用场景Synchronized是一个同步关键字,在某些多线程场景下,如果不进行同步会导致数据不安全,而Synchronized关键字就是用于代码同步。什么情况下会数据不安全呢,要满足两个条件:一是数据共享(临界资源),二是多线程同时访问并改变该数据。 例如: 123456789101112131415161718192021222324252627public class AccountingSync implements Runnable{ //共享资源(临界资源) static int i=0; /** * synchronized 修饰实例方法 */ public synchronized void increase(){ i++; } @Override public void run() { for(int j=0;j<1000000;j++){ increase(); ...
Java并发(二)——CountDownLatch原理分析
使用示例CountDownLatch 是一个同步工具类,它允许一个或多个线程一直等待,直到其他线程的操作执行完后再执行。在使用线程池的情况下提交任务的情况下,我们无法使用线程的join()方法,这就需要选择使用CountDowConLatch了。示例代码如下: 12345678910111213141516171819202122232425262728293031323334353637383940import java.util.concurrent.CountDowConLatch;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class CountDownLatchTest { // 创建一个CountDownLath实例 private static CountDownLatch countDownLatch = new CountDownLatch(2); public static void...
Java并发(一)——AQS原理分析
AQS 简单介绍AQS 的全称为(AbstractQueuedSynchronizer),这个类在 java.util.concurrent.locks 包下面。 AQS 是一个用来构建锁和同步器的框架,使用 AQS 能简单且高效地构造出应用广泛的大量的同步器,比如我们提到的 ReentrantLock,Semaphore,其他的诸如 ReentrantReadWriteLock,SynchronousQueue,FutureTask(jdk1.7) 等等皆是基于 AQS 的。当然,我们自己也能利用 AQS 非常轻松容易地构造出符合我们自己需求的同步器。 AQS原理AQS原理概览AQS 核心思想是,如果被请求的共享资源空闲,则将当前请求资源的线程设置为有效的工作线程,并且将共享资源设置为锁定状态。如果被请求的共享资源被占用,那么就需要一套线程阻塞等待以及被唤醒时锁分配的机制,这个机制 AQS 是用 CLH 队列锁实现的,即将暂时获取不到锁的线程加入到队列中。 CLH(Craig,Landin,and...
Java实现滑动时间窗口限流
直接上代码 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455package demo;import java.time.LocalDateTime;import java.util.LinkedList;import java.util.Random;/** * @author weylan */public class SlideWindow { static LinkedList<long> timeWindow = new LinkedList<>(); /** * 滑动时间窗口限流算法 * 在指定时间窗口,指定限制次数内,是否允许通过 * * @param windowSize 时间窗口大小,单位 秒 * @param count 允许通过的次数 * @return 是否允许通过 */ public...
QPS和并发数,究竟是何种关系?
一个开放性问题: 假设超市每分钟有10个人走出来,请估算超市里面有多少人? 是不是感觉手足无措呢?嗯,可能如此。其实,这个问题没有标准答案,关键还是考查思路。 我们先看一个有趣的定律,即Little’s Law,如下: 在一个稳定的系统中,设长时间观察到的平均顾客数量为L,长时间观察到的有效到达速率为λ,平均每个顾客在系统中花费的时间是W,则有如下关系式: L = λW Little’s Law的理解假设有一水管,横截面积为2平方米,水速为5米/秒,即水的流量速度是10立方米/秒,很显然: 在长度100米的水管内,水量为200立方米,每滴水从流入到流出,耗时20秒,而水的流量速度是10立方米/秒。 也就是说,在这段水管中: 水量= 耗时 * 流量速度 这就是Little’s Law. 虽然很早就意识到了这一关系式,但毕业后才第一次听说Little’s Law. Little’s Law的应用Little’s Law模型很通用,因此,在很多场景中都能得到应用,比如工业界和计算机界,都会有意或无意用到该定律。 ...
Windows修改wsl2存储路径
1.关闭WSL 1wsl --shutdown 2.查看系统信息 1wsl -l --all -v 显示如下: 1234 NAME STATE VERSION* docker-desktop Stopped 2 Ubuntu Stopped 2 docker-desktop-data Stopped 2 3.导出系统,示例如下: 1wsl --export Ubuntu D:\ubuntu.tar 4.删除系统,示例如下: 1wsl --unregister Ubuntu 出现“正在注销…”即成功 5.导入系统,指定新的位置 ,示例如下: 1wsl --import Ubuntu D:\Ubuntu D:\ubuntu.tar 6.ubuntu.tar文件不需要的话可以删掉了 7.问题解决!