自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Spring AOP 实现原理

Spring AOP 中的动态代理主要有两种方式,JDK 动态代理和 CGLIB 动态代理。如果目标类没有实现接口,那么 Spring AOP 会选择使用 CGLIB 来动态代理目标类。(Code Generation Library),是一个代码生成的类库,可以在运行时动态的生成某个类。的子类,注意,CGLIB 是通过继承的方式做的动态代理,因此如果某个类被标记为 final,理通过反射来接收被代理的类,并且要求被代理的类必须实现一个接口。那么它是无法使用CGLIB 做动态代理的。

2024-04-29 12:03:47 327

原创 spring循环依赖问题

之后继续做属性填充,这时候就发现引用到B,开始创建B,实例化之后暴露B,然后属性填充填充A,这个时候A并没有走完不在单例池里面,这个时候去走A的创建流程,这个给时候发现A已经提前暴露,先getBean,实例化,填充属性,初始化,代理:先调用提前处理,提前暴露,先把factory(A)放入三级缓存(调用提前处理方法),先把代理A放入单例池里;先尝试获取bean,到bean工厂,bean工厂到bean的仓库取,有就返回,没有就创建。验证完之后去单例池看看是否存在,是否提前暴露,没有就开始创建,存在就直接返回。

2024-04-29 12:00:56 302

原创 两阶段提交和三阶段提交

三阶段提交(Three-Phase Commit):为了解决两阶段提交协议中的阻塞等待问题,三阶段提交协议引入了第三个阶段,即准备(Prepare)阶段。在提交阶段,协调者会向所有参与者发送提交请求,并等待它们的提交反馈。两阶段提交(Two-Phase Commit):在两阶段提交协议中,涉及到多个参与者的事务首先进入预提交(Pre-Commit)阶段,然后进入提交(Commit)阶段。两阶段提交协议包括预提交和提交两个阶段,而三阶段提交协议包括准备、提交和回滚三个阶段。

2024-04-26 11:15:08 276

原创 IO 多路复用机制

通过 selector.select()阻塞轮询复路器上就绪的 channel 即可,也就是说,如果。这些都是 Linux 系统提供的 IO 复用机制的实现,其中 select 和 poll 是基于轮询。某个客户端连接数据传输完成,那么 select()方法会返回就绪的 channel,然后。IO 多路复用机制,核心思想是让单个线程去监视多个连接,一旦某个连接就绪,在 IO 多路复用机制的实现原理中,客户端请求到服务端后,此时客户端在传输。就通知应用程序,去获取这个就绪的连接进行读写操作。

2023-04-22 13:14:05 134

原创 Spring Boot 的约定优于配置,你的理解 是什么?

Spring Boot 的自动装配机制的实现中,通过扫描约定路径下的 spring.factories。而在 Spring Boot 中,我们不需要再去做这些繁琐的配置,Spring Boot 已经自。个脚手架,通过 Spring Boot,我们可以快速开发基于 Spring 生态下的应用程序。Spring Boot 就是约定优于配置这一理念下的产物,它类似于 Spring 框架下的一。首先,约定优于配置是一种软件设计的范式,它的核心思想是减少软件开发人员。动帮我们完成了,这就是约定由于配置思想的体现。

2023-04-22 12:27:14 445

原创 Srping boot Starter

Starter 是 Spring Boot 的四大核心功能特性之一,除此之外,Spring Boot 还有。Starter 内部集成了自动装配的机制,也就说在程序中依赖对应的 starter 组件以。在我看来,Starter组件几乎完美的体现了Spring Boot里面约定优于配置的理念。依赖 Starter 组件后,这个组件对应的功能所需要维护的外部化配置,会自动集。Starter 组件以功能为纬度,来维护对应的 jar 包的版本依赖,其中,Starter 是启动依赖,它的主要作用有几个。

2023-04-22 12:27:14 116

原创 Spring Boot 中自动装配机制的原理

其实,自动装配的思想,在 SpringFramework3.x 版本里面的@Enable 注解,就。自动装配,简单来说就是自动把第三方组件的 Bean 装载到 Spring IOC 器里面,这个配置类是放在第三方的 jar 包里面,然后通过 SpringBoot 中的约定优于配置。这样 SpringBoot 就可以知道第三方 jar 包里面的配置类的位置,这个步骤主要是。在我看来,SpringBoot 是约定优于配置这一理念下的产物,所以在很多的地方,它的出现,让开发人员更加聚焦在了业务代码的编写上,

2023-04-22 12:24:48 148

原创 volatile如何保障可见性 和有序性

assign:计算好的值重新赋值到工作内存 store 存储 工作内存数据写入主内存 write store的变量赋值给主内存的变量。如果不加volatile修饰 变量先从主存读取数据,读取后计算重新赋值,然后再在某个时刻将变量同步到主存,这时候会有总线嗅探机制,通过MESI缓存一致性协议让工作内存的变量失效。工作内存就会立即将数据同步到主存,会引起其他工作内存缓存的该内存地址失效MESI,提供内存屏障 ,在lock 之前不能指令重排序。工作内存是线程私有,主存共享的;内存有八大原子操作 包括。

2023-04-20 22:00:34 85

原创 springboot自动配置

2)这个配置类是放在第三方的jar包里面,然后通过Spring Boot中约定大于配置的理念,去把配置类的全路径放在件META_INF/Spring.factories文件里面,SpringBoot就可以知道第三方jar包里面配置类的位置,它主要是依靠Spring里面的SpringFactorierLoader来完成的。3)SpringBoot拿到所有第三方jar包声明的配置类之后,再通过ImportSelector这样一个接口来实现对这些配置类的动态加载,从而去完成自动装配这样的一个动作。

2023-04-19 22:17:19 56

原创 卡夫卡高性能原因

读取数据步骤:磁盘读取到内核缓冲区-》内核缓冲区通过线程上下文切换进行内核态切换到用户态,从内核缓冲区buffer写到用户态缓冲区buffer,然后需要发送到客户端,需要通过socket通信发送,socket也是内核态的,需要把用户态的数据写到socket的缓冲区(发送缓冲区)-》socket发送到网卡由网卡进行传输。磁头寻址步骤非常的耗时,而kafka进行的是append操作,parition是有序的,顺序读写节省了寻址时间,访问时间接近内存);访问的时候要从用户态切换到内核态保证安全性;

2023-04-15 13:28:55 81

原创 kafka consumer是推还是拉?

消息系统都致力于让consumer以最大的速率最快速的消费消息,但不幸的是,push模式下,当 broker推送的速率远大于consumer消费的速率时,consumer恐怕就要崩溃了。最终Kafka还是选取了传统的pull模式。在这方面,Kafka遵循了一种大部分消息系统共同的传统的设计:producer将消息推送到broker,consumer从broker拉取消息。Pull有个缺点是,如果broker没有可供消费的消息,将导致consumer不断在循环中轮询,直到新消息到t达。

2023-04-15 13:27:10 176

原创 kafka如何保障数据不丢失

自动提交:设置为enable.auto.commit为true,表示开启自动提交,自动提交会在每次调用poll时,提交上次poll时的消费位移,每次poll时,都是提交上次的offset的位移,如果是在单线程的情况,不会出现消费丢失的情况,但是对应多线程的应用来说,就有可能出现消费丢失的情况,例如我们每次poll到的数据都先放在一个队列中,用一个专门的线程来处理队列中的数据,但是我们poll的时候,上次提交的位移还没有完成消费,消费端出现了宕机,这个时候消费端重启后,就会出现消息丢失的情况。

2023-04-15 13:21:29 1617

原创 kafka顺序性保障

首先,在 kafka 的架构里面,用到了 Partition 分区机制来实现消息的物理存储,生产者在发送消息的时候,会根据消息的 key 进行取模,来决定把当前消息存储。者是完全独立的网络节点,所有可能会出现,消息的消费顺序不是按照发送顺序。针对这个问题,一般的解决办法就是自定义消息分区路由的算法,然后把指定的。另外,有些设计方案里面,在消费端会采用异步线程的方式来消费数据来提高消。息的处理效率,那这种情况下,因为每个线程的消息处理效率是不同的,所以即。来实现的,从而导致乱序的问题。

2023-04-15 11:35:22 110

原创 kafka避免重复消费

Consumer 端会从分配的 Partition 里面去消费消息,如果 Consumer 在默认的 5。每消费一批数据,Kafka Broker 就会更新 OffSet 的值,避免重复消费。Kafka 消费端的自动提交逻辑有一个默认的 5 秒间隔,也就是说在 5 秒之后的下。首先,Kafka Broker 上存储的消息,都有一个 Offset 标记。默认情况下,消息消费完以后,会自动提交 Offset 的值,避免重复消费。缩短单个消息消费的市场。基于这样的背景下,我认为解决重复消费消息问题的方法有几个。

2023-04-15 11:07:36 485

原创 nacos原理流程

nacos结合两种模式,通过客户端每隔一段时间向服务端发送一次请求 10毫秒,请求时候在请求头上携带长轮询的超时时间,默认30s;服务端接收到客户端的请求时,会挂起一段时间,如果期间配置发生变化会立即响应到客户端。服务端控制响应客户端的请求响应时间。要么push服务端主动推送到客户端,时效性可以,但是服务端需要维持与客户端的心跳连接,比较消耗资源维持心跳;一旦发现和服务端的配置有差异,就表示服务端配置有更新,于是把更新的配置。在这个过程中,有可能因为客户端配置比较多,导致比较的时间较长,使得配置。

2023-04-15 11:05:05 117

原创 HashMap 是怎么解决哈希冲突的?

key=hobby 时,hash 计算得到的索引也是 1,这个就是 hash 冲突。再 hash 法,就是当通过某个 hash 函数计算的 key 存在冲突时,再用另外一个。链式寻址法,这是一种非常常见的方法,简单理解就是把存在 hash 冲突的 key,所谓 hash 冲突,是由于哈希算法被计算的数据是无限的,而计算后的结果范围。Hash 算法,就是把任意长度的输入,通过散列算法,变成固定长度的输出,这。开放定址法,也称为线性探测法,就是从发生冲突的那个位置开始,按照一定的。

2023-04-11 22:49:02 78

原创 lock 和 synchronized 区别

Lock 锁的粒度是通过它里面提供的 lock()和 unlock()方法决定的,包裹在这两个。些区别,Synchronized 引入了偏向锁、轻量级锁、重量级锁以及锁升级的方式。Synchronized 由于是关键字,所以它无法实现非阻塞竞争锁的方法,另外,方法之间的代码能够保证线程安全性。Lock 提供了公平锁和非公平锁的机制,公平锁是指线程竞争锁资源时,如果已。期来控制锁的作用范围,比如锁对象是静态对象或者类对象,那么这个锁就是全。如果锁对象是普通实例对象,那这个锁的范围取决于这个实例的声明周期。

2023-04-11 22:47:36 36

原创 ConcurrentHashMap 底层具体实现

是 ConcurrentHashMap 在 HashMap 的基础上,提供了并发安全的实现。在 JDK1.8 中,ConcurrentHashMap 锁的粒度是数组中的某一个节点,而在。另外,随着 ConcurrentHashMap 的动态扩容,一旦链表长度小于 8,红黑树会。当数组长度不够时,ConcurrentHashMap 需要对数组进行扩容,在扩容的实现。JDK1.7,锁定的是 Segment,锁的范围要更大,因此性能上会更低。则直接从数组中随机选择一个,再通过 CAS 实现原子递增。

2023-04-11 22:47:36 66

原创 CPU 飙高系统反应慢怎么排查?

CPU 利用率较高的进程,在通过 Shift+H 找到进程中 CPU 消耗过高的线程,这。CPU 利用率过高的线程 id 不断变化,说明线程创建过多,需要挑选几个线程 id,CPU 利用率过高之后,导致应用中的线程无法获得 CPU 的调度,从而影响程序。CPU 利用率过高的线程一直是同一个,说明程序中存在线程长期占用 CPU 没有。个线程,如果有多个线程要执行,CPU 只能通过上下文切换的方式来执行不同。CPU 资源过度消耗,也就是在程序中创建了大量的线程,或者有线程一直占用。让处于等待中的线程执行。

2023-04-11 22:45:34 75

原创 innoDB 如何解决幻读

因此,当通过 id>4 这样一种范围查询加锁时,会加 next-key Lock,锁定的区间。间隙锁和 next-key Lock 的区别在于加锁的范围,间隙锁只锁定两个索引之间的。next-key Lock 相当于间隙锁和记录锁的合集,记录锁锁定存在的记录行,间隙。引用间隙,而 next-key Lock 会锁定多个索引区间,它包含记录锁和间隙锁。所以,在 InnoDB 中设计了一种间隙锁,它的主要功能是锁定一段范围内的索引。锁锁住记录行之间的间隙,而 next-key Lock 锁住的是两者之和。

2023-04-11 22:44:50 177

原创 seata分布式事务

Saga 模式,Saga 模式是 SEATA 提供的长事务解决方案,在 Saga 模式中,业。在分布式事务的实现上,对于强一致性,我们可以通过基于 XA 协议下的二阶段。XA 模式,XA 可以认为是一种强一致性的事务解决方法,它利用事务资源(数。最终一致性,也叫弱一致性,也就是多个网络节点的数据允许出现不一致的情况,分布式事务本质上要解决的就是跨网络节点的多个事务的数据一致性问题,业内。强一致性,就是所有的事务参与者要么全部成功,要么全部失败,全局事务协调。

2023-04-11 22:39:37 72

原创 什么是JVM

在 Java 中,Class⽂件是由源码⽂件⽣成的,⾄于源码⽂件的内容,是每个 Java。Class⽂件加载到内存中,需要借助 Java 中的类加载机制。⽂件的格式,⽐如其中的常量池、成员变量、⽅法等,这样就能知道 Java 源码。其解决的问题就是 Class⽂件进入内存之后,该如何进⾏存储不同的数据以及数。的运⾏时常量池、字段和⽅法的元数据信息、类的模板信息等;就是对运⾏时数据区中的数据进⾏管理和回收。码,可以发现这些收集器其实就是对于不同垃圾收集算法的实现,核⼼的算法有。

2023-04-11 22:38:35 36

原创 kafka 的零拷贝原理?

接着在应用程序中,调用 write()方法,把用户空间缓冲区中的数据拷贝到内核下。在这个流程中,数据只经历了两次拷贝就发送到了网卡中,并且减少了 2 次 cpu。在这个过程中我们可以发现,数据从磁盘到最终发送出去,要经历 4 次拷贝,而。而零拷贝,就是把这两次多于的拷贝省略掉,应用程序可以直接把磁盘中的数据。所以,所谓零拷贝,并不是完全没有数据赋值,只是相对于用户空间来说,不再。在实际应用中,如果我们需要把磁盘中的某个文件内容发送到远程服务器上,CPU 控制器再把内核缓冲区的数据赋值到用户空间的缓冲区中。

2023-04-11 22:38:28 286

原创 Spring Boot 的约定优于配置理解?

Spring Boot 的自动装配机制的实现中,通过扫描约定路径下的 spring.factories。而在 Spring Boot 中,我们不需要再去做这些繁琐的配置,Spring Boot 已经自。个脚手架,通过 Spring Boot,我们可以快速开发基于 Spring 生态下的应用程序。Spring Boot 就是约定优于配置这一理念下的产物,它类似于 Spring 框架下的一。首先,约定优于配置是一种软件设计的范式,它的核心思想是减少软件开发人员。动帮我们完成了,这就是约定由于配置思想的体现。

2023-04-11 22:37:36 161

原创 死锁及如何避免

第一个是互斥条件,共享资源 X 和 Y 只能被一个线程占用。第二个是指 占有且等待,线程 T1 已经取得共享资源 X。线程 T1 等待线程 T2 占有的资源。线程 T2 等待线程 T1 占有的资源。第一个是对于“占用且等待”这个条件。第二个是对于“不可抢占”这个条件。申请的时候可以先申请资源序号小的。第一个互斥条件是无法被破坏的。我们可以一次性申请所有的资源。是一组互相竞 争资源的线程。在等待共享资源 Y 的时候。互斥来解决线程安全问题的。可以主动释放它占有的资源。对于“循环等待”这个条件。

2023-04-11 22:19:46 20

原创 MySQL 性能优化

MySQL 的性能优化我认为可以分为 4 大部分l 硬件和操作系统层面的优化l 架构设计层面的优化l MySQL 程序配置优化l SQL 优化硬件及操作系统层面优化从硬件层面来说,影响 Mysql 性能的因素有,CPU、可用内存大小、磁盘读写速度、网络带宽从操作系层面来说,应用文件句柄数、操作系统网络的配置都会影响到 Mysql性能。这部分的优化一般由 DBA 或者运维工程师去完成。在硬件基础资源的优化中,我们重点应该关注服务本身承载的体量,然后提出合理的指标要求,避免出现资源浪费!

2023-04-05 23:13:25 77 1

原创 c#的三种参数传递方式

in型参数int 型参数通过值传递的方式将数值传入方法中,即我们在Java中常见的方法。 ref型参数该种类型的参数传递变量地址给方法(引用传递),传递前变量必须初始化。该类型与out型的区别在与:1).ref 型传递变量前,变量必须初始化,否则编译器会报错, 而 out 型则不需要初始化 2).ref 型传递变量,数值可以传入方法中,而 out 型无法将数据传入方法中。换而...

2018-08-09 14:52:26 3865

原创 c# 入门

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks;namespace ConsoleApplication1 { class Program { static void...

2018-08-09 14:17:59 114

原创 .net mvc 入门

model 层:namespace WebApplication4.Models { public class MyFirst { public int Num { get; set; } = 1; public Boolean Choose { get; set; } = false;}}controller 层using W...

2018-08-08 15:53:38 88

空空如也

空空如也

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

TA关注的人

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