成為Java頂尖程序員,先過了下面問題?。?/h2>

六、框架使用

1.描述一下Hibernate的三個狀態(tài)?
hibernate.jpg
2.Spring中Bean的生命周期。
springbean.jpg
3.SpringMVC或Struts處理請求的流程。
springmvcdispathcer.jpg
4.Spring AOP解決了什么問題?怎么實現(xiàn)的?

面向切面編程,可以在某一些方法執(zhí)行之前或之后執(zhí)行一些方法。

5.Spring事務的傳播屬性是怎么回事?它會影響什么?

MySQL事務隔離級別和Spring事務關系介紹

mysql-stran.jpg
  • 未提交讀(Read Uncommitted):允許臟讀,也就是可能讀取到其他會話中未提交事務修改的數(shù)據(jù)
  • 提交讀(Read Committed):只能讀取到已經(jīng)提交的數(shù)據(jù)。Oracle等多數(shù)數(shù)據(jù)庫默認都是該級別 (不重復讀)
  • 可重復讀(Repeated Read):可重復讀。在同一個事務內(nèi)的查詢都是事務開始時刻一致的,InnoDB默認級別。在SQL標準中,該隔離級別消除了不可重復讀,但是還存在幻象讀,但是innoDB解決了幻讀
  • 串行讀(Serializable):完全串行化的讀,每次讀都需要獲得表級共享鎖,讀寫相互都會阻塞

其中spring七個事務傳播屬性:

  • PROPAGATION_REQUIRED -- 支持當前事務,如果當前沒有事務,就新建一個事務。這是最常見的選擇。
  • PROPAGATION_SUPPORTS -- 支持當前事務,如果當前沒有事務,就以非事務方式執(zhí)行。
  • PROPAGATION_MANDATORY -- 支持當前事務,如果當前沒有事務,就拋出異常。
  • PROPAGATION_REQUIRES_NEW -- 新建事務,如果當前存在事務,把當前事務掛起。
  • PROPAGATION_NOT_SUPPORTED -- 以非事務方式執(zhí)行操作,如果當前存在事務,就把當前事務掛起。
  • PROPAGATION_NEVER -- 以非事務方式執(zhí)行,如果當前存在事務,則拋出異常。
  • PROPAGATION_NESTED -- 如果當前存在事務,則在嵌套事務內(nèi)執(zhí)行。如果當前沒有事務,則進行與PROPAGATION_REQUIRED類似的操作。

五個隔離級別:

  • ISOLATION_DEFAULT 這是一個PlatfromTransactionManager默認的隔離級別,使用數(shù)據(jù)庫默認的事務隔離級別.
    另外四個與JDBC的隔離級別相對應;

  • ISOLATION_READ_UNCOMMITTED 這是事務最低的隔離級別,它充許別外一個事務可以看到這個事務未提交的數(shù)據(jù)。
    這種隔離級別會產(chǎn)生臟讀,不可重復讀和幻像讀。

  • ISOLATION_READ_COMMITTED 保證一個事務修改的數(shù)據(jù)提交后才能被另外一個事務讀取。另外一個事務不能讀取
    該事務未提交的數(shù)據(jù)。這種事務隔離級別可以避免臟讀出現(xiàn),但是可能會出現(xiàn)不可重復讀和幻像讀。

  • ISOLATION_REPEATABLE_READ 這種事務隔離級別可以防止臟讀,不可重復讀。但是可能出現(xiàn)幻像讀。它除了保證
    一個事務不能讀取另一個事務未提交的數(shù)據(jù)外,還保證了避免下面的情況產(chǎn)生(不可重復讀)。

  • ISOLATION_SERIALIZABLE 這是花費最高代價但是最可靠的事務隔離級別。事務被處理為順序執(zhí)行。除了防止臟讀,
    不可重復讀外,還避免了幻像讀。

關鍵詞:

  • 1)幻讀:事務1讀取記錄時事務2增加了記錄并提交,事務1再次讀取時可以看到事務2新增的記錄;
  • 2)不可重復讀?。菏聞?讀取記錄時,事務2更新了記錄并提交,事務1再次讀取時可以看到事務2修改后的記錄;
  • 3)臟讀:事務1更新了記錄,但沒有提交,事務2讀取了更新后的行,然后事務T1回滾,現(xiàn)在T2讀取無效。
6.Spring中BeanFactory和FactoryBean有什么區(qū)別?
  1. BeanFactory
      BeanFactory,以Factory結尾,表示它是一個工廠類(接口),用于管理Bean的一個工廠。在Spring中,BeanFactory是IOC容器的核心接口,它的職責包括:實例化、定位、配置應用程序中的對象及建立這些對象間的依賴。

Spring為我們提供了許多易用的BeanFactory實現(xiàn),XmlBeanFactory就是常用的一個,該實現(xiàn)將以XML方式描述組成應用的對象及對象間的依賴關系。XmlBeanFactory類將持有此XML配置元數(shù)據(jù),并用它來構建一個完全可配置的系統(tǒng)或應用。

  1. FactoryBean
      以Bean結尾,表示它是一個Bean,不同于普通Bean的是:它是實現(xiàn)了FactoryBean<T>接口的Bean,根據(jù)該Bean的ID從BeanFactory中獲取的實際上是FactoryBean的getObject()返回的對象,而不是FactoryBean本身,如果要獲取FactoryBean對象,請在id前面加一個&符號來獲取。

例如自己實現(xiàn)一個FactoryBean,功能:用來代理一個對象,對該對象的所有方法做一個攔截,在調用前后都輸出一行LOG,模仿ProxyFactoryBean的功能。

7.Spring框架中IOC的原理是什么?

控制反轉,Spring統(tǒng)一管理Bean

8.spring的依賴注入有哪幾種方式

三種依賴注入方式,即構造方法注入(constructor injection),setter方法注入(setter injection)以及接口注入(interface injection).

9.struts工作流程
struts.jpg
10.用Spring如何實現(xiàn)一個切面?

配置AOP

11.Spring 如何實現(xiàn)數(shù)據(jù)庫事務?

@Transaction

12.Hibernate對一二級緩存的使用,Lazy-Load的理解;
13.mybatis如何實現(xiàn)批量提交?

目錄列表
一、數(shù)據(jù)結構與算法基礎
二、Java基礎
三、JVM
四、多線程/并發(fā)
五、Linux使用與問題分析排查
六、框架使用
七、數(shù)據(jù)庫相關
八、網(wǎng)絡協(xié)議和網(wǎng)絡編程
九、Redis等緩存系統(tǒng)/中間件/NoSQL/一致性Hash等
十、設計模式與重構
本文是針對知乎文章《成為Java頂尖程序員,先過了下面問題》的解答

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容