兩道小面試題的背后
跟同學(xué)聊了通電話,討論了一下需求理論,架構(gòu),軟件擴(kuò)展性方面
的東西。好吧。。。搞硬件的跟搞軟件的瞎聊一下這個(gè)好象也不奇
怪。
軟件易擴(kuò)展屬于開(kāi)發(fā)質(zhì)量要求。這樣一些非功能性需求往往很重要
。理論其實(shí)很重要,嗯,從兩道面試題說(shuō)起,面試官都喜歡問(wèn),嗯,
俺也喜歡問(wèn)。遺憾的是沒(méi)聽(tīng)到過(guò)想要聽(tīng)的答案。
1,重定向redirect和內(nèi)部跳轉(zhuǎn)forwar有什么區(qū)別或在什么場(chǎng)景使
用?
求職者多半的回答是redirect是瀏覽器執(zhí)行的跳轉(zhuǎn)動(dòng)作,好吧
給8分9分的也行。 forward是應(yīng)用服務(wù)器內(nèi)部跳轉(zhuǎn),屬同一個(gè)
request好吧,給10分也行。網(wǎng)上的面試寶典答案也跟這個(gè)類似。
沒(méi)毛病。但不甚滿意。redirect本質(zhì)是應(yīng)用服務(wù)器通過(guò)http協(xié)
議發(fā)出一個(gè)html文本,里面包含refer:URL指令,瀏覽器解析到這個(gè)
指令后跳轉(zhuǎn)到那個(gè)URL。嗯,至少了解http原理,給10分。forward
確實(shí)是內(nèi)部跳轉(zhuǎn),可是怎么用頗值得探討一下。我們知道設(shè)計(jì)模式
中的簡(jiǎn)單工廠類經(jīng)典實(shí)現(xiàn)是 if(1) return 產(chǎn)品1 ; else return
默認(rèn)產(chǎn)品; 。 那forward所在控制器類能否扮演一個(gè)簡(jiǎn)單工廠類的
角色呢?if(1)forward 控制器1; else forward 控制器2; 應(yīng)用場(chǎng)
景舉例,比如我有一個(gè)產(chǎn)品查詢頁(yè)面,有兩種不同的實(shí)現(xiàn)方式,一
種是通過(guò)solr引擎檢出,一種是數(shù)據(jù)庫(kù)直接檢出結(jié)果。通過(guò)forward
,可以把兩種實(shí)現(xiàn)同時(shí)寫到產(chǎn)品里。可配或者根據(jù)不同條件用不同的
解決方案。這樣就變成了 (頁(yè)面A,控制器A ,serviceA),(頁(yè)面A,
控制器B,serviceB)。兩個(gè)組件共用一個(gè)頁(yè)面A。 因?yàn)槭莾蓚€(gè)組件,
擴(kuò)展性自是極好的,比如我們還可以增加一個(gè)內(nèi)存數(shù)據(jù)庫(kù)查詢結(jié)果
的解決方案,而只用簡(jiǎn)單的修改一下 forward所在的控制器類。簡(jiǎn)
單工廠模式加策略模式的組合應(yīng)用。理解設(shè)計(jì)模式和組件的概念,
有思考,嗯,給12分。
2,mvc模式中的m,v,c 分別指什么?
m就不必多說(shuō)。但是v就很值得思量。 一般的回答是jsp和swing.
這種說(shuō)法很片面,也可以說(shuō)沒(méi)理解mvc。 v指view,翻譯是視圖,貌
似jsp和swing的回答沒(méi)毛病,網(wǎng)上也多說(shuō)是這個(gè)。但v準(zhǔn)確的理解應(yīng)
該是邊界,即和系統(tǒng)交互的一切東西。比如觸發(fā)某個(gè)任務(wù)的時(shí)鐘,
調(diào)用系統(tǒng)的某個(gè)外部系統(tǒng),人機(jī)交互的界面等.這樣子的理解,即
使沒(méi)有界面的功能也同樣適用mvc. c也有講究,就不說(shuō)了。
編程確實(shí)是一種藝術(shù),但是很多東西都很抽象,理解了就是一
種思想,沒(méi)理解或不通透就是一種工具。搞程序的和搞硬件的我想
理論比經(jīng)驗(yàn)更重要。因?yàn)榻?jīng)驗(yàn)有可能是錯(cuò)的,理解透了的理論則不
會(huì)。
posted on 2017-04-28 14:00 傻 瓜 閱讀(1184) 評(píng)論(0) 編輯 收藏