- 博客(64)
- 收藏
- 关注
原创 一文详解Java中的各种锁——synchronized、悲观锁、乐观锁、公平锁、非公平锁、死锁等
synchronized和Lock的区别;什么时候用公平锁?什么时候用非公平锁?;产生死锁的原因等
2024-10-18 16:05:03 1266
原创 Redis的持久化机制
RDB因为是二进制文件,在保存的时候体积也是比较小的,它恢复的比较快,但是它有可能会丢数据,我们通常在项目中也会使用AOF来恢复数据,虽然AOF恢复的速度慢一些,但是它丢数据的风险要小很多,在AOF文件中可以设置刷盘策略,我们当时设置的就是每秒批量写入一次命令。Reids处理的每一个写命令都会记录在AOF文件,可以看做是命令日志文件。AOF的含义是追加文件,当Redis操作写命令的时候,都会存储在这个文件中,当Redis实例宕机恢复数据的时候,会从这个文件中再次执行一遍命令来恢复数据。
2024-10-30 23:12:06 974
原创 什么是Java内存模型JMM?
是Java虚拟机(JVM)定义的一种规范,用于描述多线程程序中变量(包括实例字段、静态字段和数组元素)如何在内存中存储和传递的规则。规范了线程何时会从主内存中读取数据、何时会把数据写回主内存。,从而避免由于硬件和编译器优化带来的不一致问题。JMM的核心目标是确保多线程环境下的。
2024-10-29 22:31:33 218
原创 RabbitMQ的高可用机制有了解过吗
我们可以采用仲裁队列,与镜像队列一样,都是主从模式,支持主从数据同步,主从同步基于Raft协议,强一致。并且使用起来也非常简单,不需要额外的配置,在声明队列的时候只要指定这个是仲裁队列即可。RabbitMQ的高可用机制有了解过吗。RabbitMQ集群是。那出现丢数据怎么解决呢?
2024-10-29 10:25:07 219
原创 RabbitMQ如果有100万消息堆积在MQ,如何解决(消息堆积怎么解决)
当生产者发送消息的速度超过了消费者处理消息的速度,就会导致队列中的消息堆积,直到队列存储消息达到上限。之后发送的消息就会成为死信,可能会被丢弃,这就是消息堆积问题。使用工作队列模式,设置多个消费者消费同一个队列中的消息。可以使用RabbitMQ惰性队列,惰性队列的好处主要是。第一:提高消费者的消费能力,可以使用多线程消费任务。第二:增加更多消费者,提高消费速度。第三:扩大队列容积,提高堆积上限。
2024-10-28 23:22:18 236
原创 RabbitMQ中死信交换机?(RabbitMQ延迟队列有了解过吗)
如果该队列配置了dead-letter-exchange属性,指定了一个交换机,那么队列中的死信就会投递到这个交换机中,而这个交换机称为。TTL,也就是Time-To-Live。(Dead Letter Exchange,简称DLX)。当一个队列中的消息满足下列情况之一时,可以成为。延迟队列=死信交换机+TTL(生存时间)死信(dead letter)
2024-10-28 23:04:31 518
原创 如何解决RabbitMQ消息的重复消费问题
面试官:如何解决MQ消息重复消费的问题候选人:我们当时是设置了自动确认机制,当服务还没来得及给MQ确认的时候,服务宕机了,导致服务重启之后,又消费了一次消息。这样就重复消费了。
2024-10-27 22:35:35 467
原创 一文带你搞懂RabbitMQ 如何保证消息不丢失
包含MQ的使用场景;什么情况下消息容易丢失;解决消息丢失的方法;面试题:RabbitMQ如何保证消息不丢失
2024-10-27 22:02:14 480
原创 谈谈你对AQS的理解
AQS 是多线程同步器,它是 JUC 包中多个组件的底层实现,如 Lock、CountDownLatch、Semaphore等都用到了AQS。从本质上来说,AQS 提供了两种锁机制,分别是排它锁,和共享锁。
2024-10-26 23:00:47 154
原创 单例模式中,饿汉和懒汉的区别,怎么保证线程安全?
饿汉式:指全局的单例实例在第一次被使用时构建。不存在线程安全问题,只在类加载(JVM启动)的时候创建。懒汉式:延时加载,在需要的时候才创建对象。(饿汉式单例性能优于懒汉式单例);多线程中线程不安全,当多个线程同时调用单例的get方法时,就会同时去new单例对象,所以无法保证单例性。
2024-10-26 18:27:37 336
原创 Redis和MySQL如何保证数据一致性
如果是先删除缓存,再更新数据库,理想情况是应用下次访问 Redis 的时候,发现Redis 里面的数据是空的,就从数据库加载保存到 Redis 里面,那么数据是一致的。如图,在这样一个架构中,会出现一个问题,就是一份数据,同时保存在数据库和 Redis 里面,当数据发生变化的时候,需要同时更新 Redis 和Mysql,由于更新是有先后顺序的,并且它不像 Mysql中的多表事务操作,可以满足 ACID 特性。如果先更新数据库,再更新缓存,如果缓存更新失败,就会导致数据库和 Redis。
2024-10-25 22:14:18 927
原创 SpringBoot的约定大于配置,你的理解是什么?
首先, 约定优于配置是一种软件设计的范式,它的核心思想是减少软件开发人员对于配置项的维护,从而让开发人员更加聚焦在业务逻辑上。中,我们不需要再去做这些繁琐的配置,SpringBoot已经自动帮我们完成了,这就是约定大于配置思想的体现。总的来说,约定优于配置是一个比较常见的软件设计思想,它的核心本质都是为了更高效以及更便捷地。应用,我们需要做很多和业务开发无关并且只需要做一次的配置,的自动装配机制的实现中,通过扫描约定路径下的。就是约定优于配置这一理念下的产物,它类似于。框架下的一个脚手架,通过。
2024-10-25 22:00:55 261
原创 Java中String、StringBuffer和StringBuilder的区别是什么?
String是不可变类,字符串一旦创建,其内容无法更改。:StringBuffer是线程安全的,内部使用了synchronized关键字来保证多线程环境下的安全性。:String适用于字符串内容不会频繁变化的场景,例如少量的字符串拼接操作或字符串常量。:StringBuilder也是可变的,提供了与StringBuffer类似的操作接口。:StringBuilder适用于单线程环境中需要大量修改字符串的场景,如高频拼接操作。:StringBuffer是可变的,可以进行字符串的追加、删除、插入等操作。
2024-10-24 23:44:33 405
原创 详解MySQL中的锁机制
表锁粒度过大,会锁定整个表,导致并发性能下降。而AUTO-INC锁是一种短暂的锁,仅在分配自增列时加锁,插入完成后立即释放,不会阻塞其他读写操作,性能更好。在执行此命令后,所有写操作都会被阻塞,直到锁被释放。为什么需要AUTO-INC锁,而不是直接使用表锁?3、意向锁(Intention Lock)一、MySQL锁的分类。一、MySQL锁的分类。4、AUTO-INC锁。
2024-10-23 10:56:28 528
原创 什么是死锁?形成死锁的条件是什么?如何避免死锁?
死锁是指两个或两个以上的进程在执行过程中,由于资源竞争或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,他们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在相互等待的进程称为死锁进程
2024-10-21 21:48:02 633
原创 Java中的基本数据类型和引用类型存储在JVM中那个区域?
在方法中声明的变量,即该变量是局部变量,每当程序调用方法时,系统都会为该方法建立一个方法栈,其所在方法中声明的变量就放在方法栈中,当方法结束系统会释放方法栈,其对应在该方法中声明的变量随着栈的销毁而结束,这就局部变量只能在方法中有效的原因
2024-10-21 20:21:54 281
原创 详解MySQL分库分表
分库分表的中心思想都是将数据分散存储,使得单一数据库/表的数据量变小来缓解单一数据库的性能问题,从而达到提升数据库性能的目的。
2024-10-20 17:01:03 293
原创 MySQL锁机制与InnoDB锁算法
MyISAM和InnoDB存储引擎使用的锁:MyISAM采用表级锁InnoDB支持行级锁和表级锁,默认为行级锁
2024-10-20 16:22:04 124
原创 详解CAS
CAS是Java中Unsafe类里面的一个方法,是Compare and Swap的缩写,中文翻译成比较并交换,主要功能是能够去保证在多线程的环境下对于共享变量修改的一个原子性,实现并发算法时常用到的一种技术。它包含三个操作数——内存位置、预期值及更新值。
2024-10-19 17:24:58 232
原创 一文搞懂MySQL索引
索引概述:索引(index)是帮助MySQL高效获取数据的数据结构(有序)。在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。优缺点优势劣势提高数据检索的效率,降低数据库的IO成本索引列也是要占用空间的通过索引列对数据进行排序,降低数据排序的成本,降低CPU的消耗。
2024-10-19 16:02:14 977
原创 详解MySQL存储引擎
存储引擎真正的负责了MySQL中数据的存储和提取,服务器通过API和存储引擎进行通信。不同的存储引擎具有不同的功能,这样我们可以根据自己的需要,来选取合适的存储引擎。xxx.ibd:xxx代表的是表名,InnoDB引擎的每张表都会对应这样一个表空间文件,存储该表的表结构(frm、sdi)、数据和索引。存储引擎是基于表的,而不是基于库的,所以存储引擎也可被称为表类型。InnoDB是一种兼顾高可靠性能的通用存储引擎,在MySQL5.5之后,InnoDB是默认的MySQL存储引擎。
2024-10-18 22:50:23 357
原创 线程安全、synchronized和volatile关键字
synchronized的作用是保证在同一时刻,被修饰的代码块或方法只会有一个线程执行,已达到保证并发安全的效果。volatile关键字具备两个特性,一是可见性,一是禁止指令重排。
2024-10-17 22:26:26 488
原创 详解多线程的6种状态
Timed Waiiting状态,它与Waiting状态非常相似,其中的区别只在于是否有时间的限制,在Timed Waiting状态时会等待超时,之后由系统唤醒,或者也可以提前被通知唤醒,如。线程执行结束后查看状态为TERMINATED,加sleep是为了保证在getState的时候线程已经执行结束。表示线程被创建但尚未启动的状态:当我们用。新建一个线程时,如果线程没有开始运行。方法里面的代码,那么此时它的状态就是。方法,那么线程也就没有开始执行。
2024-10-16 16:17:04 389
原创 多线程的常用方法——休眠、让步、优先级、打断、插入、守护线程
深入理解多线程的sleep、yield、join、interrupt、setDaemon等常用方法
2024-10-15 20:35:09 706
原创 创建线程的方式、线程执行原理、start和run方法的区别
一、创建线程的方式一、创建线程的方式1、通过继承Thread2、通过实现Runnable3、通过实现Callable。
2024-10-15 14:40:17 288
原创 一文搞懂进程、线程、协程以及并发、并行、串行的概念
先有进程,然后进程可以创建线程,线程是依附在进程里面的,线程里面可以包含多个协程,进程之间不共享全局变量,线程之间共享全局变量,但是要注意资源竞争的问题。
2024-10-14 21:45:40 1397
原创 MySQL基础篇笔记
事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。当在父表中删除对应记录时,首先检查该记录是否有对应外键,如果有则设置子表中该外键值为null(这要求该外键允许取null)。(与NO ACTION一致)一个事务按照条件查询数据时,没有对应的数据行,但是在插入数据时,又发现这行数据已经存在,好像出现了“幻影”。当在父表中删除/更新对应记录时,首先检查该记录是否有对应外键,如果有,则删除/更新外键在子表中的记录。
2024-10-13 23:17:14 660
原创 过滤器和拦截器的区别是什么?
请求过程:当一个请求进来,先交给Web服务器提供的过滤器,来到Servlet,同时会有一个叫做DispatcherServlet的Servlet进行执行,在DispatcherServlet中就会调用我们的拦截器,再由DispatcherServlet分发给对应的Controller来处理请求,请求处理完之后,就会从调用的链路原路返回,再回到拦截器,再回到过滤器,最终响应给客户端。,拦截器通常用来实现一些跟业务相关不是必须的一些工作,比如:身份认证与授权、接口的性能监控,跨域处理日志记录等;
2024-10-12 22:54:38 378
原创 Redis面试篇3
1、Redis的数据类型,以及每种数据类型的使用场景?2、Redis的过期策略以及内存淘汰机制。3、 缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级都了解吗?4、什么情况下可能会导致Redis阻塞?6、 Redis如何解决key冲突?7、 Redis报内存不足怎么处理?8、热点数据和冷数据是什么?5、 怎么提高缓存命中率?
2024-10-09 23:24:58 1404
原创 Redis面试篇2
1、Redis缓存刷新策略有哪些?2、Redis持久化方式有哪些?3、Redis为什么设计成单线程的?4、怎么使用Redis实现消息队列?5、说说你对Redis事务的理解。10、 如果Redis中有1亿个key,其中有10W个key是以某个固定的已知前缀开头的,如何将它们全部找出来?11、如果有大量的key需要设置同一时间过期,一般需要注意什么?9、 Redis常见性能问题和解决方案有哪些?7、什么是Bigkey?8、 说说Redis哈希槽的概念。
2024-10-08 16:16:50 1130
原创 Redis面试篇1
1、为什么要用缓存?2、什么是Redis?3、使用Redis有哪些好处?4、说一下Redis有什么优点和缺点?6、说说Redis线程模型。9、Redis的同步机制了解吗?10、pipeline有什么好处,为什么要是用Pipeline?8、为什么Redis需要把所有数据放到内存中?5、为什么要用Redis而不是用Memcached呢?
2024-10-07 23:13:26 906
原创 Gitee创建仓库,提交代码到自己的fork,合并到主分支
3.1 在项目目录中右击用Git Bash here打开,先git init创建新的空白存储库,使现有项目成为Git项目。4.1 将前端代码复制到自己仓库代码目录,注意不要剪切.git目录,在项目目录中打开Git Bash依次执行。3、在要提交的项目里面打开Git bash(或者新建一个文件夹,在里面拉取仓库代码),拉取仓库代码。3.2 克隆仓库地址,拉取新建的仓库,此时项目文件夹中会出现一个仓库名称的文件夹。4、然后将新增的代码复制到拉取下来的项目代码中。4、提交前端代码到Git。
2024-10-05 22:15:29 505
原创 强引用、软引用、弱引用、虚引用的区别
在Java中,对象的引用类型分为强引用、软引用、弱引用和虚引用,这些引用类型主要用于测定垃圾回收 (GC)何时可以收集对象。示例:虚引用常用于跟踪对象何时被从内存中删除,通常用于实现堆外内存回收,通知应用程序 对象即将垃圾回收,允许执行回收前的必要清理步骤。弱引用对象非常适合于实现Map的缓存,当对象只通过弱引用可达时,可以快速释放内存。示例:弱引用主要用于WeakHashMap,它允许在不需要强保留对象的情况下维护对象到键的映射。只要强引用存在,垃圾收集器绝对不会回收被引用的对象。
2024-10-04 22:27:43 677
原创 【JVM】双亲委派机制&打破双亲委派机制
双亲委派机制类加载器的双亲委派机制由于Java虚拟机中有多个类加载器,双亲委派机制的核心是解决一个类到底由谁加载的问题。
2024-10-01 22:29:57 916
原创 SpringBoot上传图片实现本地存储以及实现直接上传阿里云OSS
3.3复制3.1部分上传文件流的代码,点击复制,到后端相应的包 粘贴 然后会自动粘贴,并生成一个名为Demo的类。:想让上传的图片URL地址直接返回到前端的文本框中,并回显成功,图中红框部分为文本框,用来回显图片的URL地址。:前端上传的文件到后端,后端存储的是一个临时文件,方法执行完毕会消失,把临时文件存储到本地硬盘中。2、写一个上传文件的接口(注意:文件保存到本地需要写自己的本地路径)点击详情,复制文件的URL路径到前端,文件回显成功。5、运行Demo,并刷新阿里云,文件上传成功。
2024-09-30 09:06:01 843
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人