1. 程式人生 > >SSh三大框架常考面試題

SSh三大框架常考面試題

Hibernate工作原理及為什麼要用? 
原理: 

  1. 讀取並解析配置檔案 
  2. 讀取並解析對映資訊,建立SessionFactory 
  3. 開啟Sesssion 
  4. 建立事務Transation 
  5. 持久化操作 
  6. 提交事務 
  7. 關閉Session 
  8. 關閉SesstionFactory 

為什麼要用: 
  • JDBC訪問資料庫的程式碼做了封裝,大大簡化了資料訪問層繁瑣的重複性程式碼。 
  • Hibernate是一個基於JDBC的主流持久化框架,是一個優秀的ORM實現。他很大程度的簡化DAO層的編碼工作 
  • hibernate使用Java反射機制,而不是位元組碼增強程式來實現透明性。 
  • hibernate的效能非常好,因為它是個輕量級框架。對映的靈活性很出色。它支援各種關係資料庫,從一對一到多對多的各種複雜關係。 

2. Hibernate是如何延遲載入
1. Hibernate 延遲載入實現:a)實體物件 b)集合(Collection) 

2. Hibernate 提供了屬性的延遲載入功能 


Hibernate在查詢資料的時候,資料並沒有存在與記憶體中,當程式真正對資料的操作時,物件才存在與記憶體中,就實現了延遲載入,他節省了伺服器的記憶體開銷,從而提高了伺服器的效能。 


3Hibernate中怎樣實現類之間的關係?(如:一對多、多對多的關係

類與類之間的關係主要體現在表與表之間的關係進行操作,它們都是對物件進行操作,我們程式中把所有的表與類都對映在一起,它們通過配置檔案中的many-to-one
one-to-manymany-to-many、 


4. 說下Hibernate的快取機制 

1. 內部快取存在Hibernate中又叫一級快取,屬於應用事物級快取 

2. 二級快取: 
a) 應用及快取 
b) 分散式快取 
       條件:資料不會被第三方修改、資料大小在可接受範圍、資料更新頻率低、同一資料被系統頻繁使用、非 關鍵資料 
c) 第三方快取的實現 


5. Hibernate的查詢方式 
SqlCriteria,object comptosition 
Hql: 
  1. 屬性查詢 
  2. 引數查詢、命名引數查詢 
  3. 關聯查詢 
  4. 分頁查詢 
  5. 統計函式 

6. 如何優化Hibernate? 
  • 使用雙向一對多關聯,不使用單向一對多 
  • 靈活使用單向一對多關聯 
  • 不用一對一,用多對一取代 
  • 配置物件快取,不使用集合快取 
  • 繼承類使用顯式多型 
  • 表字段要少,表關聯不要怕多,有二級快取撐腰 


為什麼用: 
{AOP 讓開發人員可以建立非行為性的關注點,稱為橫切關注點,並將它們插入到應用程式程式碼中。使用 AOP 後,公共服務 (比如日誌、永續性、事務等)就可以分解成方面並應用到域物件上,同時不會增加域物件的物件模型的複雜性。 
IOC 允許建立一個可以構造物件的應用環境,然後向這些物件傳遞它們的協作物件。正如單詞 倒置 所表明的,IOC 就像反 過來的 JNDI。沒有使用一堆抽象工廠、服務定位器、單元素(singleton)和直接構造(straight construction),每一個物件都是用其協作物件構造的。因此是由容器管理協作物件(collaborator)。 
Spring即使一個AOP框架,也是一IOC容器。 Spring 最好的地方是它有助於您替換物件。有了 Spring,只要用 JavaBean 屬性和配置檔案加入依賴性(協作物件)。然後可以很容易地在需要時替換具有類似介面的協作物件。



Spring 框架是一個分層架構,由 個定義良好的模組組成。Spring 模組構建在核心容器之上,核心容器定義了建立、配置和管理 bean 的方式,如圖 所示。 

組成 Spring 框架的每個模組(或元件)都可以單獨存在,或者與其他一個或多個模組聯合實現。每個模組的功能如下: 

 核心容器:核心容器提供 Spring 框架的基本功能。核心容器的主要元件是 BeanFactory,它是工廠模式的實現。BeanFactory 使用控制反轉 (IOC)模式將應用程式的配置和依賴性規範與實際的應用程式程式碼分開。 

 Spring 上下文Spring 上下文是一個配置檔案,向 Spring 框架提供上下文資訊。Spring 上下文包括企業服務,例如 JNDIEJB、電子郵件、國際化、校驗和排程功能。 

 Spring AOP:通過配置管理特性,Spring AOP 模組直接將面向方面的程式設計功能整合到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理的任何物件支援 AOPSpring AOP 模組為基於 Spring 的應用程式中的物件提供了事務管理服務。通過使用 Spring AOP,不用依賴 EJB 元件,就可以將宣告性事務管理整合到應用程式中。 

 Spring DAOJDBC DAO 抽象層提供了有意義的異常層次結構,可用該結構來管理異常處理和不同資料庫供應商丟擲的錯誤訊息。異常層次結構簡化了錯誤處理,並且極大地降低了需要編寫的異常程式碼數量(例如開啟和關閉連線)。Spring DAO 的面向 JDBC 的異常遵從通用的 DAO 異常層次結構。 

 Spring ORMSpring 框架插入了若干個 ORM 框架,從而提供了 ORM 的物件關係工具,其中包括 JDOHibernate 和 iBatis SQL Map。所有這些都遵從 Spring 的通用事務和 DAO 異常層次結構。 

 Spring Web 模組Web 上下文模組建立在應用程式上下文模組之上,為基於 Web 的應用程式提供了上下文。所以,Spring 框架支援與 Jakarta Struts 的整合。Web 模組還簡化了處理多部分請求以及將請求引數繫結到域物件的工作。 

 Spring MVC 框架MVC 框架是一個全功能的構建 Web 應用程式的 MVC 實現。通過策略介面,MVC 框架變成為高度可配置的,MVC 容納了大量檢視技術,其中包括 JSPVelocityTilesiText 和 POI。 

Spring 框架的功能可以用在任何 J2EE 伺服器中,大多數功能也適用於不受管理的環境。Spring 的核心要點是:支援不繫結到特定 J2EE 服務的可重用業務和資料訪問物件。毫無疑問,這樣的物件可以在不同 J2EE 環境 (Web 或 EJB)、獨立應用程式、測試環境之間重用。 

IOC 和 AOP 

控制反轉模式(也稱作依賴性介入)的基本概念是:不建立物件,但是描述建立它們的方式。在程式碼中不直接與物件和服務連線,但在配置檔案中描述哪一個元件需要哪一項服務。容器(在 Spring 框架中是 IOC 容器) 負責將這些聯絡在一起。 

在典型的 IOC 場景中,容器建立了所有物件,並設定必要的屬性將它們連線在一起,決定什麼時間呼叫方法。下表列出了 IOC 的一個實現模式。 



Spring 框架的 IOC 容器採用型別 和型別實現。 


面向方面的程式設計 

面向方面的程式設計,即 AOP,是一種程式設計技術,它允許程式設計師對橫切關注點或橫切典型的職責分界線的行為(例如日誌和事務管理)進行模組化。AOP 的核心構造是方面,它將那些影響多個類的行為封裝到可重用的模組中。 

AOP 和 IOC 是補充性的技術,它們都運用模組化方式解決企業應用程式開發中的複雜問題。在典型的面向物件開發方式中,可能要將日誌記錄語句放在所有方法和 Java 類中才能實現日誌功能。在 AOP 方式中,可以反過來將日誌服務模組化,並以宣告的方式將它們應用到需要日誌的元件上。當然,優勢就是 Java 類不需要知道日誌服務的存在,也不需要考慮相關的程式碼。所以,用 Spring AOP 編寫的應用程式程式碼是鬆散耦合的。 

AOP 的功能完全整合到了 Spring 事務管理、日誌和其他各種特性的上下文中。 

IOC 容器 

Spring 設計的核心是 org.springframework.beans 包,它的設計目標是與 JavaBean 元件一起使用。這個包通常不是由使用者直接使用,而是由伺服器將其用作其他多數功能的底層中介。下一個最高階抽象是 BeanFactory 介面,它是工廠設計模式的實現,允許通過名稱建立和檢索物件。BeanFactory 也可以管理物件之間的關係。 

BeanFactory 支援兩個物件模型。 

□ 單態 模型提供了具有特定名稱的物件的共享例項,可以在查詢時對其進行檢索。Singleton 是預設的也是最常用的物件模型。對於無狀態服務物件很理想。 

□ 原型 模型確保每次檢索都會建立單獨的物件。在每個使用者都需要自己的物件時,原型模型最適合。 

bean 工廠的概念是 Spring 作為 IOC 容器的基礎。IOC 將處理事情的責任從應用程式程式碼轉移到框架。正如我將在下一個示例中演示的那樣,Spring 框架使用 JavaBean 屬性和配置資料來指出必須設定的依賴關係。 

BeanFactory 介面 

因為 org.springframework.beans.factory.BeanFactory 是一個簡單介面,所以可以針對各種底層儲存方法實現。最常用的 BeanFactory 定義是 XmlBeanFactory,它根據 XML 檔案中的定義裝入 bean,如清單 所示。 

清單 1. XmlBeanFactory 

BeanFactory factory = new XMLBeanFactory(new FileInputSteam("mybean.xml")); 

在 XML 檔案中定義的 Bean 是被消極載入的,這意味在需要 bean 之前,bean 本身不會被初始化。要從 BeanFactory 檢索 bean,只需呼叫 getBean() 方法,傳入將要檢索的 bean 的名稱即可,如清單 所示。 

清單 2. getBean() 

MyBean mybean = (MyBean) factory.getBean("mybean"); 

每個 bean 的定義都可以是 POJO (用類名和 JavaBean 初始化屬性定義) 或 FactoryBeanFactoryBean 介面為使用 Spring 框架構建的應用程式添加了一個間接的級別。