java學習經驗

http://zhidao.baidu.com/question/255434112.html

1-1:爲什麼每次請求都要創建一個Action對象?
 爲了防止線程迸發,如果每次都使用同一個Action進行數據修改和傳遞的話,容易引起線程迸發,使線程不安全。
1-2:ModelDriven攔截器的配置中refreshModelBeforeResult解決了什麼問題?
在數據輸出之前將數據接收的Bean裏面的數據清空。解決了數據混淆的可能性。
 1-3:爲什麼在web.xml中配置的StrutsPrepareAndExecuteFilter要過濾所有的請求?
爲了1.可以將數據進行過濾
       2.可以進行數據的轉碼將數據進行統一的編碼
1-2:請你給我談談ValueStack?
堆值,堆裏面的值。
1-5:Struts2是如何實現MVC設計模式的?
在Struts2裏面是將每次頁面的請求進行處理,然後將請求需要輸出的數據轉發的需要做數據顯示的頁面,Struts2只是起一個數據接受和轉接的功能,就是Controler控制器,而傳來數據的頁面叫View顯示層,Struts2將數據提交給進行處理的類叫Model模型層,專門進行數據處理和數據庫的鏈接。


 2-1:你爲什麼要用Spring?
使用Spring 1.主要將各個框架進行有效的聯繫起來,縮短實際編程的時間,起一個潤滑劑的作用。
                  2.可以將各個框架進行有效的管理和控制,讓數據傳輸中安全。
 2-2:請你聊一聊IOC/DI?
依賴注入和控制反轉Spring的兩大基礎作用
主要是將所有組件在Spring提供的外部容器中加載,提高安全性,減低耦合性,使各個框架或者類之間的依賴性降低。
 2-3:什麼是聲明式的事務管理?爲什麼要使用聲明式的事務管理?Spring如何實現聲明式的事務管理?
聲明事物管理主要是將在進行對數據庫中數據進行添加或者修改的時候需要執行事物管理。主要是避免在執行數據修改和添加的時候數據添加或者修改不完全,導致數據丟失。
Spring是使用AOP面向切面的思想進行事物管理的。
 2-4:把spring和hibernate集成,定義事務管理特性的時候,爲何要將除了添加、刪除、更新操作之外的方法,即主要執行 查詢任務的方法定義爲read-only?
因爲添加和刪除和更新都涉及到數據庫的修改,而查詢併爲涉及數據修改,所以只需要定義只讀,這樣可以提高效率,進行更加方便的事物管理。而事物管理主要是爲添加和刪除和更新設計的。


 3-1:請你談談你對OR映射的理解?
將數據庫裏面的每一張表都映射成一個實體。
3-2:很多人說Hibernate不適合大項目,性能有問題,你是如何理解的?
因爲Hibernate屬於大型框架,裏面對許多方法的封裝比較多,讓SQL控制權降低。這樣的話,適用性就會降低,在不必要的操作上會浪費時間。但是隻要將Hibernate裏的配置進行優化,也能提高其性能。
3-3:Hibernate爲什麼一定要定義一個數據庫標識?
可以讓映射文件變得簡潔,消除無用的噪音(比如TBL_前綴等)。Hibernate使用的默認策略是幾乎什麼都不做,所以使用標識的作用就是使數據操作更加簡潔和方便
3-4:爲什麼Hibernate建議你的實體類實現hashCode和equals方法?
因爲Hibernate使用了一級和二級緩存,很多查詢爲了提高效率Hibernate都會先從緩存中進行查找,然後再從數據庫進行查找。而HashCode是唯一的,所以這樣避免數據操作出現數據混淆的可能,而equals的作用是對比Hibernate緩存中數據是否一致。
3-5:談談你對Hibernate實體類中的數據庫標識與數據庫主鍵之間關係的認識?
數據庫標識是爲了方便和簡潔映射文件,而主鍵是爲了使數據不會重複。
3-6:談談你對Hibernate關聯映射與數據庫外鍵之間關係的認識?
Hibernate在進行映射的時候會將數據庫的關係也進行映射將數據庫中的外鍵也使用標籤的形式進行管理,這樣在人爲操作的時候就不需要手動的管理數據庫關係了。
3-7:調用session.save()方法,hibernate一定會發出insert語句嗎?談談你的理解
 不會,具體執行步驟如下:
     1. 首先在Session內部緩存中進行查找,如果發現則直接返回。
     2. 執行實體類對應的Interceptor.isUnsaved方法(如果有的話),判斷對象是否爲未保存狀態。
      3. 根據unsaved-value判斷對象是否處於未保存狀態。
      4. 如果對象未保存(Transient狀態),則調用save方法保存對象。
      5. 如果對象未已保存(Detached狀態),則調用update方法將對象與Session重新關聯。 。
3-8:調用session.update()方法,hibernate一定會發出update語句嗎?談談你的理解
理解同上
 3-9:請你聊一下以下名詞、概念或用法: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在執行批量的數據庫操作
3-10:配置了lazy=”true”一定會實現懶加載嗎?
不一定,因爲如果再配置中你也使用fetch屬性的話此時lazy就會失效
3-11:請你談談Hibernate中的“N+1”問題
主要是如果再一般的查詢時,如果需要查詢很多次,就需要像數據庫發送很多條SQL語句,而且,會返回很多個結果,而Hibernate中使用N+1策略時執行Criteria時,會將自動進行SQL構造,並且映射到實體Bean中,就只會返回一個結果,這樣不僅提高了性能,而且在處理返回值的時候也變得比較輕鬆。
3-12:請你談談Hibernate有哪些最佳實踐?
數據庫建模,ORM是Hibernate中比較經典。 

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