Spring面試題50道,應該至少答對30個(附答案)

作為一個Java程序員,Spring沒得商量,對我們是必須會的,而且很重要,幾乎我們大多項目都用得它,作為一個優(yōu)質(zhì)且生態(tài)系統(tǒng)非常全面的框架,不僅在使用上很給力,源碼也有很大的學習價值。小編給大家整理了50道面試題,或者說50個知識點,可以先收藏起來了😊。
1.Spring框架?
Spring框架是由于軟件開發(fā)的復雜性而創(chuàng)建的,Spring使用的是基本的JavaBean來完成以前只可能由EJB完成的事。從簡單性、可測性和松耦合性角度而言,絕大部分Java應用都可以用Spring。
2.Spring的整體架構?
大約分為20個模塊。
3.Spring可以做什么?
4.Spring的優(yōu)點?缺點?
優(yōu)點:
- Spring屬于低侵入設計。
- IOC將對象之間的依賴關系交給Spring,降低組件之間的耦合,實現(xiàn)各個層之間的解耦,讓我們更專注于業(yè)務邏輯。
- 提供面向切面編程。
- 對各種主流插件提供很好的集成支持。
- 對事務支持的很好,只要配置即可,無須手動控制。
缺點:
- 依賴反射,影響性能。
5.你能說幾個Spring5的新特性嗎?
- spring5整個框架基于java8
- 支持http/2
- Spring Web MVC支持最新API
- Spring WebFlux 響應式編程
- 支持Kotlin函數(shù)式編程
6.IOC?
負責創(chuàng)建對象、管理對象(通過依賴注入)、整合對象、配置對象以及管理這些對象的生命周期。
7.什么是依賴注入?
依賴注入是Spring實現(xiàn)IoC的一種重要手段,將對象間的依賴關系的控制權從開發(fā)人員手里轉移到容器。
8.IOC注入哪幾種方式?
1.構造器注入
2.setter注入
3.接口注入(我們幾乎不用)
9.IOC優(yōu)點?缺點?
優(yōu)點:
- 組件之間的解耦,提高程序可維護性、靈活性。
缺點:
- 創(chuàng)建對象步驟復雜,有一定學習成本。
- 利用反射創(chuàng)建對象,效率上有損。(對于代碼的靈活性和可維護性來看,Spring對于我們的開發(fā)帶來了很大的便利,這點損耗不算什么哦)
10.bean的生命周期?
1.Spring 對bean進行實例化。
2.Spring將值和bean的引用注入到 bean對應的屬性中。
3.如果bean實現(xiàn)了BeanNameAware接口,Spring將bean的ID傳遞給setBeanName()方法。
4.如果bean實現(xiàn)了BeanFactoryAware接口, Spring將調(diào)用setBeanFactory()方法,將 bean所在的應用引用傳入進來。
5.如果bean實現(xiàn)了ApplicationContextAware接口,Spring將調(diào)用setApplicationContext()方法,將bean所在的應用引用傳入進來。
6.如果bean實現(xiàn)了BeanPostProcessor 接口,Spring將調(diào)用他們的post-ProcessBeforeInitalization()方法。
7.如果bean實現(xiàn)了InitializingBean接口,Spring將調(diào)用他們的after-PropertiesSet()方法,類似地,如果bean使用init-method聲明了初始化方法,該方法也會被調(diào)用。
8.如果bean實現(xiàn)了BeanPostProcessor接口,Spring將調(diào)用它們的post-ProcessAfterInitialization()方法。
9.此時, bean已經(jīng)準備就緒,可以被應用程序使用了,他們將一直駐留在應用上下文中,直到該應用被銷毀。
10.如果bean實現(xiàn)了DisposableBean接口,Spring將調(diào)用它的destory()接口方法,同樣,如果bean使用destroy-method聲明了銷毀方法,該方法也會被調(diào)用。
11.Spring有幾種配置方式?
- 基于xml
- 基于注解
- 基于Java
12.Spring中的bean有幾種scope?
- singleton: 單例,每一個bean只創(chuàng)建一個對象實例。
- prototype,原型,每次對該bean請求調(diào)用都會生成各自的實例。
- request,請求,針對每次HTTP請求都會生成一個新的bean。表示在一次 HTTP 請求內(nèi)有效。
- session,在一個http session中,一個bean定義對應一個bean實例。
- global session:在一個全局http session中,一個bean定義對應一個bean實例
13.什么是AOP(面向切面編程)?
在軟件業(yè),AOP為Aspect Oriented Programming的縮寫,意為:面向切面編程,通過預編譯方式和運行期間動態(tài)代理實現(xiàn)程序功能的統(tǒng)一維護的一種技術。
14.切面有幾種類型的通知?分別是?
前置通知(Before): 目標方法被調(diào)用之前調(diào)用通知功能。
后置通知(After): 目標方法完成之后調(diào)用通。
返回通知(After-returning): 目標方法成功執(zhí)行之后調(diào)用通知。
異常通知(After-throwing): 目標方法拋出異常后調(diào)用通知。
環(huán)繞通知(Around): 在被通知的方法調(diào)用之前和調(diào)用之后執(zhí)行自定義的行為。
15.什么是連接點 (Join point)?
連接點是在應用執(zhí)行過程中能夠插入切面的一個點。這個點可以是調(diào)用方法時、拋出異常時、甚至修改一個字段時。
16.什么是切點(Pointcut)?
切點的定義會匹配通知所要織入的一個或多個連接點。我們通常使用明確的類和方法名稱,或是利用正則表達式定義所匹配的類和方法名稱來指定這些切點。有些AOP框架允許我們創(chuàng)建動態(tài)的切點,可以根據(jù)運行時的決策(比如方法的參數(shù)值)來決定是否應用通知。
17.什么是切面(Aspect)?
切面是通知和切點的結合。通知和切點共同定義了切面的全部內(nèi)容。
18.織入(Weaving)?
織入是把切面應用到目標對象并創(chuàng)建新的代理對象的過程。切面在指定的連接點被織入到目標對象中。
19.引入(Introduction)?
引入允許我們向現(xiàn)有的類添加新方法或屬性。
20.在目標對象的生命周期里有多個點可以進行織入?
- 編譯期:切面在目標類編譯時被織入。AspectJ的織入編譯器就是以這種方式織入切面的。
- 類加載期:切面在目標類加載到JVM時被織入。它可以在目標類被引入應用之前增強該目標類的字節(jié)碼。AspectJ 5的加載時織入(load-time weaving,LTW)就支持以這種方式織入切面。
- 運行期:切面在應用運行的某個時刻被織入。一般情況下,在織入切面時,AOP容器會為目標對象動態(tài)地創(chuàng)建一個代理對象。Spring AOP就是以這種方式織入切面的。
21.AOP動態(tài)代理策略?
- 如果目標對象實現(xiàn)了接口,默認采用JDK 動態(tài)代理??梢詮娭妻D為CgLib實現(xiàn)AOP。
- 如果沒有實現(xiàn)接口,采用CgLib進行動態(tài)代理。
22.什么是MVC框架?
MVC全名是Model View Controller,是模型(model)-視圖(view)-控制器(controller)的縮寫,一種軟件設計典范,用一種業(yè)務邏輯、數(shù)據(jù)、界面顯示分離的方法組織代碼,將業(yè)務邏輯聚集到一個部件里面,在改進和個性化定制界面及用戶交互的同時,不需要重新編寫業(yè)務邏輯。
MVC被獨特的發(fā)展起來用于映射傳統(tǒng)的輸入、處理和輸出功能在一個邏輯的圖形化用戶界面的結構中。
23.什么是SpringMVC?
SpringMVC是Spring框架的一個模塊。是一個基于MVC的框架。
24.SpringMVC的核心?
DispatcherServlet
25.SpringMVC的幾個組件?
DispatcherServlet : 前端控制器,也叫中央控制器。相關組件都是它來調(diào)度。
HandlerMapping : 處理器映射器,根據(jù)URL路徑映射到不同的Handler。
HandlerAdapter : 處理器適配器,按照HandlerAdapter的規(guī)則去執(zhí)行Handler。
Handler : 處理器,由我們自己根據(jù)業(yè)務開發(fā)。
ViewResolver : 視圖解析器,把邏輯視圖解析成具體的視圖。
View : 一個接口,它的實現(xiàn)支持不同的視圖類型(freeMaker,JSP等)
26.SpringMVC工作流程?
1.用戶請求旅程的第一站是DispatcherServlet。
2.收到請求后,DispatcherServlet調(diào)用HandlerMapping,獲取對應的Handler。
3.如果有攔截器一并返回。
4.拿到Handler后,找到HandlerAdapter,通過它來訪問Handler,并執(zhí)行處理器。
5.執(zhí)行Handler的邏輯。
6.Handler會返回一個ModelAndView對象給DispatcherServlet。
7.將獲得到的ModelAndView對象返回給DispatcherServlet。
8.請求ViewResolver解析視圖,根據(jù)邏輯視圖名解析成真正的View。
9.返回View給DispatcherServlet。
10.DispatcherServlet對View進行渲染視圖。
11.DispatcherServlet響應用戶。
27.SpringMVC的優(yōu)點?
1.具有Spring的特性。
2.可以支持多種視圖(jsp,freemaker)等。
3.配置方便。
4.非侵入。
5.分層更清晰,利于團隊開發(fā)的代碼維護,以及可讀性好。
Tips:Jsp目前很少有人用了。
28.單例bean是線程安全的嗎?
不是。具體線程問題需要開發(fā)人員來處理。
29.Spring從哪兩個角度實現(xiàn)自動裝配?
組件掃描(component scanning):Spring會自動發(fā)現(xiàn)應用上下文中所創(chuàng)建的bean。
自動裝配(autowiring):Spring自動滿足bean之間的依賴。
30.自動裝配有幾種方式?分別是?
no - 默認設置,表示沒有自動裝配。
byName : 根據(jù)名稱裝配。
byType : 根據(jù)類型裝配。
constructor : 把與Bean的構造器入?yún)⒕哂邢嗤愋偷钠渌鸅ean自動裝配到Bean構造器的對應入?yún)⒅小?br />
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 層實現(xiàn)類注解,掃描注冊 bean。
35.@Value注解?
講常量、配置中的變量值、等注入到變量中。
36.@Controller注解?
定義控制器類。
37.聲明一個切面注解是哪個?
@Aspect
38.映射web請求的注解是?
@RequestMapping
39.@ResponseBody注解?
作用是將返回對象通過適當?shù)霓D換器轉成置頂格式,寫進response的body區(qū)。通常用來返回json、xml等。
40.@ResponseBody + @Controller =?
@RestController
41.接收路徑參數(shù)用哪個注解?
@PathVariable
42.@Cacheable注解?
用來標記緩存查詢。
43.清空緩存是哪個注解?
@CacheEvict
44.@Component注解?
泛指組件,不好歸類時,可以用它。
45.「BeanFactory 和 ApplicationContext」區(qū)別?
46.@Qualifier注解?
當創(chuàng)建多個相同類型的 bean 時,并且想要用一個屬性只為它們其中的一個進行裝配,在這種情況下,你可以使用 @Qualifier 注釋和 @Autowired 注釋通過指定哪一個真正的 bean 將會被裝配來消除混亂。
47.事務的注解是?
@Transactional
48.Spring事務實現(xiàn)方式有?
聲明式:聲明式事務也有兩種實現(xiàn)方式。
xml 配置文件的方式。注解方式(在類上添加 @Transaction 注解)。
編碼式:提供編碼的形式管理和維護事務。
49.什么是事務傳播?
事務在嵌套方法調(diào)用中如何傳遞,具體如何傳播,取決于事務傳播行為。
50.Spring事務傳播行為有哪些?
參考:
《Spring in action 4》
《SPRING技術內(nèi)幕》
《Spring源碼深度解析》
《Spring5企業(yè)級開發(fā)實戰(zhàn)》
https://spring.io
百度百科
到此這篇關于Spring面試題50道,應該至少答對30個(附答案)的文章就介紹到這了,更多相關Spring面試題內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持腳本之家!
相關文章
- 這篇文章主要介紹了SpringMVC常見面試題總結,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2020-05-27
- 這篇文章主要介紹了一文帶你輕松應對Springboot面試小結,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2020-05-12
- 這篇文章主要介紹了2020最新版Spring Cloud面試題,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2020-03-17
- 這篇文章主要介紹了2020最新版Spring面試題 ,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2020-03-17
- 這篇文章主要介紹了2019 最新「Spring 全家桶」高頻面試題(小結),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-08-26
- 這篇文章主要介紹了27道高頻Spring面試題,你能答對幾個?小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-08-08
Java研發(fā)面試99題(含答案):JVM+Spring+MySQL+線程池+鎖
這篇文章主要介紹了Java研發(fā)面試99題,主要包括了JVM,Spring,MySQL,線程池,鎖等,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-07-16- 這篇文章主要介紹了35道SpringBoot面試題及答案(小結)的相關資料,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-05-21
- 這篇文章主要介紹了49個Spring經(jīng)典面試題總結(附帶答案)的相關資料,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-04-29
- 本文詳細的介紹了SpringMvc面試題,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-04-28