摘要:面試官我想問個問題哈,項目里比較常見的問題面試官我現(xiàn)在有個系統(tǒng)會根據(jù)請求的入?yún)ⅲ龀霾煌瑒幼?。但是,這塊不同的動作很有可能是會發(fā)生需求變動的,這塊系統(tǒng)你會怎么樣設(shè)計面試官實際的例子現(xiàn)在有多個第三方渠道,系統(tǒng)需要對各種渠道進行訂單歸因。
面試官:我想問個問題哈,項目里比較常見的問題
面試官:我現(xiàn)在有個系統(tǒng)會根據(jù)請求的入?yún)?,做出不同動作。但是,這塊不同的動作很有可能是會發(fā)生需求變動的,這塊系統(tǒng)你會怎么樣設(shè)計?
面試官:實際的例子:現(xiàn)在有多個第三方渠道,系統(tǒng)需要對各種渠道進行訂單歸因。但是歸因的邏輯很有可能會發(fā)生變化,不同的渠道歸因的邏輯也不太一樣,此時系統(tǒng)里的邏輯相對比較復(fù)雜。
面試官:如果讓你優(yōu)化,你會怎么設(shè)計?
候選者:我理解你的意思了
候選者:歸根到底,就是處理的邏輯相對復(fù)雜,if else的判斷太多了
候選者:雖然新的需求來了,都可以添加if else進行解決
候選者:但你想要的就是,系統(tǒng)的可擴展性和可維護性更強
候選者:想要我這邊出一個方案,來解決類似的問題
候選者:對吧?
面試官:嗯...
候選者:在這之前,一般上網(wǎng)搜如何解決 if else ,大多數(shù)都說是 策略模式
候選者:但是舉的例子又沒感同身受,很多時候看完就過去了
候選者:實際上,在項目里邊,用策略模式還是蠻多的,可能無意間就已經(jīng)用上了(畢竟面向接口編程嘛)
候選者:而我認(rèn)為,策略模式不是解決if else的關(guān)鍵
候選者:這個問題,我的項目里的做法是:責(zé)任鏈模式
候選者:把每個流程多帶帶抽取成一個Process(可以理解為一個模塊或節(jié)點),然后請求都會塞進Context中
候選者:比如,之前維護過一個項目,也是類似于不同的渠道走不同的邏輯
候選者:我們這邊的做法是:抽取相關(guān)的邏輯到Process中,為不同的渠道分配不同的責(zé)任鏈
候選者:比如渠道A的責(zé)任鏈?zhǔn)牵篧hiteListProcess->DataAssembleProcess->ChannelAProcess->SendProcess
候選者:而渠道B的責(zé)任鏈?zhǔn)牵篧hiteListProcess->DataAssembleProcess->ChannelBProcess->SendProcess
候選者:在責(zé)任鏈基礎(chǔ)之上,又可以在代碼里內(nèi)嵌「腳本」
候選者:比如在SendProcess上,內(nèi)置發(fā)送消息的腳本(腳本可以選擇不同的運營商進行發(fā)送消息)。有了「腳本」以后,那就可以做到對邏輯的改動不需要重啟就可以生效。
候選者:有人把這一套東西叫做「規(guī)則引擎」。比如,規(guī)則引擎中比較出名的實現(xiàn)框架「Drools」就可以做到類似的事
候選者:把易改動的邏輯寫在「腳本」上(至少我們認(rèn)為,腳本和我們的應(yīng)用真實邏輯是分離)
候選者:(腳本我這里指的是規(guī)則集,它可以是Drools的dsl,也可以是Groovy,也可以是aviator等等)
面試官:嗯...
候選者:在我之前的公司,使用的是Groovy腳本。大致的實現(xiàn)邏輯就是:有專門后臺對腳本進行管理,然后會把腳本寫到「分布式配置中心」(實時刷新),客戶端監(jiān)聽「分布式配置中心」所存儲的腳本是否有改動
候選者:如果存在改動,則通過Groovy類加載器重新編譯并加載腳本,最后放到Spring容器對外使用
候選者:我目前所負(fù)責(zé)的系統(tǒng)就是這樣處理 多變 以及需求變更頻繁的業(yè)務(wù)(責(zé)任鏈+規(guī)則引擎)
候選者:不過據(jù)我了解,我們的玩法業(yè)務(wù)又在「責(zé)任鏈」多做了些事情
候選者:「責(zé)任鏈」不再從代碼里編寫,而是下沉到平臺去做「服務(wù)編排」,就是由程序員去「服務(wù)編排后臺」上配置信息(配置責(zé)任鏈的每一個節(jié)點)
候選者:在業(yè)務(wù)系統(tǒng)里使用「服務(wù)編排」的客戶端,請求時只要傳入「服務(wù)編排」的ID,就可以按「服務(wù)編排」的流程執(zhí)行代碼
候選者:這樣做的好處就是:業(yè)務(wù)鏈?zhǔn)窃诤笈_配置的,不用在系統(tǒng)業(yè)務(wù)上維護鏈,靈活性更高(寫好的責(zé)任鏈節(jié)點可以隨意組合)
面試官:那我懂了
【對線面試官-移動端】系列 一周兩篇持續(xù)更新中!
【對線面試官-電腦端】系列 一周兩篇持續(xù)更新中!
原創(chuàng)不易??!求三連!!
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/124539.html
摘要:面試過程一共面試了四家美團新零售貝殼裝修螞蟻網(wǎng)商銀行頭條商業(yè)化面試結(jié)果美團螞蟻頭條貝殼因氣場不合沒有發(fā)。有些公司還是會考一些算法,比如美團頭條。也祝你找到心儀的工作小魚兒建了前端面試交流群,加群的同學(xué)可以同學(xué)的微信,備注面試進群即可 小魚兒本人985本科,軟件工程專業(yè),前端。工作三年半,第一家創(chuàng)業(yè)公司,半年。第二家前端技術(shù)不錯的公司,兩年半。第三家,個人創(chuàng)業(yè)半年??梢钥闯?,我是個很喜歡...
摘要:面試過程一共面試了四家美團新零售貝殼裝修螞蟻網(wǎng)商銀行頭條商業(yè)化面試結(jié)果美團螞蟻頭條貝殼因氣場不合沒有發(fā)。有些公司還是會考一些算法,比如美團頭條。也祝你找到心儀的工作小魚兒建了前端面試交流群,加群的同學(xué)可以同學(xué)的微信,備注面試進群即可 小魚兒本人985本科,軟件工程專業(yè),前端。工作三年半,第一家創(chuàng)業(yè)公司,半年。第二家前端技術(shù)不錯的公司,兩年半。第三家,個人創(chuàng)業(yè)半年??梢钥闯觯沂莻€很喜歡...
摘要:面試會進入下一個環(huán)節(jié)。如果在頁面中有多個按鈕,那么這個彈出窗要如何實現(xiàn)同上,根據(jù)之前的建議在回答問題之前要問清楚問題中模棱兩可的地方。是否觸發(fā)不同按鈕彈出的窗口現(xiàn)實的內(nèi)容不同。 這道面試題,當(dāng)初我面試的時候被問過兩次,因此比較深,此外,我記得還有設(shè)計模式的考察,所以,有深刻的體會。 面試題主要考察什么 面試不是個輕松的活,不管是對面試官還是面試者都一樣。對于面試官來說,別的先不管,首先...
摘要:正確做法是給加索引,還有聯(lián)合索引,并不能避免全表掃描。 前言:有收獲的話請加顆小星星,沒有收獲的話可以 反對 沒有幫助 舉報三連 有心的同學(xué)應(yīng)該會看到我這個noteBook下面的其它知識,希望對你們有些許幫助。 本文地址 時間點:2017-11 一個16年畢業(yè)生所經(jīng)歷的php面試 一、什么是面試 二、面試準(zhǔn)備 1. 問:什么時候開始準(zhǔn)備? 2. 問:怎么準(zhǔn)備? 三、面試...
閱讀 1696·2021-11-23 09:51
閱讀 3218·2021-09-26 10:21
閱讀 814·2021-09-09 09:32
閱讀 893·2019-08-29 16:06
閱讀 3322·2019-08-26 13:36
閱讀 783·2019-08-26 10:56
閱讀 2575·2019-08-26 10:44
閱讀 1155·2019-08-23 14:04