JAVA常用面試題總結(jié)_第1頁
JAVA常用面試題總結(jié)_第2頁
JAVA常用面試題總結(jié)_第3頁
JAVA常用面試題總結(jié)_第4頁
JAVA常用面試題總結(jié)_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

JAVA常用面試題總結(jié)一、SpringMVC運行原理SpringMVC運行原理.客戶端懇求提交到DispatcherServlet.由DispatcherServlet限制器查詢一個或多個HandlerMapping,找到處理懇求的Controller.DispatcherServlet將懇求提交到Controller.Controller調(diào)用業(yè)務(wù)邏輯處理后,返回ModelAndView.DispatcherServlet查詢一個或多個ViewResoler視圖解析器,找至【JModelAndView指定的視圖.視圖負責(zé)將結(jié)果顯示到客戶端相關(guān)接口說明DispatcherServlet接口:Spring供應(yīng)的前端限制器,全部的懇求都有經(jīng)過它來統(tǒng)一分發(fā)。在DispatcherServlet將懇求分發(fā)給SpringController之前,須要借助于Spring供應(yīng)的HandlerMapping定位到具體的ControlleroHandlerMapping接口:能夠完成客戶懇求到Controller映射。Controller接口:須要為并發(fā)用戶處理上述懇求,因此實現(xiàn)Controller接口時,必需保證線程平安并且可重用。Controller將處理用戶懇求,這和StrutsAction扮演的角色是一樣的。一旦Controller處理完用戶懇求,則返回ModelAndView對象給DispatcherServlet前端限制器,ModelAndView中包含了模型(Model)和視圖(View)o從宏觀角度考慮,DispatcherServlet是整個Web應(yīng)用的限制器;從微觀考慮,Controller是單個Http懇求處理過程中的限制器,而ModelAndView是Http懇求過程中返回的模型(Model)和視圖(View)oViewResolver接口:Spring供應(yīng)的視圖解析器(ViewResolver)在Web應(yīng)用中查找View對象,從而將相應(yīng)結(jié)果渲染給客戶。DispatcherServlet是整個SpringMVC的核心。它負責(zé)接收HTTP懇求組織協(xié)調(diào)SpringMVC的各個組成部分。其主要工作有以下三項:.截獲符合特定格式的URL懇求。.初始化DispatcherServlet上下文對應(yīng)的WebApplicationContext,并將其及業(yè)務(wù)層、長久化層的WebApplicationContext建立關(guān)聯(lián)。.初始化SpringMVC的各個組成組件,并裝配到DispatcherServlet中。二、spring框架spring是J2EE應(yīng)用程序框架,是輕量級的loC和AOP的容器框架,主要是針對javaBean的生命周期進行管理的輕量級容器,可以單獨運用,也可以和Struts框架,ibatis框架等組合運用。l)loC(lnversionofControl)限制反轉(zhuǎn),對象創(chuàng)建責(zé)任的反轉(zhuǎn),在spring中BeanFacotory是loC容器的核心接口,負責(zé)實例化,定位,配置應(yīng)用程序中的對象及建立這些對象":赳曲榜次報”貼雄中e;麻£冬“跳,Ca(桐:如癡岫舐班阿&,倒秘儲加可行:加命力/你/的」勃,以”3,伽弓£;眄*臊觸":赳曲榜次報”貼雄中e;麻£冬“跳,Ca(桐:如癡岫舐班阿&,倒秘儲加可行:加命力/你/的」勃,以”3,伽弓£;眄*臊觸例MIV8ch.。然馀褊w攤心湃%、\echo"幽"7a.憂m^4.2刀工- -一….“〃做,小綠W婚無棒現(xiàn)切.加1伽修〃4sMz-馬C也秘,號以必察必敘贏歐嘏4d場&圾勿4傍仍〃力蜘&伴姐以,用醒氣戰(zhàn)姆一-2便夕”■秘胸闋夕?四奶Z而俗的I山L”娜械-叫施無2,如上2版協(xié))呵羸1M彼妙心 ""仇_£〃〃名人"柒極”毆莪間的依靠。XmlBeanFacotory實現(xiàn)BeanFactory接口,通過獲得xml配置文件數(shù)據(jù),組成應(yīng)用對象及對象間的依靠關(guān)系。spring中有三種注入方式,一種是set注入,一種是接口注入,另一種是構(gòu)造方法注入。2)AOP面對切面編程aop就是縱向的編程,如下圖所示,業(yè)務(wù)1和業(yè)務(wù)2都須要一個共同的操作,及其往每個業(yè)務(wù)中都添加同樣的代碼,不如寫一遍代碼,讓兩個業(yè)務(wù)共同運用這段代碼。spring中面對切面變成的實現(xiàn)有兩種方式,一種是動態(tài)代理,一種是CGLIB,動態(tài)代理必須要供應(yīng)接口,而CGLIB實現(xiàn)是有繼承??蚣軆?yōu)點輕量級的容器框架沒有侵入性運用loC容器更加簡潔組合對象干脆間關(guān)系,面對接口編程,降低耦合Aop可以更加簡潔的進行功能擴展,遵循。cp開發(fā)原則創(chuàng)建對象默認是單例的,不須要再運用單例模式進行處理5,缺點:業(yè)務(wù)功能依靠spring特有的功能,依靠及spring環(huán)境。三、常用的設(shè)計模式L單例模式(有的書上說叫單態(tài)模式其實都一樣)該模式主要目的是使內(nèi)存中保持1個對象。.工廠模式該模式主要功能是統(tǒng)一供應(yīng)實例對象的引用。.門面模式這個模式個人感覺像是Service層的一個翻版。比如Dao我們定義了許多長久化方法,我們通過Service層將Dao的原子方法組成業(yè)務(wù)邏輯,再通過方法向上層供應(yīng)服務(wù)。門面模式道理其實是一樣的。.策略模式這個模式是將行為的抽象,即當有幾個類有相像的方法,將其中通用的部分都提取出來,從而使擴展更簡潔。四、Hibernate及MyBatis的對比總結(jié)兩者相同點Hibernate及MyBatis都可以是通過SessionFactoryBuider由XML配置文件生成SessionFactory,然后由SessionFactory生成Session,最終由Session來開啟執(zhí)行事務(wù)和SQL語句。其中SessionFactoryBuider,SessionFactory,Session的生命周期都是差不多的。Hibernate和MyBatis都支持JDBC和JTA事務(wù)處理。Mybatis優(yōu)勢MyBatis可以進行更為細致的SQL優(yōu)化,可以削減查詢字段。MyBatis簡潔駕馭,而Hibernate門檻較高。Hibernate優(yōu)勢Hibernate的DAO層開發(fā)比MyBatis簡潔,Mybatis須要維護SQL和結(jié)果映射。Hibernate對對象的維護和緩存要比MyBatis好,對增刪改查的對象的維護要便利。Hibernate數(shù)據(jù)庫移植性很好,MyBatis的數(shù)據(jù)庫移植性不好,不同的數(shù)據(jù)庫須要寫不同SQL。Hibernate有更好的二級緩存機制,可以運用第三方緩存。MyBatis本身供應(yīng)的緩存機制不佳。以下為具體介紹:Hibernate是當前最流行的0/Rmapping框架,它出身于,現(xiàn)在已經(jīng)成為Jboss的一部分。Mybatis是另外一種優(yōu)秀的O/Rmapping框架。目前屬于apache的一個子項目。.Hibernate對數(shù)據(jù)庫結(jié)構(gòu)供應(yīng)了較為完整的封裝,Hibernate的0/RMapping實現(xiàn)了POJO和數(shù)據(jù)庫表之間的映射,以及SQL的自動生成和執(zhí)行。程序員往往只需定義好了POJO到數(shù)據(jù)庫表的映射關(guān)系,即可通過Hibernate供應(yīng)的方法完成長久層操作。程序員甚至不須要對SQL的嫻熟駕馭,Hibernate/OJB會依據(jù)制定的存儲邏輯,自動生成對應(yīng)的SQL并調(diào)用JDBC接口加以執(zhí)行。2JBATIS的著力點,則在于P60及SQL之間的映射關(guān)系。然后通過映射配置文件,將SQL所需的參數(shù),以及返回的結(jié)果字段映射到指定P0〕。。相對Hibernate“0/R”而言,iBATIS是一種“SqlMapping**的ORM實現(xiàn)。.開發(fā)速度Hibernate的真正駕馭要比Mybatis來得難些。Mybatis框架相對簡潔很簡潔上手,但也相對簡陋些。個人覺得要用好Mybatis還是首先要先理解好Hibernate。.開發(fā)社區(qū)Hibernate及Mybatis都是流行的長久層開發(fā)框架,但Hibernate開發(fā)社區(qū)相對多喧鬧些,支持的工具也多,更新也快,當前最高版本。而Mybatis相對安靜,工具較少,當前最高版本3.2。.開發(fā)工作量Hibernate和MyBatis都有相應(yīng)的代碼生成工具。可以生成簡潔基本的DAO層方法。針對高級查詢,Mybatis須要手動編寫SQL語句,以及ResultMapo而Hibernate有良好的映射機制,開發(fā)者無需關(guān)切SQL的生成及結(jié)果映射,可以更專注于業(yè)務(wù)流程。.系統(tǒng)調(diào)優(yōu)對比Hibernate的調(diào)優(yōu)方案制定合理的緩存策略;盡量運用延遲加載特性;采納合理的Session管理機制;運用批量抓取,設(shè)定合理的批處理參數(shù)(batch.size);進行合理的O/R映射設(shè)計Mybatis調(diào)優(yōu)方案MyBatis在Session方面和Hibernate的Session生命周期是一樣的,同樣須要合理的Session管理機制。MyBatis同樣具有二級緩存機制。MyBatis可以進行具體的SQL優(yōu)化設(shè)計。.SQL優(yōu)化方面Hibernate的查詢會將表中的全部字段查詢出來,這一點會有性能消耗。Hibernate也可以自己寫SQL來指定須要查詢的字段,但這樣就破壞了Hibernate開發(fā)的簡潔性。而Mybatis的SQL是手動編寫的,所以可以按需求指定查詢的字段。HibernateHQL語句的調(diào)優(yōu)須要將SQL打印出來,而Hibernate的SQL被許多人嫌棄因為太丑了。MyBatis的SQL是自己手動寫的所以調(diào)整便利。但Hibernate具有自己的日志統(tǒng)計。Mybatis本身不帶日志統(tǒng)計,運用Log4j進行日志記錄。.擴展性方面Hibernate及具體數(shù)據(jù)庫的關(guān)聯(lián)只需在XML文件中配置即可,全部的HQL語句及具體運用的數(shù)據(jù)庫無關(guān),移植性很好。MyBatis項目中全部的SQL語句都是依靠所用的數(shù)據(jù)庫的,所以不同數(shù)據(jù)庫類型的支持不好。.對象管理及抓取策略Hibernate是完整的對象/關(guān)系映射解決方案,它供應(yīng)了對象狀態(tài)管理(statemanagement)的功能,使開發(fā)者不再須要理睬底層數(shù)據(jù)庫系統(tǒng)的細微環(huán)節(jié)。也就是說,相對于常見的JDBC/SQL長久層方案中須要管理SQL語句,Hibernate采納了更自然的面對對象的視角來長久化Java應(yīng)用中的數(shù)據(jù)。換句話說,運用Hibernate的開發(fā)者應(yīng)當總是關(guān)注對象的狀態(tài)(state),不必考慮SQL語句的執(zhí)行。這部分細微環(huán)節(jié)已經(jīng)由Hibernate掌管妥當,只有開發(fā)者在進行系統(tǒng)性能調(diào)優(yōu)的時候才須要進行了解。而MyBatis在這一塊沒有文檔說明,用戶須要對對象自己進行具體的管理。抓取策略Hibernate對實體關(guān)聯(lián)對象的抓取有著良好的機制。對于每一個關(guān)聯(lián)關(guān)系都可以具體地設(shè)置是否延遲加載,并且供應(yīng)關(guān)聯(lián)抓取、查詢抓取、子查詢抓取、批量抓取四種模式。它是具體配置和處理的。而Mybatis的延遲加載是全局配置的。10緩存機制對比Hibernate緩存Hibernate一級緩存是Session緩存,利用好一級緩存就須要對Session的生命周期進行管理好。建議在一個Action操作中運用一個Session。一級緩存須要對Session進行嚴格管理。Hibernate二級緩存是SessionFactory級的緩存。SessionFactory的緩存分為內(nèi)置緩存和外置緩存。內(nèi)置緩存中存放的是SessionFactory對象的一些集合屬性包含的數(shù)據(jù)(映射元素據(jù)及預(yù)定SQL語句等),對于應(yīng)用程序來說,它是只讀的。外置緩存中存放的是數(shù)據(jù)庫數(shù)據(jù)的副本,其作用和一級緩存類似.二級緩存除了以內(nèi)存作為存儲介質(zhì)外,還可以選用硬盤等外部存儲設(shè)備。二級緩存稱為進程級緩存或SessionFactory級緩存,它可以被全部session共享,它的生命周期伴隨著SessionFactory的生命周期存在和消亡。MyBatis緩存MyBatis包含一個特別強大的查詢緩存特性,它可以特別便利地配置和定制。MyBatis3中的緩存實現(xiàn)的許多改進都已經(jīng)實現(xiàn)了,使得它更加強大而且易于配置。默認狀況下是沒有開啟緩存的,除了局部的session緩存可以增加變現(xiàn)而且處理循環(huán)依靠也是必需的。要開啟二級緩存你須要在你的SQL映射文件中添加一行:<cache/>相同點Hibernate和Mybatis的二級緩存除了采納系統(tǒng)默認的緩存機制外,都可以通過實現(xiàn)你自己的緩存或為其他第三方緩存方案,創(chuàng)建適配器來完全覆蓋緩存行為。不同點Hibernate的二級緩存配置在SessionFactory生成的配置文件中進行具體配置,然后再在具體的表-對象映射中配置是哪種緩存。MyBatis的二級緩存配置都是在每個具體的表-對象映射中進行具體配置,這樣針對不同的表可以自定義不同的緩存機制。并且Mybatis可以在命名空間中共享相同的緩存配置和實例,通過Cache-ref來實現(xiàn)。兩者比較因為Hibernate對查詢對象有著良好的管理機制,用戶無需關(guān)切SQL。所以在運用二級緩存時假如出現(xiàn)臟數(shù)據(jù),系統(tǒng)會報出錯誤并提示。而MyBatis在這一方面,運用二級緩存時須要特殊當心。假如不能完全確定數(shù)據(jù)更新操作的波及范圍,避開Cache的盲目運用。否則,臟數(shù)據(jù)的出現(xiàn)會給系統(tǒng)的正常運行帶來很大的隱患。五、EJB的幾種類型會話(Session)Bean,實體(Entity)Bean消息驅(qū)動的(MessageDriven)Bean會話Bean又可分為有狀態(tài)(Stateful)和無狀態(tài)(Stateless)兩種實體Bean可分為Bean管理的持續(xù)性(BMP)和容器管理的持續(xù)性(CMP)兩種-Ejb的組成標準的Ejb至少由三個部分組成:Local接口,Remote接口以及Ejblnstanceo二Local接口.Local接口,稱為Home接口,繼,承接基類.從Ejb2.0起先出現(xiàn)的新的接口,本質(zhì)上是JavaRMI接口..對于Local接口的運用,只能在本地運用。它列出了全部定位/創(chuàng)建/刪除Ejb實例的方法。.定義local接口的方法:1)在Ejb文件中定義:@Local(value={lnterface1,interface?,..})2)在Ejb文件中定義:@Local(lnterface1,lnterface2,..)3)在Interface文件中定義@Local三Remote接口.Remote接口列出Ejb類的業(yè)務(wù)邏輯方法。集成基類javax.ejb.Remote.本質(zhì)上是JavaRMI接口..定義local接口的方法:1)在Ejb文件中定義:@Remote(value={lnterface1,interface?,..})2)在Ejb文件中定義:@Remote(Interface1,lnterface2,..)3)在Interface文件中定義@Remote六、java線程有幾種狀態(tài)在java中,線程通常有五種狀態(tài),創(chuàng)建,就緒,運行、堵塞和死亡狀態(tài)。第一是創(chuàng)建狀態(tài)。在生成線程對象,并沒有調(diào)用該對象的start方法,這是線程處于創(chuàng)建狀態(tài)。其次是就緒狀態(tài)。當調(diào)用了線程對象的start方法之后,該線程就進入了就緒狀態(tài),但是此時線程調(diào)度程序還沒有把該線程設(shè)置為當前線程,此時處于就緒狀態(tài)。在線程運行之后,從等待或者睡眠中回來之后,也會處于就緒狀態(tài)。第三是運行狀態(tài)。線程調(diào)度程序?qū)⑻幱诰途w狀態(tài)的線程設(shè)置為當前線程,此時線程就進入了運行狀態(tài),起先運行run函數(shù)當中的代碼。第四是堵塞狀態(tài)。線程正在運行的時候,被暫停,通常是為了等待某個時間的發(fā)生(比如說某項資源就緒)之后再接著運行。sleep,suspend,wait等方法都可以導(dǎo)致線程堵塞。第五是死亡狀態(tài)。假如一個線程的run方法執(zhí)行結(jié)束或者調(diào)用stop方法后,該線程就會死亡。對于已經(jīng)死亡的線程,無法再運用start方法令其進入就緒。七、進程和線程的區(qū)分定義1、進程是什么?是具有肯定獨立功能的程序、它是系統(tǒng)進行資源安排和調(diào)度的一個獨立單位,重點在系統(tǒng)調(diào)度和單獨的單位,也就是說進程是可以獨立運行的一段程序。2、線程又是什么?線程進程的一個實體,是CPU調(diào)度和分派的基本單位,他是比進程更小的能獨立運行的基本單位,線程自己基本上不擁有系統(tǒng)資源。在運行時,只是暫用一些計數(shù)器、寄存器和棧。關(guān)系1、一個線程只能屬于一個進程,而一個進程可以有多個線程,但至少有一個線程(通常說的主線程)。2、資源安排給進程,同一進程的全部線程共享該進程的全部資源。3、線程在執(zhí)行過程中,須要協(xié)作同步。不同進程的線程間要利用消息通信的方法實現(xiàn)同步。4、處理機分給線程,即真正在處理機上運行的是線程。5、線程是指進程內(nèi)的一個執(zhí)行單元,也是進程內(nèi)的可調(diào)度實體。區(qū)分1、調(diào)度:線程作為調(diào)度和安排的基本單位,進程作為擁有資源的基本單位。2、并發(fā)性:不僅進程之間可以并發(fā)執(zhí)行,同一個進程的多個線程之間也可以并發(fā)執(zhí)行。3、擁有資源:進程是擁有資源的一個獨立單位,線程不擁有系統(tǒng)資源,但可以訪問隸屬于進程的資源。八、Hibernate事物隔離級別.原子性(atomic),事務(wù)必需是原子工作單元;對于其數(shù)據(jù)修改,要么全都執(zhí)行,要么全都不執(zhí)行.一樣性(consistent),事務(wù)在完成時,必需使全部的數(shù)據(jù)都保持一樣狀態(tài)。.隔離性(insulation),由并發(fā)事務(wù)所作的修改必需及任何其它并發(fā)事務(wù)所作的修改隔離。.長久性(Duration),事務(wù)完成之后,它對于系統(tǒng)的影響是永久性的。數(shù)據(jù)庫事務(wù)隔離級別為了解決數(shù)據(jù)庫事務(wù)并發(fā)運行時的各種問題數(shù)據(jù)庫系統(tǒng)供應(yīng)四種事務(wù)隔離級別:Serializable串行化RepeatableRead可重復(fù)讀ReadCommited可讀已提交ReadUncommited可讀未提交九、數(shù)據(jù)庫樹查詢SQLselectdistinctt.child_team_idteamjdfromorg_team_rtstartwitht.parent_team_idinteamldsconnectbypriort.child_teamjd=t.parent_team_id分組排序查詢第一條記錄selectproductjdproductjd,costcost_pricefrom(selectJd,ductJd,ic.cost,ic.start_time,ic.end_time,ic.purchase_time,row_number()over(partitionbyjd,ductjdorderbyic.start_timedesc,ic.purchase_timedesc)rnfrominventory_costic)wherern=1十、SpringMVC常用關(guān)鍵字事務(wù)@Transactional(propagation=Propagation.NESTED,rollbackFor=Exception.class)Controller//@RestController?Controller@RequestMapping(value="/service/bpmControl")publicclassBpmContorlextendsBpmBaseControl{@RequestMapping(value='7myTaskDetail/{instanceld)")public@ResponseBodyStringmyTaskDetail(@PathVariableStringinstanceld,RedirectAttributesredirectAttributes){returnnull;}@RequestMapping(value={7addPurchaseData.htm"},method={RequestMethod.POST})public@ResponseBodyObjectdataSaveApply(@ModelAttributePurchasepurchase){returnnull;)}十一、JSP的7個動作指令forwardsinclude、useBean、setProperty、getPropertyxplugin、param十二、JSP腳本中的9個內(nèi)置對象Application、Config、ExceptionsOut、page、pageContext、Request、responsexsession十三、html中post和get區(qū)分get是從服務(wù)器上獲得數(shù)據(jù),post是向服務(wù)器傳送數(shù)據(jù)。get是把參數(shù)數(shù)據(jù)隊列加到提交表單的ACTION屬性所指的URL中,值和表單內(nèi)各個字段一一對應(yīng),在URL中可以看到。post是通過HTTPpost機制,將表單內(nèi)各個字段及其內(nèi)容放置在HTMLHEADER內(nèi)一起傳送到ACTION屬性所指的URL地址。用戶看不到這個過程。對于get方式,服務(wù)器端用Request.QueryString獲得變量的直對于post方式,服務(wù)器端用Request.Form獲得提交的數(shù)據(jù)。get傳送的數(shù)據(jù)量較小,不能大于2KB。post傳送的數(shù)據(jù)量較大,一般被默認為不受限制。但理

溫馨提示

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

最新文檔

評論

0/150

提交評論