期末考試終于結(jié)束了﹐記憶中最可怕的一門就是J2EE大考。
這門課的兩位老師都是牛人﹐一個(gè)來自BEA﹐系統(tǒng)架構(gòu)師﹐是Weblogic 8.1b的開發(fā)人員﹐平時(shí)負(fù)責(zé)BEA公司在矽谷地區(qū)的面試﹔另一個(gè)是UC Berkeley的教授﹐華人﹐創(chuàng)業(yè)狂﹐在亞洲和美國(guó)都有自己的公司。他們兩位負(fù)責(zé)了我校J2EE大考的出題。題目"指明了公司對(duì)個(gè)人的J2EE能力的考察方向﹐也代表了業(yè)界對(duì)J2EE初級(jí)程序員的普遍要求"。我估計(jì)這些題目有80%的機(jī)會(huì)會(huì)在BEA的面試中出現(xiàn)。
這裡我憑著自己的記憶把這些考題公佈出來和大家共享。一是為了讓大家對(duì)自己的能力有個(gè)評(píng)估﹐二也是幫我一同解答一些難題。
題目:
1. (這道題是我們的一個(gè)項(xiàng)目有關(guān)﹐我這裡稍做修改。) 請(qǐng)舉出你最認(rèn)為滿意的J2EE項(xiàng)目一個(gè)﹐用Flow Chart表示其開發(fā)流程。你在項(xiàng)目開發(fā)最初﹐是否有Screen的設(shè)計(jì)過程? 列舉Screen設(shè)計(jì)在項(xiàng)目初期能帶來的三條好處。你認(rèn)為這個(gè)項(xiàng)目失敗的地方在哪裡? 如果開發(fā)過程重來一遍﹐你認(rèn)為哪裡可以改進(jìn)? 如何改進(jìn)? (光這道題就花了我將近一個(gè)小時(shí)﹐導(dǎo)致我後面的題目來不及做。考試時(shí)間是2個(gè)半小時(shí))
2. Strus系統(tǒng)中有哪五大組件? 這些組件是通過什麼途經(jīng)來互相作用的? Struts中xml文件的作用是什麼? xml文件的存在給Struts系統(tǒng)帶來哪些缺點(diǎn)? 詳述HTML表單在Struts中被提交的過程。Struts中Controller的作用是什麼? 有沒有必要重載Struts的Controller?
3. 什麼是Pass-by-value﹐什麼是Pass-by-reference? J2EE裡什麼時(shí)候用pass-by-value﹐什麼時(shí)候用pass-by-value? 為什麼說程序從Remote Interface到Local Interface的遷移是不可能的﹐反過來呢? 什麼時(shí)候用Local Interface﹐什麼時(shí)候用Remote Interface?
4. Value Object (Data Transfer Object)在J2EE系統(tǒng)中的作用是什麼? 為什麼Value Object要實(shí)現(xiàn)Serializable接口? 在你的項(xiàng)目中Value Object是處于哪些層次之間? Value Object給J2EE系統(tǒng)帶來什麼麻煩(給出兩點(diǎn))? 哪三種情況下Value Object要用到Collection?
5. 什麼是Optimistic Concurrency Control﹐ 什麼是Pessimistic Concurrency Control? Time Stamp在Value Object中的作用是什麼? 畫出一流程圖闡述從Client到Server到數(shù)據(jù)庫(kù)你是如何實(shí)現(xiàn)Optimistic Concurrency Control的?
6. 列舉JDBC Reading Pattern在EJB中的作用。什麼時(shí)候用JDBC Reading? JDBC Reading應(yīng)該放在Stateless Session Bean, Stateful Session Bean, 還是Entity Bean裡? CMP是如何克服大量數(shù)據(jù)查詢時(shí)Entity BeanN+1次調(diào)用的問題?
7. 什麼是Pooling? Stateless Session Bean和Stateful Session Bean的Pooling有何不同? Stateless Session Bean和Stateful Session Bean有什麼不同? Stateful Session Bean是如何Persistent它的狀態(tài)的(圖解表示)?
8. 在本學(xué)期的課程中我們學(xué)過如何保存Session State。如果我把Session State保存在Http Session中﹐而且我使用Session Facade設(shè)計(jì)模式﹐那麼你的Session Facade是用Stateless Session Bean做呢﹐還是用Stateful Sessioin Bean? 為什麼? 闡述我們?cè)谡n堂上學(xué)到的另一種保存Session State的方法。
9. Message Driven Bean的好處和壞處。(後面還有很多﹐忘記了)
10. 用戶希望在主頁(yè)面看到所有名酒清單﹐用戶可以添加﹐刪除﹐修改這些信息。並且系統(tǒng)有一個(gè)Top 10評(píng)分頁(yè)面﹐用戶可在此瀏覽最受歡迎的十種名酒﹐並可自己投票評(píng)選。圖解表示以上系統(tǒng)從瀏覽器到Servlet到EJB到數(shù)據(jù)庫(kù)各流程﹐並在關(guān)鍵處附註所使用的Design Pattern﹐比如Value Object, JDBC Reading, Session Facade等。
後面要有6題﹐但由于時(shí)間關(guān)係﹐我連看都來不及看。
Strus系統(tǒng)中有哪五大組件? 這些組件是通過什麼途經(jīng)來互相作用的? Struts中xml文件的作用是什麼? xml文件的存在給Struts系統(tǒng)帶來哪些缺點(diǎn)? 詳述HTML表單在Struts中被提交的過程。Struts中Controller的作用是什麼? 有沒有必要重載Struts的Controller?
# Action,ActionForm,ActionError,ActionForward,ActionMapping
# Framework/MVC/ActionServlet/struts-config.xml
# 定義頁(yè)面流程
# 優(yōu)點(diǎn):在系統(tǒng)運(yùn)行時(shí)可以變更業(yè)務(wù)流程
缺點(diǎn):編寫xml文件(相對(duì)于編寫代碼)由于沒有編譯器的檢驗(yàn)更容易出錯(cuò)
# Request -> ActionServlet -> Create ActionForm/Action -> Set value to ActionForm -> Call Action -> ActionServlet -> Response/RrequestDispatcher
# FrontController
# 添加新功能(統(tǒng)一異常處理、添加Filter、修改struts-config的結(jié)構(gòu)……)可以重載ActionServlet
什麼是Pass-by-value﹐什麼是Pass-by-reference? J2EE裡什麼時(shí)候用pass-by-value﹐什麼時(shí)候用pass-by-value? 為什麼說程序從Remote Interface到Local Interface的遷移是不可能的﹐反過來呢? 什麼時(shí)候用Local Interface﹐什麼時(shí)候用Remote Interface?
# RMI中調(diào)用遠(yuǎn)程方法時(shí)串行化參數(shù)的方法是pbv;串行化參數(shù)stub的回調(diào)方法是pbr
# 參數(shù)可以串行化Pass-by-Value;參數(shù)是rmi對(duì)象Pass-by-reference
# 不能
# 同一臺(tái)server上可以Local;不同的Remote
Value Object (Data Transfer Object)在J2EE系統(tǒng)中的作用是什麼? 為什麼Value Object要實(shí)現(xiàn)Serializable接口? 在你的項(xiàng)目中Value Object是處于哪些層次之間? Value Object給J2EE系統(tǒng)帶來什麼麻煩(給出兩點(diǎn))? 哪三種情況下Value Object要用到Collection?
# 封裝DB訪問/封裝DB數(shù)據(jù)(輕量級(jí))
# 因?yàn)闀?huì)被做remote的參數(shù)傳遞
# 業(yè)務(wù)層與數(shù)據(jù)層
# 輕量級(jí)/無事務(wù)管理
無統(tǒng)一控制/調(diào)度(需要VLH等配合)
大量數(shù)據(jù)性能低 (需要添加cache機(jī)能)
# 表關(guān)聯(lián)
數(shù)據(jù)嵌套
包含數(shù)據(jù)數(shù)目不固定
什麼是Optimistic Concurrency Control﹐ 什麼是Pessimistic Concurrency Control? Time Stamp在Value Object中的作用是什麼? 畫出一流程圖闡述從Client到Server到數(shù)據(jù)庫(kù)你是如何實(shí)現(xiàn)Optimistic Concurrency Control的?
# 非同期的處理方法。OCC認(rèn)為數(shù)據(jù)是完全同步的;PCC認(rèn)為數(shù)據(jù)是完全不同步的。
# 解決VO過期的問題
列舉JDBC Reading Pattern在EJB中的作用。什麼時(shí)候用JDBC Reading? JDBC Reading應(yīng)該放在Stateless Session Bean, Stateful Session Bean, 還是Entity Bean裡? CMP是如何克服大量數(shù)據(jù)查詢時(shí)Entity BeanN+1次調(diào)用的問題?
# "JDBC Reading Pattern" 沒有這樣叫過。 不過我想應(yīng)該是相對(duì)于EntityBean而言,從sessionBean中直接訪問DB,返回VO的一種pattern稱呼。
# stateless session bean
# SessionFacade Pattern
什麼是Pooling? Stateless Session Bean和Stateful Session Bean的Pooling有何不同? Stateless Session Bean和Stateful Session Bean有什麼不同? Stateful Session Bean是如何Persistent它的狀態(tài)的(圖解表示)?
# 減小對(duì)象因?yàn)閯?chuàng)建/銷毀的開銷
# 無狀態(tài)/有狀態(tài)
# new EJB request -> LRU arith -> ejbPassivate() -> serialize bean -> store bean state
在本學(xué)期的課程中我們學(xué)過如何保存Session State。如果我把Session State保存在Http Session中﹐而且我使用Session Facade設(shè)計(jì)模式﹐那麼你的Session Facade是用Stateless Session Bean做呢﹐還是用Stateful Sessioin Bean? 為什麼? 闡述我們?cè)谡n堂上學(xué)到的另一種保存Session State的方法。
# stateful session bean
# 因?yàn)榭梢员4嬉粋€(gè)handle在session中
Message Driven Bean的好處和壞處。
優(yōu)點(diǎn):異步
缺點(diǎn):無層次性/結(jié)構(gòu)化不好
xml文件,主要指struts-config.xml文件,用來實(shí)現(xiàn)動(dòng)態(tài)配置頁(yè)面流程,在更大程度上實(shí)現(xiàn)并行開發(fā),降低lever之間的耦合。
xml文件的缺點(diǎn),我認(rèn)為有兩方面。
1.降低執(zhí)行效率。
2.不易調(diào)試
但以微弱的執(zhí)行效率降低來?yè)Q取開發(fā)效率的大幅增加是值得的。對(duì)于第二點(diǎn),我認(rèn)為項(xiàng)目組應(yīng)設(shè)置專門的配置人員。
至于五大組件如何作用及Controller的作用及提交過程csdn上也已經(jīng)討論的很多了。
有沒有必要重載Struts的Controller?這個(gè)問題我不太理解,can you tell me in more detail, 或讓大家看看原文?