Spring 面試回答:
1.什麼是Spring框架,Spring有哪些核心木塊
1.1.Spring 是個java企業級應用的開源開發框架。
Spring主要用來開發Java應用,但是有些擴展是針對構建J2EE平臺的web應用。
1.2.七個核心模塊
1.Spring WEB MVC
MVC 框架是一個全功能的構建 Web 應用程序的 MVC 實現。
2.Spring WEB :
Web 上下文模塊建立在應用程序上下文模塊之上,爲基於 Web 的應用程 序提供了上下文。所以,Spring 框架支持與 Struts2 的集成。
3.Spring ORM :
Spring 框架插入了若干個 ORM 框架,從而提供了 ORM 的對象關係工具,其中包括 JDO、Hibernate 和 iBatis SQL Map。所有這些都遵從 Spring 的通用事務和 DAO 異常層次結構
4.Spring AOP:
通過配置管理特性,Spring AOP 模塊直接將面向方面的編程功能集成到了 Spring 框架中
5.Spring DAO:
JDBC DAO 抽象層提供了有意義的異常層次結構,Spring DAO 的面向 JDBC 的異常遵從通用的 DAO 異常層次結構。
6.Spring Context:JEE
Spring 上下文是一個配置文件,向 Spring 框架提供上下文信息。Spring 上下文包括企業服務,例如 JNDI、EJB、電子郵件、國際化、校驗和調度功能。
7.Spring Core :
核心容器提供 Spring 框架的基本功能。核心容器的主要組件是 BeanFactory,它是工廠模式的實現。BeanFactory 使用控制反轉 (IOC) 模式將應用程序的配置和依賴性規範與實際的應用程序代碼分開。
2.spring 在項目中如何使用
1 spring對於程序開發人員來說是透明的
2 spring讓三層架構之間降低耦合度。(低耦合 高內聚)
3 Aop 切面編程特性 幫我們處理事務和 日誌。
3.Struts面試問題
Struts 中MVC的理解,以及Struts在web中的使用
M: Model,模型,操作數據的業務處理層,並獨立於表現層
V: 視圖,通過客戶端數據類型顯示數據,並回顯模型層的執行結果。
C: 控制器,也就是視圖層和模型層橋樑,控制數據的流向,接受視圖層發出的事件,並重繪視圖
4.MVC的優點缺點
優點:
1)視圖控制模型分離, 提高代碼重用性。
2)提高開發效率。
3)便於後期維護, 降低維護成本。
4)方便多開發人員間的分工。
缺點:
1)清晰的構架以代碼的複雜性爲代價, 對小項目優可能反而降低開發效率。
2)運行效率相對較低
簡單簡述下struts2的執行流程
基本簡要流程如下:
1、客戶端瀏覽器發出HTTP請求。
2、根據web.xml配置,該請求被FilterDispatcher接收。
3、根據struts.xml配置,找到需要調用的Action類和方法, 並通過IoC方式,將值注入給Aciton。
4、Action調用業務邏輯組件處理業務邏輯,攔截器等這一步包含表單驗證。
5、Action執行完畢,根據struts.xml中的配置找到對應的返回結果result,並跳轉到相應頁面。
6、返回HTTP響應到客戶端瀏覽器。
爲什麼要使用struts框架
使用struts的原因:
JSP、Servlet、JavaBean技術的出現給我們構建強大的企業應用系統提供了可能。但用這些技術構建的系統非常的繁亂,所以在此之上,我們需要一個規則、一個把這些技術組織起來的規則,這就是框架,Struts便應運而生。
基於Struts開發的應用由3類組件構成:控制器組件、模型組件、視圖組件。
5.Hibernate 框架的使用
Hibernate中get和load有什麼不同之處?
1 load方式檢索不到的話會拋出org.hibernate.ObjectNotFoundException異常
get方法檢索不到的話會返回null,
2 get方法是直接從數據庫中檢索數據
而load方法的執行則比較複雜首先查找session緩存中找,如果有則直接返回 如果沒有則判斷是否是lazy如果不是直接訪問數據庫檢索,查到記錄返回,查不到拋出異常 。
Hibernate中save、persist和saveOrUpdate這三個方法的不同之處
save()只能INSERT記錄,但是saveOrUpdate()可以進行 記錄的INSERT和UPDATE。還有,save()的返回值是一個Serializable對象,而persist()方法返回值爲void。
Hibernate 的優勢
首先、Hibernate對JDBC訪問數據庫的代碼做了封裝,大大簡化了數據訪問層繁瑣的重複性代碼。
其次、Hibernate是一個基於JDBC的主流持久化框架,是一個優秀的ORM實現,它很大程度的簡化了DAO層編碼工作。
再次、Hibernate使用Java的反射機制,而不是字節碼增強程序類實現透明性。
最後、Hibernate的性能非常好,因爲它是一個輕量級框架。映射的靈活性很出色。它支持很多關係型數據庫,從一對一到多對多的各種複雜關係。
Hibernate的工作原理:
1.讀取並解析Hibernate核心配置文件hibernate.cfg.xml
2.讀取並解析Hibernate映射文件,創建SessionFactory
3.打開Sesssion
4.創建事務Transation
5.持久化操作
6.提交事務
7.關閉Session
8.關閉SesstionFactory
6.mybatis和hibernate的區別
mybatis
1.需要人工編寫sql語句
2.擴展性差 跟數據庫耦合度較高 如果更換數據庫 需要重新編寫sql
3.開發效率 沒有hibernate高 運行效率比hibernate高
hibernate 1 自動生成 並且提供了封裝的常用接口 Query SqlQuery
2 擴展性 好 跟數據庫耦合度地 更換數據庫 只需要更改方言 和主鍵生成策略
3 開發效率較高 運行效率低於myBiatis
hibernate 如何理解
1 輕量級jdbc
2 orm 對象關係映射
3 方言
4 逆向生成表
5 內置樂觀鎖
6 數據庫優化
1 一二緩存
2 把複雜sql創建爲視圖 經常使用的查詢列 創建 索引
3 把複雜的業務邏輯 通過函數和過程
4 連接池!!!
7.事務
JDBC 用於單一數據源 的一個事務處理
JTA 用於 多個數據源 分佈式事務處理
9.SpringMVC 和Struts2 的區別
1:spring3 mvc開發效率高於struts
2:spring3 mvc可以認爲已經100%零配置
3:struts2是類級別的攔截, 一個類對應一個request 請求,
springmvc是方法級別的攔截,一個方法對應一個request請求,而方法同時又跟一個url對應
所以說從架構本身上 spring3 mvc就容易實現
而struts2的架構實現起來要費勁
因爲struts2 action的一個方法可以對應一個url
而其類屬性卻被所有方法共享,這也就無法用註解或其他方式標識其所屬方法了
4:spring3mvc的方法之間基本上獨立的,獨享request response數據
請求數據通過參數獲取,處理結果通過ModelMap交回給框架
方法之間不共享變量
而struts2搞的就比較亂,雖然方法之間也是獨立的,但其所有Action變量是共享的
這不會影響程序運行,卻給我們編碼 讀程序時帶來麻煩
5:由於Struts2需要針對每個Request進行封裝,
把Request,Session等Servlet生命週期的變量封裝成一個一個Map