單例模式 單例模式一般用於全局只需要一個唯一的實例的情況。 例如說,日誌讀寫的功能,一般來說全局只需一個日誌讀寫實例,然後其他的類實例去獲取這個實例進行日誌讀寫。 又例如說,有一個協作的功能,需要各個模塊發送給主控制器,主控制器需要做成單例,這樣子模塊之間操作控制器就是操作實際主控制器的內容。 怎麼 ...
MVC架構設計淺析 楊傳偉 (石家莊鐵道大學信息科學與技術學院,河北省,石家莊市,050043) 摘 要:本文以圖書管理系統為案例(當前主流框架SpringMVC的原理來分析MVC的設計理念等),深入淺出地分析常用的WEB設計模式MVC。將從MVC的歷史、MVC每一層的作用,MVC能為我們帶來什麼好 ...
一些必須提前知道的概念 patition kafka日誌文件是以patition在物理存儲上分割的 是topic物理上的分組,一個topic可以分為多個partition,每個partition是一個有序的隊列 是以文件夾的形式存儲在具體Broker本機上 LEO 表示每個partition的log ...
從演化歷史看大型網站架構 楊傳偉 (石家莊鐵道大學信息科學與技術學院,河北省,石家莊市,050043) 摘 要:本文以大型網站系統的特點、大型網站架構演化發展歷程以及大數據與高併發為切入和論述點,由淺入深、由簡到繁地對大型網站架構設計展開敘述,首先通述其特點,之後介紹大型網站架構的歷史發展歷程,從其 ...
DRY原則 DRY 原則,它的英文描述為:Don’t Repeat Yourself。中文直譯為:不要重覆自己。也可以理解為:不要寫重覆的代碼。 我們從實現邏輯重覆、功能語義重覆和代碼執行重覆,這三種代碼重覆來說明DRY原則。 實現邏輯重覆 例如有兩個函數isValidUserName() 和 is ...
本章是系列文章的第三章,介紹了基於數據流分析的一些優化方法。包括生命周期管理,可獲得表達式,常用表達式,可達性定義。本章在介紹這4中分析方法的基礎上提取出它們的通用模式。這一章形式化的內容比較多,看的時候有點燒腦,最好自己手工推導一下,要不然基本上看不懂:) 本文中的所有內容來自學習DCC888的學 ...
當和朋友談到AOP時,第一映像會說AOP的應用層面,比如攔截器、過濾器,實現復用等等使用層面上。 這些應用層面上的回答遠遠沒有深入AOP的思想。是的,AOP是思想,面向切麵思想。 既然是編程思想,那我們就有必要瞭解AOP的整個過程,以及AOP思想出現的原因。 AOP面向切麵編程思想,能夠解決什麼問題 ...
本章是系列文章的第三章,介紹了基於數據流分析的一些優化方法。包括生命周期管理,可獲得表達式,常用表達式,可達性定義。本章在介紹這4中分析方法的基礎上提取出它們的通用模式。這一章形式化的內容比較多,看的時候有點燒腦,最好自己手工推導一下,要不然基本上看不懂:) 本文中的所有內容來自學習DCC888的學 ...
1.“new”有什麼不對勁? 在我們沒有接觸到工廠模式(簡單工廠、工廠方法模式、抽象工廠模式)之前,我們實例化對象唯一的方法就是通過“new”關鍵字來完成。但是,大量的使用“new”關鍵字來實例化對象會違背一些設計原則,因為代碼與具體的類型綁在一起,從而導致過多的依賴於細節而非抽象,這樣代碼就很難適 ...
1.“new”有什麼不對勁? 在我們沒有接觸到工廠模式(簡單工廠、工廠方法模式、抽象工廠模式)之前,我們實例化對象唯一的方法就是通過“new”關鍵字來完成。但是,大量的使用“new”關鍵字來實例化對象會違背一些設計原則,因為代碼與具體的類型綁在一起,從而導致過多的依賴於細節而非抽象,這樣代碼就很難適 ...
背景: 當我們使用微服務時,若想在本地聯調就需要啟動多個服務,為了避免本地啟動過多服務,現將註冊中心等基礎服務共用。當我們在服務A開發時,都是註冊到同一個nacos,這樣本地和開發環境的服務A就會同時存在,當調用服務時就會使用負載均衡選擇服務,導致我們無法正常調試介面。這時我們可以選擇使用灰度版本來 ...
購物車可以說是電商平臺的一個標配了,起初是用於多種商品的結算,現在很多用戶也把購物車當作臨時收藏來使用,這裡嘗試做一個基本的購物車架構設計。 用例分析 加入購物車、查看購物車、修改數量或者規格、移除商品、清空購物車,是一個購物車最基本的功能。 關鍵流程 1.查看購物車 關鍵點: 1)商品狀態判斷:上 ...
1.概念 1.1.知道的越少越好 迪米特法則,結合其含義又稱之為“最少知道原則”,即一個類作為一個調用方,應當對自己依賴的類(被調用的類)其中所處理的邏輯細節,知道的越少越好。對於被依賴的類(被調用的類)不管在使用上多麼的複雜,它都應儘量將處理邏輯封裝在它的內部,對調用方提供簡潔明瞭的公共方法即可, ...
重要性 有過一些實際開發工作的朋友一定對某個場景會深有體會,那就是客戶經常會對現有的功能提出新的需求要我們改動,並且要快速完成。如果你的代碼沒有很好的遵循“開閉原則”,並且頂著工期的縮減,那我們對需求變化的修改,“往往就像在一個草稿紙上反覆的塗抹”,隨著不斷的變化修改代碼就會顯得很亂,可能到最後你連 ...
線程和進程是電腦操作系統的基礎概念,在程式員中屬於高頻辭彙,那如何理解呢?Node.js 中的進程和線程又是怎樣的呢? 一、進程和線程 1.1、專業性文字定義 進程(Process),進程是電腦中的程式關於某數據集合上的一次運行活動,是系統進行資源分配和調度的基本單位,是操作系統結構的基礎,進程 ...
1.基本介紹 1.1.概念 高層模塊不能依賴於一個“具體化、細節化”的低層模塊,而是通過一個抽象的“規範/標準”建立兩者之間的依賴關係,簡言之就是:不依賴於實現,而是依賴於抽象。這裡“實現”一詞有的地方也稱為“細節”,在編碼中主要體現的是我們根據業務模型具體自定義的普通類,比如:員工類、商品類等。而 ...
1.基本介紹 裡斯科瓦(Barbara Liskov)使美國麻省理工學院電氣工程於電腦科學系資深教授,她是美國國家工程院院士,在程式語言、分散式計算、程式設計方法及軟體工程領域做出了卓越貢獻。裡斯科瓦於1987年提出了一個關於繼承的原則,也就是現在我們稱為的“里氏替換原則”。 里氏替換原則基於子類 ...