###1. 關於PreparedStatement和Statement具體區別 (1) PreparedStatement是預先編譯的語句
,而Statement則不是預先編譯的
,在DBMS中處理管理中Statement是要進行語法、語義校驗的
,而PreparedStatement則不要。 (2) PrepareStatement中執行的SQL語句中是能夠帶參數的
,而Statement則不能夠
。 好比: PreparedStatement pstmt = con.prepareStatement("UPDATE EMPLOYEES SET SALARY = ? WHERE ID = ?"); pstmt.setBigDecimal(1, 153833.00); pstmt.setInt(2, 110592); pstmt. executeUpdate(); (3) 當處理批量SQL語句時,這個時候就能夠體現PrepareStatement的優點,因爲採用Cache機制,則預先編譯的語句,就會放在Cache中,下次執行相同SQL語句時,則能夠直接從Cache中取出來
。程序員
###2. 說出數據鏈接池的工做機制是什麼? J2EE 服務器啓動時會創建必定數量的池鏈接
,並一直維持很多於此數目的池鏈接。客戶端程序須要鏈接時,池驅動程序會返回一個未使用的池鏈接並將其表記爲忙
。若是當前沒有空閒鏈接,池驅動程序就新建必定數量的鏈接
,新建鏈接的數量有配置參數決定。當使用的池鏈接調用完成後,池驅動程序將此鏈接表記爲空閒
,其餘調用就可使用這個鏈接。spring
###3. Hibernate工做流程及爲何要用? 工做流程: 1.讀取並解析配置文件 2.讀取並解析映射信息,建立SessionFactory 3.打開Sesssion 4.建立事務Transation 5.持久化操做 6.提交事務 7.關閉Session 8.關閉SesstionFactory數據庫
爲何要用:編程
###4. Hibernate是如何延遲加載?設計模式
當Hibernate在查詢數據的時候,數據並無存在與內存中,當程序真正對數據的操做時,對象才存在於內存中,就實現了延遲加載
,他節省了服務器的內存開銷,從而提升了服務器的性能。瀏覽器
###5. Hibernate中怎樣實現類之間的關係?(如:一對多、多對多的關係) 類與類之間的關係主要體如今表與表之間的關係進行操做,它們都對對象進行操做,咱們程序中把全部的表與類都映射在一塊兒,它們經過配置文件中的many-to-one、one-to-many、many-to-many
緩存
###6. 說下Hibernate的緩存機制安全
應用事務級緩存
應用級緩存
b) 分佈式緩存
條件:數據不會被第三方修改、數據大小在可接受範圍、數據更新頻率低、同一數據被系統頻繁使用、非關鍵數據 c) 第三方緩存的實現
###7. Hibernate的查詢方式 Sql、Criteria、object comptosition Hql:服務器
###8. 如何優化Hibernate?session
###12. Spring MVC工做機制及爲何要用? 1.Spring mvc將全部的請求都提交給DispatcherServlet
,它會委託應用系統的其餘模塊負責對請求進行真正的處理工做。 2.DispatcherServlet查詢一個或多個HandlerMapping,找處處理請求的Controller
。 3.DispatcherServlet將請求提交到目標Controller
。 4.Controller進行業務邏輯處理後,會返回一個ModelAndView
。 5.Dispathcher查詢一個或多個ViewResolver視圖解析器,找到ModelAndView對象指定的視圖對象 6.視圖對象負責渲染返回給客戶端。
爲何用: AOP讓開發人員能夠建立非行爲性的關注點,稱爲橫切關注點
,並將它們插入到應用程序代碼中。使用AOP後,公共服務(好比日誌、持久性、事務等)就能夠分解成方面並應用到目標對象上,同時不會增長目標對象的對象模型的複雜性
。
IOC容許建立一個能夠構造對象的應用環境,而後向這些對象傳遞它們的協做對象。正如單詞倒置所代表的,IOC就像反過來的JNDI。沒有使用一堆抽象工廠、服務定位器、單元素(singleton)和直接構造(straight construction),每個對象都是用其協做對象構造的。所以是由容器管理協做對象(collaborator)。
Spring即便一個AOP框架,也是一IOC容器。 Spring最好的地方是它有助於您替換對象。有了Spring,只要用JavaBean屬性和配置文件加入依賴性(協做對象)。而後能夠很容易地在須要時替換具備相似接口的協做對象。
Spring框架是一個分層架構,由7個定義良好的模塊組成。Spring模塊構建在覈心容器之上,核心容器定義了建立、配置和管理 bean 的方式,如圖 1 所示。
組成 Spring 框架的每一個模塊(或組件)均可以單獨存在,或者與其餘一個或多個模塊聯合實現。每一個模塊的功能以下: 核心容器
:核心容器提供 Spring 框架的基本功能。核心容器的主要組件是 BeanFactory,它是工廠模式的實現。BeanFactory 使用控制反轉 (IOC) 模式將應用程序的配置和依賴性規範與實際的應用程序代碼分開。 Spring 上下文
:Spring 上下文是一個配置文件,向 Spring 框架提供上下文信息。Spring 上下文包括企業服務,例如 JNDI、EJB、電子郵件、國際化、校驗和調度功能。 Spring AOP
:經過配置管理特性,Spring AOP 模塊直接將面向方面的編程功能集成到了 Spring 框架中。因此,能夠很容易地使 Spring 框架管理的任何對象支持 AOP。Spring AOP 模塊爲基於 Spring 的應用程序中的對象提供了事務管理服務。經過使用 Spring AOP,不用依賴 EJB 組件,就能夠將聲明性事務管理集成到應用程序中。 Spring DAO
:JDBC DAO 抽象層提供了有意義的異常層次結構,可用該結構來管理異常處理和不一樣數據庫供應商拋出的錯誤消息。異常層次結構簡化了錯誤處理,而且極大地下降了須要編寫的異常代碼數量(例如打開和關閉鏈接)。Spring DAO 的面向 JDBC 的異常聽從通用的 DAO 異常層次結構。 Spring ORM
:Spring 框架插入了若干個 ORM 框架,從而提供了 ORM 的對象關係工具,其中包括 JDO、Hibernate 和 iBatis SQL Map。全部這些都聽從 Spring 的通用事務和 DAO 異常層次結構。 Spring Web 模塊
:Web 上下文模塊創建在應用程序上下文模塊之上,爲基於 Web 的應用程序提供了上下文。因此,Spring 框架支持與 Jakarta Struts 的集成。Web 模塊還簡化了處理多部分請求以及將請求參數綁定到域對象的工做。 Spring MVC 框架
:MVC 框架是一個全功能的構建 Web 應用程序的 MVC 實現。經過策略接口,MVC 框架變成爲高度可配置的,MVC 容納了大量視圖技術,其中包括 JSP、Velocity、Tiles、iText 和 POI。 Spring 框架的功能能夠用在任何 J2EE 服務器中,大多數功能也適用於不受管理的環境。Spring 的核心要點是:支持不綁定到特定 J2EE 服務的可重用業務和數據訪問對象。毫無疑問,這樣的對象能夠在不一樣J2EE 環境 (Web 或 EJB)、獨立應用程序、測試環境之間重用。 控制反轉模式(也稱做依賴性介入)的基本概念是:不建立對象,可是描述建立它們的方式
。在代碼中不直接與對象和服務鏈接,但在配置文件中描述哪個組件須要哪一項服務。容器 (在 Spring 框架中是 IOC 容器) 負責將這些聯繫在一塊兒
。 在典型的 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 所示。 清單 1. XmlBeanFactory BeanFactory factory = new XMLBeanFactory(new FileInputSteam("mybean.xml"));
在 XML 文件中定義的 Bean 是被消極加載的,這意味在須要 bean 以前,bean 自己不會被初始化。要從 BeanFactory 檢索 bean,只需調用 getBean() 方法,傳入將要檢索的 bean 的名稱便可,如清單 2 所示。 清單 2. getBean() MyBean mybean = (MyBean) factory.getBean("mybean");
每一個 bean 的定義均可以是 POJO (用類名和 JavaBean 初始化屬性定義) 或 FactoryBean。FactoryBean 接口爲使用 Spring 框架構建的應用程序添加了一個間接的級別。
###13. Struts是否線程安全的,不是怎麼處理使它安全. 不安全. 解決方法:
採用單線程方式
在JSP文件中加上,使它以單線程方式執行,這時仍然只有一個實例,全部客戶端的請求以串行方式執行.這樣會下降系統的性能.對函數加synchronized進行線程同步,JSP仍然以多線程方式執行,可是也會下降系統性能.
採用局部變量代替實例變量
###14. Struts中文亂碼怎麼處理 一、 全部HTML/JSP頁面所有采用UTF-8編碼 二、 客戶端瀏覽器徹底支持UTF-8編碼
###15. Hibernate最常遇到一種異常 空指針(ObjectNotFoundExceptio).
###16. Hibernate session 的 get()和load()有什麼區別 1. 若是未能發現符合條件的記錄,get方法返回null,而load方法會拋出一個ObjectNotFoundException
。 2. load方法可返回實體的代理類實例,而get方法永遠直接返回實體類
。 3. load方法能夠充分利用內部緩存和二級緩存中的現有數據,而get方法則僅僅在內部緩存中進行數據查找,如沒有發現對應數據,將越過二級緩存,直接調用SQL完成數據讀取
。
###17. Hibernate延長加載
實體對象的延遲加載
,在set中指定lazy=true 這樣只有實際加載與對象相關聯的集合對象的時候,再經過session從數據庫中加載實際的數據集屬性延遲加載
,在property節點中聲明lazy=true 還須要藉助Hibernate類加強器對POJO類的二進制Class文件進行強化處理.###18. Hibernate中事務怎麼處理 Hibernate有三種事務:1. JDBC 2. JTA事務 3. CMT事務;在這三種事務中,JDBC事務是默認的
。 這就意味着若是未設置hibernate.properties文件中的hibernate.transaction_factory的鍵值,beginTransaction將返回一個JDBC事務。 雖然一個會話中能夠包含多個事務,但並不須要人爲地對這些事務進行分割,而是由會話中的一些方法對多個事務進行管理的。下面將詳細描述這些方法: commit()方法是提交事務的方法。在這方法在內部調用了會話對象的save()方法。
當調用這個方法時,若是這個事務已經被初始化,那麼這個事務將成功提交。