ssh面試題

ssh面試題

Struts2:html

一、爲何每次請求都要建立一個Action對象?web

 truts2每次請求的時候都會建立一個action的實例,這樣會保證線程的安全。struts1只是在第一次請求的時候建立一個action的實例,之後每次相同的請求面試

都直接從內存中去讀取,它是單例模式,安全性不行。 

二、ModelDriven攔截器的配置中refreshModelBeforeResult解決了什麼問題?spring

在數據輸出以前將數據接收的Bean裏面的數據清空。解決了數據混淆的可能性。

三、爲何在web.xml中配置的StrutsPrepareAndExecuteFilter要過濾全部的請求?數據庫

 爲了 1.能夠將數據進行過濾編程

       2.能夠進行數據的轉碼將數據進行統一的編碼

四、請你給我談談ValueStack?設計模式

Struts2是如何實現MVC設計模式的?緩存

在Struts2裏面是將每次頁面的請求進行處理,而後將請求須要輸出的數據轉發的須要作數據顯示的頁面,Struts2只是起一個數據接受和轉接的功能,就是
Controler控制器,而傳來數據的頁面叫View顯示層,Struts2將數據提交給進行處理的類叫Model模型層,專門進行數據處理和數據庫的連接。

 

Spring:安全

一、你爲何要用Spring? session

使用Spring 1.主要將各個框架進行有效的聯繫起來,縮短實際編程的時間,起一個潤滑劑的做用。
           2.能夠將各個框架進行有效的管理和控制,讓數據傳輸中安全。

二、請你聊一聊IOC/DI?

依賴注入和控制反轉Spring的兩大基礎做用
主要是將全部組件在Spring提供的外部容器中加載,提升安全性,減低耦合性,使各個框架或者類之間的依賴性下降。 

三、什麼是聲明式的事務管理?爲何要使用聲明式的事務管理?Spring如何實現聲明式的事務管理?

聲明事物管理主要是將在進行對數據庫中數據進行添加或者修改的時候須要執行事物管理。主要是避免在執行數據修改和添加的時候數據添加或者修改不徹底,致使數據丟失。
Spring是使用AOP面向切面的思想進行事物管理的。

四、把spring和hibernate集成,定義事務管理特性的時候,爲什麼要將除了添加、刪除、更新操做以外的方法,即主要執行查詢任務的方法定義爲read-only?

由於添加和刪除和更新都涉及到數據庫的修改,而查詢併爲涉及數據修改,因此只須要定義只讀,這樣能夠提升效率,進行更加方便的事物管理。而事物管理主要是爲添
加和刪除和更新設計的


Hibernate:

一、請你談談你對OR映射的理解?

將數據庫裏面的每一張表都映射成一個實體。

二、不少人說Hibernate不適合大項目,性能有問題,你是如何理解的?

由於Hibernate屬於大型框架,裏面對許多方法的封裝比較多,讓SQL控制權下降。這樣的話,適用性就會下降,在沒必要要的操做上會浪費時間。可是隻要將Hibernate裏的配
置進行優化,也能提升其性能。

三、Hibernate爲何必定要定義一個數據庫標識?

可讓映射文件變得簡潔,消除無用的噪音(好比TBL_前綴等)。Hibernate使用的默認策略是幾乎什麼都不作,因此使用標識的做用就是使數據操做更加簡潔和方便

四、爲何Hibernate建議你的實體類實現hashCode和equals方法?

由於Hibernate使用了一級和二級緩存,不少查詢爲了提升效率Hibernate都會先從緩存中進行查找,而後再從數據庫進行查找。而HashCode是惟一的,因此這樣避免數據操做出
現數據混淆的可能,而equals的做用是對比Hibernate緩存中數據是否一致。

五、談談你對Hibernate實體類中的數據庫標識與數據庫主鍵之間關係的認識?

數據庫標識是爲了方便和簡潔映射文件,而主鍵是爲了使數據不會重複。

六、談談你對Hibernate關聯映射與數據庫外鍵之間關係的認識?

Hibernate在進行映射的時候會將數據庫的關係也進行映射將數據庫中的外鍵也使用標籤的形式進行管理,這樣在人爲操做的時候就不須要手動的管理數據庫關係了。

七、調用session.save()方法,hibernate必定會發出insert語句嗎?談談你的理解

不會,具體執行步驟以下:
     1. 首先在Session內部緩存中進行查找,若是發現則直接返回。
     2. 執行實體類對應的Interceptor.isUnsaved方法(若是有的話),判斷對象是否爲未保存狀態。
      3. 根據unsaved-value判斷對象是否處於未保存狀態。
      4. 若是對象未保存(Transient狀態),則調用save方法保存對象。
      5. 若是對象未已保存(Detached狀態),則調用update方法將對象與Session從新關聯。 。

八、調用session.update()方法,hibernate必定會發出update語句嗎?談談你的理解

理解同上

九、請你聊一下如下名詞、概念或用法:lazy、lazy=」extra」、inverse、fetch、fetch=」join」、fetch=」subselect」、batch-size

lazy懶,lazy=「extra」extra屬性是不大容易重視的,其實它和true差很少,但有個小的智能的地方是,即調用集合的size/contains等方法的時候,hibernate並不會去加載整個
集合的數據,而是發出一條聰明的SQL語句,以便得到須要的值,只有在真正須要用到這些集合元素對象數據的時候,纔去發出查詢語句加載全部對象的數據
inverse控制翻轉,主要是爲了讓誰去維護關係,通常是在主表中配置,將維護關係的只能交給主鍵。
fetch取來,fetch="join"主要是在查詢的時候Hibernate會自動查詢有關聯的表。fetch="join",hibernate會經過select語句使用外鏈接來加載其關聯實體或集合,此時lazy會
失效fetch="subselect",另外發送一條select語句抓取在前面查詢到的全部實體對象的關聯集合
batch-size配置這個屬性是讓Hibernate在執行批量的數據庫操做 

十、配置了lazy=」true」必定會實現懶加載嗎?

不必定,由於若是再配置中你也使用fetch屬性的話此時lazy就會失效

十一、請你談談Hibernate中的「N+1」問題

主要是若是再通常的查詢時,若是須要查詢不少次,就須要像數據庫發送不少條SQL語句,並且,會返回不少個結果,而Hibernate中使用N+1策略時執行Criteria時,會將自動
進行SQL構造,而且映射到實體Bean中,就只會返回一個結果,這樣不只提升了性能,並且在處理返回值的時候也變得比較輕鬆。

十二、請你談談Hibernate有哪些最佳實踐?

數據庫建模,ORM是Hibernate中比較經典。
相關文章
相關標籤/搜索