首頁 Java Java面試題 2023最新SSH框架面試題彙總

2023最新SSH框架面試題彙總

Oct 19, 2020 pm 05:02 PM
面試題 ssh框架

2023最新SSH框架面試題彙總

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

(更多相關面試題推薦:java面試題目及答案

運作方式:

    1.讀取與解析配置文件

    2.讀取並解析映射信息,創建SessionFactory

    3.打開Session

    4.創建事務Transation

    5.持久化作業

    6.提交交易

    7.關閉Session

    8。 ##為什麼要使用Hibernate(也就是它的優點):


    1. 對JDBC存取資料庫的程式碼做了封裝,大幅簡化了資料存取層繁瑣的重複性程式碼。


    2. Hibernate是基於JDBC的主流持久化框架,是優秀的ORM實作。他很大程度的簡化DAO層的編碼工作


    3. hibernate使用Java反射機制,而不是字節碼增強程式來實現透明性。


    4. hibernate對映的彈性優異。它支援各種關係資料庫,從一對一到多對多的各種複雜關係。

2,  Hibernate中get和load方法的區別

        hibernate對於load方法認為資料在資料庫中一定存在,並且可以放心的使用代理來延遲加載,如果在使用過程中發現了問題,只能拋異常;

        hibernate對於get方法,hibernate一定要取得真實的數據,否則回傳null。

具體介紹:

        1. 對於get方法,hibernate會確認一下該id對應的資料是否存在,首先在session快取中查找,然後在二級快取中查找,還沒有就查詢資料庫,資料庫中沒有就回傳null。

        2.  load方法載入實體物件的時候,依照對應檔案上類別層級的lazy屬性的設定(預設為true)。

分數討論:

        (1)若為true,則首先在Session快取中查找,看看該id對應的物件是否存在,不存在則使用延遲加載,返回實體的代理類別物件(此代理類別為實體類別的子類,由CGLIB動態產生)。等到具體使用該物件(除取得OID以外)的時候,再查詢二級快取和資料庫,若仍沒發現符合條件的記錄,則會拋出一個ObjectNotFoundException。

        (2)若為false,就跟get方法查找順序一樣,但最終若沒發現符合條件的記錄,則會拋出一個ObjectNotFoundException。

3,Hibernate是如何延遲載入?

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


4,Hibernate中怎樣實現類別之間的關係?

        類別與類別之間的關係主要體現在表與表之間的關係運作,而它們都是對物件進行操作,我們在程式中把所有的表與類別都映射在一起,它們透過設定檔中的many-to-one、one-to-many、many-to-many來操作。

5,Hibernate中的update()和saveOrUpdate()的差別?

saveOrUpdate():

    1,如果物件已經在本session中持久化了,不做任何事

    2,如果另一個與本session關聯的對象擁有相同的持久化標識(identifier),拋出一個異常

    3,如果對象沒有持久化標識(identifier)屬性,對其調用save()

#    4,如果對象的持久標識(identifier)表明其是新實例化的對象,對其調用save()

    5,如果對像是附帶版本資訊的(透過)並且版本屬性的值表示其是新實例化的對象,呼叫save()。否則update() 這個物件。

update() :

是直接將一個遊離狀態的實體物件更新。

6,說說Hibernate的快取機制。

1. 一級快取:內部快取存在Hibernate中,屬於應用事物層級快取。

2. 二級快取:應用程式級快取、 分散式快取。

使用情境:資料不會被第三方修改、資料大小在可接受範圍、資料更新頻率低、相同資料被系統頻繁使用、非關鍵資料

3.引入第三方快取(如ehcache等)。

7,如何最佳化Hibernate?

1.使用雙向一對多關聯,不使用單向一對多

2.靈活使用單向一對多關聯

3.不用一對一,用多對一取代

4.配置物件緩存,不使用集合緩存

5.一對多集合使用Bag,多對多集合使用Set

6 . 繼承類別使用明確多態

7. 表格欄位要少,表格關聯不要怕多,有二級快取撐腰

8,談談hibernate的延遲載入和openSessionInView

        延遲載入要在session範圍內,用到的時候再加載;

        opensessioninview是在web層寫了一個filter來開啟和關閉session,這樣一次就表示在sessionrequest過程中表示在一次開著,保證了延遲載入在session中的這個前提。

(影片推薦:java課程

9,簡單闡述struts2的工作流程

1、用戶端瀏覽器發出HTTP請求。

2、根據web.xml配置,該請求被FilterDispatcher接收。

3、根據struts.xml配置,找到需要呼叫的Action類別和方法,並透過IoC方式,將值注入給Aciton。

4、Action呼叫業務邏輯元件處理業務邏輯,這一步驟包含表單驗證。

5、Action執行完畢,根據struts.xml中的設定找到對應的回傳結果result,並跳到對應頁面。

6、回傳HTTP回應到客戶端瀏覽器。

10,說下Struts的設計模式

MVC模式

  1,web應用程式啟動時就會載入並初始化ActionServlet;

#  2,使用者提交表單時,一個配置好的ActionForm物件被創建,並被填入表單對應的資料;

  3,ActionServlet根據Struts-config.xml檔案配置好的設定決定是否需要表單驗證,如果需要就呼叫ActionForm的Validate()驗證後選擇將請求傳送到哪個Action,如果Action不存在,ActionServlet會先建立這個對象,然後呼叫Action的execute()方法;

  4, Execute()從ActionForm物件取得數據,完成業務邏輯,傳回一個ActionForward對象,ActionServlet再把客戶要求轉送給ActionForward物件指定的jsp元件;

  5,ActionForward物件指定的jsp產生動態的網頁,返回給客戶。

11,Struts的優缺點

優點:

    1. 實現MVC模式,結構清晰,使開發者只專注於業務邏輯的實現.

    2. 有豐富的tag可用,Struts的標記庫(Taglib),如能靈活動用,則能大幅提升開發效率。另外,就目前國內的JSP開發者而言,除了使用JSP自帶的常用標記外,很少開發自己的標記,或許Struts是一個很好的起點。

    3. 頁面導航.頁面導航將是未來的一個發展方向,事實上,這樣做,使系統的脈絡更加清晰。透過一個配置文件,即可掌握整個系統各部分之間的聯繫,這對於後期的維護有著莫大的好處。尤其是當另一批開發者接手這個專案時,這種優勢體現得更​​明顯。

    4. 提供Exception處理機制.

    5.資料庫連結池管理

    6. 支援I18N

## 

  6. 支援I18N

##  . 轉到展示層時,需要配置forward,每次轉到展示層,相信大多數都是直接轉到jsp,而涉及到轉向, 需要配置forward,如果有十個展示層的jsp,需要配置十次struts,而且還不包括有時目錄、文件變更,需要重新修改forward,注意,每次修改配置之後,要求重新部署整個項目,而tomcate這樣的伺服器,還必須重新啟動伺服器,如果業務變更複雜頻繁的系統,這樣的操作簡單不可想像。現在就是這樣,幾十上百個人同時在線上使用我們的系統,大家可以想像一下,我的煩惱有多大。

    2. Struts 的Action必需是thread-safe方式,它只允許一個實例去處理所有的請求。所以action用到的所有的資源都必需統一同步,這就造成了線程安全的問題。

    3.測試不方便. Struts的每個Action都同Web層耦合在一起,這樣它的測試依賴於Web容器,單元測試也很難實現。不過有一個Junit的擴充工具Struts TestCase可以實現它的單元測試。

    4. 類型的轉換. Struts的FormBean把所有的資料都當作String類型,它可以使用工具Commons-Beanutils進行型別轉換。但它的轉換都是在Class級別,而且轉換的類型是不可設定的。類型轉換時的錯誤訊息回傳給使用者也是非常困難的。

    5. 對Servlet的依賴性過強. Struts處理Action時必需要依賴ServletRequest 和ServletResponse,所有它擺脫不了Servlet容器。

    6. 前端表達式語言方面.Struts整合了JSTL,所以它主要使用JSTL的表達式語言來取得資料。可是JSTL的表達式語言在Collection和索引屬性方面處理顯得很弱。

    7. 對Action執行的控制困難. Struts建立一個Action,如果想要控制它的執行順序將會非常困難。甚至你要重新去寫Servlet來實現你的這個功能需求。

    8. 對Action 執行前和後的處理. Struts處理Action的時候是基於class的hierarchies,很難在action處理前後進行操作。

    9. 對事件支援不夠. 在struts中,實際是一個表單Form對應一個Action類別(或DispatchAction),換句話說:在Struts中實際是一個表單只能對應一個事件,struts這種事件方式稱為applicationevent,application event和component event是一種粗粒度的事件。

12,為什麼要使用spring(即優點)?

    1. Spring能有效地組織你的中間層對象,不管你是否選擇使用了EJB。如果你僅僅使用了Struts或其他為J2EE的 API特製的framework,Spring致力於解決剩下的問題。

    2. Spring能消除許多工程常見的Singleton的過度使用。過度使用Singleton降低了系統的可測試性和物件導向的程度。

    3. 透過一種在不同應用程式和專案間一致的方法來處理設定文件,Spring能消除各種自訂格式的屬性檔案的需求。曾經對某個類別要尋找的是哪個魔法般的 屬性項或系統屬性感到不解,為此不得不去讀Javadoc甚至源編碼?有了Spring,你只需要看看類別的JavaBean屬性。 Inversion ofControl的使用(在下面討論)幫助完成了這種簡化。

    4.透過將介面程式設計而非對類別程式設計的代價幾乎減少到沒有,Spring能夠促進養成好的程式設計習慣。

    5. Spring被設計為讓使用它所創造的應用程式盡可能少的依賴於他的APIs。在Spring應用中的大多數業務對象並沒有依賴Spring。

    6. 使用Spring建構的應用程式易於單元測試。

    7.Spring能使EJB的使用成為實現選擇,而不是應用架構的必然選擇。你能選擇用POJOs或local EJBs來實現業務接口,卻不會影響調用代碼。

    8. Spring幫助你解決許多問題而無需使用EJB。 Spring能提供一種EJB的替換物,它們適用於許多web應用。例如,Spring能使用AOP提供聲明性事務管理而不通過EJB容器,如果你只需要與單一資料庫打交道,甚至不需要一個JTA實作。

    9. Spring為資料存取提供了一個一致的架構,不論是使用的是JDBC還是O/R mapping產品(如Hibernate)。

13,列舉你所知道的實現spring事務的幾種方式

    (1),程式設計事務管理:需要手動編寫程式碼,在實際開發中很少使用,

    (2),基於TransactionProxyFactoryBean的宣告式交易管理,需要為每個進行事務管理的類別做對應設定

    (3),基於AspectJ的XML的宣告式交易管理,不需要改變類,在XML文件中配置好即可

    (4),基於註解的聲明式事務管理,配置簡單,需要在業務層類中添加註解

#14,談談spring交易的隔離等級和傳播行為

隔離等級:

    - DEFAULT使用資料庫預設的隔離等級

    - READ_UNCOMMITTED會出現髒讀,無法重複讀取而幻影讀取問題

    - READ_COMMITTED會出現重複讀取和幻影讀取

    - REPEATABLE_READ會出現幻影讀取

    - SERIALIZABLE 最安全,但是極為嚴重性能影響

和傳播行:

    - REQUIRED存在事務就融入該事務,不存在就創建事務

    - SUPPORTS存在事務就融入事務,不存在則不創建事務

    - MANDATORY有事務則融入該事務,不存在,拋例外

    - REQUIRES_NEW總是創建新事務

    - NOT_SUPPORTED事務作業

    - NEVER總是執行非事務,如果目前有事務則丟棄例外

    - NESTED嵌入式事務

15,什麼是DI機制?
        依賴注入(Dependecy Injection)和控制反轉(Inversion of Control)是同一個概念,具體的講:當某個角色需要另一個角色協助的時候,在傳統的程式設計過程中,通常由調用者來創建被呼叫者的實例。

        但在spring中 創造被召喚者的工作不再由召喚者來完成,因此稱為控制反轉。創建被呼叫者的工作由spring來完成,然後注入呼叫者 
因此也稱為依賴注入。

        spring以動態彈性的方式管理物件 , 注入的兩種方式,設定注入與建構注入。 
        設定注入的優點:直觀,自然 
        建構注入的優點:可在建構者中決定依賴關係的順序。

16,什麼是AOP?
面向切面編程(AOP)完善spring的依賴注入(DI),

面向切面編程在spring中主要表現為兩個方面:
1.面向切面編程提供聲明式事務管理
2.spring支援使用者自訂的切面

推薦教學:java入門

以上是2023最新SSH框架面試題彙總的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

五個常見的Go語言面試問題及解答 五個常見的Go語言面試問題及解答 Jun 01, 2023 pm 08:10 PM

作為近年來備受熱捧的程式語言,Go語言已成為許多公司與企業的面試熱點。對於Go語言初學者而言,在面試過程中遇到相關問題時,如何回答是一個值得探討的問題。以下列舉五個常見的Go語言面試題目及解答,供初學者參考。請介紹一下Go語言的垃圾回收機制是如何運作的? Go語言的垃圾回收機制是基於標記-清除演算法和三色標記演算法。當Go程式中的記憶體空間不夠用時,Go垃圾回收器

2023年前端React面試題大總結(收藏) 2023年前端React面試題大總結(收藏) Aug 04, 2020 pm 05:33 PM

php中文網作為知名程式設計學習網站,為您整理了一些React面試題,幫助前端開發人員準備和清除React面試障礙。

2023年精選Web前端面試題大全及答案(收藏) 2023年精選Web前端面試題大全及答案(收藏) Apr 08, 2021 am 10:11 AM

本篇文章為大家總結一些值得收藏的精選Web前端面試題(附答案)。有一定的參考價值,有需要的朋友可以參考一下,希望對大家有幫助。

50個你必須掌握的Angular面試題(收藏) 50個你必須掌握的Angular面試題(收藏) Jul 23, 2021 am 10:12 AM

這篇文章跟大家分享50個必須掌握的Angular面試題,會從初學者-中級-高級三個部分來解析這50個面試題,帶大家吃透它們!

面試官:你對高並發了解多少?我:emmm... 面試官:你對高並發了解多少?我:emmm... Jul 26, 2023 pm 04:07 PM

高並發,幾乎是每個程式設計師都想擁有的經驗。原因很簡單:隨著流量變大,會遇到各種各樣的技術問題,例如介面響應逾時、CPU load升高、GC頻繁、死鎖、大數據量儲存等等,這些問題能推動我們在技術深度上不斷精進。

看看這些前端面試題,帶你搞定高頻知識點(四) 看看這些前端面試題,帶你搞定高頻知識點(四) Feb 20, 2023 pm 07:19 PM

每天10題,100天后,搞定所有前端面試的高頻知識點,加油! ! ! ,在看文章的同時,希望不要直接看答案,先思考一下自己會不會,如果會,自己的答案是什麼?想過之後再與答案比對,是不是會好一點,當然如果你有比我更好的答案,歡迎留言區留言,一起探討技術之美。

2023年vue高頻面試題分享(附答案分析) 2023年vue高頻面試題分享(附答案分析) Aug 01, 2022 pm 08:08 PM

本篇文章為大家總結一些值得收藏的2023年精選vue高頻面試題(附答案)。有一定的參考價值,有需要的朋友可以參考一下,希望對大家有幫助。

看看這些前端面試題,帶你搞定高頻知識點(五) 看看這些前端面試題,帶你搞定高頻知識點(五) Feb 23, 2023 pm 07:23 PM

每天10題,100天后,搞定所有前端面試的高頻知識點,加油! ! ! ,在看文章的同時,希望不要直接看答案,先思考一下自己會不會,如果會,自己的答案是什麼?想過之後再與答案比對,是不是會好一點,當然如果你有比我更好的答案,歡迎留言區留言,一起探討技術之美。

See all articles