1. 程式人生 > 其它 >鎖屏面試題百日百刷-Spring篇(四)

鎖屏面試題百日百刷-Spring篇(四)

  鎖屏面試題百日百刷,每個工作日堅持更新面試題。鎖屏面試題app、小程式現已上線,官網地址:https://www.demosoftware.cc/#/introductionPage。已收錄了每日更新的面試題的所有內容,還包含特色的解鎖螢幕複習面試題、每日程式設計題目郵件推送等功能。讓你在面試中先人一步,吊打面試官!接下來的是今日的面試題:

  

1、 Spring 中如何注入一個 java 集合?

Spring 提供以下幾種集合的配置元素:

1.<list>型別用於注入一列值,允許有相同的值。

<!-- 給陣列注入值 -->

<property name="empName">

<list>

<value>小米</value>

<value>小明</value>

<value>小四</value>

</list>

</property>

<!-- list注入值 可以有相同的多個物件 -->

<property name="empList">

<list>

<ref bean="emp1" />

<ref bean="emp2"/>

</list>

</property>

2.<set> 型別用於注入一組值,不允許有相同的值。

<!-- set注入值 不能有相同的物件 -->

<property name="empSets">

<set>

<ref bean="emp1" />

<ref bean="emp2"/>

</set>

</property>

  1. <map> 型別用於注入一組鍵值對,鍵和值都可以為任意型別。

<!-- map注入值 只要map中的key值不一樣就可以裝配value -->

<property name="empMap">

<map>

<entry key="1" value-ref="emp1" />

<entry key="2" value-ref="emp2" />

</map>

</property>

4.<props>型別用於注入一組鍵值對,鍵和值都只能為 String 型別。

<!-- 給屬性集合配置 -->

<property name="pp">

<props>

<prop key="pp1">hello</prop>

<prop key="pp2">world</prop>

</props>

</property>

2、什麼是 bean 的自動裝配?

~無須在 Spring 配置檔案中描述 javaBean 之間的依賴關係(如配置<property><constructor-arg>)。IOC 容器會自動建立 javabean 之間的關聯關係。

~Spring IOC容器可以自動裝配Bean,需要做的僅僅實在<bean>autowire屬性裡指定自動裝配的模式

~Spring2.5開始支援註解@Autowired@Resource來自動裝配

3、解釋不同方式的自動裝配?

有五種自動裝配的方式,可以用來指導 Spring 容器用自動裝配方式來進行依賴注入。

1no:預設的方式是不進行自動裝配,通過顯式設定 ref 屬性來進行裝配。

2byName:通過引數名自動裝配,Spring 容器在配置檔案中發現 bean autowire 屬性被設定成 byname,之後容器試圖匹配、裝配和該 bean 的屬性具有相同名字的 bean

<bean id="cat" class="pojo.Cat"/>

<bean id="dog" class="pojo.Dog"/>

<bean id="people" class="pojo.People" autowire="byName">

<property name="name" value="zj"/>

</bean>

3byType::通過引數型別自動裝配,Spring 容器在配置檔案中發現 bean autowire 屬性被設定成 byType,之後容器試圖匹配、裝配和該 bean 的屬性具有相同型別的 bean。如果有多個 bean 符合條件,則丟擲錯誤。

<bean id="cat" class="pojo.Cat"/>

<bean id="dog" class="pojo.Dog"/>

<bean id="people" class="pojo.People" autowire="byType">

<property name="name" value="zj"/>

</bean>

4constructor:這個方式類似於 byType, 但是要提供給構造器引數,如果沒有確定的帶引數的構造器引數型別,將會丟擲異常。

5autodetect:首先嚐試使用 constructor 來自動裝配,如果無法工作,則使用 byType 方式。

4@Autowired@Resource異同?

~@Autowired@Resource的相同點:

都是用於自動裝配的,都可以放在屬性欄位和set方法上

~@Autowired@Resource的區別:

2.@AutowiredSpring提供的註解,@Resourcejava提供的註解

3.@Autowired 預設通過 byType 的方式實現,如果有多個物件,則通過 byName 查詢,如果都找不到,則報錯;此時可以用@Qualifier指定唯一的bean物件

4.@Resource 預設通過 byName 的方式實現,如果找不到名字, 則通過 byType 實現!如果兩個都找不到,就會報錯

5、什麼是基於 Java Spring 註解配置? 給一些註解的例子

基於 Java 的配置,允許你在少量的 Java 註解的幫助下,進行你的大部分 Spring 配置而非通過 XML 檔案。以@Configuration 註解為例,它用來標記類可以當做一個 bean 的定義,被 Spring IOC 容器使用。另一個例子是@Bean 註解,它表示此方法將要返回一個物件,作為一個 bean 註冊進 Spring 應用上下文。

6、簡單解釋一下 spring AOP

AOPAspect Oriented Programming),即面向切面程式設計,可以說是 OOPObject Oriented Programming面向物件程式設計)的補充和完善。OOP 引入封裝、繼承、多型等概念來建立一種物件層次結構,用於模擬公共行為的一個集合。不過 OOP 允許開發者定義縱向的關係,但並不適合定義橫向的關係,例如日誌功能。日誌程式碼往往橫向地散佈在所有物件層次中,而與它對應的物件的核心功能毫無關係對於其他型別的程式碼,如安全性、異常處理和透明的持續性也都是如此,這種散佈在各處的無關的程式碼被稱為橫切(cross cutting),在 OOP 設計中,它導致了大量程式碼的重複,而不利於各個模組的重用。

AOP 技術恰恰相反,它利用一種稱為"橫切"的技術,剖解開封裝的物件內部,並將那些影響了多個類的公共行為封裝到一個可重用模組,並將其命名為"Aspect",即切面。所謂"切面",簡單說就是那些與業務無關,卻為業務模組所共同呼叫的邏輯或責任封裝起來,便於減少系統的重複程式碼,降低模組之間的耦合度,並有利於未來的可操作性和可維護性。

使用"橫切"技術,AOP 把軟體系統分為兩個部分:核心關注點和橫切關注點。業務處理的主要流程是核心關注點,與之關係不大的部分是橫切關注點。橫切關注點的一個特點是,他們經常發生在核心關注點的多處,而各處基本相似,比如許可權認證、日誌、事物。AOP 的作用在於分離系統中的各種關注點,將核心關注點和橫切關注點分離開來。

AOP 核心就是切面,它將多個類的通用行為封裝成可重用的模組,該模組含有一組 API 提供橫切功能。比如,一個日誌模組可以被稱作日誌的 AOP 切面。根據需求的不同,一個應用程式可以有若干切面。在 Spring AOP 中,切面通過帶有@Aspect 註解的類實現。

7、 Spring AOP 中,關注點和橫切關注的區別是什麼?

關注點是應用中一個模組的行為,一個關注點可能會被定義成一個我們想實現的一個功能。橫切關注點是一個關注點,此關注點是整個應用都會使用的功能,並影響整個應用,比如日誌,安全和資料傳輸,幾乎應用的每個模組都需要的功能。因此這些都屬於橫切關注點。

8、什麼是連線點?

被攔截到的點,因為 Spring 只支援方法型別的連線點,所以在 Spring 中連線點指的就是被攔截到的方法,實際上連線點還可以是欄位或者構造器。

9、Spring 的通知是什麼?有哪幾種類型?

通知是個在方法執行前或執行後要做的動作,實際上是程式執行時要通過 SpringAOP 框架觸發的程式碼段。

Spring 切面可以應用五種型別的通知:

1before:前置通知,在一個方法執行前被呼叫。

2after: 在方法執行之後呼叫的通知,無論方法執行是否成功。

3after-returning: 僅當方法成功完成後執行的通知。

4after-throwing: 在方法丟擲異常退出時執行的通知。

5around: 在方法執行之前和之後呼叫的通知。

10、什麼是切點?

切入點是一個或一組連線點,通知將在這些位置執行。可以通過表示式或匹配的方式指明切入點。

11、什麼是目標物件?

被一個或者多個切面所通知的物件。它通常是一個代理物件。也指被通知(advised)物件。

12、什麼是代理?

代理是通知目標物件後建立的物件。從客戶端的角度看,代理物件和目標物件是一樣的。

13、什麼是織入?什麼是織入應用的不同點?

織入是將切面和到其他應用型別或物件連線或建立一個被通知物件的過程。織入可以在編譯時,載入時,或執行時完成。

13AOP中的一些常用術語和解釋?

通知(Advice: AOP 框架中的增強處理。通知描述了切面何時執行以及如何執行增強處理。

連線點(join point: 連線點表示應用執行過程中能夠插入切面的一個點,這個點可以是方法的呼叫、異常的丟擲。在 Spring AOP 中,連線點總是方法的呼叫。

切點(PointCut: 可以插入增強處理的連線點。

切面(Aspect: 切面是通知和切點的結合。

引入(Introduction):引入允許我們向現有的類新增新的方法或者屬性。

織入(Weaving: 將增強處理新增到目標物件中,並建立一個被增強的物件,這個過程就是織入。

  更多面試題可關注"demo鎖屏面試題"公眾號通過小程式或App獲取面試題和學習資源