项目由10人(一般来说后端开发,是前端的2倍)的开发团队完成。 产品经理:2 人(1 个经理,2 个产品),确定需求以及给出产品原型图。 项目经理:1 人,项目管理。 前端团队:2 人,根据产品经理给出的原型图制作静态页面。 后端团队:5 人,根据项目经理分配的任务完成产品功能。 测试团队:2 人,采用白盒测试以及黑盒测试对产品功能性能进行检测。 运维团队:1 人,项目的发布以及维护。
青少年兴趣培养app
项目架构:
SpringBoot + Redis + mysql +rabbitmq等
项目描述:
青少年兴趣培养App旨在为青少年提供一个综合性平台,帮助他们在课余时间探索、培养和发展自己的兴趣爱好。除了提供课程管理、售卖课程管理、学生信息等基本功能外,该App还特别设计了点名功能、请假管理、线索管理、班级信息管理、成长档案等模块,以更好地满足青少年学习和成长的需求。
所用技术:
业务数据持久化采用 MySQL,数据缓存采用 Redis,系统微服务基于 SpringBoot 开发,数据库连接池采用 Druid,消息队列解耦用RabbitMQ,Mybatis Plus 持久层接口实现组件等。
主要职责:
课程管理:
用户可以看到在售的课程以及课程详细信息包括价格,学习周期以及开课时间;
点名管理:
可以根据时间查询当天的课程,点击课程查看课程详情,包括学生的出勤情况和时间,教师可以进行点名,点名之后不能再进行点名;还可以查看点名和未点名的;
请假管理:
学生可以提交请假信息并且设置请假状态为待批阅,老师可以查看选择同意或者拒绝,返回到请假查询页面并刷新,已经同意或拒绝的请假不能再进行操作;
负责模块具体业务逻辑:
课程管理模块:
查询在售课程信息:
客户端发起请求到后端接口获取在售课程列表。 后端服务首先尝试从Redis缓存中获取在售课程数据,如果存在则直接返回给客户端。 若缓存未命中,则查询MySQL数据库获取在售课程列表及详细信息。 将查询结果存储到Redis缓存中设置合理的过期时间(如根据课程更新频率决定)。 将查询结果返回给客户端,客户端展示课程列表和详情。
课程管理模块:查询与购买课程的业务逻辑
查询在售课程信息: 客户端(前端)发起请求至后端接口,请求获取在售课程列表。 后端服务首先尝试从Redis缓存中获取在售课程数据。如果存在且未过期,则直接返回给客户端。 若缓存未命中或已过期,后端查询MySQL数据库获取在售课程列表及详细信息,如课程ID、名称、价格、简介、讲师信息等。 将查询结果存入Redis缓存,并设置合理的过期时间(比如根据课程更新频率或者固定有效期)。 将查询结果(课程列表)返回给客户端,客户端展示课程列表和简要详情。
查看课程详情并进行购买操作: 用户在前端点击某门课程进入详情页面,客户端向后端发送获取该课程详细信息的请求,参数为课程ID。 后端接收到请求,从Redis缓存或MySQL数据库获取指定课程的详细信息(包括详细介绍、开课日期、上课时间、剩余名额等),然后返回给客户端。 用户购买课程流程:
客户端在课程详情页提供“立即购买”按钮,用户点击后触发购买请求,请求携带课程ID和用户ID等必要信息。 后端验证用户身份和课程状态(如是否仍在售、是否有足够名额等),通过验证后,开始处理购买事务:
a. 更新课程售卖记录(如减少剩余名额)。
b. 在订单表中创建一条新的订单记录,关联用户ID和课程ID。
c. 如果涉及到支付,生成预支付订单信息并调用支付宝或微信支付API发起支付请求。
d. 记录购买日志并更新用户的学习记录或积分等相关状态。
支付回调处理: 支付平台完成支付后会通过预先设定的回调地址通知后端服务,后端验证支付成功后:
a. 更新订单状态为已支付。
b. 如果有必要,将购买成功的消息推送至客户端,提示用户购买成功,可以开始学习课程。
客户端显示购买结果: 前端实时监听或定期刷新订单状态,当接收到购买成功的通知时,在界面上显示购买成功信息,同时引导用户跳转到课程学习页面或个人中心查看已购课程。
点名管理模块:
教师查询当天课程与点名状态:
教师通过前端页面触发查询当日课程及点名情况的请求。 后端接收到请求后,优先检查Redis缓存中是否存在当天课程和点名记录。 若缓存中有数据,直接返回点名状态;否则查询MySQL获取相关信息,并将查询结果存入Redis缓存中。
执行点名操作:
教师在前端选择学生并执行点名操作,向后端发送包含学生ID、课程ID和点名状态的请求。 后端通过数据库事务确保原子性:
a. 先锁定相关记录,防止并发情况下同一学生的点名状态被多次修改。
b. 查询当前该学生在该课程下的点名状态。
c. 更新点名状态至数据库,同时记录点名操作日志。
d. 更新完成后释放锁,并清除或更新对应的Redis缓存数据。
请假管理模块:
学生提交请假申请:
学生在前端填写请假信息并提交,前端调用后端接口。 后端接收请假申请,将其保存到MySQL数据库中,同时在请假表中标记状态为“待批阅”。 同时将学生的请假状态信息同步至Redis缓存,方便后续快速查询。
老师审批请假申请:
老师在前端查看待处理的请假申请,点击同意或拒绝按钮触发审批请求。 后端接收到请求,根据审批结果更新MySQL数据库中的请假状态。 更新完毕后,立即清除或更新对应学生请假状态的Redis缓存。 前端更新请假状态
解释流程图
-
概述系统架构:首先,简要介绍系统使用的技术栈(SpringBoot, Redis, MySQL, RabbitMQ等)以及各个技术的作用。这会给面试官一个大概的技术背景理解。
-
逐步解析各个模块:
-
课程列表和详情查询
:
-
说明客户端如何请求课程列表和课程详情,后端首先检查Redis缓存是否有数据,如果没有,才会查询MySQL数据库。
-
强调使用缓存的好处,比如减少数据库的负载,加快响应速度。
-
-
购买课程流程
:
-
描述用户发起购买请求的处理流程,包括用户身份和课程状态的验证,以及调用支付接口。
-
提到如果支付成功,如何更新订单状态,并通知客户端购买成功。
-
-
点名和请假管理
:
-
解释教师如何查询和执行点名操作,以及学生如何提交请假请求,老师如何审批。
-
-
面对可能的问题
当面试官询问某些模块可能遇到的问题时,你可以从以下几个角度来回答:
-
缓存一致性:在使用Redis缓存时,如何保证缓存数据与数据库数据的一致性。解决策略包括缓存过期策略、使用消息队列进行数据库与缓存的同步等。
-
数据库性能:查询效率低下、数据写入延迟等问题。可以通过优化SQL查询、使用索引、调整数据库配置、读写分离等方式来提高性能。
-
系统扩展性:随着用户量的增加,系统如何水平扩展来应对高并发场景。可以提到使用微服务架构、负载均衡、数据库分片等策略。
-
安全性问题:包括数据泄露、SQL注入、XSS攻击等。强调代码的安全编写习惯、使用安全框架、定期进行安全审计。
-
事务管理:在执行购买流程时,如何保证事务的一致性和原子性,特别是在分布式系统中。可以提及使用分布式事务解决方案,如2PC(两阶段提交)、TCC(Try-Confirm-Cancel)等。
硕果满园综合供应链智能管理平台
项目描述:
该项目为硕果满园综合供应链智能管理平台,整合了销售、采购、基础信息、仓储和配送等关键业务模块。该系统利用先进的技术架构实现高效的数据处理与业务协同,确保从订单创建到商品配送全过程的自动化与精细化管理。
功能模块业务逻辑概要:
注册流程:
-
用户输入手机号并请求注册。
-
后端系统接收到注册请求,向阿里云发送验证码。
-
阿里云发送验证码到用户手机号,并设置过期时间。
-
用户输入验证码和密码。
-
后端系统对验证码进行验证,验证通过后对密码进行加密。
-
创建用户账号,并生成返回的Token。
登录流程:
-
用户输入账号密码或手机号验证码。
-
后端系统接收到登录请求,进行身份验证。
-
验证通过后生成并返回Token。
基础信息管理流程:
-
用户进行登录鉴权,使用Token作为身份凭证。
-
用户可以进行基础信息的增删改查操作。
销售管理模块流程:
-
用户进行登录鉴权,使用Token作为身份凭证。
-
用户创建、修改、查询或删除订单。
-
在订单创建时,后端系统验证用户权限,并将订单信息存储到MySQL数据库。
-
利用Redis缓存订单状态,提高查询速度和并发性能。
仓储管理模块流程:
-
用户进行登录鉴权,使用Token作为身份凭证。
-
用户进行入库、出库、盘点等操作。
-
每当有操作发生时,后端系统即时更新MySQL中的库存数量,并更新Redis缓存中的库存数据。