自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 每日面试题分享15:RabbitMQ中消息什么时候会进入死信交换机?

RabbitMQ中的消息有一个TTL(Time To Leave 消息存活时间),当消息在队列中达到TTL之后会被判定为过期,从而进入死信交换机。如果队列设置了最大长度,当消息数量或总大小超出队列限制时,最早进入队列的消息会被移入死信交换机。当RabbitMQ中消息变成死信时会进入死信队列,那么队列中的消息什么时候会变成死信呢?当消费者拒绝消息并且不要求重新投递时,消息会被直接投递到死信交换机。

2025-09-12 10:04:41 35

原创 每日面试题分享14:请描述MySQL的B+树中查询数据的过程

2、叶子节点的数据是以组的形式分类的,利用页目录结构,使用二分查找确定数据所在组。1、首先从根节点开始查询,根据比较数据键值和索引列键值,查找数据所在分区。3、确定分组后,遍历链表即可查询到数据。

2025-09-12 09:58:59 36

原创 每日面试题分享13:MySQL中的索引数量是否越多越好?为什么?

当我们每一次对表中数据进行增删改之后,表中的索引都要进行更新,更新是需要时间的,因此索引越多,更新的时间就越长。每建立一个二级索引需要建立一个B+树,默认每个数据页都是16KB,如果数据量很大,索引又很多,占用空间就大。MySQL中的索引数量不是越多越好,因为索引在时间和空间上都有一定成本。

2025-09-12 09:54:32 36

原创 每日面试题分享12:RabbitMQ怎么实现延迟队列?

在原队列不设置消费者,当消息达到TTL之后,会被自动转发到绑定的死信交换器,消费者在死信队列进行消费,实现延迟队列效果。在发送消息时,指定消息的延迟时间,当消息到达延迟时间后,会被转发到对应的队列供消费者消费。通过安装RabbitMQ的延迟消息插件,可以直接创建延迟交换器。2、使用RabbitMQ插件:延迟消息插件。1、TTL+DLX(死信交换器)

2025-09-12 09:48:49 26

原创 每日面试题分享11:MySQL中的索引一定有效果吗?如何排查索引效果?

在查询前使用使用EXPLAIN命令,可以查看是否使用索引,使用了哪些索引。

2025-09-11 08:44:40 325

原创 每日面试题分享10:MySQL中的回表是什么?

MySQL中的回表是指使用非聚簇索引作为查询条件时,由于非聚簇索引存储的是数据行的主键和索引列的值,无法查询其他数据。当想要查询其他数据时,需要通过主键的聚簇索引查找特定行数据,这个过程被称为回表。

2025-09-11 08:42:18 299

原创 每日面试题分享9:MySQL InnoDB引擎中的聚簇索引和非聚簇索引有什么区别?

一个表可以有多个非聚簇索引,称为非主键索引、辅助索引、二级索引,适合快速查找特定列数据。非聚簇索引叶子节点存储的是数据行的主键喝对应的索引列,需要主键才能访问数据行数据。一个表只能有一个聚簇索引,称为主键索引,适合范围查找和排序。聚簇索引叶子节点存储的是数据行,可以直接访问数据行数据。

2025-09-11 08:37:36 332

原创 每日面试题分享8:MySQL的索引下推是什么?

是指在使用联合索引作为条件查询时,将部分查询条件下推到存储引擎层过滤,减少从表中读取的数据行,从而减少IO。

2025-09-11 08:32:46 244

原创 每日面试题分享7:MySQL的覆盖索引是什么?

MySQL的覆盖索引是指二级索引包含了查询条件所需的所有字段,查询操作可以仅通过访问二级索引完成,从而不需要访问表数据(主键索引)。

2025-09-09 09:16:41 86

原创 每日面试题分享6:MySQL的存储引擎有哪些?

InnoDBMyISAMNDBMEMORYARCHIVE。

2025-09-09 09:14:44 88

原创 每日面试题分享5:数据库的脏读、不可重复读、幻读分别是什么?

脏读:一个事务读取了另一个事务未提交的数据,如果该未提交事务最终被回滚,那么读取到的数据就是不一致的。幻读:在同一事务中,执行相同的查询操作,由于其他事务的插入导致返回的结果集不同。不可重复读:在同一事务中,读取同一数据两次,由于另一事务提交导致读取结果不同。

2025-09-09 09:12:16 113

原创 每日面试题分享4:在MySQL中建立索引需要考虑哪些事项?

频繁作为查询条件的字段建议建立索引,对于大量同时作为查询条件的字段,建议建立联合索引。经常位于order by、group by、distinct后面的字段建议建立索引。修改频率远大于查询频率的应好好考虑是否建立索引。索引不是越多越好,索引太多占用内存。字段的值大量重复的不建议建立索引。长字段不建议建立索引。

2025-09-08 16:50:49 66

原创 每日面试题分享3:MySQL中的最左前缀匹配原则是什么?

时,查询条件从索引的最左侧开始匹配。比如一个联合索引有多个列,先从第一个列开始匹配,然后是第二个列,以此类推。MySQL中的最左前缀匹配原则是在使用。

2025-09-08 16:38:13 113

原创 每日面试题分享2:MySQL中有哪些索引?

本文从不同角度对数据库索引进行了分类。数据结构方面包括B+树、R-树、哈希和倒排索引;基于InnoDB引擎分为聚簇和非聚簇索引;按性质则包含普通索引、全文索引、主键索引、联合索引、唯一索引和空间索引等多种类型。这些分类方式全面概括了数据库索引的主要种类及其特点。

2025-09-08 16:33:43 72

原创 每日面试题分享1:Java中有哪些集合类?

ConcurrentHashMap:线程安全的哈希表,适合高并发场景,不允许键或值为null。LinkedHashSet:基于双向链表和哈希表,维护插入顺序,不允许重复。LinkedHashMap:基于双向链表和哈希表,维护插入顺序,不允许重复。LinkedList:基于双向链表,查询慢,更新删除快。HashMap:基于哈希表,键值对无序,不允许重复。TreeMap:基于红黑树,键值对有序,不允许重复。HashSet:基于哈希表,元素无序,不允许重复。TreeSet:基于红黑树,元素有序,不允许重复。

2025-09-08 16:23:11 222

原创 实习生必看的Linux上线指南(后端)

在你的后端项目目录中,打包后的 JAR 包通常位于:文件名应为(与服务器上的文件名保持一致)。这里大家在自己的项目路径下找。scp(在本地终端执行,无需登录服务器):打开本地命令行(CMD 或 PowerShell),执行以下命令:bashGolden_602yes(可选):登录服务器后检查文件是否存在:bashbash(重要,防止更新失败无法回滚):bashbash输出类似:plaintext其中1234是进程 ID,执行以下命令终止进程:bash再次执行。

2025-08-19 15:03:41 362

原创 实习生必看的Linux上线指南

前不久来到公司实习,开发完成后领导叫我尽快上线一下,对于没有上线经验的我甚是头疼,根据之前的上线信息文档查阅资料并结合实践,我决定将我的上线经验分享给大家,此教程基于公司已有服务器,并且需要你更新功能后部署,下面以我的项目前端部分举例。开头的请求,会被代理到服务器本地的 8080 端口(即你的 SpringBoot 后端服务),无需额外修改接口地址(只要后端正常运行,前端可直接调用这些接口)。输入服务器密码 ,等待上传完成(若文件较多,耐心等待进度条结束)。网站默认访问的前端文件(如首页)存放在服务器的。

2025-08-18 14:01:19 280

原创 个人总结八股文之-基础篇(持续更新)

负载因子越大,数组中元素填满成都越高,越容易出现哈希冲突;负载因子越小,数组中元素填满成都越低,空间利用率低。避免频繁扩容。可以使阈值是整数,因为阈值=容量*负载因子,容量通常是2的幂次方,优化位运算操作,提高计算效率。

2025-06-02 23:08:27 768

原创 个人总结八股之Spring篇

IoC(控制反转),AOP(面向切面编程)IoC:一种设计模式,将对象的创建和依赖管理交给外部容器来管理。AOP:一种编程思想,将横切关注点与业务逻辑解耦。IoC好处:解耦对象依赖关系,提高代码的可测性,便于代码复用。

2025-05-19 23:40:55 350

原创 Java实习生面试题(2025.3.23 be)

v-show` 和 `v-if` 都是 Vue 中的条件渲染指令,它们的主要区别在于渲染策略:`v-if` 会根据条件决定是否编译元素,而 `v-show` 则始终编译元素,只是通过改变 CSS 的 `display` 属性来控制显示与隐藏。:分页插件通过拦截 SQL 查询,在执行前修改 SQL,自动添加分页条件,例如 LIMIT 和 OFFSET。:返回的数据会封装到 IPage 对象中,包括分页数据、总记录数、总页数等。构造器注入、静态工厂的方法注入。setter 方法注入。第一条:查询分页数据。

2025-03-23 22:51:16 739

原创 ApplicationContext和BeanFactory有什么区别

ApplicationContext继承了BeanFactory,它拥有BeanFactory的所有特点,也是一个Bean工厂,除此之外它还继承了EnvironmentCapable、MessageSource、ApplicationEventPublisher等接口,使其拥有了获取系统环境变量、国际化、事件发布等功能,这是BeanFactory所不具备的。BeanFactory是Spring中非常核心的组件,表示Bean工厂,可以生成Bean,维护Bean。

2025-03-17 13:23:16 133

原创 Spring中的事务是如何实现的

3.当调用代理对象的方法时,会先判断该方法是否加了@Transactional注解。2.首先对于使用了@Transactional注解的Bean,Spring会。5.并且修改数据库连接的autocommit属性为false,10.Spring事务的传播机制是Spring事务自己实现的。来做的,一个数据库连接一个事务,如果传播机制配置为需要新开一个。8.如果出现了异常并且需要回滚就回滚事务,否则仍然提交事务。9.Spring事务的隔离级别对应的就是数据库的隔离级别。,这是实现Spring事务非常重要的一步。

2025-03-10 13:58:52 257

原创 Spring中Bean是线程安全的吗

另外,Bean是不是安全的,跟Bean的作用域没有关系,Bean的作用域只是表示Bean的生命周期范围,对于任何生命周期的Bean都是一个对象,这个对象是不是线程安全的,还是得看这个Bean对象本身。2.如果Bean是有状态的,那么Bean则不是线程安全的。1.如果Bean是无状态的,那么Bean则是线程安全的。

2025-03-03 14:07:09 138

原创 Spring事务什么时候会失效

2、方法不是public。@Transactional只能用于public的方法上,否则事务会失效,如果要用在非public方法上,可以开启AspectJ代理模式。类里面使用this调用本类方法(this通常省略),此时这个this不是代理类,而是UserService本身。5、异常被吃掉,事务不会回滚。(或者抛出的异常没有被定义,默认为RuntimeException)Spring事务的原理是AOP,进行了切面增强,那么失效的根本原因是这个AOP不起作用了!4、没有被Spring管理。

2025-02-24 15:19:59 193

原创 深入浅出理解Redis缓存雪崩、缓存击穿、缓存穿透及其解决方案

3、缓存穿透:某一时刻访问Redis缓存的大量key在Redis中不存在(比如黑客伪造大量乱七八糟的key进行攻击)。也会给数据造成压力。它的作用就是判断key在Redis中是否存在,如果不存在就将该key拦截。1、缓存雪崩:缓存中某一时刻大量的热点数据同时过期,导致大量请求直接访问mysql。2、缓存击穿:缓存中某一时刻某一个热点key失效,也会导致大量请求直接访问mysql。解决办法就是对这个热点key不设置过期时间。缓存中存放的大多是热点数据,目的就是可以直接从缓存中获取数据而不用访问数据库。

2025-02-21 16:36:25 204

原创 Spring事务传播机制

多个事务方法互相调用时,事务如何在这些方法间传播,方法A是一个事务的方法,方法A执行过程中调用了方法B,那么方法B有无事务以及方法B对事务的要求不同都会对方法A的事务具体执行造成影响,同时方法A的事务对方法B的事务执行也有影响,这种影响具体是什么就由两个事务定义的事务传播类型所决定。1.REQUIRED(Spring默认的事务传播机制):如果没有事务,就自己创建事务;7.NESTED:如果当前事务存在,就在嵌套事务中执行,否则和REQUIRED一样。6.NEVER:不使用事务,如果存在事务,就抛出异常。

2025-02-21 16:04:25 152

原创 浅谈自己对RPC的理解

RPC(Remote Procedure Call,远程过程调用)是一种计算机通信协议,它允许程序调用另一个地址空间(通常是在不同计算机上)的过程或函数,而不需要程序员显示地编写网络通信代码。

2025-02-11 13:36:05 513

原创 单例模式和单例Bean

单例模式是一种软件设计模式,它确保一个类只有一个实例,并提供一个全局访问点来访问这个实例。

2025-02-09 17:22:26 539 1

原创 谈谈对IOC的理解

所有这些都是我们程序员做的,以为我们只是写了类而已,所有的这些都是Spring做的,它才是幕后黑手。所以我们可以发现,我们自己控制比交给Spring来控制,我们的代码量以及代码复杂度是要高很多的,反言之,将对象交给Spring来控制,减轻的程序员的负担。如果我们不用Spring,那我们得自己来做这两件事,反过来,我们用Spring,这两件事就不用我们做了,我们要做的仅仅是定义类,以及定义哪些属性需要Spring来赋值(比如某个属性上加@Autowired),而这其实就是第二个问题的答案,这就是。

2025-02-05 13:05:18 294

原创 浅谈对AQS的理解,以及如何用AQS实现可重入锁

2、AQS由一个信号量state和一个由线程组成的双向链表队列组成。其中的线程队列就是给线程排队的,而state就像一个红绿灯,用来控制线程的排队和放行。在不同的场景下有不同的意义。3、在可重入锁这个场景下,state表示加锁数量,state=0表示无锁。每加一个锁state就加1,每释放一个锁state就减1。1、AQS是Java的线程同步机制,是JDK中许多锁工具的核心实现框架。

2025-02-02 19:47:45 159

原创 Synchronized和ReentrantLock的区别

3、Synchronized底层是JVM层面的锁,ReentrantLock底层是API层面的锁。2、Synchronized会自动加锁与释放锁,ReentrantLock需要手动加锁与释放锁。4、Synchronized是非公平锁,ReentrantLock可以选择是公平锁或非公平锁。1、Synchronized是关键字,ReentrantLock是类。5、Synchronized锁的是对象,锁信息保存在对象头中;6、Synchronized底层有一个锁升级的过程。

2025-02-02 19:39:45 270

原创 进程和线程的区别

进程是程序的一次,是的基本单位;线程是进程中的一个,是的基本单位。

2025-01-26 18:03:00 226

原创 Sychronized的偏向锁、轻量级锁、重量级锁

2、轻量级锁:由偏向锁升级而来,当线程获取到锁后,此时这把锁是偏向锁,如果此时有第二个线程来竞争该锁,偏向锁就会升级为轻量级锁,之所以叫轻量级锁,是为了与重量级锁区分,轻量级锁底层是通过自旋来实现的,并不会阻塞线程。1、偏向锁:在锁对象的对象头中记录一下当前获取到该锁的线程ID,该线程下次获取锁就会直接获取到该锁。3、如果自旋次数过多仍然没有获取到锁,则会升级为重量级锁,重量级锁会阻塞线程。

2025-01-21 13:10:46 175

原创 ReentrantLock 相关

ReentrantLock 的公平锁和非公平锁底层都是用AQS来排队的,它们的区别在于:在使用lock()方法加锁时,公平锁会检查AQS队列中是否有线程在排队,如果有就直接排队;不管是公平锁还是非公平锁,竞争不到锁都会去排队。当锁释放时,都是唤醒最前面的锁,这一点两者是相同的。tryLock()是尝试加锁,可能加到锁也可能加不到锁,该方法不会阻塞线程,加锁成功返回true,加锁失败返回false。另外,ReentrantLock 是可重入锁,不管是公平锁还是非公平锁都是可重入的。

2025-01-17 12:56:48 244

原创 线程池底部工作原理

如果线程池中的线程数量大于corePoolSize,缓冲队列workQueue已满,并且线程数量等于maximumPoolSize,那么通过handler指定的策略来处理被添加的错误。如果线程池中的线程数量大于等于corePoolSize,缓冲队列workQueue已满,但是线程数量小于maximumPoolSize,那么创建新的线程来处理被添加的任务。如果线程池中的线程数量大于corePoolSize,当线程空闲时间大于keepAliveTime,就将这个线程终止,这样线程池就可以动态调整池中线程数量。

2025-01-15 15:21:16 449

原创 基于springboot+mybatis-plus的线上订餐系统项目

前端:html+css+js+JQuery+BootStrap(做样式)+Axios(发送请求)后端:SpringBoot+Mybatis+Mybatis-plus+Spring MVC+Maven数据库:Mysql这里我主要介绍后端controller:表现层,定义控制类,负责与用户进行交互,接受用户请求,并调用业务逻辑层(service)的方法处理请求,然后将结果返回给用户。

2025-01-14 12:02:33 1011

原创 项目如何排查JVM的问题?

5.首先,初步猜测频繁发送fullgc的原因,如果频繁发送fullgc但又一直没有出现内存溢出,那么表示fullgc实际上是回收了很多对象了,所以这些对象最好在younggc过程中就回收掉,避免这些对象进入老年代,对于这种情况,就要考虑这些存活时间不长的对象是不是比较大,导致年轻代放不下,直接进入到了老年代,尝试加大年轻代的大小,如果改完之后fullgc减少,则证明修改有效。6.同时,还可以找到占用CPU最多的线程,定位到具体方法,优化这个方法的执行,看是否能避免某些对象的创建,从而节省内存。

2024-12-03 23:31:12 204

原创 类加载器双亲委派机制

JVM在加载类时,会使用AppClassLoader中的loadClass方法来加载类,在这个方法中又会使用ExtClassLoader中的loadClass方法来加载类,在这个方法中又会使用BootstrapClassLoader中的loadClass方法来加载类。如果BootstrapClassLoader加载到了就直接成功,如果BootstrapClassLoader没有加载到,那么ExtClassLoader就会⾃⼰尝试加载该类,如果没有加载到,那么则会由AppClassLoader来加载这个类。

2024-11-25 15:03:22 206

原创 医疗大数据可视化面板

{"lng":118.099355,"lat":24.471346,"url":"http://www.baidu.com","id":1,"name":"厦门中山医院"},{"lng":118.088017,"lat":24.451038,"url":"http://www.mi.com","id":2,"name":"厦门第一医院"},{"lng":118.140631,"lat":24.500477,"url":"http://www.csdn.com","id":3,"name":"厦门中医院"}

2024-11-21 13:42:01 732

原创 Java面试必问的异常体系(简单易懂)

所以我们在写一个方法时,我们需要考虑的就是,本方法能否合理的处理该异常,如果处理不了就继续向上抛出异常,包括本方法在调用另外一个方法时,发现出现了异常,如果这个异常应该由自己来处理,那就捕获该异常并进行处理。异常相当于给出一种提示,如果我们抛出异常,就相当于告诉上层方法,我抛了一个异常,我处理不了这个异常,交给你来处理,而对于上层方法来说,它也需要决定自己能不能处理这个异常,是否也需要交给它的上层。二、在Java异常处理机制中,什么时候应该抛出异常,什么时候应该捕获异常?

2024-11-21 13:31:59 223

空空如也

空空如也

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

TA关注的人

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