作者:小傅哥,博客:https://bugstack.cn
大家好,我是技術(shù)UP主小傅哥。
拿真實場景做方案、用大廠技術(shù)寫代碼,創(chuàng)作硬核的項目。全程一條龍的帶著分析需求
、設計架構(gòu)
、編寫代碼
、上線系統(tǒng)
,完成項目后,再帶著梳理簡歷的編寫。這一套下來,用小伙伴的話講;”把我抬進了公司里去!“
面試官:”看過你的星球,很適合校招生積累技術(shù)“
進入到3月,各個大廠都已經(jīng)陸續(xù)的推送了,實習/校招的招聘計劃。很多伙伴簡歷項目不錯的也都拿到了很好的 Offer!甚至不少大廠的面試官,也對市面的一些學習項目有所了解,知道求職者學習了什么項目可以得到成長。 這有點類似于師承于誰,更好的得到了認可。
那么,為了幫助更多的伙伴寫好簡歷以及提前演練一些面試題的回答,這里小傅哥做了一套簡歷模板和對應的提問解答。學習拼團項目的小伙伴可以參考。
文末提供了全套項目的文檔、視頻、代碼,可以加入社群獲取全部課程資料。
一、項目介紹
你可以根據(jù)是實習、實踐、導師任務、學校課程、自己學習,幾個方向來描述項目來源。
舉例;
面試官你好,拼團交易平臺系統(tǒng),是我在日常使用拼多多
、騰訊
、京東
等服務平臺,交易支付時候,了解到這樣的一種營銷手段。它可以通過用戶自傳播方式增強交易量,也是拼多多最開始起家形成巨大規(guī)模的一個業(yè)務邏輯。因此非常感興趣這樣的系統(tǒng),所以根據(jù)大廠分享的資料、與對應的架構(gòu)師UP進行交流學習了,設計了這樣一套系統(tǒng)。
該系統(tǒng)采用了 DDD 領域驅(qū)動設計進行建模,拆分領域模塊邊界,形成;活動領域、人群領域、交易領域,來構(gòu)建拼團營銷交易流程,達到試算、鎖單、結(jié)算等步驟流程。這個過程中提煉了通用設計模式,規(guī)則樹、責任鏈,可以非常有效的統(tǒng)一的治理流程編排實現(xiàn)。
二、簡歷模板
注意:? 不要直接復制粘貼簡歷模板內(nèi)容!
項目名稱:拼團營銷服務系統(tǒng)
、交易營銷場景 - 拼團系統(tǒng)
、營銷拼團交易平臺
、仿拼多多/騰訊/京東,拼團玩法系統(tǒng)(以大廠項目為背書)
、拼團外賣平臺系統(tǒng)(結(jié)合其他項目一起組合)
? - 參考以上方式編寫自己的項目名稱,尤其拼團還是一個微服務,可以和很多其他系統(tǒng)組合。
項目架構(gòu):微服務設計
、分布式架構(gòu)
、DDD 領域驅(qū)動設計 + 六邊形分層架構(gòu)實現(xiàn)
、前后端分離技術(shù)
核心技術(shù):SpringBoot、MyBatis、MySQL、Guava、Redis、RabbitMQ、動態(tài)配置中心(DCC)、普羅米修斯監(jiān)控、Docker等 - 如果學習了其他技術(shù)棧也可以補充。
項目描述:
方式2(以提供服務介紹):該項目以拉動/促進/提高
(小型支付商城/外賣點餐/購票出行/...)交易單量為目標,通過設計拼團優(yōu)惠組隊下單為手段,達到增強用戶自傳播分享私域提高整個交易GMV的結(jié)果。三段式描述,...目標,...手段,...結(jié)果
方式3(以實際場景介紹):該項目是以促進Xxx公司Xxx場景的核心營銷優(yōu)惠玩法系統(tǒng),圍繞公司的xxx、yyy、zzz等全部交易業(yè)務,設計通用的拼團優(yōu)惠鎖單和組隊結(jié)算回調(diào)服務。此系統(tǒng)分布式架構(gòu)設計,可支撐單機壓測量 xxx tps,tp99 xxx 的數(shù)據(jù)指標,有效的滿足公司的全量的業(yè)務場景接入使用。
方式1(以學習視角介紹):本項目參考拼多多
交易購物拼團場景,調(diào)研中大廠相關(guān)營銷業(yè)務場景和技術(shù)架構(gòu)方案,設計實現(xiàn)了本套拼團營銷服務系統(tǒng),支持各類營銷優(yōu)惠(直減、折扣、N元購)。該系統(tǒng)以面向?qū)ο箝_發(fā),運用 DDD 拆分領域邊界,使用設計模式設計服務功能。提高系統(tǒng)的擴展性和可維護性。
核心方案:
-
-
- (舉例)通過 Redis 發(fā)布訂閱模型,結(jié)合 Spring AOP 切面和代理,以自定義注解的方式控制屬性信息動態(tài)配置。減少系統(tǒng)與 Redis 的 IO 交互,提高對高頻場景屬性值的使用時間效率。(舉例)設計拼團組隊結(jié)算的 HTTP、MQ 雙重手段,滿足外部應用和內(nèi)部微服務的不同方式對接,增強系統(tǒng)的適配性。同時為了保證整體方案的可靠性,在結(jié)算觸達時,先異步多線程方式即時觸發(fā)回調(diào)(HTTP、MQ),再通過業(yè)務一致性任務數(shù)據(jù)補償校驗。(MQ、HTTP,都可能因網(wǎng)絡原因?qū)е率。虼诵枰卦嚕┤蝿盏挠|達,還增加多分布式鎖,讓任務互備搶占方式執(zhí)行,增強系統(tǒng)的魯棒性設計。(舉例)設計 Redis BitSet/BitMap 人群標簽,用于過濾可見和可參與,拼團活動的人群信息。該人群標簽可依賴于過往用戶數(shù)據(jù)(交易下單)通過 job 任務完成人群標簽的錄入。(舉例)通過策略模式,設計拼團折扣(MJ、ZJ、NYG)的計算策略。同時折扣的計算也會通過人群標簽過濾,以滿足運營策略配置,降低活動風險。(舉例)運用 retrofit2/okhttp3/spring cloud fegin + nginx 負載,對接拼團交易平臺鎖單服務,以及通過 http 回調(diào)和 MQ 監(jiān)聽來處理交易結(jié)算。
-
- (舉例)以拼團試算場景舉例,運用通用設計模式模型框架,完成試算;根節(jié)點、切量開關(guān)、營銷折扣、人群標簽、異常兜底等流程串聯(lián)。設計這樣解耦設計,極大的提到了程序的可擴展性。(舉例)以拼團鎖單場景舉例,拼團鎖單場景,使用通用的責任鏈模型框架,校驗活動的有效性(狀態(tài)、有效期)和用戶的參與資格。(舉例)以拼團結(jié)算場景舉例,拼團結(jié)算場景,使用通用的責任鏈模型框架,校驗渠道黑名單配置、拼團組隊信息、交易時間屬性、訂單有效狀態(tài)等。
-
架構(gòu)設計,以 DDD 領域驅(qū)動設計,四色建模方式,按照系統(tǒng)功能流程,拆解服務邊界。包括;活動域、標簽域、交易域。
設計模式,設計并提煉通用的責任鏈
、規(guī)則樹
模型框架,解決領域場景中多處,需要使用設計模式解耦復雜流程鏈路的調(diào)度(避免過多的if...else判斷)。鑒于多處場景的責任鏈使用,模塊框架設計責任鏈為執(zhí)行和鏈路分離組裝,便于工廠可以組合出各類執(zhí)行責任鏈,不被不同的鏈路管理影響(以往的責任鏈,一般是單例的,會被影響)。
規(guī)則過濾;
異步線程,為提高用戶體驗,將拼團優(yōu)惠試算所需的營銷類數(shù)據(jù)加載,由串行改為異步線程并行執(zhí)行。此執(zhí)行方式由通用設計模式模型框架提供。(如果由引入星球的動態(tài)線程池,也可以在這里增加線程池的管理描述)
功能方案;
不要局限于以上的描述,可以結(jié)合?Ai + 喂進去的信息,給你描述出屬于你獨一無二的簡歷描述。這樣更有益于你的面試。
三、面試問題
1. 項目設計與架構(gòu)
為什么選擇DDD領域驅(qū)動設計?如何劃分領域邊界?
答:DDD能有效解決復雜業(yè)務邏輯的拆解問題,通過四色建模和業(yè)務場景分析,劃分出活動域(管理拼團規(guī)則)、標簽域(用戶畫像和權(quán)限過濾)、交易域(訂單和結(jié)算)。例如,拼團鎖單流程屬于交易域,而人群標簽過濾屬于標簽域。
微服務間如何通信?如何保證數(shù)據(jù)一致性?
答:對內(nèi)外對接系統(tǒng),分別采用HTTP(Feign/RestTemplate)和 MQ(RabbitMQ)方案。關(guān)鍵鏈路(如訂單結(jié)算)通過MQ保證最終一致性,結(jié)合本地事務表+補償任務(如定時檢查未完成的結(jié)算請求)。
六邊形架構(gòu)如何落地?解決了什么問題?
答:通過適配器層隔離核心業(yè)務與外部依賴(如數(shù)據(jù)庫、Redis)。例如,訂單結(jié)算的核心邏輯獨立于HTTP回調(diào)或MQ監(jiān)聽的具體實現(xiàn),提升核心代碼的穩(wěn)定性和可測試性。
DDD 是一個亮點,中大廠公司都在推進 DDD 的項目重構(gòu)。站在技術(shù)角度,這樣的架構(gòu)更好維護。站在領導角度,這樣的拆分可以更好了解系統(tǒng)設計便于制訂KPI。同時有清晰的業(yè)務領域劃分,AI 開發(fā)工具可以更好的結(jié)合進來。招聘里DDD的體現(xiàn),jump這個崗位,好像為我量身定做!
2. 核心技術(shù)實現(xiàn)
Redis在項目中如何應用?舉例說明答:1)BitMap存儲用戶標簽(如是否參與過某活動);2)分布式鎖控制拼團組隊結(jié)算觸達并發(fā);3)緩存活動配置(如有效期、折扣規(guī)則),降低數(shù)據(jù)庫壓力。
責任鏈模式如何解耦復雜流程?舉例說明答:拼團鎖單流程拆解為多個處理器鏈:活動狀態(tài)校驗→用戶資格校驗→庫存檢查。每個處理器獨立實現(xiàn),通過工廠模式動態(tài)組裝,避免if-else嵌套。
異步線程如何優(yōu)化性能?如何管理線程池?答:將營銷數(shù)據(jù)加載從串行改為并行(如使用CompletableFuture)。通過動態(tài)線程池監(jiān)控任務隊列和拒絕策略,結(jié)合普羅米修斯采集指標,避免線程池耗盡。注意多準備下多線程、線程池的八股
3. 核心業(yè)務場景
拼團結(jié)算的HTTP和MQ雙重回調(diào)如何設計?如何保證可靠性?
答:1)結(jié)算后同時發(fā)送HTTP請求和MQ消息;2)異步線程池處理回調(diào),失敗后進入重試隊列;3)定時任務補償未完成回調(diào),配合分布式鎖避免重復執(zhí)行。
人群標簽如何通過BitMap實現(xiàn)?舉例說明
答:例如,用戶ID哈希后映射到BitMap的某一位。運營配置“僅限新用戶”的活動時,Job任務掃描歷史訂單,將老用戶對應位標記為0,查詢時通過BITCOUNT判斷資格。
策略模式在折扣計算中的應用?如何擴展新策略?
答:定義接口DiscountStrategy
,實現(xiàn)類?MJCalculateService
(滿減)、NCalculateService
(N元購)、ZJCalculateService
(直減)、ZKCalculateService
(折扣)。新增策略時只需添加實現(xiàn)類并注冊到Spring上下文,通過策略工廠按類型調(diào)用。
4. 高并發(fā)與容錯(這部分會在第3階段加入)
如何解決庫存超賣問題?
答:1)Redis原子操作(DECR)預扣庫存;2)數(shù)據(jù)庫最終扣減時加樂觀鎖;3)異步補償任務回滾異常訂單。
分布式鎖的實現(xiàn)方案?遇到過哪些坑?
答:基于Redis的Redisson(看門狗機制續(xù)期)。注意點:1)鎖粒度細化(按活動ID+商品ID);2)避免鎖過期后業(yè)務未執(zhí)行完,需結(jié)合版本號校驗。
如何設計熔斷降級策略?
答:Sentinel監(jiān)控外部服務(如支付接口)的異常比例,超閾值時熔斷,降級為返回默認錯誤碼或緩存數(shù)據(jù),并記錄日志供補償任務處理。
5. 監(jiān)控與運維(這部分會在第3階段加入)
如配置說明接入普羅米修斯監(jiān)控,同時也可以使用 arthas、dump mat。地址:https://bugstack.cn/md/road-map/grafana.html
普羅米修斯監(jiān)控哪些指標?如何定位性能瓶頸?
答:監(jiān)控接口TP99、線程池活躍度、Redis命中率、MQ堆積量。通過Grafana儀表盤分析慢SQL(MyBatis攔截器采集)或高耗時責任鏈節(jié)點。
動態(tài)配置中心如何實現(xiàn)?如何保證實時性?
答:基于Nacos/Zookeeper,配置變更時通過Spring Cloud Bus通知服務。關(guān)鍵配置(如活動開關(guān))結(jié)合本地緩存,通過@RefreshScope實時生效。
Docker化部署的優(yōu)化經(jīng)驗?
答:1)多階段構(gòu)建減小鏡像體積;2)JVM參數(shù)調(diào)優(yōu)(-Xmx限制內(nèi)存);3)健康檢查接口 skywalking、artash 探針結(jié)合,實現(xiàn)系統(tǒng)監(jiān)控。
6. 設計模式與代碼規(guī)范
規(guī)則樹模式如何實現(xiàn)?舉例說明
答:根節(jié)點為入口,子節(jié)點為具體規(guī)則(如切量、標簽過濾)。每個節(jié)點實現(xiàn)RuleNode
接口,通過組合模式構(gòu)建樹形結(jié)構(gòu),支持動態(tài)擴展節(jié)點。
如何避免策略模式帶來的類膨脹問題?
答:1)將策略實現(xiàn)類定義為無狀態(tài)Bean,復用實例;2)通過注解+自動掃描注冊策略;3)策略參數(shù)化配置,減少重復代碼。
AOP在項目中的典型應用場景?
答:1)DCC 動態(tài)配置中心;2)@LogTrack 記錄核心鏈路日志(切面加日志,可以讓 DeepSeek 寫個案例);
7. 擴展性與業(yè)務,你怎么設計新功能?
如何支持多種拼團類型(如老帶新、階梯團)?
答:抽象拼團模板(Template Pattern),定義成團條件接口(如人數(shù)滿額、金額達標)。新增類型時實現(xiàn)接口,并通過工廠模式注入。
如何設計活動預熱機制?
答:1)活動開始前定時任務加載配置到Redis;2)緩存熱門活動的商品信息;3)通過壓測工具預熱JVM和線程池。
如何實現(xiàn)灰度發(fā)布?
答:1)Apollo配置中心按用戶ID百分比切流;2)網(wǎng)關(guān)層根據(jù)請求頭路由到新老服務;3)結(jié)合Prometheus監(jiān)控異常,快速回滾。
8. 綜合問題
項目中最大的挑戰(zhàn)是什么?如何解決?
答:高并發(fā)下Redis雪崩。解決方案:1)緩存分層(本地緩存+Redis);2)熱點數(shù)據(jù)預加載;3)隨機過期時間。
如果讓你重構(gòu)系統(tǒng),會優(yōu)化哪些點?
答:1)引入分庫分表解決訂單表膨脹;2)增加AI + RAG + MCP 提供智能分析和運營服務;3)使用Guava本地緩存,管理復雜數(shù)據(jù)結(jié)構(gòu)。
如何向非技術(shù)人員解釋系統(tǒng)設計?
答:類比“組隊購物”,系統(tǒng)像智能管家:1)自動匹配規(guī)則(如折扣);2)確保組隊不超時;3)失敗時自動重試,保證最終成功。
關(guān)于系統(tǒng)面試問題,涉及到的監(jiān)控、數(shù)據(jù)、指標類,最好使用云服務部署上線 + 普羅米修斯監(jiān)控完成壓測和優(yōu)化。
加入小傅哥的社群,如圖的全套實戰(zhàn)項目,都可以學習;
關(guān)注公眾號「bugstack蟲洞?!够貜汀感乔颉公@得限量優(yōu)惠券??!