一、 簡述springMVC的執(zhí)行流程。
用戶發(fā)起請求到前端控制器(Controller)
前端控制器沒有處理業(yè)務(wù)邏輯的能力,需要找到具體的模型對象處理(Handler),到處理器映射器(HandlerMapping)中查找Handler對象(Model)。
HandlerMapping返回執(zhí)行鏈,包含了2部分內(nèi)容: ① Handler對象、② 攔截器數(shù)組
前端處理器通過處理器適配器包裝后執(zhí)行Handler對象。
處理業(yè)務(wù)邏輯。
Handler處理完業(yè)務(wù)邏輯,返回ModelAndView對象,其中view是視圖名稱,不是真正的視圖對象。
將ModelAndView返回給前端控制器。
視圖解析器(ViewResolver)返回真正的視圖對象(View)。
(此時前端控制器中既有視圖又有Model對象數(shù)據(jù))前端控制器根據(jù)模型數(shù)據(jù)和視圖對象,進(jìn)行視圖渲染。
返回渲染后的視圖(html/json/xml)返回。
給用戶產(chǎn)生響應(yīng)。
二、抽象和封裝的不同點(diǎn)
抽象,是指從眾多的事務(wù)中抽取出具有共同的、本質(zhì)性的特征作為一個整體。是共同特質(zhì)的集合形式。
封裝,是將通過抽象所得到的數(shù)據(jù)信息和操作進(jìn)行結(jié)合,使其形成一個有機(jī)的整體。對內(nèi)執(zhí)行操作,對外隱藏細(xì)節(jié)和數(shù)據(jù)信息。
兩者的區(qū)別,在于抽象是一種思維方式,而封裝則是一種基于抽象性的操作方法。我們通過抽象所得到數(shù)據(jù)信息及其功能,以封裝的技術(shù)將其重新聚合,形成一個新的聚合體,也就是類;蛘哒f,兩者是合作者的關(guān)系,如果沒有抽象,封裝就無從談起,如果沒有封裝,抽象也將沒有意義。
三、創(chuàng)建線程有幾種不同的方式?你選擇哪一種?為什么?
1、繼承Thread類創(chuàng)建線程類
(1)定義Thread類的子類,并重寫該類的run方法,該run方法的方法體就代表了線程要完成的任務(wù)。因此把run()方法稱為執(zhí)行體。
(2)創(chuàng)建Thread子類的實(shí)例,即創(chuàng)建了線程對象。
(3)調(diào)用線程對象的start()方法來啟動該線程。
2、通過Runnable接口創(chuàng)建線程類
(1)定義runnable接口的實(shí)現(xiàn)類,并重寫該接口的run()方法,該run()方法的方法體同樣是該線程的線程執(zhí)行體。
(2)創(chuàng)建 Runnable實(shí)現(xiàn)類的實(shí)例,并依此實(shí)例作為Thread的target來創(chuàng)建Thread對象,該Thread對象才是真正的線程對象。
(3)調(diào)用線程對象的start()方法來啟動該線程。
3、通過Callable和Future創(chuàng)建線程
(1)創(chuàng)建Callable接口的實(shí)現(xiàn)類,并實(shí)現(xiàn)call()方法,該call()方法將作為線程執(zhí)行體,并且有返回值。
(2)創(chuàng)建Callable實(shí)現(xiàn)類的實(shí)例,使用FutureTask類來包裝Callable對象,該FutureTask對象封裝了該Callable對象的call()方法的返回值。
(3)使用FutureTask對象作為Thread對象的target創(chuàng)建并啟動新線程。
(4)調(diào)用FutureTask對象的get()方法來獲得子線程執(zhí)行結(jié)束后的返回值
采用實(shí)現(xiàn)Runnable、Callable接口的方式創(chuàng)見多線程時,優(yōu)勢是:
線程類只是實(shí)現(xiàn)了Runnable接口或Callable接口,還可以繼承其他類。
在這種方式下,多個線程可以共享同一個target對象,所以非常適合多個相同線程來處理同一份資源的情況,從而可以將CPU、代碼和數(shù)據(jù)分開,形成清晰的模型,較好地體現(xiàn)了面向?qū)ο蟮乃枷搿?/P>
劣勢是:
編程稍微復(fù)雜,如果要訪問當(dāng)前線程,則必須使用Thread.currentThread()方法。
使用繼承Thread類的方式創(chuàng)建多線程時優(yōu)勢是:
編寫簡單,如果需要訪問當(dāng)前線程,則無需使用Thread.currentThread()方法,直接使用this即可獲得當(dāng)前線程。
劣勢是:
線程類已經(jīng)繼承了Thread類,所以不能再繼承其他父類。
感謝大家閱讀Java面試題“簡述springMVC的執(zhí)行流程”希望本篇對大家在面試時有所幫助。
填寫下面表單即可預(yù)約申請免費(fèi)試聽java課程!害怕學(xué)不會?助教全程陪讀,隨時解惑!擔(dān)心就業(yè)?一地學(xué)習(xí),可全國推薦就業(yè)!
初級會計職稱中級會計職稱經(jīng)濟(jì)師注冊會計師證券從業(yè)銀行從業(yè)會計實(shí)操統(tǒng)計師審計師高級會計師基金從業(yè)資格稅務(wù)師資產(chǎn)評估師國際內(nèi)審師ACCA/CAT價格鑒證師統(tǒng)計資格從業(yè)
一級建造師二級建造師消防工程師造價工程師土建職稱房地產(chǎn)經(jīng)紀(jì)人公路檢測工程師建筑八大員注冊建筑師二級造價師監(jiān)理工程師咨詢工程師房地產(chǎn)估價師 城鄉(xiāng)規(guī)劃師結(jié)構(gòu)工程師巖土工程師安全工程師設(shè)備監(jiān)理師環(huán)境影響評價土地登記代理公路造價師公路監(jiān)理師化工工程師暖通工程師給排水工程師計量工程師
人力資源考試教師資格考試出版專業(yè)資格健康管理師導(dǎo)游考試社會工作者司法考試職稱計算機(jī)營養(yǎng)師心理咨詢師育嬰師事業(yè)單位教師招聘公務(wù)員公選考試招警考試選調(diào)生村官
執(zhí)業(yè)藥師執(zhí)業(yè)醫(yī)師衛(wèi)生資格考試衛(wèi)生高級職稱護(hù)士資格證初級護(hù)師主管護(hù)師住院醫(yī)師臨床執(zhí)業(yè)醫(yī)師臨床助理醫(yī)師中醫(yī)執(zhí)業(yè)醫(yī)師中醫(yī)助理醫(yī)師中西醫(yī)醫(yī)師中西醫(yī)助理口腔執(zhí)業(yè)醫(yī)師口腔助理醫(yī)師公共衛(wèi)生醫(yī)師公衛(wèi)助理醫(yī)師實(shí)踐技能內(nèi)科主治醫(yī)師外科主治醫(yī)師中醫(yī)內(nèi)科主治兒科主治醫(yī)師婦產(chǎn)科醫(yī)師西藥士/師中藥士/師臨床檢驗(yàn)技師臨床醫(yī)學(xué)理論中醫(yī)理論