自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

m0_37635053的博客

知识就是越分享越多

  • 博客(175)
  • 收藏
  • 关注

原创 Spring Event如何优雅实现系统业务解耦

Spring事件(Spring Event)是Spring框架的一项功能,它允许不同组件之间通过发布-订阅机制进行解耦的通信。在Spring中,事件是表示应用程序中特定事件的对象,例如用户注册、订单创建、数据更新等。当这些事件发生时,可以通知其他组件来执行相应的操作。事件是一个普通的POJO类,用于封装与应用程序状态变化相关的信息。通常情况下,事件类继承自ApplicationEvent抽象类,Spring中提供了一些内置的事件,也可以自定义事件。事件发布者是一个接口,用于发布事件。

2024-06-09 00:15:12 730 1

原创 docker学习笔记

docker之西行取经

2024-05-19 22:31:07 418

原创 fastdfs安装

一个卷可以由一台或多台存储服务器组成,一个卷下的存储服务器中的文件都是相同的,卷中的多台存储服务器起到了冗余备份和负载均衡的作用。拷贝 /usr/local/fastdfs/fastdfs-nginx-module/src/mod_fastdfs.conf 到 /etc/fdfs/目录下。将/usr/local/fastdfs/FastDFS/client里面的libfdfsclient.so拷贝到/usr/lib cd。注意这里的配置的是跟踪器的ip端口,我安装在同一台上,就配置自己的ip。

2024-05-03 17:07:23 874 5

原创 递归的层序遍历

递归的层序遍历

2024-04-26 22:41:43 245 2

原创 ArrayBlockingQueue与LinkedBlockingQueue底层原理

ArrayBlockingQueue是一个阻塞的队列,继承了AbstractBlockingQueue,间接的实现了Queue接口和Collection接口。底层以数组的形式保存数据,所以它是基于数组的阻塞队列。ArrayBlockingQueue是有边界值的,在创建ArrayBlockingQueue时就要确定好该队列的大小,一旦创建,该队列大小不可更改。内部的全局锁是使用的。方法做法put如果队列满了,就阻塞,当队列不满的时候,会再执行入队操作offer如果队列满了,返回false。

2024-03-15 22:29:28 553

原创 ThreadLocal基本原理

ThreadLocal是java中所提供的线程本地存储机制,可以利用改机制将数据缓存在线程内部,该线程可以在任意时刻、任意方法中获取数据。

2024-03-14 22:43:11 495

原创 sentinel整合nacos在gateway中实现限流

OverrideR error = R.error(500, "限流啦 别在试啦");});

2024-02-24 16:10:01 1514

原创 spring整合mybatis的底层原理

spring整合mybatis的底层原理

2024-01-27 22:23:10 1173

原创 依赖注入实现原理

依赖注入

2024-01-03 15:18:47 1017

原创 并发控制工具类CountDownLatch、CyclicBarrier、Semaphore

让一些线程阻塞直到另一些线程完成一系列操作后才被唤醒,CountDownLatch主要有2个方法,当一个或多个线程调用await方法时,调用线程会被阻塞,其他线程调用countDown方法时计数器减一(调用countDown方法不会阻塞线程),当计数器的值变为0时,因为调用方法被阻塞的线程会被唤醒,继续执行。N个线程相互等待,任何一个线程没有到达或完成时,所有的线程都必须互相等待。(信号量)可以用来限制能同时访问共享资源的线程上限,它内部维护了一个许可的变量,也就是线程许可的数量。1 收集到:1颗龙珠。

2023-12-22 23:13:37 472

原创 java常见的锁的类型

每个线程在获取锁时会先查看此锁维护的等待队列,如果为空或当前线程是等待队列的第一个,就占有锁,否则就加入到等待队列中,以后会FIFO的规则来从队列获取锁ReentrantLock的创建可以指定构造函数的boolean类型来指定得到公平锁或非公平锁,如果不写默认是false-非公平锁。读写锁的内部包含两把锁:一把是读(操作)锁,是一种共享锁;指的是同一线程外层函数获得锁之后,内层递归函数仍然能获取该锁的代码,在同一个线程在外层方法获取锁的时候,在内层方法会自动获取锁。非公平锁吞吐量比较大。

2023-12-22 22:51:17 591

原创 常见数据结构浅析

往一个容器添加元素时,不直接往Object[]添加,而是先将当前容器Object[]进行copy 复制出一个新得容器,Object[] newElements,然后往新的容器newElements里添加元素,添加完元素后再将原容器的引用指向新得容器setArray(newElements)。这样做的好处是可以对CopyOnWrite容器进行并发读,而不需要加锁,因为当前容器不添加任何元素。把原数组的第index+1后面的数据复制到原数组的index位置复制长度为size - index - 1。

2023-12-22 16:21:29 455

原创 CAS原理浅析

CAS 比较并交换 compareAndSwap。CAS是一种乐观锁机制,也被称为无锁机制。全称:它是并发编程中的一种原子操作,通常用于多线程环境下实现同步和线程安全。CAS操作通过比较内存中的值与期望值是否相等来确定是否执行交换操作。如果相等,则执行交换操作,否则不执行。由于CAS是一种无锁机制,因此它避免了使用传统锁所带来的性能开销和死锁问题,提高了程序的并发性能。

2023-12-22 14:41:23 390

原创 4种常见的限流算法

当有请求到来时,会尝试从桶中移除一个令牌,如果桶中有足够的令牌,则请求可以被处理或数据包可以被发送;由于漏桶算法以固定的速率处理请求,可以有效地平滑和整形流量,避免流量的突发和波动(类似于消息队列的削峰填谷的作用)。桶中的令牌数不能超过桶的容量,如果新生成的令牌超过了桶的容量,那么新的令牌会被丢弃。例如:限流是每秒3个,在第一毫秒发送了3个请求,达到限流,窗口剩余时间的请求都将会被拒绝,体验不好。在一个固定长度的时间窗口内限制请求数量,每来一个请求,请求次数加一,如果请求数量超过最大限制,就拒绝该请求。

2023-12-07 20:20:04 697

原创 mybatis的一级缓存和二级缓存

是在原来的Executor上做了一个装饰,引入一个装饰器叫CachingExecutor,所以进入以及缓存查询前会先去查二级缓存(如果开了二级缓存),开启二级缓存会被多个SqlSession 共享,他是一个全局得缓存。一级缓存:每个SqlSession都会有一个Executor,每个Executor都会持有一个LocalCache得对象,当发起查询的时候会先去LocalCache中去查询,如果命中就直接返回,没命中就去数据库查。跨SqlSession的缓存,以及缓存是无法做到的,所以引入了二级缓存。

2023-12-03 18:49:05 451

原创 网络通信与TCP.IP协议

在TCP协议中,通信双方将通过三次TCP报文实现对以上信息的了解,并在此基础上建立一个TCP连接,而通信双方的三次TCP报文段的交换过程,也就是通常所说的TCP连接建立实现的三次握手(Three-WayHandshake)过程。2次的话客户端收到了服务端的SYN号(同步序列编号(Synchronize Sequence Numbers)),服务端无法确认客户端是否收到自己的同步序列编号。HTTP 协议是基于应用层的协议,并且在传输层使用的 TCP的可靠性通信协议。表示资源的地点(互联网上所处的位置)。

2023-11-29 21:51:29 644

原创 spring循环依赖

●earlySingletonObjects比singletonObjects多了一个early,表示缓存的是早期的bean对象。● singletonFactories中缓存的是ObjectFactory,表示对象工厂,表示用来创建早期bean对象的工厂。● singletonObjects中缓存的是已经经历了完整生命周期的bean对象。Bean的生命周期指的就是:在Spring中,Bean是如何生成的?这里不会对Bean的生命周期进行详细的描述,只描述一下大概的过程。三级缓存是通用的叫法。

2023-11-26 11:15:14 509

原创 Bean的创建过程源码

依赖注入后,Spring会判断该对象是否实现了BeanNameAware接口、BeanClassLoaderAware接口、BeanFactoryAware接口,如果实现了,就表示当前对象必须实现该接口中所定义的setBeanName()、setBeanClassLoader()、setBeanFactory()方法,那Spring就会调用这些方法并传入相应的参数(Aware回调)利用该类的构造方法来实例化得到一个对象(但是如何一个类中有多个构造方法,Spring则会进行选择,这个叫做推断构造方法)

2023-11-26 10:54:21 691

原创 RocketMQ学习笔记

rocketMQ的学习笔记

2023-10-11 23:05:08 1223

原创 POI下载excel通用方法

最近遇到一个业务是需要下载excel,使用POI,这里记录一下实现过程。

2023-07-09 18:43:28 1977

原创 redis与分布式锁浅谈

背景:最近遇到一个生产问题,分布式部署了十几条服务器,有个业务过期的定时任务会每天发邮件提醒用户,然而用户最近反馈,每天收到好几封提醒邮件,于是排查多发的原因。指查询一个一定不存在的数据,由于缓存是不命中,将去查询数据库,但是数据库也无此记录,我们没有将这次查询的null写入缓存,这将导致这个不存在的数据每次请求都要到存储层去查询,失去了缓存的意义。加锁大量并发只让一个去查,其他人等待,查到以后释放锁,其他人获取到锁,先查缓存,就会有数据,不用去db。设置锁的自动过期,即使没有删除,会自动删除。

2023-06-08 22:46:21 1730

原创 zookeeper的安装使用

①修改一、dataDir=/usr/local/zookeeper/apache-zookeeper-3.8.0-bin/zkData。启动:在/usr/local/zookeeper/apache-zookeeper-3.8.0-bin/bin目录下执行。查看:在/usr/local/zookeeper/apache-zookeeper-3.8.0-bin/bin目录下执行。在/usr/local/zookeeper/apache-zookeeper-3.8.0-bin/zkData创建。

2023-05-22 22:57:49 2537

原创 cassandra学习笔记

cassandra学习笔记

2023-05-15 21:23:00 1194

原创 openLdap2.4.44的安装部署

openldap的安装卸载集群权限等百科全书

2023-04-18 22:57:57 994

原创 elasticsearch 7.9.3知识归纳整理(六)之 kibana图形化操作es指南

kibana图形化操作es指南

2023-01-05 21:25:31 2260

原创 elasticsearch 7.9.3知识归纳整理(五)之 es的索引生命周期管理

es的索引生命周期管理

2023-01-05 21:11:40 6476 3

原创 elasticsearch 7.9.3知识归纳整理(四)之 java实现深分页scroll

java实现深分页scroll

2023-01-04 22:55:51 1392

原创 elasticsearch 7.9.3知识归纳整理(三)之 java实战操作es(rest-high-level)

java实战操作es

2023-01-03 22:38:41 3591

原创 elasticsearch 7.9.3知识归纳整理(二)之 es基本原理及使用kibana操作es的常见命令

es基本原理及使用kibana操作es的常见命令

2023-01-02 23:04:18 8165

原创 elasticsearch 7.9.3知识归纳整理(一)之 es,kibana,ik的下载安装

es,kibana,ik的下载安装

2022-12-30 23:19:50 2563

原创 设计模式之装饰器模式

设计模式之装饰器模式

2022-11-02 23:07:45 361

原创 设计模式之工厂模式

设计模式之简单工厂模式

2022-11-01 22:39:10 414

原创 设计模式之策略模式

设计模式之策略模式--小试牛刀

2022-10-31 23:01:08 277

原创 设置接口调用超时时间的N种办法

接口超时时间设置

2022-10-30 22:33:23 15449

原创 mybatis使用interceptor实现字段加解密

mybatis使用interceptor实现数据入库加密,查询解密的过程

2022-09-22 21:40:12 3229 11

原创 saas化多租户-动态数据源

多数据源AbstractRoutingDataSource

2022-09-06 22:55:13 1400 6

原创 设计模式之代理模式

代理模式:为一个对象提供一个替身,以控制对这个对象的访问。即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的 功能操作,即扩展目标对象的功能。被代理的对象可以是远程对象、创建开销大的对象或需要安全控制的对象代理模式有不同的形式, 主要有三种静态代理、动态代理(也叫JDK代理或接口代 理)和Cglib代理(可以在内存动态的创建对象,而不需要实现接口, 他是属于 动态代理的范畴)

2022-08-21 22:22:12 489

原创 springboot参数校验的三种方式

springboot校验请求参数的3种方法

2022-08-13 00:10:08 7255

原创 react按需引入样式和自定义主题

react按需引入样式和自定义主题

2022-06-05 11:11:32 733

原创 react学习笔记

react学习笔记

2022-05-29 23:07:39 483

空空如也

空空如也

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

TA关注的人

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