Java面試之對五大框架的理解

五大框架(springMVC,struts2,spring,mybatis,hibernate)

說說你對springMVC框架的理解?

簡要口述(如果感覺說的少可以在完整答案裏面挑幾條說)

Springmvc就是spring框架的一個模塊,它是一個基於mvc設計思想的前端web層框架,主要作用就是對前端請求進行處理。

完整答案

Springmvc就是spring框架的一個模塊,所以它可以和spring框架可以進行無縫整合,它是一個基於mvc設計思想的前端web框架,主要作用就是對前端請求進行處理。他的前端控制器是一個servlet.它的請求攔截是基於方法級別的.他的執行流程是

Spring的MVC框架主要由DispatcherServlet、處理器映射、處理器(控制器)、視圖解析器、視圖組成

1. 客戶端請求提交到DispatcherServlet

2. 由DispatcherServlet控制器查詢一個或多個HandlerMapping,找到處理請求的Controller

3. DispatcherServlet將請求提交到Controller

4. Controller調用業務邏輯處理後,返回ModelAndView

5. DispatcherServlet查詢一個或多個ViewResoler視圖解析器,找到ModelAndView指定的視圖

6. 視圖負責將結果顯示到客戶端

備註: 

mvc指的就是Model(業務模型)、View(視圖)、Controller(控制器)

 

說說你對struts2框架的理解?

簡要口述(如果感覺說的少可以在完整答案裏面挑幾條說)

Struts2,它是一個基於mvc設計思想的前端web層框架,主要作用就是對前端請求進行處理。他的核心是攔截器.但是他的前端控制器是一個過濾器

完整答案

Struts2,它是一個基於mvc設計思想的前端web層框架,主要作用就是對前端請求進行處理。他的核心是攔截器.但是他的前端控制器是一個過濾器. 它的請求攔截是基於類級別,OGNL也提供了在Struts2裏訪問各種作用域中的數據的簡單方式.大大簡化了獲取數據的代碼.struts2的執行流程是:

A. 頁面請求傳遞到後臺, 首先進入Struts2 的核心過濾器 StrutsPrepareAndExecutedFilter .

B. 請求進入到struts2 之後, 會根據請求的路徑到 struts.xml 文件中根據 package的 namespace 屬性 與 action 的 name 屬性配置到請求處理的Action 類.

C. 匹配到對應 Action 類的對應方法 , 執行該方法進行業務處理, 處理完畢之後會返回一個結果視圖(字符串).

D. 然後根據返回的結果視圖 , 到struts.xml 中對應的Action的result結果集配置中 匹配 對應的視圖頁面(或action).

E. 然後根據 result 的type屬性, 轉發(或重定向) 對應的頁面(或action).

 

 

SpringMVC和Struts2兩個框架對比一下.

簡要口述(如果感覺說的少可以在完整答案裏面挑幾條說)

注意:兩個技術已經很多年了,技術非常成熟.用戶羣體很大.不能片面的用好與不好來說.只能說適合不適合.因爲每個東西都有擅長和不擅長

 

注意:說出幾點即可

1、springmvc入口是一個servlet前端控制器,struts2入口是一個filter過慮器。

2、struts2通過在action類中定義成員變量接收請求參數,struts2只能使用多例模式管理action。

springmvc通過在controller方法中定義形參接收請求參數,springmvc可以使用單例模式管理controller。

3、springmvc是基於方法開發的,註解開發中使用requestMapping將url和方法進行映射,如果根據url找到controller類的方法生成一個Handler處理器對象(只包括一個method)。

struts2是基於類開發,每個請求過來創建一個action實例,實例對象中有若干的方法。

開發中建議使用springmvc,springmvc方法更類似service業務方法。

4、Struts採用值棧存儲請求和響應的數據,通過OGNL存取數據, springmvc通過參數綁定器是將request請求內容解析,並給方法形參賦值。

 

說說你對spring框架的理解?他的作用是什麼?

 

簡要口述(如果感覺說的少可以在完整答案裏面挑幾條說)

Spring的核心有很多.其中比較主要也是我們常用的就是AOP,IOC,DI.也就是面向切面編程,控制反轉,依賴注入.Spring一般是作爲容器管理其他框架.例如常見的web層框架(struts2,springMVC)和持久成框架(mybatis,hibernate).一般都由spring來管理

完整答案

    (1)aop:面向切面編程,將跟業務邏輯沒有關係的代碼提取出來,在調用目標方法之前或者之後執行。常用的場景,事務,日誌,權限控制,異常處理等方面。

    (2)ioc:創建對象的權利,交給spring容器創建。

    (3)di:如果一個對象A需要使用另一個對象B才能實現某個功能,這時就可以說A對象依賴於B對象,而Spring容器在創建A對象時,會自動將A對象需要的B對象注入到A對象中,此過程就是依賴注入。

 

核心容器:核心容器提供 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。

 

 

說說你對mybatis框架的理解

簡要口述(如果感覺說的少可以在完整答案裏面挑幾條說)

Mybatis是一個優秀的ORM框架.應用在持久層. 它對jdbc的 操作數據庫過程 進行封裝,使開發者只需要關注 SQL 本身,而不需要花費精力去處理例如註冊驅動、創建connection、等jdbc繁雜的過程代碼.一般使用mapper代理的方式開發.直接在xml裏面寫sql(如果對hibernate瞭解.可以話題轉向mybatis和hibernate的對比)

完整答案

Mybatis的工作流程

 

1、  mybatis配置

SqlMapConfig.xml,此文件作爲mybatis的全局配置文件,配置了mybatis的運行環境等信息。

mapper.xml文件即sql映射文件,文件中配置了操作數據庫的sql語句。此文件需要在SqlMapConfig.xml中加載。

2、  通過mybatis環境等配置信息構造SqlSessionFactory即會話工廠

3、  由會話工廠創建sqlSession即會話,操作數據庫需要通過sqlSession(DefaultSqlSession)進行。

4、  mybatis底層自定義了Executor(BaseExecutor)執行器接口操作數據庫,Executor接口有兩個實現,一個是基本執行器、一個是緩存執行器。

5、  Mapped Statement也是mybatis一個底層封裝對象,它包裝了mybatis配置信息及sql映射信息等。mapper.xml文件中一個sql對應一個Mapped Statement對象,sql的id即是Mapped statement的id。

6、  Mapped Statement對sql執行輸入參數進行定義,包括HashMap、基本類型、pojo,Executor通過 Mapped Statement在執行sql前將輸入的java對象映射至sql中,輸入參數映射就是jdbc編程中對preparedStatement設置參數。

7、  Mapped Statement對sql執行輸出結果進行定義,包括HashMap、基本類型、pojo,Executor通過 Mapped Statement在執行sql後將輸出結果映射至java對象中,輸出結果映射過程相當於jdbc編程中對結果的解析處理過程。

 

 

說說你對hibernate框架的理解

簡要口述(如果感覺說的少可以在完整答案裏面挑幾條說)

Hibernate是輕量級的持久層解決方案,是一個關係數據庫ORM框架, 對JDBC訪問數據庫的代碼做了封裝.我們可以很容易的對數據庫進行增刪改查操作.

完整答案

hibernate查詢方式?

    (1)導航對象圖檢索方式。根據已經加載的對象,導航到其他對象。

    (2)OID檢索方式。使用get或者load加載對應的對象

    (3)HQL檢索方式。

    (4)QBC檢索方式。

    (5)SQL檢索方式。

sql與hql的區別?

    (1)sql是直接操作數據庫的

    (2)hql是通過操作對象操作數據庫,對大小寫敏感。

一級緩存和二級緩存的區別?

    (1)一級緩存是session級別的緩存,二級緩存是sessionFactory級別的緩存。

hibernate中get和load的區別?

    get和load都是根據id獲取數據。

    (1)get先查詢session中對應id是否有數據,如果有則直接返回,有查詢數據庫,如數據庫中沒有則返回爲null;

    (2)load方式查詢session中對應id是否有數據,如果沒有生成代理對象,查詢數據庫。如沒有對應的id則拋出異常

 

Hibernate和mybatis對比

簡要口述(如果感覺說的少可以在完整答案裏面挑幾條說)

注意:兩個技術已經很多年了,技術非常成熟.用戶羣體很大.不能片面的用好與不好來說.只能說適合不適合.因爲每個東西都有擅長和不擅長

1. 在移植性方面hibernate配置一下方言即可.而一般情況下mybatis則需要修改sql語句

2. hibernate是一個完全的ORM框架.完全的面向對象.更符合我們開發者的思維模式.mybatis需要我們手動寫sql語句

3. hibernate的優化成本比較高.因爲hibernate的sql語句是自動生成的,所以在優化方面一般的新手無從下手.而mybatis只要修改sql就可以了.更加容易上手

(如果對某一個框架非常瞭解.這裏話鋒可以轉向具體的詳細介紹某一個框架)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章