1. 程式人生 > >每天五個java相關面試題(8)--spring篇

每天五個java相關面試題(8)--spring篇

ioc 簡單 組件 print 提交數據 常常 spring容器 效果 用戶

首先呢,假設有從事前端開發的大神或者準備從事前端開發的小夥伴無意看到我這篇博客看到這段文字歡迎加我的QQ:【 845415745 】。即將走入社會的菜鳥大學生有關於前端開發的職業問題想請教或者一起探討一下,謝謝謝謝。

今天依然不變的每日五個

1使用Spring框架的優點是什麽?

答:
輕量: Spring 是輕量的,主要的版本號大約2MB。
控制反轉: Spring通過控制反轉實現了松散耦合,對象們給出它們的依賴。而不是創建或查找依賴的對象們。
面向切面的編程(AOP): Spring支持面向切面的編程,而且把應用業務邏輯和系統服務分開。
容器: Spring 包括並管理應用中對象的生命周期和配置。
MVC框架:

Spring的WEB框架是個精心設計的框架。是Web框架的一個非常好的替代品。


事務管理: Spring 提供一個持續的事務管理接口,能夠擴展到上至本地事務下至全局事務(JTA)。
異常處理: Spring 提供方便的API把詳細技術相關的異常(比方由JDBC。Hibernate or JDO拋出的)轉化為一致的unchecked 異常。

2.說說AOP和IOC/DI的概念以及在spring中是怎樣應用的?

答:
AOP,Aspect Oriented Program。面向(方面)切面的編程;
IOC,Invert Of Control。控制反轉。

對象的實例由容器自己主動生成,
即用接口編程,在程序中不出現newkeyword,而是用接口來命名引用。
然後通過某種方式把接口的某個實現類的實例註入到引用裏。從而實現接口與詳細實現類的松耦合。
由容器控制程序之間的關系(通過XML配置),而非傳統實現中的由程序代碼直接操控,
依賴註入,是IOC的一個方面,是個通常的概念。它有多種解釋。

這概念是說你不用創建對象。而僅僅須要描寫敘述它怎樣被創建。

你不在代碼裏直接組裝你的組件和服務,可是要在配置文件中描寫敘述哪些組件須要哪些服務。之後一個容器(IOC容器)負責把他們組裝起來。簡單說一下。IOC就是事實上就是依賴註入。(在一個Class對象中引用還有一個Class對象時。我們通常都是直接通過new contructor)。

控制權由應用代碼中轉到了外部容器,控制權的轉移,是所謂的反轉。
AOP方式非常相似filter。就是在程序正常的業務流中間像切面一樣插入非常多其它須要執行的代碼,
比方登錄時候,在進入登錄頁面前寫入日誌,非經常常使用的,尤其是跟數據庫有關的,或者跟支付有關的程序肯定會在每一
步前面插入日誌。


面向方面的編程,即 AOP。是一種編程技術,它同意程序猿對橫切關註點或橫切典型的職責分界線的行為(比如日誌和事務管理)進行模塊化。
AOP 的核心構造是方面,它將那些影響多個類的行為封裝到可重用的模塊中。
AOP Advice(AOP通知)分為:
前置通知 後置通知 異常通知 圍繞通知

3:Spring的事物有幾種方式?Spring框架的事務管理有哪些優點? 你更傾向用那種事務管理類型?談談spring事物的隔離級別和傳播行為?

編程式事務管理:這意味你通過編程的方式管理事務,給你帶來極大的靈活性,可是難維護。
聲明式事務管理:這意味著你能夠將業務代碼和事務管理分離,你僅僅需用註解和XML配置來管理事務。
它為不同的事務API 如 JTA,JDBC,Hibernate。JPA 和JDO。提供一個不變的編程模式。


它為編程式事務管理提供了一套簡單的API而不是一些復雜的事務API如
它支持聲明式事務管理。
它和Spring各種數據訪問抽象層非常好得集成。
大多數Spring框架的用戶選擇聲明式事務管理,由於它相應用代碼的影響最小,
因此更符合一個無侵入的輕量級容器的思想。聲明式事務管理要優於編程式事務管理。
盡管比編程式事務管理(這樣的方式同意你通過代碼控制事務)少了一點靈活性。

事務的隔離級別:
數據庫系統提供了4種事務隔離級別。在這4種隔離級別中。Serializable的隔離級別最高。Read Uncommitted的隔離級別最低。
· Read Uncommitted 讀未提交數據;(會出現臟讀)
· Read Committed 讀已提交數據;
· Repeatable Read 可反復讀;
事務的傳播屬性包括:
· Required業務方法須要在一個事務中執行,假設一個方法執行時已經處在一個事務中。那麽增加到該事務。否則為自己創建一個新事務。 80%的方法用到該傳播屬性。
· Not-Supported· Requiresnew· Mandatoky· Supports· Never· Nested

4: 解釋Spring框架中bean的生命周期及Spring支持的幾種作用域。

答:

  • Spring容器 從XML 文件中讀取bean的定義,並實例化bean。

    Spring依據bean的定義填充全部的屬性。

  • 假設bean實現了BeanNameAware 接口。Spring 傳遞bean 的ID 到 setBeanName方法。
  • 假設Bean 實現了 BeanFactoryAware 接口, Spring傳遞beanfactory 給setBeanFactory 方法。

  • 假設有不論什麽與bean相關聯的BeanPostProcessors。Spring會在postProcesserBeforeInitialization()方法內調用它們。

  • 假設bean實現IntializingBean了,調用它的afterPropertySet方法,
  • 假設bean聲明了初始化方法。調用此初始化方法。
  • 假設有BeanPostProcessors 和bean 關聯,這些bean的postProcessAfterInitialization() 方法將被調用。

  • 假設bean實現了 DisposableBean,它將調用destroy()方法。
    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情形下有效。

5:面向切面的原理

答:
面向對象的編程主要註重核心業務,而面向切面編程主要關註一些不是核心的業務,但又是必須的輔助功能。
就是把那些不是核心業務應該處理的代碼提取出來,進行封裝成模塊化.來處理那些附加的功能代碼(如日誌。事務。安全驗證)我們把這個模塊的作用理解為一個切面,告訴我們它是一個功能模塊.我們能夠把它看成一個切面.說白了就是我們寫一個類。在這個類中寫一些處理在核心業務中起到相同效果的方法.
我們還要了解兩個keyword:
 連接點(Joinpoint),簡單的理解就是在切面模塊中定義的方法.就是上面定義類中的方法.
 切入點(Pointcut).就是連接點的集合,就是一組方法的集合了. 下面幾個就比較理解了。目標對象就是要處理的核心業務了.代理就更easy理解了。讓一個代理去完畢這個任務.
 關於AOP編程可關註我關於代理的三篇博客:
 Spring AOP 學習之靜態代理
 Spring AOP 學習之java JDK動態代理
 Spring AOP 學習之cJlib動態代理

每天五個java相關面試題(8)--spring篇