作爲一個Java程序員,Spring沒得商量,對我們是必須會的,而且很重要,幾乎我們大多項目都用得它,作爲一個優質且生態系統非常全面的框架,不僅在使用上很給力,源碼也有很大的學習價值。小編給大家整理了50道面試題,或者說50個知識點,可以先收藏起來了😊。
1.Spring框架?
Spring框架是由於軟件開發的複雜性而創建的,Spring使用的是基本的JavaBean來完成以前只可能由EJB完成的事。從簡單性、可測性和松耦合性角度而言,絕大部分Java應用都可以用Spring。
2.Spring的整體架構?
大約分爲20個模塊。
3.Spring可以做什麼?
4.Spring的優點?缺點?
優點:
- Spring屬於低侵入設計。
- IOC將對象之間的依賴關係交給Spring,降低組件之間的耦合,實現各個層之間的解耦,讓我們更專注於業務邏輯。
- 提供面向切面編程。
- 對各種主流插件提供很好的集成支持。
- 對事務支持的很好,只要配置即可,無須手動控制。
缺點:
- 依賴反射,影響性能。
5.你能說幾個Spring5的新特性嗎?
- spring5整個框架基於java8
- 支持http/2
- Spring Web MVC支持最新API
- Spring WebFlux 響應式編程
- 支持Kotlin函數式編程
6.IOC?
負責創建對象、管理對象(通過依賴注入)、整合對象、配置對象以及管理這些對象的生命週期。
7.什麼是依賴注入?
依賴注入是Spring實現IoC的一種重要手段,將對象間的依賴關係的控制權從開發人員手裏轉移到容器。
8.IOC注入哪幾種方式?
1.構造器注入
2.setter注入
3.接口注入(我們幾乎不用)
9.IOC優點?缺點?
優點:
- 組件之間的解耦,提高程序可維護性、靈活性。
缺點:
-
創建對象步驟複雜,有一定學習成本。
-
利用反射創建對象,效率上有損。(對於代碼的靈活性和可維護性來看,Spring對於我們的開發帶來了很大的便利,這點損耗不算什麼哦)
10.bean的生命週期?
1.Spring 對bean進行實例化。
2.Spring將值和bean的引用注入到 bean對應的屬性中。
3.如果bean實現了BeanNameAware接口,Spring將bean的ID傳遞給setBeanName()方法。
4.如果bean實現了BeanFactoryAware接口, Spring將調用setBeanFactory()方法,將 bean所在的應用引用傳入進來。
5.如果bean實現了ApplicationContextAware接口,Spring將調用setApplicationContext()方法,將bean所在的應用引用傳入進來。
6.如果bean實現了BeanPostProcessor 接口,Spring將調用他們的post-ProcessBeforeInitalization()方法。
7.如果bean實現了InitializingBean接口,Spring將調用他們的after-PropertiesSet()方法,類似地,如果bean使用init-method聲明瞭初始化方法,該方法也會被調用。
8.如果bean實現了BeanPostProcessor接口,Spring將調用它們的post-ProcessAfterInitialization()方法。
9.此時, bean已經準備就緒,可以被應用程序使用了,他們將一直駐留在應用上下文中,直到該應用被銷燬。
10.如果bean實現了DisposableBean接口,Spring將調用它的destory()接口方法,同樣,如果bean使用destroy-method聲明瞭銷燬方法,該方法也會被調用。
11.Spring有幾種配置方式?
- 基於xml
- 基於註解
- 基於Java
12.Spring中的bean有幾種scope?
- singleton: 單例,每一個bean只創建一個對象實例。
- prototype,原型,每次對該bean請求調用都會生成各自的實例。
- request,請求,針對每次HTTP請求都會生成一個新的bean。表示在一次 HTTP 請求內有效。
- session,在一個http session中,一個bean定義對應一個bean實例。
- global session:在一個全局http session中,一個bean定義對應一個bean實例。
13.什麼是AOP(面向切面編程)?
在軟件業,AOP爲Aspect Oriented Programming的縮寫,意爲:面向切面編程,通過預編譯方式和運行期間動態代理實現程序功能的統一維護的一種技術。
14.切面有幾種類型的通知?分別是?
前置通知(Before): 目標方法被調用之前調用通知功能。
後置通知(After): 目標方法完成之後調用通。
返回通知(After-returning): 目標方法成功執行之後調用通知。
異常通知(After-throwing): 目標方法拋出異常後調用通知。
環繞通知(Around): 在被通知的方法調用之前和調用之後執行自定義的行爲。
15.什麼是連接點 (Join point)?
連接點是在應用執行過程中能夠插入切面的一個點。這個點可以是調用方法時、拋出異常時、甚至修改一個字段時。
16.什麼是切點(Pointcut)?
切點的定義會匹配通知所要織入的一個或多個連接點。我們通常使用明確的類和方法名稱,或是利用正則表達式定義所匹配的類和方法名稱來指定這些切點。有些AOP框架允許我們創建動態的切點,可以根據運行時的決策(比如方法的參數值)來決定是否應用通知。
17.什麼是切面(Aspect)?
切面是通知和切點的結合。通知和切點共同定義了切面的全部內容。
18.織入(Weaving)?
織入是把切面應用到目標對象並創建新的代理對象的過程。切面在指定的連接點被織入到目標對象中。
19.引入(Introduction)?
引入允許我們向現有的類添加新方法或屬性。
20.在目標對象的生命週期裏有多個點可以進行織入?
- 編譯期:切面在目標類編譯時被織入。AspectJ的織入編譯器就是以這種方式織入切面的。
- 類加載期:切面在目標類加載到JVM時被織入。它可以在目標類被引入應用之前增強該目標類的字節碼。AspectJ 5的加載時織入(load-time weaving,LTW)就支持以這種方式織入切面。
- 運行期:切面在應用運行的某個時刻被織入。一般情況下,在織入切面時,AOP容器會爲目標對象動態地創建一個代理對象。Spring AOP就是以這種方式織入切面的。
21.AOP動態代理策略?
- 如果目標對象實現了接口,默認採用JDK 動態代理。可以強制轉爲CgLib實現AOP。
- 如果沒有實現接口,採用CgLib進行動態代理。
22.什麼是MVC框架?
MVC全名是Model View Controller,是模型(model)-視圖(view)-控制器(controller)的縮寫,一種軟件設計典範,用一種業務邏輯、數據、界面顯示分離的方法組織代碼,將業務邏輯聚集到一個部件裏面,在改進和個性化定製界面及用戶交互的同時,不需要重新編寫業務邏輯。
MVC被獨特的發展起來用於映射傳統的輸入、處理和輸出功能在一個邏輯的圖形化用戶界面的結構中。
23.什麼是SpringMVC?
SpringMVC是Spring框架的一個模塊。是一個基於MVC的框架。
24.SpringMVC的核心?
DispatcherServlet
25.SpringMVC的幾個組件?
DispatcherServlet : 前端控制器,也叫中央控制器。相關組件都是它來調度。
HandlerMapping : 處理器映射器,根據URL路徑映射到不同的Handler。
HandlerAdapter : 處理器適配器,按照HandlerAdapter的規則去執行Handler。
Handler : 處理器,由我們自己根據業務開發。
ViewResolver : 視圖解析器,把邏輯視圖解析成具體的視圖。
View : 一個接口,它的實現支持不同的視圖類型(freeMaker,JSP等)
26.SpringMVC工作流程?
1.用戶請求旅程的第一站是DispatcherServlet。
2.收到請求後,DispatcherServlet調用HandlerMapping,獲取對應的Handler。
3.如果有攔截器一併返回。
4.拿到Handler後,找到HandlerAdapter,通過它來訪問Handler,並執行處理器。
5.執行Handler的邏輯。
6.Handler會返回一個ModelAndView對象給DispatcherServlet。
7.將獲得到的ModelAndView對象返回給DispatcherServlet。
8.請求ViewResolver解析視圖,根據邏輯視圖名解析成真正的View。
9.返回View給DispatcherServlet。
10.DispatcherServlet對View進行渲染視圖。
11.DispatcherServlet響應用戶。
27.SpringMVC的優點?
1.具有Spring的特性。
2.可以支持多種視圖(jsp,freemaker)等。
3.配置方便。
4.非侵入。
5.分層更清晰,利於團隊開發的代碼維護,以及可讀性好。
Tips:Jsp目前很少有人用了。
28.單例bean是線程安全的嗎?
不是。具體線程問題需要開發人員來處理。
29.Spring從哪兩個角度實現自動裝配?
組件掃描(component scanning):Spring會自動發現應用上下文中所創建的bean。
自動裝配(autowiring):Spring自動滿足bean之間的依賴。
30.自動裝配有幾種方式?分別是?
no - 默認設置,表示沒有自動裝配。
byName : 根據名稱裝配。
byType : 根據類型裝配。
constructor : 把與Bean的構造器入參具有相同類型的其他Bean自動裝配到Bean構造器的對應入參中。
autodetect :先嚐試constructor裝配,失敗再嘗試byType方式。
default:由上級標籤的default-autowire屬性確定。
31.說幾個聲明Bean 的註解?
- @Component
- @Service
- @Repository
- @Controller
32.注入Java集合的標籤?
- 允許有相同的值。
- 不允許有相同的值。
- 鍵和值都只能爲String類型。
- < map > 鍵和值可以是任意類型。
33.Spring支持的ORM?
-
Hibernate
-
iBatis
-
JPA (Java Persistence API)
-
TopLink
-
JDO (Java Data Objects)
-
OJB
34.@Repository註解?
Dao 層實現類註解,掃描註冊 bean。
35.@Value註解?
講常量、配置中的變量值、等注入到變量中。
36.@Controller註解?
定義控制器類。
37.聲明一個切面註解是哪個?
@Aspect
38.映射web請求的註解是?
@RequestMapping
39.@ResponseBody註解?
作用是將返回對象通過適當的轉換器轉成置頂格式,寫進response的body區。通常用來返回json、xml等。
40.@ResponseBody + @Controller =?
@RestController
41.接收路徑參數用哪個註解?
@PathVariable
42.@Cacheable註解?
用來標記緩存查詢。
43.清空緩存是哪個註解?
@CacheEvict
44.@Component註解?
泛指組件,不好歸類時,可以用它。
45.BeanFactory 和 ApplicationContext區別?
46.@Qualifier註解?
當創建多個相同類型的 bean 時,並且想要用一個屬性只爲它們其中的一個進行裝配,在這種情況下,你可以使用 @Qualifier 註釋和 @Autowired 註釋通過指定哪一個真正的 bean 將會被裝配來消除混亂。
47.事務的註解是?
@Transaction
48.Spring事務實現方式有?
聲明式:聲明式事務也有兩種實現方式。
- xml 配置文件的方式。
- 註解方式(在類上添加 @Transaction 註解)。
編碼式:提供編碼的形式管理和維護事務。
49.什麼是事務傳播?
事務在嵌套方法調用中如何傳遞,具體如何傳播,取決於事務傳播行爲。
50.Spring事務傳播行爲有哪些?
參考:
-
《Spring in action 4》
-
《SPRING技術內幕》
-
《Spring源碼深度解析》
-
《Spring5企業級開發實戰》
-
https://spring.io
-
百度百科
文章持續更新中,⛽️。另外 博主整理 + 原創 15萬字面試題,包括17個專題。歡迎大家關注“Java小咖秀”回覆“面試”即可獲得Java小咖秀面試筆記.pdf