面试必问的 Spring,你懂了吗?

微信搜索【程序员囧辉】,关注这个坚持分享技术干货的程序员。

我的最新文章:百万级QPS,支撑淘宝双11商品浏览需要哪些技术

前言

之前在 4 年 Java 经验,阿里网易拼多多面试总结、心得体会 中列出了一些高频面试题,这些题目大部分是我自己在面试中碰到过的、小部分是我觉得比较重要的,但是当时并没有给出答案,后面收到有不少同学留言说希望给出答案。之前一直比较忙,所以没时间出。

最近换了工作后,没之前压力那么大了,所以想把这个之前留下的坑给填上。之后会针对这些题目按专题来给出对应的解析,同时结合当前的面试环境,适当补充点当前热门题目。

另外,针对这些面试题的重要程度/出现频率,我会给出一个评分(1~10),分值越高代表出现的概率越大,其中8分及以上的可以认为是高频面试题,评分仅供参考。

针对 Spring 这个知识点,面试中的重要程度综合评分为8分

正文

Spring IoC 的容器构建流程(8分)

核心的构建流程如下,也就是 refresh 方法的核心内容:

Spring bean 的生命周期(10分)

bean 的生命周期主要有以下几个阶段,深色底的5个是比较重要的阶段。

BeanFactory 和 FactoryBean 的区别(6分)

BeanFactory:Spring 容器最核心也是最基础的接口,本质是个工厂类,用于管理 bean 的工厂,最核心的功能是加载 bean,也就是 getBean 方法,通常我们不会直接使用该接口,而是使用其子接口。

FactoryBean:该接口以 bean 样式定义,但是它不是一种普通的 bean,它是个工厂 bean,实现该接口的类可以自己定义要创建的 bean 实例,只需要实现它的 getObject 方法即可。

FactoryBean 被广泛应用于 Java 相关的中间件中,如果你看过一些中间件的源码,一定会看到 FactoryBean 的身影。

一般来说,都是通过 FactoryBean#getObject 来返回一个代理类,当我们触发调用时,会走到代理类中,从而可以在代理类中实现中间件的自定义逻辑,比如:RPC 最核心的几个功能,选址、建立连接、远程调用,还有一些自定义的监控、限流等等。

BeanFactory 和 ApplicationContext 的区别(6分)

BeanFactory:基础 IoC 容器,提供完整的 IoC 服务支持。

ApplicationContext:高级 IoC 容器,BeanFactory 的子接口,在 BeanFactory 的基础上进行扩展。包含 BeanFactory 的所有功能,还提供了其他高级的特性,比如:事件发布、国际化信息支持、统一资源加载策略等。正常情况下,我们都是使用的 ApplicationContext。

这边以电话来举个简单的例子:

我们家里使用的 “座机” 就类似于 BeanFactory,可以进行电话通讯,满足了最基本的需求。

而现在非常普及的智能手机,iPhone、小米等,就类似于 ApplicationContext,除了能进行电话通讯,还有其他很多功能:拍照、地图导航、听歌等。

Spring 的 AOP 是怎么实现的(5分)

本质是通过动态代理来实现的,主要有以下几个步骤。

1、获取增强器,例如被 Aspect 注解修饰的类。

2、在创建每一个 bean 时,会检查是否有增强器能应用于这个 bean,简单理解就是该 bean 是否在该增强器指定的 execution 表达式中。如果是,则将增强器作为拦截器参数,使用动态代理创建 bean 的代理对象实例。

3、当我们调用被增强过的 bean 时,就会走到代理

  • 200
    点赞
  • 607
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 21
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 21
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

程序员囧辉

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

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

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

打赏作者

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

抵扣说明:

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

余额充值