有關java各種框架的基礎設計,筆者經驗之談,算是小結吧!:)一,Hibernate部分1,簡述hibernate映射繼承關系和映射組成關系有何異同?映射繼承關" />

亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

java基礎設計 開源框架

系統 1973 0
<iframe align="top" marginwidth="0" marginheight="0" src="http://www.zealware.com/46860.html" frameborder="0" width="468" scrolling="no" height="60"></iframe>

有關java各種框架的基礎設計,筆者經驗之談,算是小結吧!:)

一, Hibernate 部分
1,簡述hibernate映射繼承關系和映射組成關系有何異同?
映射繼承關系:類和類之間除了關聯和聚集關系外,還可以有繼承關系。什么時候需要映射繼承關系呢,舉個例 --子,一個公司里面有不同種類的員工,這些不同種類的員工都有一些共同的屬性,可以放在一個 Employee 類中,而員工的個性(不同的地方)可以放在 Employee 類的子類中,在映射 Employee 類時,需要用 discriminate 關鍵字來映射員工的類型,而用 subclass 關鍵字來映射 Empoyee 的子類。
映射組成關系:有一些類是有幾個部分類組成的,例如一個顧客,可能有家庭住址和辦公地址,每個地址的屬性又是一樣的,因此可以在映射顧客類的時候,抽象出一個地址類來,這樣可以實現更細粒度的映射,在映射組成關系時,要使用 component 關鍵字來映射屬性類。
2,簡述在hibernate映射時,lazy屬性有何意義?
首先 hibernate 作對象裝載的時候,在缺省的情況下是需要把對象相關的信息全部讀出來的。 這樣后面的應用程序才能夠直接訪問這些值。
這樣如果 a 關聯了 b, c ;那么 b,c 都會被裝進來。 如果 b 還關聯了 d,e,f 那么 d,e,f 也會被裝進來。 如果對象設計不好,貪圖方便,大家互相關聯的話,那么拖進來的信息將非常巨大,甚至可能讀一個簡單的信息,把整個數據庫給拖進來了。 那自然會造成系統崩潰,性能很差等問題。 即使設計得好,這個問題也很嚴重。 因此需要 lazy lazy 表示在第一次裝載的時候不要裝,用到什么裝什么。
3,請為優化hibernate提幾點建議
1, 不要把所有的責任推在 hibernate 上,對代碼進行重構,減少對數據庫的操作,盡量避免在數據庫查詢時使用 in 操作,以及避免遞歸查詢操作,代碼質量、系統設計的合理性決定系統性能的高低。
2, 對大數據量查詢時,慎用 list() 或者 iterator() 返回查詢結果,而應該結合 HQL 按需進行查詢。
3, 在一對多、多對一的關系中,使用延遲加載機制,會使不少的對象在使用時方會初始化,這樣可使得節省內存空間以及減少數據庫的負荷,而且若 PO 中的集合沒有被使用時,就可減少互數據庫的交互從而減少處理時間。
4, 對于大數據量新增、修改、刪除操作或者是對大數據量的查詢,與數據庫的交互次數是決定處理時間的最重要因素,減少交互的次數是提升效率的最好途徑,所以在開發過程中,請將 show_sql 設置為 true ,深入了解 Hibernate 的處理過程,嘗試不同的方式,可以使得效率提升。
二, spring 部分
1,簡述什么是IOC, IOC有哪幾種注入方式?
IOC 指控制反轉,或者說是依賴注入,控制反轉是指獲得依賴對象的方式反轉了,任何重要的系統都需要至少兩個相互合作的類來完成業務邏輯,通常情況下,每個對象都要自己負責得到它的合作對象,這樣會導致代碼耦合度高,而難以測試,難以維護,難以擴展。使用 IOC, 對象的依賴都是在對象創建時由負責協調系統中各個對象的外部實體提供,這就是依賴被注入到對象中,實現了對象之間解耦
2,簡述什么是AOP ,AOP會影響性能嗎?
AOP 面向方面的編程。
傳統的 OOP 能夠很好的避免代碼的重復。但是有的時候,我們無法用 OOP 避免代碼的重復,或者無法使用 OOP 得到一個優雅的解決方案,例如事務,安全,異常等,我們程序中的每一個方法幾乎都會和它們打交道,有沒有什么辦法就像 EJB 中一樣,能講這些方面模塊化呢。
AOP 出現了,它將系統分解為方面和關注點,而不是對象,它將橫切性的問題以一種更加通用的方式模塊化,從而提升程序的模塊化程度。
舉個例子,如果我們系統中的某一些方法都需要安全檢查,安全檢查對我們來說就是一個方面,我們可以將這些需要安全檢查方法的某個切入點進行攔截,然后進行注入通知,從而將安全檢查的代碼(通知)放入一個函數中,而不用到處充滿安全檢查的代碼。
AOP 是通過反射機制來實現攔截,因此會影響性能,但是相對于 EJB 來說,對性能的影響不會很嚴重。因此我們在使用 AOP 時要注意使用的粒度,建議不要在非常細粒度的情況下使用 AOP
3,簡述spring是如何管理hibernate事務的?
Spring EJB 一樣,也提供了聲明性事務支持, spring 使用了一種回調方式,把真實的事務實現從代碼中抽離出來,它可以使用 JTA 的事務管理支持,也可以使用 hibernate 本身機制所提供的事務支持。另外還可以使用 AOP 將事務管理抽離出來放在一個專門的事務管理器中進行管理。
4,簡述Acegi是如何實現: 根據數據庫驗證身份的。
Acegi 在驗證客戶身份時需要先在數據庫中建一個 users 表和 authorities 表, Acegi 會根據客戶輸入的信息使用一個 jdbc Dao Users 表中查找 username password ,如果客戶輸入的信息正確,則 Acegi authorities 表中查找該客戶所擁有的權限,從而完成了認證的工作。
三, JSF 部分
1,簡述JSF是如何實現頁面跳轉的
首先在 jsf 配置文件中的 BacingBean 配置一個頁面跳轉規則 <navigation-rule> ,<navigation-rule> 中會包含一個<from-view-id>和一系列的<navigation-case> 。<from-view-id>代表當前頁面,而<navigation-case>代表一些列可能跳轉的頁面,當該BackingBean中的某個方法返回一個字符串時,它會去根據當前頁面去匹配<from-view-id>,如果找到了當前的頁面,然后就會根據返回的字符串去匹配該<from-view-id>對應的一系列<navigation-case>中的<from-outcome>標簽所包含的字符串,找到匹配的字符串后,則會從當前頁面跳轉到<navigation-case>所指定的頁面。</navigation-case></from-outcome></navigation-case></from-view-id></from-view-id></navigation-case></from-view-id></navigation-case></from-view-id></navigation-rule></navigation-rule>
2,請簡要的描述如何在BackingBean中擴展驗證器。
首先在 BackingBean 定義一個驗證方法,比如 nameValidator()
然后在 jsf 輸入組件的 validator 屬性中進行設置,例如
<inputsecret id="userInfo_name" value="#{userInfoAction.name}" required="true"></inputsecret>
validator="#{userInfoAction.nameValidator}"/>
3,JSF的事件處理包括:動作事件,即時事件,值變事件,phase事件,請用簡要描述jsf中的值變事件。
如果使用者改變了JSF輸入組件的值后,就會發生值變事。
如果您想要處理這個事件,有兩種方式,
一是直接設定JSF輸入組件的valueChangeListener屬性,例如
<selectonemenu value="#{user.locale}"></selectonemenu>
onchange="this.form.submit();"
valueChangeListener="#{user.changeLocale}">
另一個方法是實現javax.faces.event.ValueChangeListener接口,并定義其processValueChange()方法,
四,系統設計部分
1,請畫出DAO模式的UML類圖,并簡要描述該模式的原理以及適用范圍。
Dao模式,由于根據數據源不同,數據訪問也不同。根據存儲的類型(關系數據庫、面向對象數據庫、文件等等)和供應商實現不同,持久性存儲(比如數據庫)的訪問差別也很大。而且有時候我們的項目需要部署不同的數據庫,因此在這些情況下,可以使用Dao模式,
如圖所示,如果考慮為三種不同類型的數據庫來實現這個策略,我們可以考慮采用抽象工廠設計模式.假設.這個工廠創建了CustomerDAO,AccountDAO,OrderDAO的一系列的DAO,該策略運用了在抽象工廠中產生的工廠類中的工廠方法的實現.
如下圖所示:

<shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></path><lock aspectratio="t" v:ext="edit"></lock></shapetype><shape id="_x0000_i1025" style="WIDTH: 414.75pt; HEIGHT: 309pt" type="#_x0000_t75"><imagedata o:title="pic1" src="file:///D:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image001.png"></imagedata></shape>

2,如下源碼所示,UserManager 和 AccountManager相互依賴對方,
public class UserManager {
AccountManager accountManager = new AccountManager();
public User searchByNameUser(String userName){
...................
}
public void doSomeUserThings(){
Long id = ........
accountManager.searchAccountById(id);
........................
}
}
public class AccountManager {
UserManager userManager = new UserManager();
public Account searchAccountById(Long id){
..............
}
public void doSomeAccountThings(){
........................
String userName = "tom";
userManager.searchByNameUser(userName);
........................
}
}
(1),請問這種設計好嗎,如果使用spring IOC 會出現什么問題,請說明原因。
(2),請重新為該系統進行設計(不用寫代碼),用UML類圖進行說明。
1 AccountManager UserManager 兩個類相互依賴對方,兩個之間相互耦合,實例化一方的時候必須實例化另外一方,會造成循環依賴,無限依賴,程序運行時會報錯。如果使用 IOC, spring 不知道會先初始化誰而報錯
2 )解決辦法:當你需要構建一個層次結構的子系統時,使用 Facade 模式定義子系統中每層的入口點,如果子系統之間是相互依賴的,你可以讓它們僅通過 Facade 進行通訊,從而簡化了它們之間的依賴關系。
<shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><span style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: " times new roman mso-fareast-font-family: sans unicode mso-ansi-language: mso-fareast-language: mso-bidi-language: ar-sa><shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><span style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: " times new roman mso-fareast-font-family: sans unicode mso-ansi-language: mso-fareast-language: mso-bidi-language: ar-sa><shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></path><lock aspectratio="t" v:ext="edit"></lock></shapetype><shape id="_x0000_i1025" style="WIDTH: 414.75pt; HEIGHT: 309pt" type="#_x0000_t75"><imagedata o:title="pic1" src="file:///D:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image001.png">類圖如下:</imagedata></shape></span></shapetype></span></shapetype>
<shapetype stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><span style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: " times new roman mso-fareast-font-family: sans unicode mso-ansi-language: mso-fareast-language: mso-bidi-language: ar-sa><shapetype stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><span style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: " times new roman mso-fareast-font-family: sans unicode mso-ansi-language: mso-fareast-language: mso-bidi-language: ar-sa><shape style="WIDTH: 414.75pt; HEIGHT: 309pt" type="#_x0000_t75"><imagedata o:title="pic1" src="file:///D:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image001.png"><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/HuDon/pic2.BMP"></imagedata></shape></span></shapetype></span></shapetype>
<shapetype stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><span style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: " times new roman mso-fareast-font-family: sans unicode mso-ansi-language: mso-fareast-language: mso-bidi-language: ar-sa><shapetype stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><span style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: " times new roman mso-fareast-font-family: sans unicode mso-ansi-language: mso-fareast-language: mso-bidi-language: ar-sa><shape style="WIDTH: 414.75pt; HEIGHT: 309pt" type="#_x0000_t75"><imagedata o:title="pic1" src="file:///D:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image001.png"><div style="TEXT-AUTOSPACE: ideograph-numeric">3,設計題:關于某一個系統的權限管理。業務規則如下</div> <div style="TEXT-AUTOSPACE: ideograph-numeric">(1) ,整個系統(包含多個模塊)有一個管理員,可以管理整個系統的權限管理;</div> <div style="TEXT-AUTOSPACE: ideograph-numeric">(2) ,每個模塊有自己的管理員,本模塊的管理員只能管理本模塊的權限。</div> <div style="TEXT-AUTOSPACE: ideograph-numeric">(3) ,某一個管理員是可以同時管理多個部門的。</div> <div style="TEXT-AUTOSPACE: ideograph-numeric">(4) ,管理員不能查看數據,只能查看文件狀態。員工可以查看數據以及文件的狀態。</div> <div style="TEXT-AUTOSPACE: ideograph-numeric">(5) ,管理員和管理員之間,管理員和普通員工之間允許相互調動。</div></imagedata></shape></span></shapetype></span></shapetype> <shapetype stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><span style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: " times new roman mso-fareast-font-family: sans unicode mso-ansi-language: mso-fareast-language: mso-bidi-language: ar-sa><shapetype stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><span style="FONT-SIZE: 10.5pt; COLOR: black; FONT-FAMILY: " times new roman mso-fareast-font-family: sans unicode mso-ansi-language: mso-fareast-language: mso-bidi-language: ar-sa><shape style="WIDTH: 414.75pt; HEIGHT: 309pt" type="#_x0000_t75"><imagedata o:title="pic1" src="file:///D:/DOCUME~1/ADMINI~1/LOCALS~1/Temp/msohtml1/01/clip_image001.png"><div style="TEXT-AUTOSPACE: ideograph-numeric">請使用UML工具設計一個簡單的管理系統</div> <div style="TEXT-AUTOSPACE: ideograph-numeric"></div> <div style="TEXT-AUTOSPACE: ideograph-numeric">用例圖如下:</div> <div style="TEXT-AUTOSPACE: ideograph-numeric"><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/HuDon/pic3.BMP"></div> <div style="TEXT-AUTOSPACE: ideograph-numeric"> <div><span style="COLOR: blue">類圖如下:</span></div> <div><span style="COLOR: blue"><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/HuDon/pic4.BMP"></span></div> <div><span style="COLOR: blue"><div> <span style="COLOR: blue">DepartmentManager</span><span style="COLOR: blue">類記錄管理員和部門之間的管理關系</span> </div> <div> <span style="COLOR: blue">Authorities</span><span style="COLOR: blue">類定義不同角色所擁有的不同權限,例如員工可以讀文件,管理員可以看到文件狀態等。</span> </div> <div> <span style="COLOR: blue">EmployeeActorLog </span><span style="COLOR: blue">:定義員工的角色。</span> </div> <div><span style="COLOR: blue"><div style="TEXT-AUTOSPACE: ideograph-numeric">4,Anne的寵物小屋有12個籠子,每個籠子可以放不同的動物,但只能放1只或0只,包括貓Cat,狗Dog,蛇Snake.請使用UML工具設計一個簡單的管理系統,可增加、刪除籠子中的寵物,查詢每個籠子中存放的寵物類型,(包括籠子為空的情況),統計籠中寵物的種類和數量。</div> <div><span style="COLOR: blue"><div><span style="COLOR: blue">類圖--用例圖如下:</span></div> <div> <span style="COLOR: blue">CoopManager</span><span style="COLOR: blue">為管理類,管理籠子中的動物。</span> </div></span></div></span></div></span></div> <div><span style="COLOR: blue"><img alt="" src="http://p.blog.csdn.net/images/p_blog_csdn_net/HuDon/pic5.BMP"></span></div> <div><span style="COLOR: blue"><div style="TEXT-AUTOSPACE: ideograph-numeric">5,論述JSH的開發經驗(JSH: jsf + srping + hiberante)</div> <div style="TEXT-AUTOSPACE: ideograph-numeric"> <span> </span>描述自己曾經參與過的JSH項目,以及自己在項目中所處的角色,擔任的主要工作。</div> <div style="TEXT-INDENT: 21pt; TEXT-AUTOSPACE: ideograph-numeric">結合自己實際參與過的JSH項目,談談自己對JSH項目的理解。</div></span></div> <div><span style="COLOR: blue"></span></div> <div><span style="COLOR: blue"></span></div> <div><span style="COLOR: blue"></span></div> <div><span style="COLOR: blue"></span></div> <div><span style="COLOR: blue"></span></div> <div><span style="COLOR: blue"></span></div> <div><span style="COLOR: blue"></span></div> <div><span style="COLOR: blue"></span></div> <div><span style="COLOR: blue"></span></div> <div><span style="COLOR: blue"></span></div> <div><span style="COLOR: blue"></span></div> <div><span style="COLOR: blue"></span></div> <div><span style="COLOR: blue"></span></div> <div><span style="COLOR: blue"></span></div> <div><span style="COLOR: blue"></span></div> <div><span style="COLOR: blue"></span></div> </div></imagedata></shape></span></shapetype></span></shapetype>


Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1782817


java基礎設計 開源框架


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 性xxx免费| 新久草在线 | 国内久久久久高清影视 | 亚洲国产高清视频在线观看 | 三级不卡| 99热这里只有精品99 | 爱爱小视频在线观看网站 | 久久久久久在线 | 国产精品无码久久av | 国产成人精品999在线 | 久久国产免费一区二区三区 | 四虎免费影院在线播放 | 国产成人精品999在线 | 亚洲在线中文 | www久久只有这里有精品 | 97精品国产 | 成人久久18免费游戏网站 | 国产综合成人亚洲区 | 日韩看片 | 香蕉视频免费在线观看 | 国产97色在线 | 亚洲 | 亚洲精品久久久久久久777 | 国产乳摇福利视频在线观看 | 国产福利不卡视频在免费 | 九九精品99 | 最新欧美精品一区二区三区不卡 | 免费一级毛片在线播放 | 日日夜夜欧美 | 欧美性一区二区三区 | 日日操狠狠干 | 97视频在线观看免费 | 精品国产免费福利片 | 精品不卡| 色猫咪av在线网址 | 日本老熟妇激情毛片 | 国产精品一区二区三区免费视频 | 一级a性色生活片毛片 | 偷亚洲偷国产欧美高清 | 青娱乐国产在线视频 | 亚洲高清资源在线观看 | 四虎影视在线观看2413 |