自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【13】说一下SpringBoot自动装配流程

这篇文章主要介绍了Spring Boot的自动装配机制。其中详述了spring.factories文件的作用以及在Spring Boot启动过程中的应用。特别关注了SpringFactoriesLoader类的使用和如何加载、处理spring.factories文件中的配置。同时,该文章也以创建自定义jar并使其自动装配为例,演示了如何在实际开发中利用这种机制。此外,文章还讲述了spring-autoconfigure-metadata.properties文件的作用,以及它在自动装配性能优化中的重要性。

2023-06-14 00:59:32 150

原创 【12】详细聊一聊Synchronized关键字的实现原理

synchronized 是 JVM 的内置锁,基于 Monitor 机制实现。每个对象都有一个与之关联的监视器 (Monitor),充当互斥锁的角色。线程访问 synchronized 代码块时,需获取该对象的 Monitor。若 Monitor 被其他线程持有,则当前线程阻塞,直至 Monitor 变为可用状态。JDK 1.6后,Java引入了锁的升级过程:无锁–>偏向锁–>轻量级锁–>重量级锁,根据实际情况动态升级锁的级别,降低资源消耗和提高并发性能。

2023-06-12 00:40:28 122

原创 【11】Mysql索引失效场景有哪些?

本文介绍了MySQL索引失效的多种场景,包括联合索引不满足最左匹配原则、使用了SELECT *、索引列参与运算、错误的LIKE使用、类型隐式转换、使用OR操作、大范围查找、两列作比较等情况。通过详细分析每种场景的原因和示例,帮助读者理解为什么索引失效以及如何避免这些情况

2023-06-09 20:19:44 196

原创 【10】对象一定在堆上分配吗

本文探讨了Java中对象的分配方式,并解答了一个常见的疑问。尽管大多数情况下Java对象是在堆上分配的,但逃逸分析等优化技术可以将一些对象分配到栈上或进行标量替换。这种优化可以提高程序性能和内存利用效率。因此,对象并不一定始终在堆上分配

2023-06-08 14:41:38 187

原创 【08】spring中Spring中@Autowired和@Resource的区别

@Autowired和@Resource是Java中用于实现依赖注入的注解。它们有不同的作用范围、属性和自动装配顺序。@Autowired默认按照byType自动装配,可以与@Qualifier一起使用指定byName;@Resource默认按照byName自动装配,可以通过name和type属性指定具体的Bean。它们的来源也不同,@Autowired是Spring定义的注解,@Resource来自Java的JSR-250规范。

2023-06-08 08:47:32 43

原创 【09】如何解决redis缓存穿透和缓存雪崩问题

这篇文章探讨了缓存穿透和缓存雪崩问题的概念、原因和可能带来的影响。针对缓存穿透问题,介绍了缓存空对象和布隆过滤器的解决方案,并提供了相应的示例代码。对于缓存雪崩问题,提出了提高缓存层可用性、依赖隔离和限流、合理设置缓存过期时间等预防措施,并强调了演练和预案设定的重要性。文章强调了缓存层在系统性能和可靠性方面的重要作用,并提供了一些应对缓存穿透和缓存雪崩的实用方法。

2023-06-06 17:05:19 53 1

原创 【07】说一下你对volatile关键字的理解

总线锁就是再多cpu下,其中一个cpu要对共享内存进行操作的时候,在总线上发出一个指令LOCK#,这个指令是的其他的cpu无法通过总线访问主内存,这使得其他cpu在总线锁期间不能操作其他的内存,开销比较大,很显然这种不合适。如果在new对象的时候,先返回对象引用,然后在进行初始化和执行构造函数,在单线程情况下没有问题,但是在多线程情况下会存在问题,另外一个线程可能拿到了尚未完全初始化的实例,就会导致问题,就会导致可见性问题。然而,每种优化都会带来相应的问题,其中一些问题导致了线程安全性问题的产生。

2023-06-05 15:32:26 45 1

原创 【06】聊聊你对2PC、3PC和Paxos的理解

例子:提议者(Proposer) P1提出了M1的提案,并且经过了阶段一,于此同时,P2提出了M2的提案,并且也经过了阶段一。当M1进行批准提案的时候,由于M1小于M2,所以会被M1提案会被忽略,P1会再次提案M3,并且重新进入阶段一。相比较2PC,3PC减少了阻塞的时间,3PC协议在第一阶段引入了准备阶段,使得参与者在执行事务前先进行准备操作。如果提议者(Proposer)收到一半以上的Acceptor的响应,那么提议者(Proposer)会发送[Mn,Vn],其中Vn为接收到响应的最大提案的值。

2023-06-05 15:27:58 114 1

原创 【05】面试官:聊一聊ThreadLocal和内存泄漏的问题

如果在ThreadLocalMap中使用强引用来存储ThreadLocal对象,那么ThreadLocal对象会一直存在于内存中,即使在实际的应用中已经不再需要该ThreadLocal对象。这是因为ThreadLocalMap是与线程相关联的,保存在ThreadLocalMap的table数组中,ThreadLocalMap中的键值对不会被自动清理,而是会一直保留,从而造成内存泄漏。线程封闭:通过ThreadLocal,可以将可变的数据封装在每个线程内部,使其具有线程级别的封闭性。

2023-06-05 15:26:05 101 1

原创 【04】阿里面试题:一条MySQL更新语句是如何执行的?

先写Redo Log,再写Binlog: 如果在写完Redo Log后发生MySQL宕机,而尚未写入Binlog,那么在重启后,Redo Log中存在事务记录,MySQL会认为这些事务已成功提交,但是由于Binlog缺失了相应的记录,导致Binlog与Redo Log的数据不一致。它确保了在事务提交过程中,所有参与者要么都提交事务,要么都回滚事务,从而保持数据的一致性。当需要回滚事务时,数据库引擎会利用Undo log中的信息,按照相反的顺序执行记录的修改操作,将数据恢复到事务开始之前的状态。

2023-06-05 15:23:56 127 1

原创 【03】spring经典面试题:说一下循环依赖以及解决方法

现在是当我们出现循环依赖了,我们先去让bean进行动态代理,拿着动态代理之后的bean去进行依赖注入,并且还可以继续A原始Bean的生命周期,因为代理后的bean内部有一个变量target,target指向A原始的bean,所以A原始bean继续走之后的生命周期不会影响到代理后的bean。循环依赖就发生在第二种情况,也就是不存在B类对应的bean,需要去生成B类对应的bean,此时B类对应的bean需要经过完整的bean生命周期。(aop)的,循环依赖是发生在填充属性,那么具体过程是怎样的?

2023-06-05 15:20:37 189 1

原创 【02】面试官:说一下双亲委派机制和如何打破双亲委派机制

引导类 -> ext类加载器 -> appext类加载器 -> 加载tomcat公共类库的类加载器 -> 有多少war包就生成多个webAppClassLoader(它就打破了双亲委派机制,只是自己加载,不会向上委托)。我们新增的 java.lang.String,是能够在引导类加载器的JRE包下边找到的,并且返回String类,这个返回的是jdk自带的类,并不是我们自己写的类,所以会报找不到main方法。String的加载类是引导类加载器加载的,引导类是由c++生成的,所以看不到,是个null。

2023-06-05 15:14:09 112

原创 【01】能不能说说main方法的启动流程和类加载流程?

在解析阶段,虚拟机将符号引用(以符号形式表示的类、字段或方法)转换为直接引用(直接指向内存中的具体地址或偏移量)。:为类的静态变量赋予真正的初始值,并执行静态初始化块(static blocks)中的代码。在初始化阶段,静态变量会被赋予程序中指定的初始值,静态初始化块中的代码会被执行。:对加载的字节码文件进行验证,确保其符合Java虚拟机规范和安全要求。在准备阶段,静态变量被赋予默认的零值(如整数类型为0,引用类型为null)。A类的静态代码块输出是在main方法之后,也就是在真正使用的时候才会被加载。

2023-06-05 15:13:04 412 1

空空如也

空空如也

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

TA关注的人

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