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