自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 IDEA启动时,电脑非常的卡

JVM在运行时会回收新生代和老年代的垃圾,新生代无法回收的对象,比如:回收15次都没有回收的、对象很大,超过新生代的50%,就会将这些对象放到老年代,陆陆续续的老年代装满了的话,就会对老年代的对象进行回收,回收的时候就会触发stop the word,就会将所有的资源都拿去回收老年代的对象,多以就很卡,因此,我们调整IDEA的内存大小,就是增加新生代和老年代的内存大小,这样做的目的就是减少垃圾回收。把启动内存调大一点就行了,反正要超过你平时使用IDEA时使用到的内存大小就行。

2024-03-13 16:39:25 432

原创 IDEA如何切换git账户

IDEA切换Git账户

2024-03-13 16:14:58 3921

原创 索引的设计原则(MySQL)

索引的设计需要遵循一些原则,创建索引时遵循这些原则,有利于提升查询效率。

2024-02-01 07:24:28 402

原创 栈-后进先出

栈只允许访问一个数据项:即最后插入的一个元素。只有移除最后一个元素之后,才能访问倒数第二插入的元素。

2024-01-22 07:20:09 451

原创 RabbitMQ-消息延迟

当生产者将消息发送到exchange1,然后交换机将消息路由到队列queue1,但是队列queue1没有消费者,所以当该队列里面的值过期时,就会将消息发送到死信交换机exchange2,进而到达死信队列,最后被消费。从而达到了延迟消息的目的。一个队列接收到的消息有过期时间,消息过期之后,如果配置有死信队列,消息就会进去死信队列。DelayExchange的本质还是官方的三种交换机,只是添加了。因此使用时只需要声明一个交换机,交换机的类型可以是任意类型,然后。

2024-01-21 09:23:00 762 1

原创 如何保证支付服务和交易服务之间订单状态的一致性?

2、其次,为了保证消息的可靠性,采用了生产者确认、消费者确认、消费者重试的机制等策略,确保了消息投递和处理的可靠性。同时开启消息的持久化,避免因为MQ宕机导致消息丢失。1、首先,支付服务在完成订单支付以后,会通过MQ给订单服务发送一个消息,让订单服务完成订单状态的同步。3、最后,业务做了幂等性判断,避免因为MQ的重复消费导致订单状态异常。

2024-01-20 18:41:55 651

原创 RabbitMQ-业务的幂等性

消费者拿到id之后,保存到数据库,后续消费时,需要查数据库进行比较,因此这种方案的缺点就是有业务的入侵,对性有一定的影响。

2024-01-20 18:35:34 835 1

原创 RabbitMQ-消费者确认机制

消息失败之后会重新入队,然后再次异常,再次入队,无限循环,这会导致mq消息处理飙升,带来不必要的压力。为了缓解这种压力,利用Spring的retry机制,在消费者出现异常的情况下,利用本地重试,重试次数用完之后,再进行消息的投递或者消息的拒绝。

2024-01-20 17:57:14 1097

原创 RabbitMQ-数据持久化

在控制台中,这个delivery_ mode 的值为2时,就表示这个消息是持久化的。手动发消息的时候,可以选择这个值,可以看到他的枚举。SpringAMQP调用时是默认持久化的。

2024-01-20 16:06:20 981 1

原创 RabbitMQ-生产者可靠性

这种超时重连的方式是阻塞式的,后面的代码没办法执行,如果说业务要求比较严格,则需要禁止使用;如果必要使用的情况下,合理设置重连时间。

2024-01-20 08:08:08 1414

原创 查看Docker安装的RabbitMQ的版本

1、进入容器2、查看版本。

2024-01-19 10:39:01 948

原创 插入排序-insertSort

具体过程是,先将标记元素的值存储起来,然后用标记元素的值和有序数组的最后一个元素比较,如果有序数组的值大于标记数组,则需要将有序数组的比较值赋值到标记元素的位置,随后继续比较有序数组的其他值,当有序数组的值没有了,或者遇到一个值标记值小,那么此时就需要停下来了,因为已经找到了标记值的位置,此时只需要将标记元素的值放到此处即可。与冒泡排序和插入排序一样,也是两个元素比较;时间复杂度为O(N^2),但是相比冒泡排序和选择排序,速度更快。

2024-01-18 19:46:16 462

原创 选择排序-SelectSort

从数组的最左边开始,将数组的第一个元素记录到临时变量中,然后开始循环,循环的目的是找出数组中最小的值,然后将它赋值给临时变量,并且记录这个最小值的下标,一轮循环完毕后,比较最小值的下标和最外层循环的起始下标是否相等,如果不相等,起始下标对应的值和最小值进行交换,得到的数组中,最左边的值就为最小值。两层循环,外层循环是控制循环的次数,也就是比较元素的个数,内层循环是比较两个元素的大小,因此,时间复杂度为O(N^2).

2024-01-18 09:09:54 351

原创 冒泡排序-BubbleSort

从数组的左边开始,比较两个元素的大小,当左边大于右边时,更换左右元素位置,否则不改变;接着向右移动一步,比较第二个元素和第三个元素的大小,重复上述操作,直到最后一个元素,此时,最大的元素就已经移动到了最右边;然后进行下一轮比较,但是下一轮比较时,不需要比较最后一个元素了。

2024-01-18 08:40:52 612

原创 个人常用命令记录

进入docker容器。# 查看端口是否放行。# 重启docker。

2024-01-18 07:53:32 358

原创 RabbitMQ入门

MQ是消息队列(MessageQueue)

2024-01-17 17:16:06 1679

原创 Docker安装RabbitMQ

4、开发云服务器端口。15672和5672。

2024-01-17 11:00:35 444

原创 Spring声明式事务失效原因总结

例如:service层的类上面没有加@Service注解,导致这个Bean没有被Spring管理,那么注解也是会失效的。解决办法:将B()方法写到一个新的类里面,交给Spring管理,然后A方法使用外部调用的方式调用B方法。例如:MySQL中 ,MyISAM 引擎是不支持事务,要支持事务都会使用 InnoDB引擎。例如:类中有方法A(),方法B(),A调用了B,B方法上使用了事务注解,此时事务会失效。事务注解修饰的方法不是公共的,事务也会失效。如果业务代码里面的异常被捕获,事务也会失效。

2024-01-16 10:37:32 545

原创 Spring-AOP详解

当需要为多个不具有继承关系的对象引入一个公共的行为,例如:日志、安全检测等,起初我们只有在每个对象里面引用这些公共的行为,但是这样做会导致程序出现大量的重复代码,不便于维护。//参数类Class<?//操作类型@Aspect@Component@Resource/*** 定义切面*//*** 环绕切点* @param*///注解修饰的方法的返回结果//切面逻辑,收集日志什么的//这个别忘记了//标准三部曲,拿取注解//获取方法参数。

2024-01-16 10:19:27 516

原创 @Autoware和@Resource区别

(1)@Autowired来自Spring框架,因此只对Spring框架的IOC容器生效,如果涉及到更换框架,需要修改代码。(2)@Resource的注入顺序刚好相反,先按照bean的名字(byName),再按照bean的类型(byType)。(1)@Autowired的注入顺序是先按照bean的类型(byType),再按照bean的名字(byName)。(1)@Autowired可以作用在属性上,构造函数上,setter方法上。(2)@Resource是JDK提供的,是一种规范,所有的IOC容器都支持。

2024-01-16 07:57:27 744

原创 MySQL分库分表

加入MyCat中间件之后,应用程序只需要访问MyCat即可,底层的访问数据库的逻辑,都是由MyCat做的,但是我们需要配置下。

2024-01-14 15:21:23 501

原创 MySQL主从复制

主库将DDL语句和DML语句操作通过二进制文件的形式传递给从库,从库执行二进制文件,实现主从信息同步。

2024-01-14 11:15:14 433

原创 MySQL的各种日志

简称BINLOG日志,记录了所有的DDL(数据库定义语言)和DML(数据操作语言)语句,但是记录SELECT语句和SHOW语句。

2024-01-13 11:21:49 694

原创 Docker-阿里云镜像配置

刚安装的docker一般没有docker/daemon.json这些,需要自己新建。重启docker: systemctl restart docker。重新加载配置: systemctl daemon-reload。

2024-01-12 18:00:07 468

原创 Dcoker构建部署Java项目过程

使用Dcoker构建部署Java项目,发布到服务器。

2024-01-12 15:55:59 1939

原创 EasyExcel+多线程实现大数据量

第二点其实也不用担心,只需要把BATCH_COUNT参数传进new PageReadListener()的构造函数就可以了,这样每次读取数据到内存中的数量就是BATCH_COUNT条,默认BATCH_COUNT=100,我这里设置成一千,最后不足一千也会读取完然后入库。在没有任何校验逻辑的情况下,导入了90万数据,时间大概半分钟多一点,速度还是很快的。这里应该是会涉及到数据库连接池的问题,需要限制连接的数量,不能将资源都分给文件上传。2、批量入库问题,如果最后一批数据不足临界值怎么解决。

2024-01-11 09:39:31 1148

原创 多线程中锁的优化

锁的再设计和锁优化。

2024-01-10 09:17:58 372

原创 总结多线程的各种锁

举例:当我们使用非公平锁时,如果线程A释放锁之后,本来应该唤醒队列中的线程B,此时却被没有进入到阻塞队列的线程C截胡了,线程C竞争到锁之后就直接执行业务逻辑,就不需要再进入到阻塞队列了,这样就省去了后续再唤醒线程C而带来的性能开销,当然,这对于原本需要唤醒的线程B是不公平的,但是却提升了锁竞争的性能。悲观锁在更新数据时,认为其它线程会更新数据,因此会加锁,别的线程想要修改数据,就必须获取锁,获取不到锁就被阻塞。线程在抢占到一个互斥锁资源后,在释放锁之前,再去竞争同一把锁时,无需等待,只需要记录重入的次数。

2024-01-09 19:37:01 1246

原创 Volatile变量

当变量被Volatile变量声明后,编译器与运行时都会注意到这个变量是共享的,因此不会将该变量上的操作和其他内存操作一起重排。变量的值时,该线程会对这个变量进行写操作,然后插入一个写内存屏障,接着其他线程对这个变量的读操作会被重排序到写内存屏障之后。在没有使用volatile的情况下,操作系统指令重排的情况下,可能会造成2和3顺序交换,就会导致一个没有初始化的对象引用暴露出来。确保变量的更新能够及时的通知到其他线程,读取时能获得该变量的最新值。时,JVM会确保对这个变量的读写操作具有原子性。

2024-01-09 10:44:10 404

原创 显示锁-ReentrantLock

非公平锁则是让线程可以”插队“,在非公平锁的情况下,新来的线程只有在锁被别的线程持有时,才会进入队列,不然不会进入队列,而是立即参与竞争,如果竞争成功,则省去了线程状态切换的开销,这说明了某些情况下,非公平锁比公平锁性能要好。但是,非公平锁会出现饥饿现象。只有在内置锁无法满足要求的情况下,才应该去考虑ReentrantLock,ReentrantLock作为一种高级的备选方案,选择它的原因是因为它的高级功能。但是在激烈竞争的情况下,线程从内核态转变为用户态存在着严重的延迟,此时会带来性能的影响。

2024-01-09 09:13:24 367

原创 多线程-synchronized详解

当某个线程尝试获取其它线程已经持有的锁时,尝试获取锁的线程就会阻塞。但是,内置锁synchronized是可重入的,如果某个线程尝试获取由自己已经持有的锁时,请求成功。另外,关键字synchronized修饰的方法,整个方法体就是同步代码块,锁的对象是调用当前方法的对象;需要注意的是,静态方法以对象的字节码文件为(.class文件)作为锁对象。1、基本作用:Java提供了一种内置的锁机制来支持原子性,同步代码块(Synchronized Block )锁重入表示获取锁的粒度是线程。(1)编写一个同步方法。

2024-01-08 20:37:00 500

原创 多线程-生产者消费者模型

1、场景介绍:厨师和吃货的例子,吃货吃桌子上的面条,吃完让厨师做,厨师做完面条放桌子上,让吃货吃,厨师如果发现桌子上有面条,就不做,吃货发现桌子上没有面条就不吃。

2024-01-08 18:07:18 496

原创 线程实现方式Callable_获取线程的返回结果

继承Thread类实现Runnable接口实现Callable接口三种方式各有千秋,使用Thread方式实现简单,但是扩展性较差,因为Java是单继承方式,限制了他的发挥,此时可以使用Runnable方式实现,但是这两种方式都无法获取到线程的返回值,此时就可以使用Callable实现方式了。

2024-01-07 15:50:43 776

原创 AOP切面记录日志-实操

记录日志的就是把很多重要的数据给记录下来,写到数据库中;可以写一个方法,组装好之日信息的参数穿进去,但这样做不是很优雅,因为对于日志来说,不是业务逻辑代码的一部分,不应该影响到业务代码的,所以,使用切面正好解决了这个问题。

2024-01-06 17:40:48 499

原创 分布式事务解决方案-Seata

(1)如果是Seata管理的事务,框架提供了一个全局锁,在第一阶段执行分支事务时,不仅需要获取数据库的DB锁,还需要获取框架的全局锁,全局锁表示在全局事务提交之前,该数据只能由获取全局锁的事务操作,因此,虽然事务提交之后释放了DB锁,被别的事务获取到了,但是别的事务因为被Seata管理,也需要获取这行数据的全局锁,因此导致数据无法被更改;(2)如果更改数据的事务不是Seata管理的,那么在操作数据时,就只需要获取DB锁,不需要获取框架的全局锁,那么还是机会存在脏写的问题,虽然几率很小,但是依然存在;

2024-01-05 16:56:38 817

原创 Sentinel整合OpenFeign

4、ItemClient上添加openFeign注解的属性fallbackFactory = ItemClientFallbackFactory.class)需要实现FallbackFactory接口,其中ItemClient为客户端接口。这样就可以在Sentinel里面配置限流了。2、 编写一个工厂类。

2024-01-04 21:25:32 826

原创 Sentinel使用

所有的准备工作都做好了,就可以进入到Sentinel的具体使用上了,这里还需要一个测试工具叫做jmeter,是一个很好的测试工具,专门针对并发的,准备好以后,就可以直接开干了。

2024-01-04 20:04:52 1373

原创 SpringBoot整合sentinel

项目重启,重启之后项目会和sentinel控制台关联,但是需要本地项目有访问之后,才能有数据监控。

2024-01-04 15:50:15 917 1

原创 Docker安装sentinel控制台

按照我的命令你是执行不成功的,因为没有网桥,此时你需要先将你创建的这个docker 容器删掉。--network是你自己建立的网桥,不加这一行也行,就是默认网桥bridge。把网桥去掉,或者创建一个自己的网桥,把参数改过来,再执行。查看启动情况,启动完成后需要开放防火墙,开发8858端口。http://IP地址:8858。# 查看端口是否放行。

2024-01-04 13:05:24 950

原创 Nacos热更新的的两种方式

然后在上面的类中加一个numberTwo属性就可以了,是不是很方便管理,不一样的前缀,添加不一样的配置类即可,很好归类。要实现配置的热更新,一定要加上类上面的@RefreshScope注解。1、必须引入配置中心的依赖。

2024-01-04 03:40:13 476

空空如也

空空如也

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

TA关注的人

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