字節面試:微服務一定要DDD,爲什麼?TDD和DDD 有何關係?

文章很長,且持續更新,建議收藏起來,慢慢讀!瘋狂創客圈總目錄 博客園版 爲您奉上珍貴的學習資源 :

免費贈送 :《尼恩Java面試寶典》 持續更新+ 史上最全 + 面試必備 2000頁+ 面試必備 + 大廠必備 +漲薪必備
免費贈送 :《尼恩技術聖經+高併發系列PDF》 ,幫你 實現技術自由,完成職業升級, 薪酬猛漲!加尼恩免費領
免費贈送 經典圖書:《Java高併發核心編程(卷1)加強版》 面試必備 + 大廠必備 +漲薪必備 加尼恩免費領
免費贈送 經典圖書:《Java高併發核心編程(卷2)加強版》 面試必備 + 大廠必備 +漲薪必備 加尼恩免費領
免費贈送 經典圖書:《Java高併發核心編程(卷3)加強版》 面試必備 + 大廠必備 +漲薪必備 加尼恩免費領

免費贈送 資源寶庫: Java 必備 百度網盤資源大合集 價值>10000元 加尼恩領取


字節面試:微服務一定要DDD,爲什麼?TDD和DDD 有何關係?

尼恩說在前面

在40歲老架構師 尼恩的讀者交流羣(50+)中,最近有小夥伴拿到了一線互聯網企業如阿里、滴滴、極兔、有贊、希音、百度、網易、美團的面試資格,遇到很多很重要的面試題:

微服務一定要用DDD,爲什麼?

TDD也很流行,什麼是TDD? TDD和DDD 有何關係?

小夥伴沒有回答好,導致大廠機會沒了, 多麼可惜。

所以,這裏尼恩給大家做一下系統化、體系化的梳理,使得大家可以充分展示一下大家雄厚的 “技術肌肉”,讓面試官愛到 “不能自已、口水直流”

也一併把這個題目以及參考答案,收入咱們的 《尼恩Java面試寶典PDF》V164版本,供後面的小夥伴參考,提升大家的 3高 架構、設計、開發水平。

《尼恩 架構筆記》《尼恩高併發三部曲》《尼恩Java面試寶典》的PDF,請到公號【技術自由圈】獲取

本文目錄

字節面試:微服務一定要用DDD,爲什麼?

首先,說說微服務設計和拆分的困境

微服務解決大單體架構的的很多問題,比如擴展性、彈性伸縮能力、小規模團隊的敏捷開發等等。

好是好,但是微服務實踐過程中,大部分架構師遇到很多難題:

  • 微服務的粒度應該多大呀?

  • 微服務到底應該如何拆分和設計呢?

  • 微服務的邊界應該在哪裏?

拆分微服務的時候,兩種情況:

  • 有的顆粒度過大, 還是大單體
  • 有的顆粒度過小,導致上線和運維工作量巨大。

很多“水貨架構師”,在拆分微服務的時候憑藉感覺:簡單的把微服務理解爲小單體,粗暴的把原來一個大單體包拆分爲多個部署包,導致後期工程風險嚴重失控。從而陷入了微服務設計和拆分的困境。

其次,說說解決困境的兩個方面

微服務設計和拆分的困境,分成兩個方面:

  • 理論面,缺乏一套系統的理論和方法指導。
  • 落地面,缺乏一套可以參考的代碼骨架。

最後,說說DDD的理論指導價值和落地指導價值。

DDD 就是這種不可多得的微服務設計和拆分的理論和方法指導。

DDD 指導了兩個層面的設計和建模:

  • 宏觀層面: 指導了微服務外部的建模,包括系統和系統之間, 微服務和微服務之間依賴關係的建模。

  • 微觀層面:指導微服務內部的建模,包括 領域對象建模, 微服服務落地的各層關係的建模。

正因爲如此,DDD現在非常火爆,有其巨大生產價值、經濟價值的, 絕不僅僅是一套概念那麼簡單。

各個大廠的大致情況是:

  • 新項目都儘可能結合DDD進行設計建模、工程落地
  • 老項目也在使用DDD進行從點到面的改造,以榨取軟件的最佳性能。

下面是尼恩在網上梳理到的案例, 實際上這僅僅就是冰山一角:

阿里DDD大佬:從0到1,帶大家精通DDD

阿里大佬:DDD 落地兩大步驟,以及Repository核心模式

阿里大佬:DDD 領域層,該如何設計?

極兔面試:微服務爆炸,如何解決?Uber 是怎麼解決2200個微服務爆炸的?

阿里大佬:DDD中Interface層、Application層的設計規範

字節面試:請說一下DDD的流程,用電商系統爲場景

DDD如何落地:去哪兒的DDD架構實操之路

DDD落地:從騰訊視頻DDD重構之路,看DDD極大價值

DDD落地:從美團抽獎平臺,看DDD在大廠如何落地?

美團面試:微服務如何拆分?原則是什麼?

DDD神藥:去哪兒結合DDD,實現架構大調優

DDD落地:從網易新聞APP重構,看DDD的巨大價值

DDD落地:從阿里單據系統,看DDD在大廠如何落地?

DDD落地:有讚的生產項目,DDD如何落地?

DDD落地:從攜程訂單系統重構,看DDD的巨大價值

DDD落地:京東的微服務生產項目,DDD如何落地?

DDD落地:從阿里商品域,看DDD在大廠如何落地?

240Wqps,美團用戶中臺, 如何使用DDD架構?

DDD落地:愛奇藝打賞服務,如何DDD架構?

大廠癡迷DDD:從高德portal重構,看DDD的巨大價值

高開面試:給一個需求,請用DDD設計出來

字節面試:TDD也很流行,什麼是TDD?

測試驅動開發是一種開發方法,其核心理念是在編寫實際代碼之前先編寫測試用例。

這些測試用例描述了所期望的代碼行爲。

開發者根據這些測試用例來編寫代碼,以確保代碼通過所有測試並符合預期。

TDD的步驟通常是:

編寫測試用例 -> 運行測試(測試應該失敗) -> 編寫代碼 -> 再次運行測試(測試應該通過)。

常見的TDD框架包括JUnit(Java)、RSpec(Ruby)和unittest(Python)。

適合TDD這種模式的項目具備以下特點:

  • 項目的需求必須足夠清晰,而且程序員對整個需求有足夠的瞭解。
  • 項目的複雜度和依賴性要低。對於一個業務模型及其複雜、內部模塊之間的相互依賴性非常強的項目,採用TDD反而會得不嘗失,這會導致程序員在拆分接口和寫測試代碼的時候工作量非常大。另外,由於模塊之間的依賴性太強,我們在寫測試代碼的時候可能不採取一些橋接模式來實現,這樣勢必加大了程序員的工作量。

字節面試:TDD和DDD有何關係?

DDD如此之香,那麼多大廠對DDD如此癡迷, 背後 有深層次、根本性的原因

具體參見尼恩在《DDD學習聖經》爲大家深度總結的、下面的6點:

DDD 的一個根本能力,提升了 可測試性

DDD 爲 TDD 的落地,提供很好的 基礎支撐 和 前置條件。

在問題DDD的前置問題

面試官在問DDD之前,先會問下 微服務。

這裏把這些前置問題,也給大家簡歷梳理一下。

附1:說說,你對微服務是怎麼理解的?

微服務是由Martin Fowler大師提出的。微服務是一種架構風格,通過將大型的單體應用劃分爲比較小的服務單元,從而降低整個系統的複雜度。

微服務,是一種架構風格,它將應用構建爲一個小型自治服務的集合,。通俗地說,就像蜜蜂通過對蠟制的等邊六角形單元來構建它們的蜂巢。他們最初從使用各種材料的小單元開始,一點點的搭建出一個大型蜂巢。

微服務優點:

優勢 說明
獨立開發 所有微服務都可以根據各自的功能輕鬆開發
獨立部署 根據他們所提供的服務,可以在任何應用中單獨部署
故障隔離 即使應用中的一個服務不起作用,系統仍然繼續運行
混合技術棧 可以用不同的語言和技術來構建同一應用程序的不同服務
粒度縮放 各個組件可根據需要進行擴展,無需將所有組件融合到一起

微服務缺點:

1、服務調用的複雜性提高了: 網絡問題、容錯問題、負載問題、高併發問題。

2、分佈式事務: 儘量不要使用微服務事務。

3、測試的難度提升了:

4、運維難度提升:單體架構只要維護一個環境,而到了微服務是很多個環境,並且運維方式還都不一樣。所以對部署、監控、告警等要求就會變得非常困難。

5、微服務拆分, 缺乏統一的標準,拆分不合理會導致後面 出現 內部混亂,從 "大泥球" 演變成 更多的 ”小泥球“

附2:說說,微服務架構中的DRY是什麼?

DRY(Don’t Repeat Yourself) , 代表:不要重複自己

DRY促進了重用代碼/代碼複用。

這意味着在多個地方不要重複同樣的代碼,而應該將它們封裝爲庫或服務,以便在其他地方調用。

這種思想可以促進代碼的模塊化和可重用性,提高開發效率和質量。

所以,從微服務出發, 就演進出來了 技術中臺、數據中臺、業務中臺的架構

具體請參見尼恩 《DDD 學習聖經》

但是

DRY反過來導致緊耦合。

附3:說說,設計微服務的最佳實踐是什麼?

具體答案,請參見尼恩之前寫過的一個面試題答案:

美團面試:微服務如何拆分?原則是什麼?

注意其中的核心點:領域驅動原則,不數據驅動原則,也不是界面驅動原則

尼恩說在後面

DDD 面試題,是非常常見的面試題。大家面試的時候, 可以參考以上的內容去答,基本上 面試官會被你 震驚到、吸引到。

另外, 如果大家在實操DDD的過程中,遇到困難,也可以找尼恩求助:

  • 尼恩結合一個工業級的DDD實操項目,在第34章視頻《DDD的學習聖經》中,從理論面、落地面一起,給大家做了徹底的介紹。
  • 另外,在尼恩的一對一簡歷指導時,也指導DDD如何織入項目、應用到實操, 幫助大家徹底穿透DDD。

此題目收入了最新的尼恩面試寶典,在面試之前,建議大家系統化的刷一波 5000頁《尼恩Java面試寶典PDF》,並且在刷題過程中,如果有啥問題,大家可以來 找 40歲老架構師尼恩交流。

最終,讓面試官愛到 “不能自已、口水直流”。offer, 也就來了。

技術自由的實現路徑:

實現你的 架構自由:

喫透8圖1模板,人人可以做架構

10Wqps評論中臺,如何架構?B站是這麼做的!!!

阿里二面:千萬級、億級數據,如何性能優化? 教科書級 答案來了

峯值21WQps、億級DAU,小遊戲《羊了個羊》是怎麼架構的?

100億級訂單怎麼調度,來一個大廠的極品方案

2個大廠 100億級 超大流量 紅包 架構方案

… 更多架構文章,正在添加中

實現你的 響應式 自由:

響應式聖經:10W字,實現Spring響應式編程自由

這是老版本 《Flux、Mono、Reactor 實戰(史上最全)

實現你的 spring cloud 自由:

Spring cloud Alibaba 學習聖經》 PDF

分庫分表 Sharding-JDBC 底層原理、核心實戰(史上最全)

一文搞定:SpringBoot、SLF4j、Log4j、Logback、Netty之間混亂關係(史上最全)

實現你的 linux 自由:

Linux命令大全:2W多字,一次實現Linux自由

實現你的 網絡 自由:

TCP協議詳解 (史上最全)

網絡三張表:ARP表, MAC表, 路由表,實現你的網絡自由!!

實現你的 分佈式鎖 自由:

Redis分佈式鎖(圖解 - 秒懂 - 史上最全)

Zookeeper 分佈式鎖 - 圖解 - 秒懂

實現你的 王者組件 自由:

隊列之王: Disruptor 原理、架構、源碼 一文穿透

緩存之王:Caffeine 源碼、架構、原理(史上最全,10W字 超級長文)

緩存之王:Caffeine 的使用(史上最全)

Java Agent 探針、字節碼增強 ByteBuddy(史上最全)

實現你的 面試題 自由:

4800頁《尼恩Java面試寶典 》 40個專題

免費獲取11個技術聖經PDF:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章