Spring常見面試題總結


1、Spring是什么?
Spring是一個輕量級的控制反轉(IoC)和面向切面(AOP)的容器(框架)。

2、Spring的IoC理解:
控制反轉,把對象創建的過程和對象之間的調用過程交給spring管理。
底層原理:xml解析,工廠模式,反射。
單例模式:單例模式要求某一類能夠有返回對象一個引用(永遠是同一個)和一個獲得該實例的方法(必須是靜態方法,通常使用getInstance這個名稱)。

工廠模式:為創建對象提供過渡接口,以便將創建對象的具體過程(new 關鍵字和具體的構造器)隱藏起來。用一個工廠方法來替代,對外提供的只是一個工廠方法,達到提高靈活性的目的。
在工廠方法模式中,核心的工廠類不再負責所有的產品的創建,而是將具體創建的工作交給子類去做。該核心類成為一個抽象工廠角色,
僅負責給出具體工廠子類必須實現的接口,而不接觸哪一個產品類應當被實例化這種細節。

反射:JAVA反射機制是在運行狀態中,對於任意一個類,都能夠知道這個類的所有屬性和方法;對於任意一個對象,都能夠調用它的任意方法和屬性;
這種動態獲取信息以及動態調用對象方法的功能稱為java語言的反射機制。

Bean管理:spring創建對象,spring注入屬性
Spring的IOC有三種注入方式 :構造器注入、set方法注入、根據注解注入。

3、BeanFactory和ApplicationContext有什么區別?
BeanFactroy:spring內部的子接口,不提供開發人員使用。
ApplicationContext是BeanFactory的子接口,一般由開發人員使用

4、Spring Bean的生命周期?
實例化 --> 屬性賦值 -->(前置處理)把bean的實例傳遞給bean的前置處理器的方法--> 初始化 --> (后置處理)把bean的實例傳遞給bean的后置處理器的方法 --> 獲取對象 --> 銷毀

5、 Spring中bean的作用域:

6、Spring框架中的Bean是線程安全的么?如果線程不安全,那么如何處理?
Spring容器本身並沒有提供Bean的線程安全策略,因此可以說Spring容器中的Bean本身不具備線程安全的特性,但是具體情況還是要結合Bean的作用域來討論。
(1)對於prototype作用域的Bean,每次都創建一個新對象,也就是線程之間不存在Bean共享,因此不會有線程安全問題。
(2)對於singleton作用域的Bean,所有的線程都共享一個單例實例的Bean,因此是存在線程安全問題的。但是如果單例Bean是一個無狀態Bean,也就是線程中的操作不會對Bean的成員執行查詢以外的操作,那么這個單例Bean是線程安全的。比如Controller類、Service類和Dao等,這些Bean大多是無狀態的,只關注於方法本身。
對於有狀態的bean(比如Model和View),就需要自行保證線程安全,最淺顯的解決辦法就是將有狀態的bean的作用域由“singleton”改為“prototype”。
也可以采用ThreadLocal解決線程安全問題,為每個線程提供一個獨立的變量副本,不同線程只操作自己線程的副本變量。

7、Spring的自動裝配:
(1)在Spring框架xml配置中共有5種自動裝配:
no:默認的方式是不進行自動裝配的,通過手工設置ref屬性來進行裝配bean。
byName:通過bean的名稱進行自動裝配,如果一個bean的 property 與另一bean 的name 相同,就進行自動裝配。 
byType:通過參數的數據類型進行自動裝配。
constructor:利用構造函數進行裝配,並且構造函數的參數通過byType進行裝配。
autodetect:自動探測,如果有構造方法,通過 construct的方式自動裝配,否則使用 byType的方式自動裝配。
2)基於注解的自動裝配方式:

使用@Autowired、@Resource注解來自動裝配指定的bean。在使用@Autowired注解之前需要在Spring配置文件進行配置,<context:annotation-config />。在啟動spring IoC時,容器自動裝載了一個AutowiredAnnotationBeanPostProcessor后置處理器,當容器掃描到@Autowied、@Resource或@Inject時,就會在IoC容器自動查找需要的bean,並裝配給該對象的屬性。在使用@Autowired時,首先在容器中查詢對應類型的bean:

8、Spring的AOP理解:面向切面編程,不修改源碼進行主干功能增強。
AOP實現的關鍵在於 代理模式,AOP代理主要分為靜態代理和動態代理。靜態代理的代表為AspectJ;動態代理則以Spring AOP為代表。
動態代理的角色和靜態代理的一樣 ,動態代理的代理類是動態生成的 . 靜態代理的代理類是我們提前寫好的
Spring AOP中的動態代理主要有兩種方式,(有接口的情況下)JDK動態代理和(沒有接口的情況下)CGLIB動態代理

9、Spring AOP里面的幾個名詞的概念


10.事務
事務就是把一系列的動作當成一個獨立的工作單元,這些動作要么全部完成,要么全部不起作用。
事務四個屬性ACID
原子性(atomicity)
事務是原子性操作,由一系列動作組成,事務的原子性確保動作要么全部完成,要么完全不起作用
一致性(consistency)
一旦所有事務動作完成,事務就要被提交。數據和資源處於一種滿足業務規則的一致性狀態中
隔離性(isolation)
可能多個事務會同時處理相同的數據,因此每個事務都應該與其他事務隔離開來,防止數據損壞
持久性(durability)
事務一旦完成,無論系統發生什么錯誤,結果都不會受到影響。通常情況下,事務的結果被寫到持久化存儲器中

參考鏈接
Spring常見面試題總結:https://blog.csdn.net/a745233700/article/details/80959716


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM