2023年工程師面試題之三大框架_第1頁
2023年工程師面試題之三大框架_第2頁
2023年工程師面試題之三大框架_第3頁
2023年工程師面試題之三大框架_第4頁
2023年工程師面試題之三大框架_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

Java工程師(程序員)面題Struts,Spring,Hibernate三大框架.Hibernate工作原理及為什么要用?原理:1.讀取并解析配置文獻2.讀取并解析映射信息,創(chuàng)建ScssionFactory3.打開Session4.創(chuàng)建事務Transation5.持久化操作6.提交事務7.關閉Session8.關閉SesstionFactory為什么要用:1.對JDBC訪問數(shù)據(jù)庫的代碼做了封裝,大大簡化了數(shù)據(jù)訪問層繁瑣的反復性代碼。2.Hibernate是一個基于JDBC的主流持久化框架,是一個優(yōu)秀的ORM實現(xiàn)。他很大限度的簡化DAO層的編碼工作3.hibernate使用Java反射機制,而不是字節(jié)碼增強程序來實現(xiàn)透明性。4.hibernate的性能非常好,由于它是個輕量級框架。映射的靈活性很杰出。它支持各種關系數(shù)據(jù)庫,從一對一到多對多的各種復雜關系。.Hibernate是如何延遲加載?Hibernate2延遲加載實現(xiàn):a)實體對象b)集合(Collection)Hibernate3提供了屬性的延遲加載功能當Hibernate在查詢數(shù)據(jù)的時候,數(shù)據(jù)并沒有存在與內(nèi)存中,當程序真正對數(shù)據(jù)的操作時,對象才存在與內(nèi)存中,就實現(xiàn)了延遲加載,他節(jié)省了服務器的內(nèi)存開銷,從而提高了服務器的性能。Hibernate中如何實現(xiàn)類之間的關系?(如:一對多、多對多的關系)類與類之間的關系重要體現(xiàn)在表與表之間的關系進行操作,它們都是對對象進行操作,我們程序中把所有的表與類都映射在一起,它們通過配置文獻中的many-to-one、one-to-manymany-to-many4.S(rutsl流程:1、客戶端瀏覽器發(fā)出HTTP請求。2、根據(jù)web.xml配置,該請求被ActionServlet接受。3、根據(jù)siruls-config.xml配置,ActionServlet先將請求中的參數(shù)填充到AciionForm中,然后在struts配置文獻中配置具體的錯誤提醒,再在FonnBean中的validate。方法具體調(diào)用。.說下Struts的設計模式MVC模式:web應用程序啟動時就會加載并初始化ActionServlero用戶提交表單時,一個配置好的ActionForm對象被創(chuàng)建,并被填入表單相應的數(shù)據(jù),ActionServler根據(jù)Struts-config.xml文獻配置好的設立決定是否需要表單驗證,假如需要就調(diào)用ActionForm的Validate()驗證后選擇將請求發(fā)送到哪個Action,假如Action不存在,AclionServlet會先創(chuàng)建這個對象,然后調(diào)用Action09execute()方法。Execute()從ActionForm對象中獲取數(shù)據(jù),完畢業(yè)務邏輯,返I可一個AciionForward對象,ActionServlet再把客戶請求轉(zhuǎn)發(fā)給ActionForward對象指定的jsp組件,ActionForward對象指定的jsp生成動態(tài)的網(wǎng)頁,返回給客戶。.spring工作機制及為什么要用?I.springmvc請所有的請求都提交給DispatcherServlet,它會委托應用系統(tǒng)的其他模塊負責負責對請求進行真正的解決工作。.DispatchcrScrvlct查詢一個或多個HandlerMapping,找到解決請求的Controller..DispatcherServlet請請求提交到目的Controller.Controller進行業(yè)務邏輯解決后,會返回一個ModclAndVicw.Dispathcher查詢一個或多個ViewResolver視圖解析器,找到ModelAndView對象指定的視圖對象.視圖對象負責渲染返回給客戶端。為什么用:{AOP讓開發(fā)人員可以創(chuàng)建非行為性的關注點,稱為橫切關注點,并將它們插入到應用程序代碼中。使用AOP后,公共服務(比如日記、持久性、事務等)就可以分解成方面并應用到域?qū)ο笊?,同時不會增長域?qū)ο蟮膶ο竽P偷膹碗s性。IOC允許創(chuàng)建一個可以構造對象的應用環(huán)境,然后向這曲對象傳遞它們的協(xié)作對象。正如單詞倒置所表白的,IOC就像反過來的JNDI。沒有使用一堆抽象工廠、服務定位器、單元素(singleton)和直接構造(slraightconstruction),每一個對象都是用其協(xié)作對象構造的。因此是由容器管理協(xié)作對象(collaborator)。Spring即使一個AOP框架,也是一IOC容器。Spring最佳的地方是它有助于您替換對象。有了Spring,只要用JavaBean屬性和配置文獻加入依賴性(協(xié)作對象)。然后可以很容易地在需要時替換具有類似接口的協(xié)作對象。}Struts,Spring,Hibernate優(yōu)缺陷Slruls跟Tomcal、Turbine等諸多Apache項目同樣,是開源軟件,這是它的一大優(yōu)點。使開發(fā)者能更進?步的了解其內(nèi)部實現(xiàn)機制。Struts開放源碼框架的創(chuàng)建是為了使開發(fā)者在構建基于JavaServlet和JavaServerPages(JSP)技術的Web應用時更加容易。Struts框架為開放者提供了??個統(tǒng)?的標準框架,通過使用Struts作為基礎,開發(fā)者可以更專注于應用程序的商業(yè)邏輯。Struts框架自身是使用JavaServlel和JavaServerPages技術的一種Model-View-Controller(MVC)實現(xiàn).具體來講,Struts的優(yōu)點有:.實現(xiàn)MVC模式,結構清楚,使開發(fā)者只關注業(yè)務邏輯的實現(xiàn)..有豐富的tag可以用,Struts的標記庫(Taglib),如能靈活動用,則能大大提高開發(fā)效率。此外,就目前國內(nèi)的JSP開發(fā)者而言,除了使用JSP自帶的常用標記外,很少開發(fā)自己的標記,或許Slruls是一個很好的起點。.頁面導航.頁面導航將是此后的?個發(fā)展方向,事實上,這樣做,使系統(tǒng)的脈絡更加清楚。通過一個配置文獻,即可把握整個系統(tǒng)各部分之間的聯(lián)系,這對于后期的維護有著莫大的好處。特別是當另?批開發(fā)者接手這個項目時,這種優(yōu)勢體現(xiàn)得更加明顯。.提供Exception解決機制..數(shù)據(jù)庫鏈接池管理.支持I18N缺陷:一、轉(zhuǎn)到展示層時,需要配置forward,每一次轉(zhuǎn)到展示層,相信大多數(shù)都是直接轉(zhuǎn)到jsp,而涉及到轉(zhuǎn)向,需要配置forward,假如有十個展示層的jsp,需要配置十次slruts,并且還不涉及有時候目錄、文獻變更,需要重新修改forward,注意,每次修改配置之后,規(guī)定重新部署整個項目,而tomcate這樣的服務器,還必須重新啟動服務器,假如業(yè)務變更復雜頻繁的系統(tǒng),這樣的操作簡樸不可想象?,F(xiàn)在就是這樣,幾十上百個人同時在線使用我們的系統(tǒng),大家可以想象一下,我的煩惱有多大。二、Struts的Action必需是thread—safe方式,它僅僅允許一個實例去解決所有的請求。所以aciion用到的所有的資源都必需統(tǒng)一同步,這個就引起了線程安全的問題。三、測試不方便.Struts的每個Action都同Web層耦合在?起,這樣它的測試依賴于Web容器,單元測試也很難實現(xiàn)。但是有一個Junit的擴展工具StrutsTeslCase可以實現(xiàn)它的單元測試。四、類型的轉(zhuǎn)換.Struts的FormBean把所有的數(shù)據(jù)都作為String類型,它可以使用工具Commons-Beanutils進行類型轉(zhuǎn)化。但它的轉(zhuǎn)化都是在Class級別,并且轉(zhuǎn)化的類型是不可配置的。類型轉(zhuǎn)化時的錯誤信息返回給用戶也是非常困難的。五、對Servlet的依賴性過強.Struts解決Action時必需要依賴SendetRequest和ScnlctResponse,所有它擺脫不了Servlet容器。六、前端表達式語言方面.Struts集成了JSTL,所以它重要使用JSTL的表達式語言來獲取數(shù)據(jù)??墒荍STL的表達式語言在Collection和索引屬性方面解決顯得很弱。七、對Action執(zhí)行的控制困難.Struts創(chuàng)建一個Action,假如想控制它的執(zhí)行順序?qū)浅@щy。甚至你要重新去寫Servlet來實現(xiàn)你的這個功能需求。八、對Action執(zhí)行前和后的解決.Struts解決Action的時候是基于class的hierarchies,很難在action解決前和后進行操作。九、對事件支持不夠.在struts中,實際是一個表單Form相應一個Action類(或DispatchAction),換一句話說:在Struts中實際是一個表單只能相應一個事件,struts這種事件方式稱為applicationevent,applicationevent和componentevent相比是一種粗粒度的事件。Slruts重要的表單對象ActionForm是一種對象,它代表了一種應用,這個對象中至少包含幾個字段,這些字段是Jsp頁面表單中的input字段,由于一個表單相應一個事件,所以,當我們需要將事件粒度細化到表單中這些字段時,也就是說,一個字段相應一個事件時,單純使用Struts就不太也許,當然通過結合JavaScript也是可以轉(zhuǎn)彎實現(xiàn)的。HibernateHibernate是一個開放源代碼的對象關系映射框架,它對JDBC進行了非常輕量級的對象封裝,使得Java程序員可以隨心所欲的使用對象編程思維來操縱數(shù)據(jù)庫。Hibernate可以應用在任何使用JDBC的場合,既可以在Java的客戶端程序?qū)嵱?,也可以在Servlel/JSP的Web應用中使用,最具革命意義的是,Hibernate可以在應用EJB的J2EE架構中取代CMP,完畢數(shù)據(jù)持久化的重任。大多數(shù)開發(fā)機構經(jīng)常采用創(chuàng)建各自獨立的數(shù)據(jù)持久層。一旦底層的數(shù)據(jù)結構發(fā)生改變,那么修改應用的其余部分使之適應這種改變的代價將是十分巨大的。Hibernate適時的填補了這一空白,它為Java應用提供了一個易用的、高效率的對象關系映射框架。hibernate是個輕量級的持久性框架,功能卻非常豐富。優(yōu)點:a.Hibernate使用Java反射機制而不是字節(jié)碼增強程序來實現(xiàn)透明性。b.Hibernate的性能非常好,由于它是個輕量級框架。映射的靈活性很杰出。c.它支持各種關系數(shù)據(jù)庫,從一對一到多對多的各種復雜關系。缺陷:它限制您所使用的對象模型。(例如,一個持久性類不能映射到多個表)其獨有的界面和可憐的市場份額也讓人不安,盡管如此,Hibernate還是以其強大的發(fā)展動力減輕了這些風險。其他的開源持久性框架也有一些,但是都沒有Hibernate這樣有市場沖擊力。上面回貼情緒有點激動,希望諒解,我不是由于有人批評Hibernate而感到不快,而是由于帖子里面的觀點實在讓我覺得荒唐。不管覺得Hibernate好也吧,不好也吧,我唯一覺得遺憾的是,在中文論壇里面找不到一個對Hibernate的真正高水平的評價。在TSS上有一個關于Hibernate的hotthread,跟了幾百貼,其中涉及Hibernate作者Gavin和LiDOJDO的CTO,對于JDO和Hibernate有過一些劇烈的爭論,我曾經(jīng)耐心的看了一遍,仍然沒有發(fā)現(xiàn)針對Hibernate真正有力的襲擊,那些所謂的襲擊無非針對Hibernate沒有一個GUI的配置工具,沒有商業(yè)公司支持,沒有標準化等等這些站不住腳的理由。補充幾點我的意見:一、Hibernate是JDBC的輕量級的對象封裝,它是一個獨立的對象持久層框架,和AppServer,和EJB沒有什么必然的聯(lián)系。Hibernate可以用在任何JDBC可以使用的場合,例如Java應用程序的數(shù)據(jù)庫訪問代碼,DAO接口的實現(xiàn)類,甚至可以是BMP里面的訪問數(shù)據(jù)庫的代碼。從這個意義.上來說,Hibernate和EB不是一個范疇的東西,也不存在非此即彼的關系。二、Hibernate是一個和JDBC密切關聯(lián)的框架,所以Hibernate的兼容性和JDBC驅(qū)動,和數(shù)據(jù)庫都有一定的關系,但是和使用它的Java程序,和AppServer沒有任何關系,也不存在兼容性問題。三、Hibernate不能用來直接和EntityBean做對比,只有放在整個J2EE項目的框架中才干比較。并且即使是放在軟件整體框架中來看,Hibernate也是做為JDBC的替代者出現(xiàn)的,而不是EntityBean的替代者出現(xiàn)的,讓我再列一次我已經(jīng)列n次的框架結構:傳統(tǒng)的架構:SessionBean<->EntityBean<->DB為了解決性能障礙的替代架構:SessionBean<->DAO<->JDBC<->DB使用Hibernate來提高上面架構的開發(fā)效率的架構:SessionBean<->DAO<->Hibernate<->DB就上面3個架構來分析:I、內(nèi)存消耗:采用JDBC的架構2無疑是最省內(nèi)存的,Hibernate的架構3次之,EB的架構1最差。2、運營效率:假如JDBC的代碼寫的非常優(yōu)化,那么JDBC架構運營效率最高,但是實際項FI中,這一點幾乎做不到,這需要程序員非常精通JDBC,運用Batch語句,調(diào)整PrcaprcdStatcmcnt的BatchSize和FetchSize等參數(shù),以及在必要的情況卜采用結果集cache等等。而一般情況下程序員是做不到這一點的。因此Hibernate架構表現(xiàn)出最快的運營效率。EB的架構效率會差的很遠。3、開發(fā)效率:在有JBuilder的支持下以及簡樸的項目,EB架構開發(fā)效率最高,JDBC次之,Hibernate最差。但是在大的項目,特別是持久層關系映射很復雜的情況下,Hibernate效率高的驚人,JDBC次之,而EB架構很也許會失敗。4、分布式,安全檢查,集群,負載均衡的支持由于有SB做為Facade,3個架構沒有區(qū)別。四、EB和Hibernate學習難度在哪里?EB的難度在哪里?不在復雜的XML配置文獻上,而在于EB運用稍微不慎,就有嚴重的性能障礙。所以難在你需要學習很多EJB設計模式來避開性能問題,需要學習AppServer和EB的配置來優(yōu)化EB的運營效率。做EB的開發(fā)工作,程序員的大部分精力都被放到了EB的性能問題上了,反而沒有更多的精力關注自身就重要投入精力去考慮的對象持久層的設計上來。Hibernate難在哪里?不在Hibernate自身的復雜,事實上Hibernate非常的簡樸,難在Hibernate太靈活了。當你用EB來實現(xiàn)持久層的時候,你會發(fā)現(xiàn)EB實在是太笨拙了,笨拙到你主線沒有什么可以選擇的余地,所以你主線就不用花費精力去設計方案,去平衡方案的好壞,去費腦筋考慮選擇哪個方案,由于只有唯一的方案擺在你面前,你只能這么做,沒得選擇。Hibernate相反,它太靈活了,相同的問題,你至少可以設計出十幾種方案來解決,所以特別的犯難,究竟用這個,還是用那個呢?這些方案之間到底有什么區(qū)別呢?他們的運營原理有什么不同?運營效率哪個比較好?光是主鍵生成,就有七八種方案供你選擇,你為難不為難?集合屬性可以用Set,可以用List,還可以用Bag,到底哪個效率高,你為難不為難?查詢可以用iterator,可以用list,哪個好,有什么區(qū)別?你為難不為難?復合主鍵你可以直接在hbm里面配置,也可以自定義CuslomefType,哪種比較好些?你為難不為難?對于一個表,你可以選擇單一映射一個對象,也可以映射成父子對象,還可以映射成兩個1:1的對象,在什么情況卜.用哪種方案比較好,你為難不為難?這個列表可以一直開列下去,直到你不想再看下去為止。當你面前擺著無數(shù)的眼花繚亂的方案的時候,你會覺得幸福呢?還是悲哀呢?假如你是一個負責的程序員,那么你一定會仔細研究每種方案的區(qū)別,每種方案的效率,每種方案的合用場合,你會覺得你已經(jīng)陷入進去拔不出來了。假如是用EB,你第一秒種就已經(jīng)做出了決定,主線沒得選擇,比如說集合屬性,你只能用Collection,假如是Hibernate,你會在Bag,List和Set之間來回躊躇不決,甚至搞不清楚的話,程序都沒有辦法寫。Spring它是一個開源的項目,并且目前非?;钴S;它基于IoC(InversionofControl,反向控制)和AOP的構架多層j2ee系統(tǒng)的框架,但它不逼迫你必須在每一層中必須使用Spring,由于它模塊化的很好,允許你根據(jù)自己的需要選擇使用它的某?個模塊;它實現(xiàn)了很優(yōu)雅的MVC,對不同的數(shù)據(jù)訪問技術提供了統(tǒng)一的接口,采用IoC使得可以很容易的實現(xiàn)bean的裝配,提供了簡潔的AOP并據(jù)此實現(xiàn)TranscationManagment,等等優(yōu)點:Spring能有效地組織你的中間層對象,不管你是否選擇使用了EJB。假如你僅僅使用了Struts或其他為J2EE的API特制的framework,Spring致力于解決剩卜的問題。Spring能消除在許多工程中常見的對Singleton的過多使用。根據(jù)我的經(jīng)驗,這是一個很大的問題,它減少了系統(tǒng)的可測試性和面向?qū)ο蟮南薅?。c.通過一種在不同應用程序和項目間一致的方法來解決配置文獻,Spring能消除各種各樣自定義格式的屬性文獻的需要。曾經(jīng)對某個類要尋找的是哪個魔法般的屬性項或系統(tǒng)屬性感到不解,為此不得不去讀Javadoc甚至源編碼?有了Spring,你僅僅需要看看類的JavaBean屬性。InversionofCont⑹的使用(在下面討論)幫助完畢了這種簡化。d.通過把對接口編程而不是對類編程的代價兒乎減少到?jīng)]有,Spring可以促進養(yǎng)成好的編程習慣。e.Spring被設計為讓使用它創(chuàng)建的應用盡也許少的依賴于他的APIs。在Spring應用中的大多數(shù)業(yè)務對象沒有依賴于Springof.使用Spring構建的應用程序易于單元測試。g.Spring能使EJB的使用成為一個實現(xiàn)選擇,而不是應用架構的必然選擇。你能選擇用POJOs或localEJBs來實現(xiàn)業(yè)務接口,卻不會影響調(diào)用代碼。Spring幫助你解決許多問題而無需使用EJBoSpring能提供一種EJB的替換物,它們合川于許多web應用。例如,Spring能使用AOP提供聲明性事務管理而不通過EJB容器,假如你僅僅需要與單個數(shù)據(jù)庫打交道,甚至不需要一個JTA實現(xiàn)。Spring為數(shù)據(jù)存取提供了一個一致的框架,不管是使用的是JDBC還是O/Rnapping產(chǎn)品(如Hibernate)pSpring的確使你能通過最簡樸可行的解決辦法來解決你的問題。而這是有有很大價值的。缺陷:使用人數(shù)不多、jsp中要寫很多代碼、控制器過于以活,缺少?個公用控制器。6.Javaweb部分I、Tomca[的優(yōu)化經(jīng)驗答:去掉對web.xml的監(jiān)視,把jsp提前編輯成Servlet0有富余物理內(nèi)存的情況,加大tomcat使用的jvm的內(nèi)存1、HTTP請求的GET與POST方式的區(qū)別(1)get是從服務器上獲取數(shù)據(jù),post是向服務器傳送數(shù)據(jù)。在客戶端,Gel方式在通過URL提交數(shù)據(jù),數(shù)據(jù)在URL中可以看到;POST方式,數(shù)據(jù)放置在HTMLHEADER內(nèi)提交。(2)對于get方式,服務器端用Request.QuerySOng獲取變量的值,對于post方式,服務器端用Request.Form獲取提交的數(shù)據(jù)。(3)GET方式提交的數(shù)據(jù)最多只能有1024字節(jié),而POST則沒有此限制。(4)安全性問題。正如在(1)中提到,使用Get的時候,參數(shù)會顯示在地址欄上,而Post不會。所以,假如這些數(shù)據(jù)是中文數(shù)據(jù)并且是非敏感數(shù)據(jù),那么使用get;假如用戶輸入的數(shù)據(jù)不是中文字符并且包含敏感數(shù)據(jù),那么還是使用posl為好。62、解釋一下什么是servlet;答:servlet有良好的生存期的定義,涉及加載和實例化、初始化、解決請求以及服務結束。這個生存期由javax.servlet.Servlet接口的init,senice和destroy方法表達。I、說一說Servlet的生命周期?答:servlet有良好的生存期的定義,涉及加載和實例化、初始化、解決請求以及服務結束。這個生存期由javax.servlet.Servlet接口的init,service和destroy方法表達。Servlet被服務器實例化后,容器運營其init方法,請求到達時運營其service方法,service方法自動派遣運營與請求相應的doXXX方法(doGet,doPosl)等,當服務器決定將實例銷毀的時候調(diào)用其destroy方法。web容器加載servlet,生命周期開始。通過調(diào)用servlet的init()方法進行servlet的初始化。通過調(diào)用service。方法實現(xiàn),根據(jù)請求的不同調(diào)用不同的do***()方法。結束服務,web容器調(diào)用servlet的destroy。方法。4、Servlel的基本架構publicclassServletNameextendsHitpServlet!publicvoiddoPost(HttpServletRequestrequest,HttpSendetResponseresponse)throwsServletException,lOException(}publicvoiddoGct(HttpScrvlctRcquestrequest,HttpScnlctRcsponseresponse)throwsServletException,lOException!))3、SERVLETAPI中forward。與redirect。的區(qū)別?答:前者僅是容器中控制權的轉(zhuǎn)向,在客戶端瀏覽器地址欄中不會顯示出轉(zhuǎn)向后的地址;后者則是完全的跳轉(zhuǎn),瀏覽器將會得到跳轉(zhuǎn)的地址,并重新發(fā)送請求鏈接。這樣,從瀏覽器的地址欄中可以看到跳轉(zhuǎn)后的鏈接地址。所以,前者更加高效,在前者可以滿足需要時.,盡量使用forward。方法,并且,這樣也有助于隱臧實際的鏈接。在有些情況下,比如,需要跳轉(zhuǎn)到一個其它服務器上的資源,則必須使用sendRedirect。方法。60、什么情況下調(diào)用doGet。和doPostO?Jsp頁面中的FORM標簽里的method屬性為get時調(diào)用doGct(),為post時調(diào)用doPost()o66、Request對象的重要方法:setAttribute(Stringname,Object):設立名字為name的request的參數(shù)值getAttribute(Stringname):返回由name指定的屬性值getAttributeNamesO:返I可request對象所有屬性的名字集合,結果是一個枚舉的實例getCookies():返回客戶端的所有Cookie對象,結果是一個Cookie數(shù)組getCharacterEncodingO:返回請求中的字符編碼方式getContentLength():返回請求的Body的長度getHeader(Stringname):獲得HTTP協(xié)議定義的文獻頭信息getHeaders(Stringname):返I可指定名字的requeslHeader的所有值,結果是一個枚舉的實例gctHcadcrNamcsO:返回所以requestHeader的名字,結果是一個枚舉的實例getlnputStreamO:返I可請求的輸入流,用于獲得請求中的數(shù)據(jù)getMethod():獲得客戶端向服務器端傳送數(shù)據(jù)的方法getParameter(Stringname):獲得客戶端傳送給服務器端的有name指定的參數(shù)值getParameteiNamesO:獲得客戶端傳送給服務器端的所有參數(shù)的名字,結果是一個枚舉的實例getParametervalues(Stringname):獲得有name指定的參數(shù)的所有值getProtocolO:獲取客戶端向服務器端傳送數(shù)據(jù)所依據(jù)的協(xié)議名稱getQueryStringO:獲得查詢字符串gctRcqucstURIO:獲取發(fā)出請求字符串的客戶端地址getRemoteAddr():獲取客戶端的IP地址getRcmotcHostO:獲取客戶端的名字ActionServlet再將請求發(fā)送到Action進行解決。4、是否驗證,需要驗證則調(diào)用ActionForm的validate方法,驗證失敗則跳轉(zhuǎn)到input,成功則繼續(xù)。5、Action從ActionForm獲得數(shù)據(jù),調(diào)用javabean中的業(yè)務方法解決數(shù)據(jù)。Action返回ActionForward對象,跳轉(zhuǎn)到相應JSP頁面或Action。7、返回HTTP響應到客戶端瀏覽器。MVC設計模式:modal:“模型”也稱業(yè)務邏輯,是正真完畢任務的代碼,相稱與JavaBeanview:視圖,其實就是顯示界面,相稱于JSPcontrollei?:控制器,他控制模型和視圖的交互過程,相稱于senletstruts1是基于MVC設計模式hibernate是基于ORM對象關系映射tints是什么?strutsI是基于JSP和servlet的一個開源的Web應用框架,使用的是MVC的設計模式stru(s2是基于webwork技術的框架,是sun和webwork公司聯(lián)手開發(fā)的一個功能非常齊全的框架,struts2和struts1沒有任何關系,是一個全新的框架pring是什么?spring是一個集成了許多第三方框架的大雜檢,其核心技術是IOC(控制反轉(zhuǎn),也稱依賴注入)和AOP(面向切面編程).hibernate是f卜么?hibernate是基于ORM對象關系映射(完畢對象數(shù)據(jù)到關系數(shù)據(jù)映射的機制)實現(xiàn)的,做數(shù)據(jù)持久化的工具.JSF是什么?JavaServerFace是基于組件的web開發(fā)框架,跟sturts差不多的框架.數(shù)據(jù)庫里面的索引和約束是什么?索引是為了提高數(shù)據(jù)的檢索速度,索引是建立在數(shù)據(jù)表上,根據(jù)一個或多個字段建立的約束getSession([Booleancreate]):返回和請求相關SessiongetSerx?erName():獲取服務器的名字getServletPath():獲取客戶端所請求的腳本文獻的途徑getServerPort():獲取服務器的端標語removeAttribute(Stringname):刪除請求中的一個屬性19、forward和redirect的區(qū)別forward是服務器請求資源,服務器宜接訪問目的地址的URL,把那個URL的響應內(nèi)容讀取過來,然后把這些內(nèi)容再發(fā)給瀏覽器,瀏覽器主線不知道服務器發(fā)送的內(nèi)容是從哪兒來的,所以它的地址欄中還是本來的地址。redirect就是服務端根據(jù)邏輯,發(fā)送一個狀態(tài)碼,告訴瀏覽器重新去請求那個地址,一般來說瀏覽器會用剛才請求的所有參數(shù)重新請求,所以session,request參數(shù)都可以獲取。4、request.getAttribute()和request.getParameter()有何區(qū)別?.gctAttributc是取得jsp中用sctAttributc器殳定的attribute.parameter得到的是string;attribute得到的是object.request.getParameter()方法傳遞的數(shù)據(jù),會從Web客戶端傳到Web服務器端,代表HTTP請求數(shù)據(jù);requesl.selAtlribuieO和gelAuribule。方法傳遞的數(shù)據(jù)只會存在于Web容器內(nèi)部,在具有轉(zhuǎn)發(fā)關系的Web組件之間共享。即request.getAttribute。方法返回request范圍內(nèi)存在的對象,而request.getParameter。方法是獲取http提交過來的數(shù)據(jù)。jsp有哪些內(nèi)置對象?作用分別是什么?分別有什么方法?答:JSP共有以下9個內(nèi)置的對象:request用戶端請求,此請求會包含來自GET/POST請求的參數(shù)response網(wǎng)頁傳回用戶端的回應pageContext網(wǎng)頁的屬性是在這里管理session與請求有關的會話期applicationservlet正在執(zhí)行的內(nèi)容out用來傳送回應的輸出configservlet的構架部件pageJSP網(wǎng)頁自身exception針對錯誤網(wǎng)頁,未捕獲的例外request表達HllpServlelRequesl對象。它包含了有關瀏覽器請求的信息,并且提供了兒個用于獲取cookie,header,和session數(shù)據(jù)的有用的方法。response表達HllpServlelResponse對象,并提供了幾個用于設立送I可瀏覽器的響應的方法(如cookies,頭信息等)out對象是的一個實例,并提供了幾個方法使你能用于向瀏覽器回送輸出結果。pageContext表達一個對象。它是用于方便存取各種范圍的名字空間、servlel相關的對象的API,并且包裝了通用的servlel相關功能的方法。session表達一個請求的對象。Session川以存貯用戶的狀態(tài)信息applicaton表達一個對象。這有助于查找有關servlet引擎和servlet環(huán)境的信息config表達一個對象。該對象用于存取servlet實例的初始化參數(shù)。page表達從該頁面產(chǎn)生的一個servlet實例jsp有哪些動作?作用分別是什么?(這個問題似乎不重要,不明白為什么有此題)答:JSP共有以下6種基本動作jsp:include:在頁面被請求的時候引入一個文獻。jsp:useBean:尋找或者實例化一個JavaBean。jsp:setProperty:設立JavaBean的屬性。jsp:getProperty:輸出某個JavaBean的屬性。jsp:forward:把請求轉(zhuǎn)到一個新的頁面。jsp:plugin:根據(jù)瀏覽器類型為Java插件生成OBJECT或EMBED標記59、JSP的常用指令isErrorPage(是否能使用Exception對象),isELIgnored(是否忽略表達式)JSP中動態(tài)INCLUDE與靜態(tài)INCLUDE的區(qū)別?答:動態(tài)INCLUDE用jsp:include動作實現(xiàn)<jsp:includepage=included.jspflush=true/>它總是會檢查所含文獻中的變化,適合用于包含動態(tài)頁面,并且可以帶參數(shù)靜態(tài)INCLUDE用include偽碼實現(xiàn),定不會檢查所含文獻的變化,合用于包含靜態(tài)頁面v%@includefile:included.htm%>4、兩種跳轉(zhuǎn)方式分別是什么?有什么區(qū)別?(下面的回答嚴重錯誤,應當是想問forward和sendRcdirect的區(qū)別,畢竟出題的人不是專業(yè)搞文字藝術的人,也許表達能力并不見得很強,用詞不一定精確,加之其自身的技術面也也許存在一些問題,不一定真正將他的意思表達清楚了,嚴格意思上來講,一些題目也許主線就無人能答,所以,答題時要掌握積極,只要把自己知道的表達清楚就夠了,而不要去推敲原始題目的具體含義是什么,不要一味想著是在答題)答:有兩種,分別為:<jsp:includepage=included.jspflush=true><jsp:forwardpagc=ncxtpagc.jsp/>前者頁面不會轉(zhuǎn)向include所指的頁面,只是顯示該頁的結果,主頁面還是本來的頁面。執(zhí)行完后還會回來,相稱于函數(shù)調(diào)用。并且可以帶參數(shù).后者完全轉(zhuǎn)向新頁面,不會再回來。相稱于goto語句。63、頁面間對象傳遞的方法request,session,application,cookie等64、JSP和Servlet有哪些相同點和不同點,他們之間的聯(lián)系是什么?JSP是Servlet技術的擴展,本質(zhì)上是Servlet的簡易方式,更強調(diào)應用的外表表達。JSP編譯后是"類servlet"。Servlet和JSP最重要的不同點在于,Servlet的應用邏輯是在Java文獻中,并且完全從表達層中的HTML里分離開來。而JSP的情況是Java和HTML可以組合成一個擴展名為.jsp的文獻。JSP側(cè)重于視圖,Servlet重要用于控制邏輯。1、MVC的各個部分都有那些技術來實現(xiàn)?如何實現(xiàn)?答:MVC是Model-View-Controller的簡寫。Model代表的是應用的業(yè)務邏輯(通過JavaBean,EJB組件實現(xiàn)),View是應用的表達面(由JSP頁面產(chǎn)生),Controller是提供應用的解決過程控制(一般是一個Servlet),通過這種設計模型把應用邏輯,解決過程和顯示邏輯提成不同的組件實現(xiàn)。這些組件可以進行交互和重用。68、我們在web應用開發(fā)過程中經(jīng)常碰到輸出某種編碼的字符,如iso8859-l等,如何輸出一個某種編碼的字符串?PublicStringtranslate(Stringstr){StringtempStr=try{tempStr=newString(str.getByles("ISO-8859-1"),"OBK'1);tempStr=tempStr.trimO;Icatch(Exceptionc){System.err.println(e.getMessageO);)returntempStr;I.現(xiàn)在輸入n個數(shù)字,以逗號,分開;然后可選擇升或者降序排序;按提交鍵就在另一頁面顯示按什么排序,結果為,提供reset7.實際項目開發(fā)1、在eclipse中調(diào)試時,如何查看一個變量的值?在要查看的變量前先設立斷點,然后選中變量,右鍵選debugas->JavaApplication,打開debug透視圖,這時在Variables窗口中可以看到變量當前的值。假如是局部變量,也可以在局部變量窗口中查看。要知道一個方法被調(diào)用的方法調(diào)用鏈,可以在方法棧中查看。2、你們公司使用的代碼配置管理工具是什么?除了說以前使用evs,現(xiàn)在新項目使用svn了,還簡要說一下使用的過程,假如有也許,還說說倉庫的概念和如何使用鎖之類的細節(jié)。3、你們的項目總金額多少,多少人開發(fā),總共花了多少個月?像巴巴運動網(wǎng)這種規(guī)模的項目,可以說是4、5個人、開發(fā)了4、5個月,費用則是4、50萬。按每人每月兩萬收入去計算,就差不多了。是為了保持數(shù)據(jù)的完整性,約束有非空約束,主鍵約束,外鍵約束等等。10.spring是什么這個問題,往往可以通過我們?yōu)槭裁匆褂胹pring這個問題來切入:AOP讓開發(fā)人員可以創(chuàng)建非行為性的關注點,稱為橫切關注點,并將它們插入到應用程序代碼中。使用AOP后,公共服務(比如日記、持久性、事務等)就可以分解成方面并應用到域?qū)ο笊?,同時不會增長域?qū)ο蟮膶ο竽P偷膹碗s性。IOC允許創(chuàng)建?個可以構造對象的應用環(huán)境,然后向這些對象傳遞它們的協(xié)作對象。正如單詞倒置所表白的,IOC就像反過來的JNDL沒有使用?堆抽象工廠、服務定位器、單元素(singleton)和直接構造(straightconstruction),每一個對象都是用其協(xié)作對象構造的。因此是由容器管理協(xié)作對象(collaborator)。Spring即使一個AOP框架,也是一I0C容器。Spring最佳的地方是它有助于您替換對象。有了Spring,只要用JavaBean屬性和配置文獻加入依賴性(協(xié)作對象)。然后可以很容易地在需要時替換具有類似接口的協(xié)作對象。11.用自己的話簡要闡述struts?的執(zhí)行流程。Struts2框架自身大體可以分為3個部分:核心控制器FiltcrDispatchcr,業(yè)務控制器Action和用戶實現(xiàn)的公司業(yè)務邏輯組件。核心控制器FiherDispa【cher是Slruts2框架的基礎,包含了框架內(nèi)部的控制流程和解決機制。業(yè)務控制器Action和業(yè)務邏輯組件是需要用戶來自己實現(xiàn)的。用戶在開發(fā)Action和業(yè)務邏輯組件的同時,還需要編寫相關的配置文獻,供核心控制器FilterDispatcher來使用。Struls2的工作流程相對于Slruls1要簡樸,與WebWork框架基本相同,所以說Struts2是WebWork的升級版本?;竞喴鞒倘缦拢?、客戶端瀏覽器發(fā)出HTTP請求。2、根據(jù)web.xml配置,該請求被FilterDispatcher接受。3、根據(jù)struts.xml配置,找到需要調(diào)用的Action類和方法,并通過IoC方式,將值注入給Acitono4、Action調(diào)用業(yè)務邏輯組件解決業(yè)務邏輯,這一步包含表單驗證。5、Action執(zhí)行完畢,根據(jù)struts.xml中的配置找到相應的返回結果result,并跳轉(zhuǎn)到相應頁面。6、返回HTTP響應到客戶端瀏覽器。IAction是不是線程安全的?假如不是有什么方式可以保證Action的線程安全?假如是,說明因素不是聲明局部變量,或者擴展RequestProcessor,讓每次都創(chuàng)建一個Action,或者在spring中用scope="prototype”來管理2.MVC,分析一下struts是如何實現(xiàn)MVC的m:JavaBean或結合EJB組件或者pojo構成c:Action來實現(xiàn)v:一組JSP文獻及其標簽構成。3.slnils中的幾個關鍵對象的作用(說說兒個關鍵對象的作用)Act沁n:控制器類,ActionForm:表單對象,DynaValidatorForm:動態(tài)form,ActonM叩ping:配置文獻中action節(jié)點的信息……4.說說AOP和IOC的概念以及在spring中是如何應用的AOP:面向方面編程,ioc:依賴注入;聲明式事務和編程式事務積極一些通用部分5.Hibemate有哪幾種查詢數(shù)據(jù)的方式hql查詢,sql查詢,條件查詢6.1oad()和get()的區(qū)別hibernate對于load方法認為該數(shù)據(jù)在數(shù)據(jù)庫中一定存在,可以放心的使用代理來延遲加載,load默認支持延遲加載,在用到對象中的其他屬性數(shù)據(jù)時才查詢數(shù)據(jù)庫,但是萬一數(shù)據(jù)庫中不存在該記錄,只能拋異常ObjeciNotFoundEcception;所說的load方法拋異常是指在使用該對象的數(shù)據(jù)時,數(shù)據(jù)庫中不存在該數(shù)據(jù)時拋異常,而不是在創(chuàng)建這個對象時。由于session中的緩存對于hibernate來說是個相稱便宜的資源,所以在load時會先查一下session緩存看看該id相應的對象是否存在,不存在則創(chuàng)建代理(load時候之兗詢一級緩存,不存在則創(chuàng)建代理)。get()現(xiàn)在一級緩存找,沒有就去二級緩存找,沒有就去數(shù)據(jù)庫找,沒有就返回null:而對于get方法,hibernate一定要獲取到真實的數(shù)據(jù),否則返回nuH。7.談談hibernate的延遲加載和openSessionlnView延遲加載要在session范圍內(nèi),用到的時候再加載;opcnsessioninvicw是在web層寫了一個filter來打開和關閉session,這樣就表達在一次request過程中session一直開著,保證了延遲加載在session中的這個前提。8.spring的事務有幾種方式?談談spring事務的隔離級別和傳播行為。聲明事務和編程事務隔離級別:DEFAULT使用數(shù)據(jù)庫默認的隔離級別READ_UNCOMMITTED會出現(xiàn)臟讀,不可反復:讀和幻影讀問題READ_COMMITTED會出現(xiàn)反復讀和幻影讀REPEATABLE_READ會出現(xiàn)幻影讀SERIALIZABLE最安全,但是代價最大,性能影響極其嚴重和傳播行:REQUIRED存在事務就融入該事務,不存在就創(chuàng)建事務SUPPORTS存在事務就融入事務,不存在則不創(chuàng)建事務MANDATORY存在事務則融入該事務,不存在,拋異常REQUIRES_NEW總是創(chuàng)建新事務NOT_SUPPORTED存在事務則掛起,一直執(zhí)行非事務操作NEVER總是執(zhí)行非事務,假如當前存在事務則拋異常NESTED嵌入式事務9.Hibernate中的update。和saveOrUpdate。的區(qū)別.摘自hibernate說明文檔:saveOrUpdate()做下面的事:假如對象己經(jīng)在本session中持久化了,不做任何事假如另一個與本session關聯(lián)的對象擁有相同的持久化標記(identifier),拋出一個異常假如對象沒有持久化標記(identifier)屬性,對其調(diào)用save()假如對象的持久標記(identifier)表白其是一個新實例化的對象,對其調(diào)用save()假如對象是附帶版本信息的(通過〈version〉或<timestamp>)并且版本屬性的值表白其是一個新實例化的對象,save。它。否則叩date。這個對象lO.Spring對多種ORM框架提供了很好的支持,簡樸描述在Spring中使用Hibernate的方法,并結合事務管理。getHiberanteTemplate里面提供了save,update,delete,find等方法。簡樸說一個:假如配置了聲明式事務,當執(zhí)行getHibernateTemplate的各種方法的時候,事務會自動被加載假如沒有配置事務,那么以上操作不會真正的被同步到數(shù)據(jù)庫,除非配置了hibernate的autocommit=true8.spring的事務有幾種方式?談談spring事務的隔離級別和傳播行為。spring事務分兩種形式,聲明式事務和編程式事務,spring提供了一個事務的接口PaltformTractionManager,針對不同的事務,spring進行了不同的實現(xiàn),對hibernate事務的實現(xiàn)HlbernateTractionManagcr,^!JDBC的JdbcTractionManager,DataSourceTractionManager以及JdoTractionManager0接口platformTractionManager提供了個方法,獲取事務,提交和回滾的方法。***********************

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論