1. 程式人生 > >JAVA企業面試題精選 Spring 1-10

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]為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的同一個例項.

第四部分

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的同一個例項.