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

做爲一個Java程序員,Spring沒得商量,對咱們是必須會的,並且很重要,幾乎咱們大多項目都用得它,做爲一個優質且生態系統很是全面的框架,不只在使用上很給力,源碼也有很大的學習價值。小編給你們整理了50道面試題,或者說50個知識點,能夠先收藏起來了😊。前端

1.Spring框架?

Spring框架是因爲軟件開發的複雜性而建立的,Spring使用的是基本的JavaBean來完成之前只可能由EJB完成的事。從簡單性、可測性和鬆耦合性角度而言,絕大部分Java應用均可以用Spring。java

2.Spring的總體架構?

大約分爲20個模塊。程序員

3.Spring能夠作什麼?

4.Spring的優勢?缺點?

優勢:web

  • Spring屬於低侵入設計。
  • IOC將對象之間的依賴關係交給Spring,下降組件之間的耦合,實現各個層之間的解耦,讓咱們更專一於業務邏輯。
  • 提供面向切面編程。
  • 對各類主流插件提供很好的集成支持。
  • 對事務支持的很好,只要配置便可,無須手動控制。

缺點:面試

  • 依賴反射,影響性能。

5.你能說幾個Spring5的新特性嗎?

  • spring5整個框架基於java8
  • 支持http/2
  • Spring Web MVC支持最新API
  • Spring WebFlux 響應式編程
  • 支持Kotlin函數式編程

6.IOC?

負責建立對象、管理對象(經過依賴注入)、整合對象、配置對象以及管理這些對象的生命週期。正則表達式

7.什麼是依賴注入?

依賴注入是Spring實現IoC的一種重要手段,將對象間的依賴關係的控制權從開發人員手裏轉移到容器。spring

8.IOC注入哪幾種方式?

1.構造器注入編程

2.setter注入json

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

  1. Hibernate

  2. iBatis

  3. JPA (Java Persistence API)

  4. TopLink

  5. JDO (Java Data Objects)

  6. 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區別?

image-20200428210402245
image-20200428210402245

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

  • 百度百科

本文使用 mdnice 排版

相關文章
相關標籤/搜索