wordpress交互主題揭陽seo快速排名
22年第一題:架構(gòu)設(shè)計與評估
分析文字,識別需求和質(zhì)量屬性?這里需要記憶質(zhì)量屬性有那些,區(qū)分需求和質(zhì)量屬性,能區(qū)分出質(zhì)量屬性之間的區(qū)別。
我的回答:
差距分析:
根據(jù)題目中功能的特點,分析使用什么架構(gòu)風(fēng)格,這個題目考慮作為架構(gòu)師,能根據(jù)場景,選擇適合的架構(gòu)風(fēng)格,考察對架構(gòu)風(fēng)格的了解程度,能夠回答到要點。
我的回答:面對對象架構(gòu)風(fēng)格具有較好的可讀性,耦合性低,但是不支持動態(tài)的修改,如果要修改功能,需要修改代碼;解釋器架構(gòu)風(fēng)格具有較好的靈活性,可以根據(jù)輸入自定義規(guī)則來實現(xiàn)對于的功能;根據(jù)題目中的要求,選擇解釋器風(fēng)格更合適。
差距分析:
1、需要先分別從題目的三個特性依次對比分析
2、最后總結(jié)結(jié)論
3、對于架構(gòu)風(fēng)格不熟練
解釋器架構(gòu)風(fēng)格
解釋器框架風(fēng)格(Interpreter Framework Style)是一種軟件架構(gòu)風(fēng)格,其核心思想是構(gòu)建一個解釋器(Interpreter)來解釋并執(zhí)行特定領(lǐng)域或問題領(lǐng)域的語言或規(guī)則。它能夠讀取、解析和執(zhí)行用戶提供的程序代碼,通常是基于文本的源代碼
。歸屬于虛擬機(jī)大類型的架構(gòu)風(fēng)格。
名稱:解釋器。解釋什么:解釋語言DSL,就是輸入,將語言映射翻譯去執(zhí)行。很靈活,靈活帶來的代碼就是效率比較慢。為什么說靈活,運(yùn)維它解釋運(yùn)行,運(yùn)行的適合編譯,那么就可以修改完成代碼后立馬執(zhí)行。
應(yīng)用場景:
? 腳本語言:許多腳本語言(如Python、JavaScript、Ruby等)采用解釋器架構(gòu),允許用戶編寫可立即執(zhí)行的腳本,無需預(yù)先編譯。
? 嵌入式系統(tǒng):在某些嵌入式環(huán)境中,解釋器用于執(zhí)行定制的配置腳本或控制邏輯,簡化設(shè)備管理和應(yīng)用程序定制。
? 數(shù)據(jù)庫查詢語言:SQL查詢語言就是一個典型的例子,數(shù)據(jù)庫管理系統(tǒng)內(nèi)置了SQL解釋器,用于解析和執(zhí)行用戶提交的查詢語句。
? 規(guī)則引擎:在業(yè)務(wù)規(guī)則管理系統(tǒng)中,解釋器用于解析和執(zhí)行用特定規(guī)則語言編寫的業(yè)務(wù)規(guī)則,根據(jù)實時數(shù)據(jù)做出決策。
? 教育與科研:解釋器常用于教學(xué)環(huán)境和研究項目,幫助學(xué)生學(xué)習(xí)編程概念或?qū)嶒炐碌木幊陶Z言設(shè)計。
? 游戲開發(fā):游戲引擎中可能包含腳本解釋器,讓設(shè)計師使用易于理解的語言編寫游戲邏輯,無需深入掌握底層編程語言。
? 專家系統(tǒng):早期的專家系統(tǒng)中,解釋器用于執(zhí)行知識工程師編寫的規(guī)則集,模擬人類專家的決策過程。
總的來說,解釋器架構(gòu)風(fēng)格通過提供一個能夠理解并執(zhí)行特定語言的解釋器,支持用戶以高抽象級別編寫程序,適用于需要快速原型設(shè)計、動態(tài)執(zhí)行或使用特定領(lǐng)域語言的場景。盡管其執(zhí)行效率可能低于編譯型系統(tǒng),但這種風(fēng)格提供的靈活性、易用性和跨平臺能力在很多情況下彌補(bǔ)了這一不足。
特點:
-
領(lǐng)域特定語言(DSL):
解釋器框架風(fēng)格通常用于實現(xiàn)領(lǐng)域特定語言(DSL),這是一種針對特定問題領(lǐng)域的語言。DSL使得問題領(lǐng)域的規(guī)則和邏輯更容易理解和表達(dá)。 -
模塊化的解釋器:
架構(gòu)中通常包含一個或多個模塊化的解釋器,每個解釋器負(fù)責(zé)解釋特定部分
的DSL或規(guī)則。這些解釋器可以組合
在一起以執(zhí)行復(fù)雜的任務(wù)。 -
靈活性:
解釋器框架風(fēng)格提供了高度的靈活性,因為它允許動態(tài)地添加、修改或替換解釋器
,以適應(yīng)不斷變化的需求。 -
可擴(kuò)展性:
架構(gòu)可以輕松擴(kuò)展以支持新的DSL
或規(guī)則,而不會對現(xiàn)有的解釋器產(chǎn)生影響。 -
多層次的解釋:
解釋器可以構(gòu)建成多層次的結(jié)構(gòu),其中一個解釋器可以調(diào)用另一個解釋器,從而實現(xiàn)復(fù)雜的解釋和執(zhí)行邏輯。 -
易于
維護(hù)和修改
:
由于DSL和解釋器的模塊化性質(zhì),維護(hù)和修改系統(tǒng)變得相對容易。新的規(guī)則或語法可以通過添加新的解釋器來支持,而不需要修改現(xiàn)有的代碼。
22年第二題:軟件架構(gòu)設(shè)計與建模
數(shù)據(jù)流圖,數(shù)據(jù)流分層,數(shù)據(jù)平衡原則
我的答案:數(shù)據(jù)平衡原則是指數(shù)據(jù)在每一次的流入和流出要相同。要避免只有流入沒有流出,也要避免只有流出,沒有流入。
差距分析:
1、層間平衡:不同層次之間,相同數(shù)據(jù)流的個數(shù)和方向要一致
2、圖內(nèi)平衡:避免有輸入無輸出的黑洞,避免有輸出無輸入的奇跡
其他考點:
數(shù)據(jù)流圖是組成,實體,加工
,存儲,數(shù)據(jù)流;
數(shù)據(jù)流圖是用在分析階段使用,用來進(jìn)行建立模型,來分析系統(tǒng)的功能有那些,有那些實體,它通常來結(jié)合數(shù)據(jù)字典。
數(shù)據(jù)流圖是屬于結(jié)構(gòu)化設(shè)計分析的工具。
軟件工程中通常由結(jié)構(gòu)化和面向?qū)ο蠓治龊驮O(shè)計兩種方式。
描述DFD和DD在分析和設(shè)計階段的作用。
我的答案:
1、在需求分析階段,通過分析需求,得到數(shù)據(jù)流圖,可以識別到系統(tǒng)的行為和功能,明確數(shù)據(jù)處理的過程,明確系統(tǒng)處理的實體由那些。通過DD來分析記錄實體和動作,來為分析階段奠定基礎(chǔ)
2、在設(shè)計階段,數(shù)據(jù)流圖可以幫助進(jìn)行ER圖的設(shè)計,軟件架構(gòu)圖的設(shè)計,識別軟件模塊,進(jìn)行軟件模塊劃分
3、總之:兩個技術(shù)手段在結(jié)構(gòu)化分析中都非常重要。
差距:
1、分析階段,通過XX方式,可以反映出系統(tǒng)必須完成的邏輯功能,盡可能早發(fā)現(xiàn)是否由需要輸入或者輸出的信息被遺漏,以及系統(tǒng)各部分的邏輯是否由錯誤,數(shù)據(jù)字典是描述數(shù)據(jù)的信息集合,統(tǒng)一語言和理解
2、設(shè)計階段,變換分析和事務(wù)分析
的方法,設(shè)計出模塊結(jié)構(gòu),根據(jù)數(shù)據(jù)字典的數(shù)據(jù)存儲描述建立數(shù)據(jù)庫存儲設(shè)計
補(bǔ)充:變換分析和事務(wù)分析:解釋和概念
22年第三題(故障檢測和診斷)
心跳檢測和超時探測技術(shù)的原理和特點。
我的:
心跳檢測技術(shù)是通過不斷地發(fā)出請求,看對方是否會給出響應(yīng),通常根據(jù)是否連續(xù)無法檢測到心跳的方式來判斷是否存在故障。
超時探測技術(shù)是指發(fā)出請求,等待其相應(yīng),如果等待的時間超時一定值,那么就認(rèn)為存在故障。
差距
要講優(yōu)點和缺點。
心跳檢測技術(shù),固定頻率向其它節(jié)點發(fā)送心跳信息,表示自己是活著的,如果沒有收到心跳,就認(rèn)為這個節(jié)點失敗了
超時探測是主動探測,問其它節(jié)點你健康嗎,而心跳檢測技術(shù)不主動的探測,我只看最近我收到了那些信號,如果由一段時間沒有收到信號,則認(rèn)為探測失敗。
22年第四題:緩存技術(shù)
數(shù)據(jù)庫實時同步是數(shù)據(jù)庫和緩存的更新是同步進(jìn)行的,當(dāng)都更新完成后,則返回,通常需要使用事務(wù),保證兩個操作的原子性,否則可能出現(xiàn)數(shù)據(jù)不一致的問題。數(shù)據(jù)庫異步準(zhǔn)實時更新,是指更新數(shù)據(jù)庫是同步的,但是更新緩存通過發(fā)送到消息隊列進(jìn)行異步的更新處理,這樣可以提高數(shù)據(jù)庫同步的效率。
根據(jù)題目中對響應(yīng)時間性能要求比較高,因此,選擇數(shù)據(jù)庫異步準(zhǔn)實時更新是合適的
同步是將訂單反饋作為一個事務(wù),只有緩存與數(shù)據(jù)庫中的數(shù)據(jù)同時完成更新后事務(wù)才算提交成功。
哈希算法是指將緩存的key經(jīng)過一個hash算法,得到一個數(shù)字,然后根據(jù)數(shù)字求余得到緩存存儲的機(jī)器位置,它的優(yōu)點是,比較簡單,缺點是,如果機(jī)器掛掉了,那么需要進(jìn)行重新哈希,會帶來比較大的成本。
一致性哈希是一種特殊的哈希,將節(jié)點分布在一個哈希值組成的環(huán)中,當(dāng)緩存的key經(jīng)過哈希后,得到在環(huán)上的位置,然后將緩存放在距離環(huán)最近的一個節(jié)點,這樣做到好處是,當(dāng)節(jié)點伸縮的適合,對緩存分布的影響比較小,只影響到后一個節(jié)點。
根據(jù)題目的要求:運(yùn)維集群部署多個節(jié)點,且可能會進(jìn)行變化,所以選擇一致性哈希是合適的。
哈希算法:將任意長的輸入通過某種哈希算法變換成固定長度的一個哈希值。
一致性哈希將整個哈希值空間映射成一個按順時針方向組織的虛擬圓環(huán)。盡可能小的改變已存在服務(wù)器與處理請求服務(wù)器之間的映射關(guān)系,解決了簡單哈希算法在分布式哈希表中存在的動態(tài)伸縮問題。可擴(kuò)展性,更好的適應(yīng)數(shù)據(jù)的快速增長。
當(dāng)一個元素加入的時候,根據(jù)K個哈希函數(shù)計算得到一個位數(shù)組,得到位數(shù)組中的K個點,置為一,如果這些點都為一,則認(rèn)為集合中很可能存在元素,否則肯定不存在。優(yōu)點:占用內(nèi)存小,不存儲元素本身,可以并行運(yùn)算(哈希函數(shù)之間沒有關(guān)聯(lián)關(guān)系),增加和查詢的時間復(fù)雜度都是O(K),比較小,和數(shù)據(jù)量無關(guān)。缺點是有誤判可能性,只能判斷是否存在,不能獲取元素本身,而且最后,不能從布隆過濾器中喊出元素。