自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Redis的分布式锁详解

(3)为了有效解决既保证锁完全有效性 和 性能高效问题:antirez又提出了“延迟重启”的概念,redis同步到磁盘方式保持默认的每秒1次,在redis崩溃单机后(无论是一个还是所有),先不立即重启它,而是等待TTL时间后再重启,这样的话,这个节点在重启前所参与的锁都会过期,它在重启后就不会对现有的锁造成影响,缺点是在TTL时间内服务相当于暂停状态;redisson在获取锁之后,会维护一个看门狗线程,在每一个锁设置的过期时间的1/3处,如果线程还没执行完任务,则不断延长锁的有效期。

2024-09-02 14:49:36 1611

原创 MYSQL中并发事务带来的问题及解决方法

使用合适的事务隔离级别: 将数据库的事务隔离级别设置为合适的级别,如可重复读(Repeatable Read)或串行化(Serializable),这样可以确保一个事务在读取数据时,不会受到其他事务的更新或删除操作的影响,从而避免不可重复读问题的发生。死锁可能会造成系统的停滞,影响系统的性能和可用性。使用合适的事务隔离级别: 将数据库的事务隔离级别设置为合适的级别,如串行化(Serializable),这样可以确保一个事务在读取数据时,不会受到其他事务的插入、更新或删除操作的影响,从而避免幻读问题的发生。

2024-09-02 13:13:29 1199

原创 Spring Boot之事务(事务传播机制、嵌套事务、事务隔离机制详解)

student表无数据插入。因为内外层方法在同一个事务中,内层只要抛出了异常,这个事务就会被设置成rollback-only,即使外层try-catch内层的异常,该事务也会回滚。因为内外层方法在同一个事务中,内层只要抛出了异常,这个事务就会被设置成rollback-only,即使外层try-catch内层的异常,该事务也会回滚。1.脏读:脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。网上有些文章的例子给错了!

2024-09-02 10:08:53 1197

原创 RabbitMQ如何避免消息重复投递或重复消费?

这些插件可以在消息发送时自动进行去重操作,根据消息的内容生成唯一的消息ID,并在发送之前检查是否已存在相同ID的消息,从而避免重复发送。使用数据库或缓存来记录已经发送的消息的标识,每次发送消息之前先查询是否已存在相同标识的消息,如果存在则不发送。消费者确认:消费者在处理完消息后,可以发送确认消息给RabbitMQ,告知消息已经被正确处理。RabbitMQ收到确认消息后,会将该消息从队列中删除,避免消息的重复消费。消息全局ID或唯一标识:每次消费消息之前,根据消息ID去判断该消息是否已消费过。

2024-08-23 11:01:07 1248

原创 MQ如何保证消息不丢失?

如果rabbitmq没能处理这个消息,会回调你一个nack接口,告诉你这个消息失败了,你可以进行重试。所以comfirm机制其实是一个异步监听的机制,是为了保证系统的高吞吐量,这样就导致了还是不能够100%保障消息不丢失,因为即使加上了confirm机制,消息在MQ内存中还没有刷盘到磁盘就宕机了,还是没法处理。而且持久化可以跟生产的confirm机制配合起来,只有消息持久化到了磁盘之后,才会通知生产者ack,这样就算是在持久化之前rabbitmq挂了,数据丢了,生产者收不到ack回调也会进行消息重发。

2024-08-23 10:55:23 1969

原创 MQ怎么处理消息积压

综上所述,解决消息队列中大量消息堆积的问题需要综合考虑消费者数量、消费者逻辑优化、消息队列容量、消息过期设置、监控报警机制等多个方面,根据具体情况选择合适的解决方案来解决问题。增加消息队列的容量:增加消息队列的容量可以存储更多的消息,缓解消息堆积的压力。设置消息过期时间:对于一些长时间未被消费的消息,可以设置消息的过期时间,使其在一定时间后自动过期并被丢弃,从而避免消息长时间堆积。增加消费者数量:增加消费者数量可以提高消息消费的速度,缩短消息队列中消息的处理时间,从而减少消息堆积的程度。

2024-08-23 10:53:06 622

原创 使用Docker部署青龙

另外,这个地址在24小时内会发生随机变化,更适合于临时使用。青龙面板的功能多多,可以帮助我们自动化处理很多需要手动操作的事情,比如京东领京豆,阿里云盘签到白嫖vip、掘金签到等等,本教程使用Docker搭建并附带公网访问方法,上面我们成功部署了青龙面板,在本地可以随意访问,但是如果您是将青龙面板部署在家中的设备上,想在工作期间临时使用青龙面板,就需要将本地服务映射至公网才能实现。,点击左侧的预留,选择保留二级子域名,设置一个二级子域名名称,点击保留,保留成功后复制保留的二级子域名名称。

2024-06-30 23:06:13 1814

原创 SpringBoot基础

在Spring框架中,有四个核心的元注解(meta-annotations)用于创建自定义注解。@SpringbootApplication //申明当前类是一个Springboot项目启动类。SpingBoot项目的标识parent标签继承Spring Boot的启动项目需要写版本号。@EnableAutoConfiguration //自动配置。

2024-06-12 18:40:31 660

原创 SpringBoot三层架构

IOC:inversion of Control 控制翻转将对象创建权利由Spring进行管理,创建当前类的对象,放在Spring容器中控制:对象创建,属性赋值,对象生命周期管理【Bea的生命周期】- 统称为管理对象反转:把管理对象的权限转移给了容器实现,由容器完成对象的管理正转:使用new构造方法创建对象,开发人员掌握了对象的全部过程注解:@Repos@AutoWired:依赖注入,从容器中去获取该接口实现类的对象给当前属性赋值@Service:将当前对象交给Spring进行管理。

2024-06-12 18:39:27 1462

原创 09_JavaWeb_Mybatis

当你发送sql语句的时候,他会现在一级缓存进行查询,如果没有找到,则去二级缓存中查找,二级缓存依然没有找到,就会发送sql语句到数据库中进行查找,把查找的数据分别放到一级缓存和二级缓存各一份。JDBC(Java DATEBASE CONNECTION):Java操作数据库技术,他是JDK提供的接口,没有提供任何实现,JDBC的实现是由各大数据库厂商实现的。如果找到了,直接返回对应的数据,如果没有找到则发送sql语句到数据库中进行查询,把查询到的数据放到一级缓存中(key:sql value:查询的数据)

2024-06-02 10:56:28 1611

原创 常用依赖包

- 使用Springboot首先要继承一个父模块声明式依赖管理SpringBoot相关的jar包-->-- 导入Test依赖 -->-- mysql依赖引入 -->--德鲁伊连接池依赖引入-->-- 导入web依赖 -->--mybatis依赖-->--Lombok引入-->

2024-06-02 10:55:49 363

原创 08_JavaWeb_MySQL

外连接:以一张表为主表 主表所有数据全部显示 ,辅表满足条件的显示,不满足的以null填充。2、一致性:在操作事务之前,数据总和要和操作完事务之后数据总和是一致的【数据不能丢失】3、隔离性:A事务在操作数据的时候,B事务是不能干扰B事务操作的【事务与事务是隔离的】人为记载---->Excel文件存储---->数据库存储---->非关系型数据库。INSERT INTO 表名(xx,xxx,xx,xx,xx,xx)2.MyISAM:不支持事务,不支持外键,不安全,但性能高。

2024-06-02 10:55:09 949

原创 07_JavaWeb_SpringBoot-进阶

Autowire是Spring框架提供的注解而@Autowire 先匹配类型,类型匹配多个再根据名字匹配。IOC:控制反转,把创建对象的权利交给Spring进行管控,这种创建对象权利的反转,我们叫做控制反转。@Autowired是Spring框架提供的注解@Resource是Java提供的注解。Spring:Spring就是一个Bean容器【创建对象就叫做Bean对象】框架。DI:依赖注入,把Spring创建的对象,给字段注入值,这种现象就叫做依赖注入。Spring创建的对象默认是单例的。

2024-06-02 10:54:03 325

原创 06_JavaWeb_SpringBoot基础

然后分别导入Web 和 Test 的依赖-- 使用Springboot首先要继承一个父模块声明式依赖管理SpringBoot相关的jar包-->

2024-06-02 10:52:47 354

原创 05_JavaWeb_框架技术-XML&Maven

添加自定义依赖需要添加标签//:这个标签指定了依赖项的组织或者项目的唯一标识符//:这个标签指定了依赖项的实际项目名或模块名//:这个标签指定了依赖项的版本号。它用于确保在构建项目时使用指定版本的依赖项。

2024-06-02 10:47:55 318

原创 04_JavaWeb_Ajax请求、BootStrap

前端框架:插件的集合,把功能封装成现成的组件(对js封装 html封装 css封装)概念:用于快速开发web应用程序 和 网站的响应式前端框架。justify-content-* 类:用于水平对齐元素。align-items-* 类:用于垂直对齐元素。后端的框架:一堆jar包。

2024-06-02 10:47:03 323

原创 03_JavaWeb_JQuery框架

jQuery获取的节点得到的都是jQuery对象

2024-06-02 10:45:54 272

原创 02_JavaWeb_JS基础

Dom编程:把每个页面都是一个文档,文档中的内容属性,都看成一个节点,通过document对象可以获取网页上的任意一个节点,并且可以对任意节点进行增删改查。

2024-06-02 10:44:57 268

原创 01_JavaWeb_HTML

1.HTML的概念:超文本标记语言 超文本(支持音频视频,图片,超链接,样式....),HTML是弱语言2.常见的标签img标签: src:链接地址 网络路径: https:// http:// 本地路径 file:// 本地绝对路径(了解) 相对路径:(./ 当前路径)(../ 上一级路径) alt:链接地址不能正常显示图片,我们就显示alt对应的值 t

2024-06-02 10:43:46 153

原创 10.Java加强-Stream流、并行流、串行流

【代码】10.Java加强-Stream流、并行流、串行流。

2024-04-01 11:05:44 276

原创 9.Java加强Lambda表达式

类方法的引用语法:类名::方法名;实例方法引用语法:对象名::方法名。

2024-04-01 11:04:43 242

原创 8.Java加强-IO流

创建一个文件字节输入流需要指定读取的文件。

2024-04-01 11:03:58 651

原创 7.Java加强-File类

【代码】7.Java加强-File类。

2024-04-01 10:58:55 728

原创 6.Java加强-Map、Properties、Collections

Map是存放键值对(Entry:key value)的集合,存放的是一堆对值,key不能重复,value可以重复,一个key只能对应一个值key不能重value可以重复一个key(键)只能对应一个值clear():清空Map集合containsKey(Object key):判断该集合中是否存在传入的keycontainsValue(Object value):判断该集合中是否存在传入值get(Object key):根据传入的键,获取对应的值。

2024-04-01 10:56:47 1967

原创 5.Java加强-定时器Timer、数据结构、集合

【代码】5.Java加强-定时器Timer、数据结构、集合。

2024-04-01 10:56:15 827

原创 4.Java加强-多线程的实现-Thread类-线程安全

【代码】4.Java加强-多线程的实现-Thread类-线程安全。

2024-04-01 10:55:45 893

原创 3.Java加强-异常机制+线程的基本语法

自己定义一种异常,自己定义一个类,这个要么是Exception的子类,要么是RuntimeException的子类定义方式1.pbulic class 类名 extends Exception{//定义编译时异常或pbulic class 类名 extends RuntimeException{//定义运行时异常2.在类里面书写两个构造方法。

2024-04-01 10:55:05 467

原创 2.Java加强-常用类+正则表达式

NumberFormatException 数字格式不正确。创建一个空白可变字符字符串对象,不含有任何内容。[\d]{n,m}:表示最少n个最多m个。[\d]{n,}表示最少n个,最多不限制。根据字符串的内容,来创建可变字符串对象。[^a-z]:除了小写字母以外都可以。[^]:除了[]里面的内容都可以。^[a-zA-Z]:以字母开头。[\d]{n}:表示n个数字。[]$:以[]里面的内容结尾。:表示 0个 或 1 个。*:表示 0 个 或 多个。^[]:以[]里的内容开始。+:表示 1个 或 多个。

2024-04-01 10:54:33 899

原创 Java加强--1.常用类

只要是加了static修饰的属性或者方法,都会在调用主方法之前就会加载到内存中。alt shift + o 自动接收对象。

2024-04-01 10:53:59 1811

原创 5.JAVA进阶-面向对象-枚举、匿名内部类

【代码】5.JAVA进阶-面向对象-枚举、匿名内部类。

2024-04-01 10:07:12 533

原创 4.JAVA进阶-面向对象-接口、多态

【代码】4.JAVA进阶-面向对象-接口、多态。

2024-04-01 10:06:18 410

原创 3.JAVA进阶-面向对象-继承、抽象和方法的重写

注意:java中的类继承是单根(单,单一)继承,extends后面最多只能出现一个类 extend前是子类 extends 后是父类。有一个方法的签名(方法名/参数列表/形参列表)一致,就是方法的重写 要求:1.方法签名要一致。Overrid 在子类中有一个方法的签名(方法名/参数列表/形参列表)一致,就是方法的重写。2.重写方法(子类的方法)的访问修饰符的权限要大于等于父类该方法的访问权限。3、抽象方法使用场景:要求子类必须要重写的方法(强制子类重写方法)

2024-04-01 10:05:46 582

原创 2.JAVA进阶-面向对象-封装

可以使用通配符 * 表示指向所有类:不是导入了所有包,只有在使用到的类才会导入。/**private修饰只能在本类中访问*/属性要写单行文档注释。

2024-04-01 10:04:51 1340

原创 1.JAVA进阶-面向对象-类和对象1

方法:1、方法的声明:修饰符 + 返回值 + 方法签名 +方法体方法有static修饰 , 方法被称为静态方法或类方法2、类方法(静态方法)的调用:类名.方法()3、传参:形参,实参(传入的实际参数)4、值传递:参数的类型是基本数据类型;5、地址传递:参数的类型是引用数据类型;6、执行流程7、方法重载:方法名相同 参类列表不同8、可变参数:参数个数不确定的情况9、api的使用1.toString()快速排序2.copyOf()扩容缩容数组3.sort()将数组元素按升序排列4.copyOfRange()截取

2024-04-01 10:04:14 357

原创 宝塔面板Nginx开启Brotli压缩,提升网站加载速度

Google 认为互联网用户的时间是宝贵的,他们的时间不应该消耗在漫长的网页加载中,因此在 2015 年 9 月 Google 推出了无损压缩算法 Brotli。Brotli 通过变种的 LZ77 算法、Huffman 编码以及二阶文本建模等方式进行数据压缩,与 Gzip相比效率提升约 17-25%。答:不冲突,但是Br相对Gzip效率高但对CPU资源占用也高,如果单核机器就不建议都开了。填写完成后返回安装选项✔刚刚添加的模块提交,等待安装完成即可!打开网站查看标头若返回br即启用成功。

2024-03-01 11:57:43 515

原创 【小白教程】如何单独批量删除数据库某个数据库表中所有数据方法教程

使用方法:打开数据库或者在某些程序后台找到数据库的SQL执行功能,复制truncate table (你要删除某个数据库表中数据的数据库表名);执行了以上SQL命令 就会一次性删除你数据库某个数据库表中的所有数据。温馨提示:不是特别情况,一定要用到这个命令 不要轻易使用!请再测试数据库中测试后在进行实战删除。业务场景:开发过程中由于历史数据造成正常的功能出错,希望在某次测试之前,执行sql 批量清空所有相关的业务数据,保留表结构。如何单独的去批量删除数据库某个数据库表中所有数据。

2024-03-01 11:51:48 478

原创 Java基础-面向对象5-枚举与关键字

什么是内部类,把一个类定义在另一个类的内部,把里面的类称之为内部类,把外面的类称之为外部类。n 静态内部类:使用static 修饰的内部类,那么访问内部类直接使用外部类名来访问。n 实例内部类:没有使用static 修饰的内部类,访问内部类使用外部类的对象来访问。内部类可以看作和字段、方法一样,是外部类的成员,而成员可以有static 修饰。概念:关键字,修饰符,表示最终的。④ 可以在类加载的时候做一些初始化的操作(例如JDBC的驱动的加载)n 匿名内部类:特殊的局部内部类,适合于仅使用一次使用的类。

2024-02-28 12:23:18 284

原创 Java基础-面向对象4-接口和多态

多态概念:将子类对象装到父类的变量中保存(向上造型/向上转型),当父类变量调用方法的时候,如果子类重写了该方法,会直接执行子类重写之后的方法。和抽象类一样,接口是不能创建对象的,此时必须定义一个类去实现接口,并覆盖接口中的方法,这个类称之为实现类,类和接口之间的关系称之为实现关系(implements)接口可以认为是一种特殊的类,但是定义类的时候使用class 关键字,定义接口使用interface 关键字。多态作用:以屏蔽子类差异性,提高代码的扩展性(通过代码理解,不要从字面理解)父类变量.方法();

2024-02-28 12:22:37 155

原创 Java基础-面向对象3-继承、抽象和方法的重写、接口

抽象类的使用场景: 一般作为业务父类(基类,模板类),且业务父类中,有的方法需要所有子类强制重写。但是,私有化成员不能直接通过子类对象直接访问,但是可以通过继承过来的公共方法间接访问。抽象方法作用:为了保证业务逻辑合理性,强制子类根据自己的需求,重写方法。2.多重继承(多层级的继承), 一个类可以有子类,子类还可以子类...方法覆写语法:直接将父类中要重写的方法复制到子类后,重写方法体即可。抽象方法:没有方法体,且用abstract修饰的方法。2. 并不是每一个子类都要重写父类继承过来的方法。

2024-02-28 12:21:57 164

原创 Java基础-面向对象2-封装、继承

2) 在本类之间,构造方法之间的相互调用this()调用无参数的构造方法,this(...)可以添加参数,表示调用有参数的构造方法 (掌握)java.lang (java的核心包--基本包):使用这个包里面类是不需要的导包。1) this不能在静态的方法中使用: 无法从静态上下文中引用非静态成员this。public最大权限,被其修饰的成员,在任意目录下,都可以访问到(所有类)java.awt/javax.swing(java的图形化界面)3. 只是获取数据的时候。java/ javax(java增强包)

2024-02-28 12:21:07 272

空空如也

空空如也

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

TA关注的人

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