成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Java最全面試題之Spring篇

開發 后端
大家好,我是Java最全面試題庫的提褲姐,今天這篇是JavaEE面試題系列的第三篇,主要總結了Spring相關的問題。

[[336521]]

開篇介紹

大家好,我是Java最全面試題庫的提褲姐,今天這篇是JavaEE面試題系列的第三篇,主要總結了Spring相關的問題,在后續,會沿著第一篇開篇的知識線路一直總結下去,做到日更!如果我能做到百日百更,希望你也可以跟著百日百刷,一百天養成一個好習慣。

談談你對 Spring 的理解?

Spring 是一個開源框架,為簡化企業級應用開發而生。Spring 可以是使簡單的 JavaBean 實現以前只有 EJB 才能實現的功能。Spring 是一個 IOC 和 AOP 容器框架。

Spring 容器的主要核心是:

  •  控制反轉(IOC),傳統的 java 開發模式中,當需要一個對象時,我們會自己使用 new 或者 getInstance 等直接或者間接調用構造方法創建一個對象。而在 spring 開發模式中,spring 容器使用了工廠模式為我們創建了所需要的對象,不需要我們自己創建了,直接調用 spring 提供的對象就可以了,這是控制反轉的思想。
  •  依賴注入(DI),spring 使用 javaBean 對象的 set 方法或者帶參數的構造方法為我們在創建所需對象時將其屬性自動設置所需要的值的過程,就是依賴注入的思想。
  •  面向切面編程(AOP),在面向對象編程(oop)思想中,我們將事物縱向抽成一個個的對象。而在面向切面編程中,我們將一個個的對象某些類似的方面橫向抽成一個切面,對這個切面進行一些如權限控制、事物管理,記錄日志等。公用操作處理的過程就是面向切面編程的思想。AOP 底層是動態代理,如果是接口采用 JDK 動態代理,如果是類采用CGLIB 方式實現動態代理。

Spring 中的設計模式有哪些?

工廠模式:

BeanFactory就是簡單工廠模式的體現,用來創建對象的實例;

單例模式:

Bean默認為單例模式。

代理模式:

Spring的AOP功能用到了JDK的動態代理和CGLIB字節碼生成技術;

模板方法:

用來解決代碼重復的問題。比如. RestTemplate, JmsTemplate, JpaTemplate。

觀察者模式:

定義對象鍵一種一對多的依賴關系,當一個對象的狀態發生改變時,所有依賴于它的對象都會得到通知被制動更新,如Spring中listener的實現ApplicationListener。

Spring 的常用注解?

@Required:該注解應用于設值方法

@Autowired:該注解應用于有值設值方法、非設值方法、構造方法和變量。

@Qualifier:該注解和@Autowired 搭配使用,用于消除特定 bean 自動裝配的歧義

Spring bean 的生命周期?

  •  bean 定義:在配置文件里面用<bean></bean>來進行定義。
  •  bean 初始化:有兩種方式初始化:

①在配置文件中通過指定 init-method 屬性來完成

②實現 org.springframwork.beans.factory.InitializingBean 接口

  •  bean 調用:有三種方式可以得到 bean 實例,并進行調用
  •  bean 銷毀:銷毀有兩種方式

①使用配置文件指定的 destroy-method 屬性

②實現 org.springframwork.bean.factory.DisposeableBean 接口

Spring 管理事務的方式?

  •  編程式事務,在代碼中硬編碼。
  •  聲明式事務,在配置文件中配置

聲明式事務又分為:

①基于XML的聲明式事務

②基于注解的聲明式事務

Spring的事務傳播行為有哪些?

1、PROPAGATION_REQUIRED:如果當前沒有事務,就創建一個新事務,如果當前存在事務,就加入該事務,該設置是最常用的設置。

2、PROPAGATION_SUPPORTS:支持當前事務,如果當前存在事務,就加入該事務,如果當前不存在事務,就以非事務執行。

3、PROPAGATION_MANDATORY:支持當前事務,如果當前存在事務,就加入該事務,如果當前不存在事務,就拋出異常。

4、PROPAGATION_REQUIRES_NEW:創建新事務,無論當前存不存在事務,都創建新事務。

5、PROPAGATION_NOT_SUPPORTED:以非事務方式執行操作,如果當前存在事務,就把當前事務掛起。

6、PROPAGATION_NEVER:以非事務方式執行,如果當前存在事務,則拋出異常。

7、PROPAGATION_NESTED:如果當前存在事務,則在嵌套事務內執行。如果當前沒有事務,則按REQUIRED屬性執行。

Spring事務的隔離級別?

1、ISOLATION_DEFAULT:這是個 PlatfromTransactionManager 默認的隔離級別,使用數據庫默認的事務隔離級別。

2、ISOLATION_READ_UNCOMMITTED:讀未提交,允許另外一個事務可以看到這個事務未提交的數據。

3、ISOLATION_READ_COMMITTED:讀已提交,保證一個事務修改的數據提交后才能被另一事務讀取,而且能看到該事務對已有記錄的更新。

4、ISOLATION_REPEATABLE_READ:可重復讀,保證一個事務修改的數據提交后才能被另一事務讀取,但是不能看到該事務對已有記錄的更新。

5、ISOLATION_SERIALIZABLE:一個事務在執行的過程中完全看不到其他事務對數據庫所做的更新。

Spring 的通知是什么?有哪幾種類型?

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

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

  •  before:前置通知,在一個方法執行前被調用。
  •  after: 在方法執行之后調用的通知,無論方法執行是否成功。
  •  after-returning: 僅當方法成功完成后執行的通知。
  •  after-throwing: 在方法拋出異常退出時執行的通知。
  •  around: 在方法執行之前和之后調用的通知。

什么是 Spring IOC?IOC的優點是什么?

IOC :

控制反轉,Spring IOC 負責創建對象,管理對象。通過依賴注入(DI),裝配對象,配置對象,并且管理這些對象的整個生命周期。

優點:

IOC 或 依賴注入把應用的代碼量降到最低。它使應用容易測試,單元測試不再需要單例和 JNDI 查找機制。最小的代價和最小的侵入性使松散耦合得以實現。IOC 容器支持加載服務時的餓漢式初始化和懶加載。

BeanFactory 與 AppliacationContext 有什么區別?

BeanFactory

基礎類型的 IOC 容器,提供完成的 IOC 服務支持。如果沒有特殊指定,默認采用延遲初始化策略。相對來說,容器啟動初期速度較快,所需資源有限。

ApplicationContext

ApplicationContext 是在 BeanFactory 的基礎上構建,是相對比較高級的容器實現,除了 BeanFactory 的所有支持外,ApplicationContext 還提供了事件發布、國際化支持等功能。ApplicationContext 管理的對象,在容器啟動后默認全部初始化并且綁定完成。

Spring 支持的幾種 bean 的作用域?

Spring 框架支持以下五種 bean 的作用域:

singleton : bean 在每個 Spring ioc 容器中只有一個實例。

prototype:一個 bean 的定義可以有多個實例。

request:每次 http 請求都會創建一個 bean,該作用域僅在基于 web 的 Spring ApplicationContext 情形下有效。

session : 在一個HTTP Session中 , 一個bean定義對應一個實例。 該作用域僅在基于web 的Spring ApplicationContext 情形下有效。

global-session:在一個全局的 HTTP Session 中,一個 bean 定義對應一個實例。該作用域僅在基于 web 的Spring ApplicationContext 情形下有效。

缺省的 Spring bean 的作用域是 Singleton。

Spring 框架中的單例 bean 是線程安全的嗎?

不是線程安全的。

當存在共享變量時,大家都能去調用,此時就存在線程安全問題。

什么是 bean 的自動裝配?有哪些方式自動裝配?

自動裝配:

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

五種自動裝配的方式:

  •  no:默認的方式是不進行自動裝配,通過顯式設置 ref 屬性來進行裝配。
  •  byName:通過參數名自動裝配,Spring 容器在配置文件中發現 bean 的 autowire 屬性被設置成 byname,

之后容器試圖匹配、裝配和該 bean 的屬性具有相同名字的 bean。

  •  byType:通過參數類型自動裝配,Spring 容器在配置文件中發現 bean 的 autowire 屬性被設置成 byType,

之后容器試圖匹配、裝配和該 bean 的屬性具有相同類型的 bean。如果有多個 bean 符合條件,則拋出錯誤。

  • constructor:這個方式類似于 byType, 但是要提供給構造器參數,如果沒有確定的帶參數的構造器參數類

型,將會拋出異常。

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

什么是spring 的 AOP?

AOP:全稱 Aspect Oriented Programming,即:面向切面編程。

AOP是OOP(Object Oriented Programming,面向對象編程)的延續,是軟件開發中的一個熱點,也是Spring框架中的一個重要內容,是函數式編程的一種衍生范型。

利用AOP可以對業務邏輯的各個部分進行隔離,從而使得業務邏輯各部分之間的耦合度降低,提高程序的可重用性,同時提高了開發的效率。

把我們程序重復的代碼抽取出來,在需要執行的時候,使用動態代理的技術,在不修改源碼的基礎上,對我們的已有方法進行增強。

AOP采取橫向抽取機制,取代了傳統縱向繼承體系重復性代碼

AOP 技術利用一種稱為"橫切"的技術,剖解開封裝的對象內部,并將那些影響了多個類的公共行為封裝到一個可重用模塊,并將其命名為"Aspect",即切面。所謂"切面",簡單說就是那些與業務無關,卻為業務模塊所共同調用的邏輯或責任封裝起來,便于減少系統的重復代碼,降低模塊之間的耦合度,并有利于未來的可操作性和可維護性。

使用"橫切"技術,AOP 把軟件系統分為兩個部分:核心關注點和橫切關注點。

業務處理的主要流程是核心關注點,與之關系不大的部分是橫切關注點。

橫切關注點的一個特點是,他們經常發生在核心關注點的多處,而各處基本相似,比如權限認證、日志、事物。

AOP 的作用在于分離系統中的各種關注點,將核心關注點和橫切關注點分離開來。

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

經典應用:事務管理、性能監視、安全檢查、緩存 、日志等

AOP的實現方式?

aop底層采用代理機制進行實現。

  •  接口 + 實現類:spring采用 jdk 的動態代理Proxy。
  •  實現類:spring 采用 cglib字節碼增強。

AOP中有哪些概念?

①Joinpoint( 連接點):被攔截到的點。在 spring 中,這些點指的是方法,因為 spring 只支持方法類型的連接點。

②Pointcut( 切入點):要對哪些 Joinpoint 進行攔截,即被增強的連接點。

③Advice( 通知/ 增強):攔截到 Joinpoint 之后所要做的事情,及增強代碼。

④Introduction(引介):引介是一種特殊的通知在不修改類代碼的前提下, Introduction 可以在運行期為類動態地添加一些方法或 Field。

⑤Target(目標對象):目標類,需要被代理的類

⑥Weaving(織入):是指把增強應用到目標對象來創建新的代理對象的過程。spring 采用動態代理織入,而 AspectJ 采用編譯期織入和類裝載期織入。

⑦Proxy(代理):代理類,一個類被 AOP 織入增強后,就產生一個結果代理類。

⑧Aspect( 切面):是切入點和通知(引介)的結合。

在Spring中怎么定義類的作用域?

當定義一個<bean> 在 Spring 里,可以給這個 bean 聲明一個作用域。它可以通過 bean 定義中的 scope 屬性來定義。

當 Spring 要在需要的時候每次生產一個新的 bean 實例,bean 的 scope 屬性被指定為 prototype。

一個 bean 每次使用的時候必須返回同一個實例,這個 bean 的 scope 屬性被指定為 singleton。 

 

責任編輯:龐桂玉 來源: segmentfault
相關推薦

2022-08-30 17:41:53

中間件系統Java

2024-06-14 09:53:02

2010-12-29 10:33:51

Oracle

2022-01-18 08:16:52

Web 前端JavaScript

2009-06-06 18:34:05

java面試題

2009-06-06 18:36:02

java面試題

2009-08-01 23:17:19

ASP.NET面試題目ASP.NET

2015-09-02 09:32:56

java線程面試

2020-06-24 09:55:17

Web面試前端

2015-05-11 09:38:42

.NET高級工程師面試題

2021-06-09 07:56:51

JvmJVM面試題Java

2022-05-08 19:58:10

JSONPJavaScript

2017-03-29 09:08:25

Spring筆記

2020-06-04 14:40:40

面試題Vue前端

2023-11-13 07:37:36

JS面試題線程

2011-11-21 09:19:39

Java常量池面試題

2013-05-29 10:23:36

Android開發移動開發Java面試題

2020-04-03 13:24:38

Spring Boot面試題Java

2011-03-24 13:27:37

SQL

2018-03-08 18:40:47

Java百度面試題
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 中文成人在线 | 毛片在线看片 | 午夜在线视频 | 久久9视频 | av免费网站在线观看 | 毛片视频网站 | 99精品国产一区二区三区 | 色婷婷综合久久久中字幕精品久久 | 先锋av资源网 | 精品国产一区二区三区久久久蜜月 | 精品一区二区三区中文字幕 | 91在线精品一区二区 | 久久久久国产精品人 | 99热精品国产 | 国产线视频精品免费观看视频 | 欧美日韩在线看 | 一区二区三区四区在线视频 | 96国产精品久久久久aⅴ四区 | 99re视频在线免费观看 | 色一情一乱一伦一区二区三区 | 性福视频在线观看 | 日韩精品一区二区三区免费视频 | 日韩国产免费 | 在线观看亚洲专区 | 亚洲国产精品va在线看黑人 | 成人综合视频在线观看 | 亚洲精品一 | 亚洲欧洲中文 | 欧美中文一区 | 国产不卡在线 | 免费a网 | 欧美精品网站 | 国产激情免费视频 | 天天操网| av影音资源 | 在线观看中文字幕亚洲 | 羞羞的视频免费在线观看 | 伊人色综合久久天天五月婷 | 欧美在线日韩 | 夜夜爽99久久国产综合精品女不卡 | 亚洲福利精品 |