Java面试题

本文详细介绍了Java面试中的常见问题,涵盖Spring Cloud的注册中心和熔断限流原理,Spring框架的bean作用域、生命周期及单例线程安全性,Java集合HashMap的put、get操作与扩容机制,多线程中的wait、sleep区别、死锁解决方案和线程池的shutdown与shutdownNow方法,以及数据库如MySQL、Redis的基本概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java面试题

1、Spring Cloud

1.1 Spring cloud 注册中心的原理?

微服务注册中心原理,看这篇就够了!

1.2 Spring cloud 熔断限流的原理

稳定性五件套-熔断的原理和实现

熔断本质上是做快速失败,防止级联故障引起雪崩。它的主要采用的手段是基于断路器的设计模式。
断路器有基本模式和扩展模式。
基本模式中,断路器由两个状态和一个动作组成:断路器打开状态、断路器关闭状态和跳闸动作。在断路器关闭状态下,请求过来每次都要先经由跳闸动作,由跳闸动作判断是否需要将状态改成断路器打开状态。断路器打开状态下,请求直接执行快速失败的动作,不会向后请求。
扩展模式中,断路器增加了一个半开状态,它允许有限数量的请求通过,如果执行成功,恢复到关闭状态;如果失败,则恢复到开放,然后重启定时器,一段时间后再用半开状态来尝试。扩展模式可以半自动化的进行熔断恢复,避免了基本模式中,一旦断路器被打开完全依赖人工判断是否恢复的弊端。

2、spring面试题

2.1 Spring 支持的几种 bean 的作用域。

  • singleton: bean 在每个 Springioc 容器中只有一个实例。
  • prototype:一个 bean 的定义可以有多个实例。
  • request:每次 http 请求都会创建一个 bean,该作用域仅在基于 web 的
    SpringApplicationContext 情形下有效。
  • session:在一个 HTTPSession 中,一个 bean 定义对应一个实例。该作用域仅在基于 web的 SpringApplicationContext 情形下有效。
  • global-session:在一个全局的 HTTPSession 中,一个 bean 定义对应一个实例。该作用域仅在基于 web 的 SpringApplicationContext 情形下有效。
    缺省的 Springbean 的作用域是 Singleton.

2.2 Spring 框架中的单例 bean 是线程安全的吗?

不,Spring 框架中的单例 bean 不是线程安全的。

2.3 解释 Spring 框架中 bean 的生命周期。

  • Spring 容器从 XML 文件中读取 bean 的定义,并实例化 bean。
  • Spring 根据 bean 的定义填充所有的属性。
  • 如果 bean 实现了 BeanNameAware 接口,Spring 传递 bean 的 ID 到 setBeanName 方法。
  • 如果 Bean 实现了 BeanFactoryAware 接口,Spring 传递 beanfactory 给 setBeanFactory
    方法。
  • 如果有任何与 bean 相关联的 BeanPostProcessors,Spring 会在
    postProcesserBeforeInitialization()方法内调用它们。
  • 如果 bean 实现 IntializingBean 了,调用它的 afterPropertySet 方法,如果 bean 声明
    了初始化方法,调用此初始化方法。
  • 如果有 BeanPostProcessors 和 bean 关联,这些 bean 的
    postProcessAfterInitialization()方法将被调用。
  • 如果 bean 实现了 DisposableBean,它将调用 destroy()方法。

2.4 哪些是重要的 bean 生命周期方法?你能重载它们吗?

有两个重要的 bean 生命周期方法,
第一个是 setup,它是在容器加载 bean 的时候被调用。
第二个方法是 teardown 它是在容器卸载类的时候被调用。
Thebean 标签有两个重要的属性(init-method 和 destroy-method)。用它们你可以自己定
制初始化和注销方法。它们也有相应的注解(@PostConstruct 和@PreDestroy)。

2.5 什么是 Spring 的内部 bean?

当一个 bean 仅被用作另一个 bean 的属性时,它能被声明为一个内部 bean,为了定义
innerbean,在Spring的基于XML的配置元数据中,可以在或
元素内使用元素,内部 bean 通常是匿名的,它们的 Scope 一般是 prototype。

2.6 什么是 bean 装配?

2.7 解释不同方式的自动装配。

有五种自动装配的方式,可以用来指导 Spring 容器用自动装配方式来进行依赖注入。

  • no:默认的方式是不进行自动装配,通过显式设置 ref 属性来进行装配。
  • byName:通过参数名自动装配,Spring 容器在配置文件中发现 bean 的 autowire 属性被
    设置成 byname,之后容器试图匹配、装配和该 bean 的属性具有相同名字的 bean。
  • byType::通过参数类型自动装配,Spring 容器在配置文件中发现 bean 的 autowire 属
    性被设置成 byType,之后容器试图匹配、装配和该 bean 的属性具有相同类型的 bean。
    如果有多个 bean 符合条件,则抛出错误。
  • constructor:这个方式类似于 byType,但是要提供给构造器参数,如果没有确定的带
    参数的构造器参数类型,将会抛出异常。
  • autodetect:首先尝试使用 constructor 来自动装配,如果无法工作,则使用 byType 方
    式。
    @Resource注解使用的是byName 方式注入,

2.9 springboot启动流程?自动装配原理?

SpringBoot启动流程解析
SPRINGBOOT启动流程及其原理
在这里插入图片描述
spring启动流程中的自动装配模块源码:
SpringApplication$run()
在这里插入图片描述

SpringApplication$getRunListeners()
在这里插入图片描述

SpringApplication$getSpringFactoriesInstances()
在这里插入图片描述

SpringApplication$getSpringFactoriesInstances()

在这里插入图片描述
SpringFactoriesLoader$loadFactories()
在这里插入图片描述

SpringFactoriesLoader$loadFactoryNames()
在这里插入图片描述

SpringFactoriesLoader$loadSpringFactories()
在这里插入图片描述
在这里插入图片描述

9、

10、

3、Java集合

3.1 Map

3.1.1 HashMap的put和get方法原理

参考:
HashMap的put和get方法原理
HashMap 得get put 方法实现原理
put方法原理:

是我们插入时会调用得方法,当我们调用.put(k,v)得时候,首先会把k,v封装到一个node节点中,然后调用k的hashCode方法得到hash值,通过hash函数,将hash值转换为数组下标,如果此下标对应得位置上没有元素,则将节点存到该位置,如果有链表,则会拿k去与链表上得每个节点得k去做比较,相同得话就覆盖此链表上得节点,全部不同得话就会,在此链表尾部,新建一个新的节点(k,v得node节点)。这样就完成了一次插入。

get方法原理:

我们查询的时候调用得方法,首先会调用k得hashcode方法,得到hash值,然后通过hash函数将hash值转换为数组下标,去该下标中看有没有元素,没有得话返回null,如果该下标对应得位置有单链表,则会去链表拿k去和单链表得每个节点得k做对比,如果有相同得则返回,该节点得值,如果全部比完后没有相同得则返回null,此为一次查询。

3.1.2 hashMap为什么二倍扩容详解?

参考:
hashMap为什么二倍扩容详解

3.1.3 HashMap如何扩容?

4、Java多线程

4.1.1、java 中 wait 和 sleep 方法的不同?

最大的不同是在等待时 wait 会释放锁,而 sleep 一直持有锁。Wait 通常被用于线程间交互,sleep 通常被用于暂停执行。

4.1.2 多线程出现死锁的情况,如何解决
4.1.3 线程中的 shutdown 和 shutdownNow 的方法的区别?

线程池中shutdown()和shutdownNow()方法的区别
java线程池的shutdown和shutdownNow方法的异同

4.1.4 ReentrantLock的底层原理

ReentrantLock原理

ReentrantLock主要利用CAS+AQS队列来实现。

4、

5、

6、

7、

8、

9、

10、

5、数据库

5.1 mysql

5.1.1 mysql存储结构有哪些?默认的存储结构是什么?

Mysql存储结构

索引是一种加快查询速度的数据结构,常用索引结构有hash、B-Tree和B+Tree
Mysql选择用B+Tree数据结构。

5.1.2

5.2 Redis

5.2.1 什么是缓存雪崩、缓存击穿、缓存穿透?如何解决?

Redis三大缓存问题及解决方法(雪崩、击穿、穿透)

5.2.2

5.3 MongoDB

5.2.1
5.2.2

5.5

1、

1、

1、

6、数据结构与算法

6.1 B树、B-树、B+树的定义和区分

B树、B-树、B+树的定义和区分

B树、B-树、B+树、B*树介绍,和B+树更适合做文件索引的原因

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码到成功>_<

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值