写在开头:
最近在理解常用设计模式之后,准备系统的学习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就很简单了,随着一个请求的开始和结束而生到死。