写在开头:

最近在理解常用设计模式之后,准备系统的学习Spring源码,当然在学习源码的同时我也会尝试的总结一些高频面试题的答案,所以本博客是一篇长期更新帖!!!

我们走过最长的路,就是面试官的套路。

常见面试题:

  • Spring的中的Bean是线程安全还是不安全的?

这个题目应该是Spring面试题中的高频面试题了,基本问到Spring的时候,大部分面试官都会问到这个问题。

首先如果是说是安全的或者说是不安全的时候,基本面试官就已经对你已经有个大致的了解了。

其实,比较合理的答案应该是 没有关系。换句话也就是说Bean本身的线程安全跟Spring框架是没有什么联系的。

其次,我们应该知道,Spring中的Bean是在哪里,项目初始化的时候,通过包扫描,利用反射,new出来,然后缓存在Spring的IOC容器中。而Spring框架本身是没有对Bean做线程安全做任何处理。所以,Bean是否线程安全,取决于Bean本身,而Bean使我们自己写的代码,只不过Spring帮我们new而已。Bean线程安全取决于我们自己手写的代码。

  • Spring中的Bean是如何被回收的?

这个题目就是很深的一个套路问题。

有的人会说,当然是GC的时候,或者说一直在用根本不回收,等等答案。这时候你就陷入了面试官的套路中。

回答这个问题的时候,其实面试官是在考察你Spring中Bean的生命周期。

Spring中的Bean大部分默认是单例的,Singleton,全局的。存放在IOC容器中。

要知道GC的原则,当Bean没有任何地方引用的时候。

单例Bean储存在IOC容器中,他的生死存亡也随着Spring的存亡而存亡。

而多实例的Bean,也就是prototype原型Bean,这个其实跟单例Bean还是有些差别的,

他是用到时new出来,然后随之无引用而被GC掉。

Session呢,其实就跟网页有关,而Request就很简单了,随着一个请求的开始和结束而生到死。