Java项目,营销抽奖系统设计实现

news2025/1/16 4:56:26

作者:小傅哥

博客:https://bugstack.cn

项目:https://gaga.plus

沉淀、分享、成长,让自己和他人都能有所收获!😄

大家好,我是技术UP主,小傅哥。

经过这个假期的嘎嘎卷🧨,大营销平台项目第一阶段开发完成并以上线【 在线体验地址:https://gaga.plus 】。项目课程,全程视频手把手从0到1开发,第1阶段仅需要2周学习,即可写到简历冲春招「已提供简历编写模板」

开局一把IDEA,全程视频手把手!

鉴于不少小白伙伴的技术积累偏弱,对照文档学习压力较大,所以这次小傅哥选择了👨🏻‍💻全程视频手把手敲的方式进行教学,让小白伙伴跟着课程从0到1走下来,即可完成项目开发+上线。并且小傅哥选择的项目,都是来自于公司中真实场景的业务项目,有着细腻的业务流程和对应的编程实现技巧,这样的项目非常具有竞争力,也是面试官和你有的聊的项目【全是CRUD或者和业务无关的项目,面试官也不知道问啥,只能聊点八股文】。

做项目,就要做的完整! 完整的经历过,需求 + 开发 + 上线,才能让伙伴们在面试中把东西讲清楚。

工作了十多年,参与多场的大型校招,面试了几百人,深知考察求职者的标准。接下来小傅哥就站在面试官角度来介绍下这个项目,你应该关注到业务流程和实现技术。

文末有加入学习方式,开年活动送福利 4.0 100万 Tokens 助力学习!🉐

一、面试介绍

面试介绍举例,作为学习类项目,你可以参考以下介绍;

面试官您好,大营销平台的 Raffle 抽奖模块,是我独立负责实现的一个(学习/工作)项目,此项目模块在架构设计上运用了 DDD 分层架构和模板模式、责任链模式、组合模式、工厂模式等,这样的设计模式对业务流程进行解耦和实现。

Raffle 抽奖模块的完整开发,让我对 SpringBoot 框架技术,分布式技术栈的运用更加熟练,也把设计模式在实际场景的使用了起来,积累了丰富的设计实现经验。这写技术学习的内容,也可以更好的应对以后的开发工作。非常感谢您给我这次面试机会。

二、简历编写

  • 项目名称:大营销平台 - Raffle 抽奖服务
  • 项目架构:微服务架构、DDD 领域驱动模型、前后端分离设计
  • 核心技术:SpringBoot、MyBatis、MySQL、Redis、SpringCloud/Dubbo【按需添加,只是对外的接口形式】、React、TypeScript
  • 项目描述:Raffle 抽奖模块是整个大营销平台系统中非常重要的一个模块,也是本次项目中我来负责的设计和实现的模块。此模块主要以支撑各类差异化抽奖流程,如;通用抽奖、黑名单、人群、N消耗积分指定抽奖范围、抽奖N次解锁奖品等各类玩法的支持。在此系统模块的设计中运用到了模板模式、责任链模式、组合模式、工厂模式,解决代码的可扩展性,并对抽奖的计算和秒杀做了设计的优化,可以支撑单机 2c4g 服务器 1500 ~ 2000 TPS 的吞吐量。「不同服务器,带宽,以及是否还配置有环境相关,会有不同的数据效果」
  • 核心职责:
    • 以PRD文档诉求和对功能的评审,设计出抽奖的领域模型功能,以及在抽奖的流程抽象上,分为;抽奖前、抽奖中、抽奖后,的节点上扩展各项行为动作。如抽奖前的人群判断、抽奖中库存扣减、抽奖后兜底奖励等。
    • 依赖于领域模型的定义,设计出抽奖库表。抽象抽奖过程为抽奖策略表、策略明细表、规则配置表、规则树动作表,这样会让抽奖更好扩展。
    • 设计模板模式定义抽奖流程标准,再在模板模式中,调用责任链完成抽奖,对于抽奖中和后的动作使用组合模式的规则树进行动态处理【支持库表配置】。
    • 在项目架构中定义统一标准的 api 由触发器层实现,在触发器层定义监听、任务、http、rpc模块,所有的行为动作,都理解为触发行为。
    • 抽奖也是一种峰值流量高的业务场景,因此在设计奖品库存扣减上,采用了 Redis decr 分段消费和加锁兜底的设计,同时对于消费成功的库存,异步队列方式 + 定时任务更新库存。这样可以不超卖的同时,又减少数据库的压力。
    • 在项目开发中熟练运用了 IntelliJ IDEA、WEbStorm、Docker、MySQL、云服务器、SSH工具,并已将项目完整部署到线上【在校伙伴可以提供线上案例版】。

三、项目介绍

本次项目是一个 前后端 + Dev-Ops 实践开发真实营销业务场景的,全栈式综合编程项目。此项目会分阶段的交付,目前开发完成的是第一阶段,相当于完整项目的第一个大模块开发完成。这样可以满足小伙伴们快速学习(14天),就可以面试使用。

1. 涉及技术

  • 在项目的分阶段开发和交付中,会逐步的运用到这些技术栈。
  • 同时对于系统架构和设计模式,也都使用功能的非常丰富。正是因为有这些东西,面试才有的讲。

2. 项目部署

  • 小傅哥在每个阶段开发完成后,都会带着你手把手的做服务的上线。在本次阶段完成,所需的服务器配置是2c2g 占用 61% 的内存空间。—— 这些东西只有自己做了,才知道!
  • 在项目部署的讲解中也会给大家扩展各种CI&CD工具和压测,让你可以从我过往工作10+年的工作积累中,吸收经验。

3. 展示效果

  • 项目展示地址:https://gaga.plus - 嘎嘎强,嘎嘎哒学 专门展示星球「码农会锁」的实战项目效果【后续还会提供更多的不同UI的展示效果】。
  • 欢迎点击尝试,也可以模拟压测下。这套买了3年的云服务器,就是给星球伙伴部署项目玩的。

4. 系统模块

- big-market-api 定义API标准,big-market-trigger 实现出3个接口;装配策略接口(调用后将抽奖策略装配到缓存)、查询奖品列表、随机抽奖接口。 - big-market-domain 体现了接口单一职责,抽象类的使用,子类的实现操作。【学过小傅哥的代码,你就知道什么是嘎嘎强!!!】

5. 核心流程

  • 复杂的业务场景,都会涉及模型的拆解、库表的涉及。拆解的部分就是功能的流程的衔接点,做好解耦动作。
  • 从上面的库表中,就能看出,这一套抽奖系统,非常好扩展功能。库表设计也是非常好的经验,在面试中也经常被提起你的库表是如何设计的,新增加的功能怎么做进去。

四、项目大纲

不同于网上项目,这个项目是一步步,一个个章节的带着大家从0到1的方式,进行分析、设计和开发。是一个纯手把手教大家学习实战技术的项目! 大家可以先看看课程的大纲,就知道可以学习到哪些东西了。

  • 介绍

    • 大营销平台系统介绍
    • 面试:技能、简历、问题汇总
  • 第1部分:需求文档

    • 第1节:营销场景的需求设计
  • 第2部分:开发运维

    • 第1节:使用脚手架创建工程&PUSH代码
    • 第2节:第一阶段完成抽奖部署 【第1阶段,预计14天可以学习完成】
  • 第3部分:营销服务

    • 第1节:抽奖策略领域和库表设计
    • 第2节:基础层持久化数据
    • 第3节:策略概率装配处理
    • 第4节:策略权重概率装配
    • 第5节:抽奖前置规则过滤
    • 第6节:抽奖中置规则过滤
    • 第7节:责任链模式处理抽奖规则
    • 第8节:抽奖规则树模型结构设计
    • 第9节:模板模式串联抽奖规则
    • 第10节:不超卖库存规则实现
    • 第11节:抽奖API接口实现
  • 第4部分:前端页面

    • 第1节:React工程创建和抽奖组件使用
    • 第2节:Mock接口对接抽奖页面
    • 第3节:应用接口对接抽奖页面
  • 扩展部分:面试问题

专门为大营销项目整你的常问面试问题,这些问题也是在小册的章节中讲解到的。小傅哥也会在后续继续编写和归档常见的面试题,助大家一臂之力!

课程包括;视频、小册、1 对 1 答疑解惑、专属VIP项目交流群,并且提供简历编写模板结构的一条龙🐲服务。让你学习后,直接拉开与还在玩具项目,其他求职者的差距。提高竞争力,面试脱颖而出!!!


项目地址:https://gaga.plus

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1458944.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

VMware下安装银河麒麟V10操作系统

VMware下安装银河麒麟V10操作系统 文章目录 下载在VMware中应用编辑虚拟机设置 在麒麟系统内安装 下载 官网下载:https://www.kylinos.cn/ 银河麒麟、中标麒麟、开放麒麟、星光麒麟 在VMware中应用 1.新建虚拟机 2.稍后安装操作系统 3.新建虚拟机向导&#xff0…

设计模式三:工厂模式

工厂模式包括简单工厂模式、工厂方法模式和抽象工厂模式,其中后两者属于23中设计模式 各种模式中共同用到的实体对象类: //汽车类:宝马X3/X5/X7;发动机类:B48TU、B48//宝马汽车接口 public interface BMWCar {void s…

CSS-基础-MDN文档学习笔记

CSS构建基础 查看更多学习笔记:GitHub:LoveEmiliaForever MDN中文官网 CSS选择器 选择器是什么 CSS 选择器是 CSS 规则的第一部分,它用来选择HTML元素,选择器所选择的元素,叫做选择器的对象 选择器列表 如果有多…

盘点3款实用的音频文件转文字工具!

在信息爆炸的时代,我们每天都面临着海量的信息输入和输出。其中,音频信息作为一种重要的信息传播方式,如何高效地将其转化为文字,成为许多人和企业迫切的需求。本文将为您盘点几款实用的音频转文字工具,让声音瞬间转化…

通过闭包表解决无限极代理分销

闭包表设计 闭包表是解决分层存储一个简单而又优雅的解决方案,它记录了表中所有的节点关系,并不仅仅是直接的父子关系。   在闭包表的设计中,额外创建了一张节点关系表(空间换取时间),它包含两列,每一列都是一个指向…

facebook群控如何做?使用静态住宅ip代理有什么好处?

在进行Facebook群控时,ip地址的管理是非常重要的,因为Facebook通常会检测ip地址的使用情况,如果发现有异常的使用行为,比如从同一个ip地址频繁进行登录、发布内容或者在短时间内进行大量的活动等等,就会视为垃圾邮件或…

我的NPI项目之Android USB 系列(一) - 遥望和USB的相识

和USB应该是老朋友了,从2011年接触Android开发开始,就天天和USB打交道了。那时候还有不 对称扁头的usb/方口的usb,直到如今使用广泛的防反插USB3.0 type-C。 但是,一直有一个不是很清楚的问题萦绕在心头,那就是。先有…

Vue3 学习笔记(Day1)

「写在前面」 本文为尚硅谷禹神 Vue3 教程的学习笔记。本着自己学习、分享他人的态度,分享学习笔记,希望能对大家有所帮助。 目录 0 课程介绍 1 Vue3 简介 2 创建 Vue3 工程 2.1 基于 vue-cli 创建 2.2 基于 vite 创建(推荐) 2.3 …

[word] word正反面打印应该怎么设置呢? #知识分享#学习方法#职场发展

word正反面打印应该怎么设置呢? word文档打印时,如果页数比较多,出于格式要求或为了节省纸张,通常需要正反面打印,那怎么操作正反双面打印呢?通常有两种方法打印。 1、选择“打印”对话框底部的“打印”下…

linux 安装、删除 JTAG驱动

安装 安装驱动需要sudo访问权限,所以得手动安装。 在petalinux安装目录下: 文件的路径。 cd tools/xsct/data/xicom/cable_drivers/lin64/install_script/install_drivers 然后执行文件 install_drivers。 sudo ./install_drivers安装成功。 删除 …

FFmpeg进阶-给视频添加马赛克效果

很多时候为了隐藏视频中的敏感信息如人脸、身份证号、车牌号等,我们会采用马赛克算法对视频帧中的一部分内容进行处理。这里介绍一下如何采用FFmpeg实现马赛克效果。 马赛克效果算法的原理如下: 1.分块处理:首先将图像划分为多个小块或区域 2.像素替换:对于每个小块,算法会将…

sentinel的资源数据指标是如何采集

资源数据采集 之前的NodeSelectorSlot和ClusterBuilderSlot已经完成了对资源调用树的构建, 现在则是要对资源进行收集, 核心点就是这些资源数据是如何统计 LogSlot 作用: 记录异常请求日志, 用于故障排查 public class LogSlot extends AbstractLinkedProcessorSlot<Def…

鸿蒙 状态管理-组件装饰器

前提&#xff1a;基于官网3.1/4.0文档。参考官网文档 基于Android开发体系来进行比较和思考。&#xff08;或有偏颇&#xff0c;自行斟酌&#xff09; 1.概念 Android中使用过Jetpack MVVM框架知道状态管理&#xff0c;包括React前端所使用的状态管理框架&#xff0c;都有所设…

爬虫知识--01

爬虫介绍 # 爬虫的概念&#xff1a; 通过编程技术(python:request,selenium)&#xff0c;获取互联网中的数据(app&#xff0c;小程序&#xff0c;网站)&#xff0c;数据清洗(xpaht&#xff0c;lxml)后存到库中(mysql&#xff0c;redis&#xff0c;文件&#xff0c;excel&#x…

GIN框架介绍以及使用

Gin是一个用Go语言编写的web框架。它是一个类似于martini但拥有更好性能的API框架, 由于使用了httprouter&#xff0c;速度提高了近40倍。 如果你是性能和高效的追求者, 你会爱上Gin&#xff0c;而且现在大多数企业都在使用Gin框架&#xff0c;反正学一学总没有错。 1、 GIn框…

微信小程序-绑定数据并在后台获取它

如图 遍历列表的过程中需要绑定数据&#xff0c;点击时候需要绑定数据 这里是源代码 <block wx:for"{{productList}}" wx:key"productId"><view class"product-item" bindtap"handleProductClick" data-product-id"{{i…

【J1939】一、概述,协议基础

文章目录 1. 背景2. 要点3. J1939帧细节3.1 协议数据单元(Protocol Data Unit,PDU)3.2 参数组编号(PGN)3.3 可疑参数编号(Suspect Parameter Number,SPN)参考1. 背景 J1939是一种用于商用车辆的通信协议,它定义了一套车辆电子控制单元之间进行数据通信的规范。J1939协议…

Java+SpringBoot:滑雪场管理的技术革新

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

用CSS3画一个三角形

<style> .up{width:0;height:0;border: 100px solid transparent;border-top: 100px solid red;/*红色*/ } .down{width:0;height:0;border: 100px solid transparent;border-bottom: 100px solid blue;/*蓝色*/ } .left{width:0;height:0;border: 100px solid transpare…

各种手型都合适,功能高度可定制,雷柏VT9PRO mini和VT9PRO游戏鼠标上手

去年雷柏推出了一系列支持4KHz回报率的鼠标&#xff0c;有着非常敏捷的反应速度&#xff0c;在游戏中操作体验十分出色。尤其是这系列4K鼠标不仅型号丰富&#xff0c;而且对玩家的操作习惯、手型适应也很好&#xff0c;像是VT9系列就主打轻巧&#xff0c;还有专门针对小手用户的…