在大家强烈的呼声下,这周推出八股文骚套路之 Spring 篇。虽然现在 SpringBoot 很火,用起来也很方便,不过我还是建议你先看下 Spring。一个原因是,Spring 是经典了,应该好好把他的原理搞明白。另一个原因是,SpringBoot 八股文不如 Spring 好背~
准备面试的话 Spring这部分是可以在短时间内做针对性准备的。这篇文章中我说下 Spring 和 SpringMVC 中面试常问的问题,大家按这些常问的问题准备就好了。另外我还会给大家补充一些要学的东西,面试的时候可以给面试官讲,体现下自己有深入探究的精神。这种在面试官那里还是挺加分的,就比如我面阿里的时候,阿里的面试官给我的面评就是下面这样:

其实 Spring 中的面试问题还挺固定的,我面了一圈基本上面试官都是那几个问题。我甚至都觉得这些面试官面我的时候应该是打开 JavaGuide (这篇文章有些问题用了 Guide哥 一些内容,先讨好下~),从问题中随便挑几个问我。当然因为我 Spring 学的比较深入,能在问题上拔一下高度,都在面试官那里装逼成功了。除了遇见这个阿里面试官,不讲武德,硬要和我要展开探讨 Spring 到底好在哪,我记得这个问题展开和我探讨了半个多小时...
Spring
我现在把 Spring 常问的问题列在下面,大家能把这些问题回答出来,校招应付面试官问题就不大了。另外我说明下,面大中厂的话问Spring 相关的问题主要是问原理性的内容,很少问一些具体的功能是怎么做,常用的功能大家了解就好,千万别背 Spring 的 API 啊。
「1.什么是IOC?IOC的初始化流程?」
这个问题基本上是面试官的起始问题,这里需要你去理解一下什么是控制反转
,并去理解下这个思想的好处,并且能给面试官讲出来。另外记一下 IOC 的初始化过程
,就是下面这张图。

看到这张图顺便说下,面试官常会问 BeanFactory 和 FactoryBean 的区别
。如果你时间特别充足的话,可以通过这个连接看下 IOC 的源码,连接如下:
https://javadoop.com/post/spring-ioc
「2.什么是AOP?」
AOP 称为面向切面的编程,这也是面试官爱问的问题。就算 Spring 其它的原理你都不知道,你也要把 IOC 和 AOP 记清楚,这是面试官极其爱问的。在给面试官回答这个问题时,你首先要答出AOP是什么
,有什么好处
,另外你还可以给面试官讲 Spring AOP 是基于动态代理
的,最好再答出有 JDK Proxy 和 Cglib 两种方式
,再把这两种方式分别是怎么样实现
的给面试官讲一下,这样你的回答就算到位了。
「3.Bean」
Bean也是面试过程中十分爱问的知识点,最常问的是 Bean的生命周期
。其次会问 Bean的循环依赖
问题,就是要你回答循环依赖问题是什么,Bean是怎么解决循环依赖的。偶尔也会问 Bean的作用域
有哪些的问题。
「4.Spring事务」
Spring 事务你要知道有编程式事务
以及 声明式事务
两种,声明式事务推荐使用,主要是基于 XML和注解
两种方式。Spring 的隔离级别
和 事务传播方式
也要记一下。
「5.设计模式」
你是不是觉得混入了一个奇怪的东西,对,就是设计模式。其实 Spring 中应用了大量的设计模式,我觉得你可以了解一下 Spring 是怎么样使用设计模式的呀!这样你一下子把两个知识点都学了。你给面试官讲设计模式的时候就可以说 Spring 是这么用的,多好?另外Spring 中也用了很多的反射,你们也可以看一下 Spring 中哪些部分应用了反射,是怎么样用的,这都可以给面试官讲。
「6.一些不常问问题」
这里问的不是太多,不过还是要准备一下。看一看 Spring 是什么、Spring 有哪些重要模块、Spring 常用的API记几个就好。
SpringMVC
其实面试过程中对 SpringMVC 的问题很集中,90%以上都是下面这个问题。
「SpringMVC 工作原理」
你只要把下面这张图的流程背下来就好了。图是Guide哥的。

算了,答案我也一起盗了 Guide哥的吧(Guide哥如果你看到了别砍我,这块就这一个问题,我不把答案贴上篇幅也太少了)。咳咳,读者你们直接背就好了:
「流程说明(重要):」
- 客户端(浏览器)发送请求,直接请求到
DispatcherServlet
。 DispatcherServlet
根据请求信息调用HandlerMapping
,解析请求对应的Handler
。- 解析到对应的
Handler
(也就是我们平常说的Controller
控制器)后,开始由HandlerAdapter
适配器处理。 HandlerAdapter
会根据Handler
来调用真正的处理器来处理请求,并处理相应的业务逻辑。- 处理器处理完业务后,会返回一个
ModelAndView
对象,Model
是返回的数据对象,View
是个逻辑上的View
。 ViewResolver
会根据逻辑View
查找实际的View
。DispaterServlet
把返回的Model
传给View
(视图渲染)。- 把
View
返回给请求者(浏览器)
偶尔还会问你一些比如什么是SpringMVC,谈谈你对SpringMVC的理解、SpringMVC 的优点,SpringMVC常用注解这几个。按这样准备问题就不大了。
如果时间充足,好好体会一下 Spring 的设计,对自己还是很有益处的。今天就讲这么多,咱们下篇文章见。
原作者:大白
原文链接: 八股文骚套路之Spring
原出处:CS指南-公众号
侵删
