- 博客(33)
- 收藏
- 关注
原创 【一次性讲清楚事务的隔离级别和脏幻重问题到底是怎么回事】
但是如果你的事务中既有快照读又有当前读,如果在这两个读之间有另外一个事务对数据的修改或插入,那仍然会出现幻读的问题。幻读就是在一个事务进行范围操作的时候,另外一个是事务对范围内数据进行了修改,导致第一个事务再次读取的时候返现结果跟预期的不一样。,第一次读取会生成一个readview,之后在不发生当前读和更新操作情况,都会以这个readview为准,以此解决不可重复读的问题。字段实现MVCC(对本行数据最后一次提交的事务id),当前事务id大于数据上挂的最后提交的事务id,就允许读取,否则不允许读取。
2024-12-04 10:19:22
559
原创 【接口安全性如何保证】
保证接口安全性其实是一个非常大的话题, 下面介绍一些我在实际项目开发中用过的具体方案为了防止传输过程中数据被篡改, 可以使用数字签名对数据进行签名和验签, 一般采用非对称加密, 具体做法如下:
2024-12-03 11:01:38
463
原创 【RocketMQ顺序消费原理】
1 、 一个Topic下的消息会被保存在多个Queue中, 多个Queue是分片保存的关系(类似于es或者mysql的横向分表), 所以全局是无法保证消息的顺序性的, 但是 单个Queue中的消息是有序的。,这样保证了只有当前线程可以进行消息处理,不会重复消费,同时也可以防止Rebalance线程把当前处理的MessageQueue移除掉。这样Broker就会把消息固定的发送给一个消费者, 实现原理其实就是通过加锁。,确保同一时间,一个队列只有一个线程处理消息。消费者消费消息时,会。
2024-11-30 09:21:42
609
原创 【RocketMQ事务消息如何实现】
1、发送事务消息时时候首先向RocketMQ发送一条半消息,Broker会将该消息保存到事务消息日志中,并标记为prepared状态, 然后通知producer执行本地事务。4、如果本地事务执行失败,需要通知Brocker回滚事务的话,Brocker会将该消息状态改为rollback,并将消息从事务消息日志中删除,从而保证消息不被消费者消费。3本地事务执行失败, 可以考虑在第4步发送rollback给broker, 将消息删除。1-2失败, 根本不用执行本地事务, broker也不会接受到消息。
2024-11-29 15:03:28
384
原创 【Docker安装RocketMQ】
注意这时候需要进容器看一下RocketMq的版本, 后面Broker挂载配置文件目录的时候要用, 如果明确知道版本的话可以忽略这一步。NameServer : 名称服务, 主要维护Broker的元信息, 如Broker的地址、topic、queue等。其中NameServer和Broker是需要部署的, Producer和Consumer有我们的应用程序实现。Broker: 主要负责消息存储和转发, 一般需要集群部署。http://你自己的IP:8090/#/Producer: 消息生产者, 应用程序。
2024-11-28 12:45:37
497
原创 【HashMap源码解读-hash、put、resize】
HashMap是一个基于key做hash的K-V数据结构。这篇文档会用通俗易懂的方式解读一下HashMap的源码, 看看HashMap底层到底是咋回事。话不多说, 开整。先把HashMap的核心结构整出来, 下面标注出了每一个属性和方法都是干啥的, 盘它~大体结构, 就是一个Node数组, 用来存K-V。然后有entrySet/size/modeCount/htreshold/loadfactor这几个属性。以及三个构造和hash、增、删、改、查、扩容、树化等方法。还算简单明了。
2024-11-19 18:33:17
938
原创 【SpringMVC原理分析】
Spring MVC大家应该都很熟悉吧。作为一个全面的Web框架,提供了构建Web应用程序所需的所有基础设施。下面我们结合源码从两个方面来分析, SpringMVC到底是怎么工作的。
2024-11-19 13:34:23
1157
原创 【Java集合的排序方式】
这样就可以借用java自带的排序api, 比如Collections, TreeSet等。, 这样也可以借用java自带的排序api。3、如果是二方/三方包中类可以基于。, 因为这个玩意真的太方便了。2、自己项目中类可以是。
2024-11-17 16:40:58
186
原创 【LRU和LFU以及如何用java实现】
LRU(Least Recently Used)和LFU(Least Frequently Used)是两种常见的缓存淘汰算法。
2024-11-17 16:22:12
643
原创 【mysql的当前读和快照读】
mysql只有REPEATABLE READ(可重复读)和READ COMMITTED(读已提交)隔离级别才会使用快照度。不同的隔离级别下,快照读的行为也有所不同。
2024-11-14 18:33:26
456
原创 【Java的JIT技术】
也称即时编译器, 主要在JVM运行时期动态的做一些优化提升代码的运行速度和效率。大家都知道, jvm运行时是通过解释器将每一条class字节码指令翻译成机器指令去执行。JIT则不同, 它会在jvm运行时期动态的将热点代码编译成机器指令, 缓存下来. 之后每次执行这段代码时, 直接执行对应的机器码, 无需再次编译。
2024-11-14 18:16:18
597
原创 【Spring AOP 原理】
首先AOP跟OOP(面向对象编程)、IOC(控制反转)一样都是一种编程思想跟OOP不同, AOP是面向切面编程, 面对多个不具备继承关系的对象同时需要引入一段公共逻辑的时候, OOP就显得有点笨重了, 而AOP就游刃有余, 一个切面可以横跨多个类或者对象去执行公共逻辑, 极大的提升了开发效率完全没读过源码的朋友, 建议先浅读下这篇文章, 简单了解下SpringAop基础概念。
2024-11-13 23:35:44
1114
原创 【Java的动态代理】
个人感觉这个技术在框架中用的比较多, 比如SpringAop, servlet的filter, mysql运行时动态生成Mapper接口实现, Spring事务拦截, 日志框架, 权限控制等等。代码实现起来也不难, 下面提供2个demo。Java中有两种实现动态代理的方式。
2024-11-13 22:41:09
367
原创 【Java的SPI与SpringBoot自动配置】
SPI(Service Provide Interface)是一种扩展机制, 通常是为开发人员提供的, 实现可插拔式的扩展实现。java 6开始引入SPI, 主要基于ClassLoad发现并加载服务。主要有三大组件。
2024-11-10 15:13:31
1152
原创 【spring中创建bean的方式】
本质上他们都是将一个Bean注入到Spring IOC容器中, 功效上一样, 只是标识出不同的业务含义。除了这个接口, InitializingBean、BeanPostProcessor接口也可以注入。这个注解也需要配合@Configuration注解使用, 代码如下。这个注解需要配合@Configuration注解使用, 代码如下。最原始的xml方式, 应该每一个学过spring的程序员都会吧。类似与@Autowired和@Resource注解的功能。
2024-11-09 21:48:16
279
原创 【spring的AOP】
跟OOP不同, AOP是面向切面编程, 面对多个不具备继承关系的对象同时需要引入一段公共逻辑的时候, OOP就显得有点笨重了, 而AOP就游刃有余, 一个切面可以横跨多个类或者对象去执行公共逻辑, 极大的提升了开发效率。
2024-11-09 18:09:28
485
原创 【spring是如何解决循环依赖的】
首先上来先走了一把缓存, 第一次缓存里肯定是没有的, 所以就进入else分支, 去创建当前bean//获取beanName//记住这个方法,这里就是从缓存中拿, 所以上来第一步就尝试从缓存拿一把//这里是不是跟我们日常写代码做幂等控制很像,先查一把再insert//这个方法主要看当前bean如果是FactoryBean对象,就返回FactoryBean.getObject()返回的对象}else {....try {// 在这里真实创建初始化beanthrow ex;});
2024-11-08 21:45:34
346
原创 【spring启动过程如何做缓存预热】
这两个接口主要就是应用启动后执行一些业务逻辑@Override//业务逻辑@Override//业务逻辑。
2024-11-08 19:17:10
316
原创 【Spring Bean的生命周期】
创建、使用、销毁:实例化、初始化、注册destruction回调创建流程主要在AbstractAutowireCapableBeanFactory这个类中销毁流程主要在DisposableBeanAdapter这个类中。
2024-11-08 18:10:39
307
原创 【java类的生命周期】
大阶段 加载 > 使用 > 卸载其中加载阶段分为 加载 > 链接 > 初始化链接过程包含 : 验证 > 准备 > 解析。
2024-11-08 11:56:56
440
原创 【spring事务失效原因】
一般使用spring的@Transactional注解容易导致事务失效。这个注解是基于spring的Aop实现的,Aop又基于动态代理实现,所以失效可能是代理没代理到或者代理到了但是没调用到方法。可能出现失效的情况如下1、@Transactional注解用在了private/static/final修饰的方法上,这些方法无法被代理类增强,所以会失效。(private方法不能被aop-jdk代理复写,无法增强,final方法无法复写,static方法属于类不属于对象,也无法被增强)2、同类中的方法自调
2024-11-08 11:39:22
347
原创 【RocketMQ如何保证消息不丢失】
通常RockerMQ都是以集群方式进行部署, Broker采用一主多从进行部署, 通过主从同步方式进行数据复制, 且一般都会进行Broker备份(RockerMQ支持Broker配置多实例), 多个Broker之间进行冗余备份, 保证数据的可靠,Broker确认收到消息后才会返回sendResult, 这个过程中发生异常就需要生产者重新发送。, Broker接收到消息, 写入master成功就可以返回响应生产者, 接着消息会异步复制到slave节点, 这个中master挂了就会丢数据, 所以。
2024-11-06 15:49:56
491
原创 【seata的AT模式】
是阿里开源的一个分布式事务解决方案事务协调器, 这是一个独立服务, 不包含业务代码, 负责全局事务统一调度, 比如维护全局事务状态、通知RM执行分支事务提交/回滚事务管理器, 对应微服务中的聚合服务, 负责发起一个全局事务,或结束(提交/回滚)一个全局事务资源管理器, 对应微服务中的某个微服务 (也可以理解为管理数据库链接的对象) 负责注册和执行某个事务分支(auto-commit transaction)是seata支持的一种事务模式, 是基于2PC协议的, 通过代理数据源, 使和能够统一管理。
2024-11-06 11:11:43
350
原创 【观察者模式】
1、优点解耦(观察者模式主要就是干这个事) ,解除具体被观察者和具体观察者的耦合,让耦合的双方都依赖于抽象,而不是依赖具体。妥妥的依赖倒转原则体现2、缺点由于有多个被观察者,所有开发和调试比较复杂。另外消息通知在顺序执行的时候,任一观察者卡顿都会受影响整体的执行效率,所以要考虑采用异步的方式。除此之外,虽然依赖倒转了,但是抽象主题还是依赖抽象观察者,如何没有抽象观察者类或观察者没有update方法,那通知就实现不了,怎么办?这时候就要引入另外一项技术委托。
2024-09-23 14:30:30
626
原创 【springEvent事件驱动如何使用】
Spring框架中的Event机制,是以为基础。各组件之间通过注册监听器来监听特定类型的事件,并在事件发生时去处理特定逻辑。Spring Event主要有三个元素:1 事件对象(Event):其实就是一个普通的Java对象,用于携带信息。你可以在这个类中定义一些业务字段。2 事件发布者(Event-Publisher):负责触发事件,并通知所有正在监听器。3 事件监听者(Event-Listener):负责响应特定类型事件。
2024-09-21 19:00:52
460
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人