Java面试题
文章平均质量分 81
搜集关于Java最新的经典面试题
「已注销」
这个作者很懒,什么都没留下…
展开
-
【13】说一下SpringBoot自动装配流程
这篇文章主要介绍了Spring Boot的自动装配机制。其中详述了spring.factories文件的作用以及在Spring Boot启动过程中的应用。特别关注了SpringFactoriesLoader类的使用和如何加载、处理spring.factories文件中的配置。同时,该文章也以创建自定义jar并使其自动装配为例,演示了如何在实际开发中利用这种机制。此外,文章还讲述了spring-autoconfigure-metadata.properties文件的作用,以及它在自动装配性能优化中的重要性。原创 2023-06-14 00:59:32 · 154 阅读 · 0 评论 -
【11】Mysql索引失效场景有哪些?
本文介绍了MySQL索引失效的多种场景,包括联合索引不满足最左匹配原则、使用了SELECT *、索引列参与运算、错误的LIKE使用、类型隐式转换、使用OR操作、大范围查找、两列作比较等情况。通过详细分析每种场景的原因和示例,帮助读者理解为什么索引失效以及如何避免这些情况原创 2023-06-09 20:19:44 · 205 阅读 · 0 评论 -
【10】对象一定在堆上分配吗
本文探讨了Java中对象的分配方式,并解答了一个常见的疑问。尽管大多数情况下Java对象是在堆上分配的,但逃逸分析等优化技术可以将一些对象分配到栈上或进行标量替换。这种优化可以提高程序性能和内存利用效率。因此,对象并不一定始终在堆上分配原创 2023-06-08 14:41:38 · 191 阅读 · 0 评论 -
【09】如何解决redis缓存穿透和缓存雪崩问题
这篇文章探讨了缓存穿透和缓存雪崩问题的概念、原因和可能带来的影响。针对缓存穿透问题,介绍了缓存空对象和布隆过滤器的解决方案,并提供了相应的示例代码。对于缓存雪崩问题,提出了提高缓存层可用性、依赖隔离和限流、合理设置缓存过期时间等预防措施,并强调了演练和预案设定的重要性。文章强调了缓存层在系统性能和可靠性方面的重要作用,并提供了一些应对缓存穿透和缓存雪崩的实用方法。原创 2023-06-06 17:05:19 · 56 阅读 · 1 评论 -
【07】说一下你对volatile关键字的理解
总线锁就是再多cpu下,其中一个cpu要对共享内存进行操作的时候,在总线上发出一个指令LOCK#,这个指令是的其他的cpu无法通过总线访问主内存,这使得其他cpu在总线锁期间不能操作其他的内存,开销比较大,很显然这种不合适。如果在new对象的时候,先返回对象引用,然后在进行初始化和执行构造函数,在单线程情况下没有问题,但是在多线程情况下会存在问题,另外一个线程可能拿到了尚未完全初始化的实例,就会导致问题,就会导致可见性问题。然而,每种优化都会带来相应的问题,其中一些问题导致了线程安全性问题的产生。原创 2023-06-05 15:32:26 · 48 阅读 · 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 · 132 阅读 · 1 评论 -
【02】面试官:说一下双亲委派机制和如何打破双亲委派机制
引导类 -> ext类加载器 -> appext类加载器 -> 加载tomcat公共类库的类加载器 -> 有多少war包就生成多个webAppClassLoader(它就打破了双亲委派机制,只是自己加载,不会向上委托)。我们新增的 java.lang.String,是能够在引导类加载器的JRE包下边找到的,并且返回String类,这个返回的是jdk自带的类,并不是我们自己写的类,所以会报找不到main方法。String的加载类是引导类加载器加载的,引导类是由c++生成的,所以看不到,是个null。原创 2023-06-05 15:14:09 · 115 阅读 · 0 评论 -
【01】能不能说说main方法的启动流程和类加载流程?
在解析阶段,虚拟机将符号引用(以符号形式表示的类、字段或方法)转换为直接引用(直接指向内存中的具体地址或偏移量)。:为类的静态变量赋予真正的初始值,并执行静态初始化块(static blocks)中的代码。在初始化阶段,静态变量会被赋予程序中指定的初始值,静态初始化块中的代码会被执行。:对加载的字节码文件进行验证,确保其符合Java虚拟机规范和安全要求。在准备阶段,静态变量被赋予默认的零值(如整数类型为0,引用类型为null)。A类的静态代码块输出是在main方法之后,也就是在真正使用的时候才会被加载。原创 2023-06-05 15:13:04 · 414 阅读 · 1 评论