JAVA企業面試題精選 Spring 1-10
第四部分
1.Spring
1.1.描述Spring框架的作用和優點
參考答案:
Spring框架的作用和優點如下:
1.Spring是一個開源的輕量級的應用開發框架,其目的是用於簡化企業級應用程式開發,減少侵入;
2.Spring提供的IoC和AOP應用,可以將組建的耦合度降至最低,即解耦,便於系統日後的維護和升級;
3.Spring為系統提供了一個整體的解決方案,開發者可以利用它本身提供的功能外,也可以與第三方框架合計數整合應用,可以自由選擇採用哪種技術進行開發.
1.2.如何控制Bean物件的作用域,預設作用域是什麼
參考答案:
1.可以通過<bean>
定義的scope屬性指定Bean物件的作用域或者使用註解@Scope指定Bean物件的作用域.
2.預設Bean物件的作用域為singleton.
1.3.描述下列註解標記的作用
@Component,@Repository,@Service,@Autowired,@Inject,@Value
參考答案:
[email protected]為通用註解.
[email protected]為持久層元件註解.
[email protected]為業務層元件註解.
[email protected],@Inject為指定Bean之間依賴關係的註解.
[email protected]為注入Spring表示式值的註解.
1.4.描述Spring Web MVC的工作流程
參考答案:
Spring Web MVC的共工作流程如下:
1.瀏覽器發出spring mvc請求,請求嫁給前端控制器DispatcherServlet處理.
2.控制器通過HandlerMapping維護的請求和Controller對映資訊,找到相應的Controller元件處理請求.
3.執行Controller元件約定方法處理請求,在約定方法中可以呼叫Service和DAO等元件完成資料庫操作.約定方法可以返回一個ModelAndView物件,封裝了模型資料和檢視名稱資訊.
4.控制器接受ModelAndView之後,呼叫ViewResolver元件,定位View的JSP並傳遞Model資訊,生成響應介面結果.
1.5.Spring有什麼缺點?
參考答案:
Spring有什麼缺點如下:
1.jsp中要寫很多程式碼;
2.控制器過於靈活,缺少一個公用控制器;
3.不支援分散式部署.
1.6.Spring中的IOC和AOP是什麼含義,它們在專案中起到什麼作用,並舉例說明
參考答案:
IOC:控制反轉,是一種設計模式.一層哈尼是控制權的轉移:由傳統的在程式中控制依賴轉移到由容器來控制;第二層是依賴注入:將相互以來的物件分離,在Spring配置檔案中描述他們的依賴關係.他們的依賴關係只在使用的時候才建立.
AOP:面向切面,是一種程式設計思想,OOP的延續.將系統中非核心的業務提取出來,進行單獨處理.
Spring的AOP和IOC在專案中都是為了解決系統程式碼耦合度過高的問題.使程式碼重用度高,易於維護.比如事務,日誌和安全等.
1.7.簡述Spring事務有幾種管理方法,寫出一種配置方式
參考答案:
Spring事務有兩種方式:
1.程式設計式事務:(程式碼中嵌入)
2.宣告式事務:(註解,XML)
註解方式配置事務的方式如下:
首先,需要在applicationContext.xml中新增啟用配置,程式碼如下所示:
<!-- 定義事務管理器 -->
<bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactor" ref="sessionFactory">
</bean>
<tx:annotation=driven transaction-manager="txManager"/>
- 1
- 2
- 3
- 4
- 5
然後,使用@Transactional註解,程式碼如下所示:
@Transactional
public class DefaultFooService implements FooService{
//@Transactional
public void insertFoo(Foo foo){...}
public void updateFoo(Foo foo){...}
}
- 1
- 2
- 3
- 4
- 5
- 6
@Transactional註解標記可以用子安類定義和方法定義前,方法的事務設定將優先於類級別註解的事務設定.
1.8.簡單解釋一下事務攔截器的實現原理
參考答案:
Spring中的事務管理是通過AOP代理來實現的,被代理物件的每個方法進行來接,在方法執行前啟動事務,方法執行完後根據是否有異常和異常的種類進行提交或回滾.
1.9.請說明Spring事務管理中的傳播行為和隔離等級
參考答案:
Spring事務的傳播行為如下:
1.PROPAGATION_REQUIRED–支援當前事務,如果當前沒有事務,就新建一個事務.這是最常見的選擇.
2.PROPAGATION_SUPPORTS–支援當前事務,如果當前沒有事務,就以非事務方式執行.
3.PROPAGATION_MANDATORY–支援當前事務,如果當前沒有事務,就丟擲異常.
4.PROPAGATION_REQUIRES_NEW–新建事務,如果當前存在事務,把當前事務掛起.
5.PROPAGATION_NOT_SUPPORTED–以非事務方式執行操作,如果當前存在事務,就把當前事務掛起.
6.PROPAGATION_NEVER–以非事務方式執行,如果當前存在事務,則丟擲異常.
7.PROPAGATION_NESTED–如果當前存在事務,則在巢狀事務內執行.如果當前沒有事務,則進行與PROPAGATION_REQUIRED類似的操作.
Spring事務的隔離級別如下:
資料庫系統提供了四種事務隔離級別供使用者選擇.不同的隔離級別採用不同的鎖型別來實現,在四種隔離級別中,Serializable的隔離級別最高,ReadUncommitted的隔離級別最低.大多數資料庫預設的隔離界別為ReadCommited,如SqlServer,當然也有少部分資料庫預設的隔離級別為RepeatableRead,如MySQL.
1.ReadUncommitted:讀未提交資料(會出現髒讀,不可重複讀和幻讀).
2.ReadCommited:讀已提交資料(會出現不可重複渡河幻讀).
3.RepeatableRead:可重複讀(會出現幻讀).
4.Serializable:序列化.
髒讀:一個事務讀取到另一個事務未提交的更新資料.
不可重複讀:在同一個事務中,多次讀取同一個資料返回的結果有所不同.換句話收就是,後續讀取可以讀到另一事物已提交的更新資料.相反,”可重複讀”在同一事物中多次讀取資料時,能夠保證所讀資料一樣,也就是,後續讀取不能讀到另一事務已提交的更新資料.
幻讀:一個事務讀取到另一個事務已提交的insert資料.
1.10.Spring的Bean有哪些作用域?
參考答案:
Spring的Bean有以下五種作用域:
1.singleton:SpringIOC容器只會建立該Bean的唯一例項;
2.prototype:每次請求都建立一個例項;
3.request:每次HTTP請求都會產生一個新的bean.需要注意的是,該作用域僅在基於Web的Spring ApplicationContext情形下有效,以下的session和global Session也是如此;
4.session:每次回話建立一個例項;
5.global session:全域性的HttpSession中,容器會返回該bean的同一個例項.
第四部分
1.Spring
1.1.描述Spring框架的作用和優點
參考答案:
Spring框架的作用和優點如下:
1.Spring是一個開源的輕量級的應用開發框架,其目的是用於簡化企業級應用程式開發,減少侵入;
2.Spring提供的IoC和AOP應用,可以將組建的耦合度降至最低,即解耦,便於系統日後的維護和升級;
3.Spring為系統提供了一個整體的解決方案,開發者可以利用它本身提供的功能外,也可以與第三方框架合計數整合應用,可以自由選擇採用哪種技術進行開發.
1.2.如何控制Bean物件的作用域,預設作用域是什麼
參考答案:
1.可以通過<bean>
定義的scope屬性指定Bean物件的作用域或者使用註解@Scope指定Bean物件的作用域.
2.預設Bean物件的作用域為singleton.
1.3.描述下列註解標記的作用
@Component,@Repository,@Service,@Autowired,@Inject,@Value
參考答案:
[email protected]為通用註解.
[email protected]為持久層元件註解.
[email protected]為業務層元件註解.
[email protected]為Bean的作用域註解.
[email protected],@Inject為指定Bean之間依賴關係的註解.
[email protected]為注入Spring表示式值的註解.
1.4.描述Spring Web MVC的工作流程
參考答案:
Spring Web MVC的共工作流程如下:
1.瀏覽器發出spring mvc請求,請求嫁給前端控制器DispatcherServlet處理.
2.控制器通過HandlerMapping維護的請求和Controller對映資訊,找到相應的Controller元件處理請求.
3.執行Controller元件約定方法處理請求,在約定方法中可以呼叫Service和DAO等元件完成資料庫操作.約定方法可以返回一個ModelAndView物件,封裝了模型資料和檢視名稱資訊.
4.控制器接受ModelAndView之後,呼叫ViewResolver元件,定位View的JSP並傳遞Model資訊,生成響應介面結果.
1.5.Spring有什麼缺點?
參考答案:
Spring有什麼缺點如下:
1.jsp中要寫很多程式碼;
2.控制器過於靈活,缺少一個公用控制器;
3.不支援分散式部署.
1.6.Spring中的IOC和AOP是什麼含義,它們在專案中起到什麼作用,並舉例說明
參考答案:
IOC:控制反轉,是一種設計模式.一層哈尼是控制權的轉移:由傳統的在程式中控制依賴轉移到由容器來控制;第二層是依賴注入:將相互以來的物件分離,在Spring配置檔案中描述他們的依賴關係.他們的依賴關係只在使用的時候才建立.
AOP:面向切面,是一種程式設計思想,OOP的延續.將系統中非核心的業務提取出來,進行單獨處理.
Spring的AOP和IOC在專案中都是為了解決系統程式碼耦合度過高的問題.使程式碼重用度高,易於維護.比如事務,日誌和安全等.
1.7.簡述Spring事務有幾種管理方法,寫出一種配置方式
參考答案:
Spring事務有兩種方式:
1.程式設計式事務:(程式碼中嵌入)
2.宣告式事務:(註解,XML)
註解方式配置事務的方式如下:
首先,需要在applicationContext.xml中新增啟用配置,程式碼如下所示:
<!-- 定義事務管理器 -->
<bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactor" ref="sessionFactory">
</bean>
<tx:annotation=driven transaction-manager="txManager"/>
- 1
- 2
- 3
- 4
- 5
然後,使用@Transactional註解,程式碼如下所示:
@Transactional
public class DefaultFooService implements FooService{
//@Transactional
public void insertFoo(Foo foo){...}
public void updateFoo(Foo foo){...}
}
- 1
- 2
- 3
- 4
- 5
- 6
@Transactional註解標記可以用子安類定義和方法定義前,方法的事務設定將優先於類級別註解的事務設定.
1.8.簡單解釋一下事務攔截器的實現原理
參考答案:
Spring中的事務管理是通過AOP代理來實現的,被代理物件的每個方法進行來接,在方法執行前啟動事務,方法執行完後根據是否有異常和異常的種類進行提交或回滾.
1.9.請說明Spring事務管理中的傳播行為和隔離等級
參考答案:
Spring事務的傳播行為如下:
1.PROPAGATION_REQUIRED–支援當前事務,如果當前沒有事務,就新建一個事務.這是最常見的選擇.
2.PROPAGATION_SUPPORTS–支援當前事務,如果當前沒有事務,就以非事務方式執行.
3.PROPAGATION_MANDATORY–支援當前事務,如果當前沒有事務,就丟擲異常.
4.PROPAGATION_REQUIRES_NEW–新建事務,如果當前存在事務,把當前事務掛起.
5.PROPAGATION_NOT_SUPPORTED–以非事務方式執行操作,如果當前存在事務,就把當前事務掛起.
6.PROPAGATION_NEVER–以非事務方式執行,如果當前存在事務,則丟擲異常.
7.PROPAGATION_NESTED–如果當前存在事務,則在巢狀事務內執行.如果當前沒有事務,則進行與PROPAGATION_REQUIRED類似的操作.
Spring事務的隔離級別如下:
資料庫系統提供了四種事務隔離級別供使用者選擇.不同的隔離級別採用不同的鎖型別來實現,在四種隔離級別中,Serializable的隔離級別最高,ReadUncommitted的隔離級別最低.大多數資料庫預設的隔離界別為ReadCommited,如SqlServer,當然也有少部分資料庫預設的隔離級別為RepeatableRead,如MySQL.
1.ReadUncommitted:讀未提交資料(會出現髒讀,不可重複讀和幻讀).
2.ReadCommited:讀已提交資料(會出現不可重複渡河幻讀).
3.RepeatableRead:可重複讀(會出現幻讀).
4.Serializable:序列化.
髒讀:一個事務讀取到另一個事務未提交的更新資料.
不可重複讀:在同一個事務中,多次讀取同一個資料返回的結果有所不同.換句話收就是,後續讀取可以讀到另一事物已提交的更新資料.相反,”可重複讀”在同一事物中多次讀取資料時,能夠保證所讀資料一樣,也就是,後續讀取不能讀到另一事務已提交的更新資料.
幻讀:一個事務讀取到另一個事務已提交的insert資料.
1.10.Spring的Bean有哪些作用域?
參考答案:
Spring的Bean有以下五種作用域:
1.singleton:SpringIOC容器只會建立該Bean的唯一例項;
2.prototype:每次請求都建立一個例項;
3.request:每次HTTP請求都會產生一個新的bean.需要注意的是,該作用域僅在基於Web的Spring ApplicationContext情形下有效,以下的session和global Session也是如此;
4.session:每次回話建立一個例項;
5.global session:全域性的HttpSession中,容器會返回該bean的同一個例項.