面試被問軟件架構(gòu)模式,怎么破?
往期熱門文章:
1、監(jiān)控告警滿飛天,運(yùn)維在家睡到自然醒...
2、@Bean與@Component 同時(shí)作用同一個(gè)類,會(huì)怎么樣?
3、閑魚面試:Thread.sleep(0) 到底有什么用?
5、因?yàn)锽itMap,白白搭進(jìn)去8臺(tái)服務(wù)器...
想知道如何設(shè)計(jì)大型企業(yè)級的系統(tǒng)嗎?在開始主要的代碼開發(fā)之前,我們必須選擇一種合適的體系架構(gòu),它將為我們提供所需的功能和質(zhì)量屬性。因此,在將它們應(yīng)用到我們的設(shè)計(jì)之前,應(yīng)該先了解不同的體系結(jié)構(gòu)。


架構(gòu)模式是在給定上下文中解決軟件架構(gòu)中常見問題的通用、可重用的解決方案。架構(gòu)模式類似于軟件設(shè)計(jì)模式,但范圍更廣。

一般信息系統(tǒng)中最常見的4層劃分如下:
Presentation layer?表示層(也就是UI層) Application layer?應(yīng)用層(也就是服務(wù)層) Business logic layer?業(yè)務(wù)邏輯層(也就是領(lǐng)域?qū)樱?/section> Data access layer?數(shù)據(jù)訪問層(也就是數(shù)據(jù)持久層)
一般桌面應(yīng)用程序 電子商務(wù)Web應(yīng)用程序


應(yīng)用
在線應(yīng)用程序,如電子郵件、文件共享和銀行業(yè)務(wù)等


在數(shù)據(jù)庫復(fù)制中,主數(shù)據(jù)庫被視作權(quán)威數(shù)據(jù)源,而從數(shù)據(jù)庫與其保持同步 連接到計(jì)算機(jī)系統(tǒng)總線上的外圍設(shè)備(主驅(qū)動(dòng)器和從驅(qū)動(dòng)器)


應(yīng)用
編譯器。依次使用不同的過濾器執(zhí)行詞法分析、解析、語法分析和代碼生成 生物信息學(xué)中的工作流程


服務(wù)器將它們的功能(服務(wù)和特征等)發(fā)布到代理,客戶端向代理請求服務(wù),然后代理根據(jù)其注冊表將客戶端請求轉(zhuǎn)發(fā)給合適的服務(wù)。
應(yīng)用
消息代理軟件,如?Apache ActiveMQ,?Apache Kafka,?RabbitMQ?和?JBoss Messaging.


應(yīng)用
文件共享網(wǎng)絡(luò),如Gnutella?和?G2 多媒體協(xié)議,如P2PTV?和?PDTP 基于加密貨幣的產(chǎn)品,如比特幣和區(qū)塊鏈


應(yīng)用
安卓開發(fā) 通知服務(wù)


模型——包含核心功能和數(shù)據(jù) 視圖——向用戶顯示信息(可以定義多個(gè)視圖) 控制器——處理用戶的輸入
應(yīng)用
主流編程語言的互聯(lián)網(wǎng)應(yīng)用架構(gòu) 網(wǎng)絡(luò)框架,如Django?和?Rails.


黑板—— 一個(gè)結(jié)構(gòu)化的全局內(nèi)存,包含解決方案領(lǐng)域的對象 知識(shí)源——具有自身含義的專業(yè)模塊 控制組件——選擇、配置和執(zhí)行模塊
應(yīng)用
語音識(shí)別 車輛識(shí)別與跟蹤 蛋白質(zhì)結(jié)構(gòu)鑒定 聲吶信號(hào)解釋


應(yīng)用
數(shù)據(jù)庫查詢語言,如SQL 用于描述通信協(xié)議的語言


分層結(jié)果更容易進(jìn)行標(biāo)準(zhǔn)化,因?yàn)榭梢郧逦囟x每個(gè)層級 層級內(nèi)的修改不會(huì)影響其它層 | 某些場景下,需要跳過其中一些分層 | |
因?yàn)椴煌蛻舳擞胁煌问剑M(jìn)程間通信會(huì)造成很大負(fù)載 | ||
主從模塊間的通信延遲可能是一個(gè)問題,尤其在實(shí)時(shí)系統(tǒng)中。 | ||
容易添加過濾器,系統(tǒng)很容易擴(kuò)展; 過濾器可重用,可以通過重新組合已有的過濾器來創(chuàng)建不同的管道流。 | 從一個(gè)過濾器傳遞到另一個(gè)時(shí),存在數(shù)據(jù)轉(zhuǎn)換的負(fù)載 | |
對任意節(jié)點(diǎn)的失敗都有高度穩(wěn)定性; 在資源和計(jì)算能力方面具有高度可伸縮性 | 很難保證安全; 性能取決于節(jié)點(diǎn)的數(shù)量 | |
對于高度分布式應(yīng)用很有效 | ||
很容易擴(kuò)展數(shù)據(jù)空間中的結(jié)構(gòu) | 可能需要同步機(jī)制和訪問控制 | |
有利于終端用戶的可編程性; 增強(qiáng)了靈活性,因?yàn)樘鎿Q一個(gè)解釋程序很容易 |
最近熱文閱讀:
1、監(jiān)控告警滿飛天,運(yùn)維在家睡到自然醒... 2、@Bean與@Component 同時(shí)作用同一個(gè)類,會(huì)怎么樣? 3、閑魚面試:Thread.sleep(0) 到底有什么用? 4、身為程序員碰到最奇葩的需求是怎樣的? 5、因?yàn)锽itMap,白白搭進(jìn)去8臺(tái)服務(wù)器... 6、面試官:private修飾的方法可以通過反射訪問,那么private的意義是什么? 7、如何選擇合適的分布式ID生成方案 8、面試題:為什么數(shù)據(jù)庫連接池不采用 IO 多路復(fù)用? 9、SpringBoot 配置文件敏感信息如何加密? 10、線上訂單號(hào)重復(fù)了?一招搞定它! 關(guān)注公眾號(hào),你想要的Java都在這里
評論
圖片
表情
