一江溪水
生产者-消费者模型 生产者-消费者模型
什么是生产者消费者模型生产者 - 消费者模型( Producer-consumer problem) 是一个非常经典的多线程并发协作的模型,在分布式系统里非常常见。 这个模型由两类线程和一个缓冲区组成来组成 生产者线程:生产数据,并把数据
2021-11-20
Spring AOP是怎么实现的 Spring AOP是怎么实现的
概述Spring的AOP实现是通过动态代理实现的。如果我们为Spring的一个bean配置了AOP切面,那么Spring在创建这个bean的时候,实际上创建的是这个bean的一个代理对象,我们后续对bean中方法的调用,实际上调用的是代理类
2021-11-19
BIO、NIO、AIO的区别 BIO、NIO、AIO的区别
同步与异步同步和异步指的是一个执行流程中每个方法是否必须依赖前一个方法完成后才可以继续执行。假设我们现在有两个方法:方法一和方法二。 同步指的是调用一旦开始,调用者必须等到方法调用返回后,才能继续后续的行为。即方法二一定要等到方法一执行完
2021-11-18
Java反射机制 Java反射机制
什么是反射在程序的运行状态中, 可以构造任意一个类的对象, 可以了解任意一个对象所属的类, 可以了解任意一个类的成员变量和方法, 可以调用任意一个对象的属性和方法。 这种动态获取程序信息以及动态调用对象的功能称为 Java 语言的反射机
2021-11-17
MySQL如何避免幻读 MySQL如何避免幻读
事务的并发问题 脏读:事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据 不可重复读:事务A多次读取同一数据,事务B在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果不一致。 幻读:A事
2021-11-14
RabbitMQ的死信队列 RabbitMQ的死信队列
什么是死信在 RabbitMQ 中充当主角的就是消息,在不同场景下,消息会有不同地表现。死信就是消息在特定场景下的一种表现形式,这些场景包括: 消息被拒绝访问,即 RabbitMQ返回 nack 的信号时 消息的 TTL 过期时 消息队列
2021-11-13
红黑树是什么 红黑树是什么
红黑树红黑树是一种接近平衡的二叉搜索树,它能够保证任意一个节点左右子树的高度差不会超过较低子树的高度,也就是两棵子树的高度比值不会超过 2 倍。这样我们可以使搜索的时间复杂度更接近 O (logN)。为了保证树的平衡,我们需要在添加或删除元
2021-11-13
select、poll和epoll的区别 select、poll和epoll的区别
进程所能打开的最大连接数select单个进程所能打开的最大连接数有FD_ SETSIZE宏定义, 其大小是32个整数的大小(在32位的机器上,大小就是3232,同理64位机器上FD_ SETSIZE为3264) tips:我们可以对进行修
2021-11-07
IO多路复用 IO多路复用
概述IO多路复用是一种同步IO模型,实现一个线程可以监视多个文件句柄 一旦某个文件句柄就绪,就能够通知应用程序进行相应的读写操作; 没有文件句柄就绪时会阻塞应用程序,交出cpu; 多路是指网络连接,复用指的是同一个线程。 三种实现方式s
2021-11-06
分布式事务之两阶段提交 分布式事务之两阶段提交
两阶段提交协议 两阶段提交协议把分布式事务分为两个阶段,一个是准备阶段,另一个是提交阶段; 准备阶段和提交阶段都是由事务管理器发起的; 我们可以将事务管理器称为协调者,将资源管理器称为参与者。 流程准备阶段:协调者向参与者发起指令,参与者
分布式事务之三阶段提交 分布式事务之三阶段提交
三阶段提交协议是两阶段提交协议的改进版本,它通过超时机制解决了阻塞的问题,并且把两个阶段增加为三个阶段。 流程询问阶段协调者询问参与者是否可以完成指令,协调者只需要回答是或不是,而不需要做真正的操作,这个阶段超时会导致中止。 准备阶段 如果
RabbitMQ 如何保证消息不会被重复消费 RabbitMQ 如何保证消息不会被重复消费
所有的消息队列都要保证同一条消息不会被重复消费 举个例子:假设有个系统,消费一条往数据库里插入一条,要是你一个消息重复两次,你不就插入了两条,这数据就错了 所以消费到第二次的时候,自己判断一下已经消费过了,直接扔了,就保留了一条数据 一
2021-10-30
4 / 10