qidao123.com技术社区-IT企服评测·应用市场

标题: Java项目拷打(外卖+点评) [打印本页]

作者: 知者何南    时间: 5 天前
标题: Java项目拷打(外卖+点评)
一、点评星球(黑马点评)

1、项目概述

1.1、项目简介

本项目是基于Spring Boot与Redis深度整合的前后端分离的点评平台。系统以Redis为核心技能支持,重点办理高并发场景下的缓存穿透、击穿、雪崩等题目,涵盖商户展示、优惠券秒杀、达人探店、社交互动等创新功能。
1.2、项目亮点


1.3、核心功能

用户服务

商户服务

秒杀服务

社交服务

2、使用 Redis 办理了在集群模式下的 Session 共享题目,使用拦截器实现了用户的登录校验和权限革新

3、运用Cache Aside模式办理数据库与缓存的一致性题目,通过自动更新结合超时删除包管最终一致性

4、使用 Redis 对高频访问的信息进行缓存,降低数据库查询压力,办理了缓存穿透、雪崩、击穿题目

5、使用 Redis + Lua脚本实现对用户秒杀资格的预检,同时用乐观锁办理秒杀产生的超卖题目

6、使用 Redisson分布式锁办理在集群模式下一人一单的线程安全题目

7、基于RabbitMQ作为消息队列,实现异步秒杀下单

8、使用Redis的 ZSet 数据布局实现了点赞排行榜功能,使用Set 聚集实现关注、共同关注功能

链接:
链接1
链接2
链接3
二、校园生存服务平台(苍穹外卖)

1、项目概述

1.1、项目简介

本项目是基于Spring Boot的校园生存服务系统,分为管理端(供校内商家使用)和用户端(微信小步伐)。管理端包括员工信息、商品及分类的管理,订单状态跟踪等功能;用户端在线欣赏商品,添加购物车及下单等功能。
1.2、项目亮点


1.3、核心功能

管理端
1、用户登录(JWT、ThreadLocal)
2、员工信息维护
3、商品管理
4、分类管理
5、订单状态跟踪
6、来单/催单提示(webSocket实时推送)
7、Spring Cache缓存菜品信息
8、定时任务处置惩罚超时订单(Spring Task)
用户端(微信小步伐)
1、微信登岸
2、商品欣赏(Redis缓存)
3、购物车管理
4、下单付出
1.4 模块作用

序号模块作用1sky-take-outmaven父工程,同一管理依靠版本,聚合其他子模块2sky-common子模块,存放公共类,例如:工具类、常量类、异常类等3sky-pojo子模块,存放实体类、VO、DTO等4sky-server子模块,后端服务,存放设置文件、Controller、Service、Mapper等 2、JWT令牌+ThreadLocal

2.1、JWT登录流程

使用JWT令牌和自定义拦截器完成用户认证的流程如下:

2.2、ThreadLocal使用过多会造成的影响?怎么办理内存泄漏的题目?

每个线程都有⼀个ThreadLocalMap的内部属性,map的key是ThreaLocal,定义为弱引用,value是强引用类型。垃圾接纳的时间会⾃动接纳key,但对应的 Value 仍然是强引用,且线程未结束时,ThreadLocalMap 会一直持有该 Value,导致内存泄漏。
办理⽅法:每次使⽤完ThreadLocal就调⽤它的remove()⽅法,手动将对应的键值对删除,从⽽克制内存泄漏
2.3 JWT的构成:

它由三部分构成:header(头部)、payload(载荷)、signature(签名)

3、Redis

3.1项目中哪里用到redis了,缓存的粒度是什么?key,value怎样定义?

缓存商品 用户端小步伐展示的商品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大。结果是系统响应慢、用户体验差。通过Redis来缓存商品数据,减少数据库查询操作。缓存逻辑是每个分类的商品下缓存一份数据,数据库中商品数据有变动时实时清算数据。key是分类的id,value是该分类下全部商品信息
3.2、数据库与redis怎样实现的数据同步

在项目中,我们采用分布式锁策略实现数据库与Redis的数据同步。通过Redis分布式锁(如Redisson)对数据ID细粒度加锁,确保同一时间只有一个请求能修改数据;在锁内严格按"先更新数据库→再删除缓存"的次序操作,包管后续请求必然读取最新数据;
因为有库存代价等信息所以不适合用延时双删)。
修改频率较低所以加锁性能消耗不高
4、Nginx

4.1 负载平衡:

Nginx 的负载平衡功能答应将请求分发给多个应用服务器,以平衡负载和提高系统的可扩展性和可靠性。下面是一些常用的 Nginx 负载平衡设置方法:

  1. upstream webservers{
  2.           server 127.0.0.1:8080 weight=90 ;
  3.           #server 127.0.0.1:8088 weight=10 ;
  4.         }
复制代码
4.2 反向代理与正向代理:

反向代理隐藏服务器,正向代理隐藏客户端。

反向代理优点:

反向代理设置。在nginx.conf设置
  1. server {
  2.         listen       80;
  3.         server_name  localhost;
  4.         # 反向代理,处理管理端发送的请求
  5.         location /api/ {
  6.                         proxy_pass   http://localhost:8080/admin/;
  7.             #proxy_pass   http://webservers/admin/;
  8.         }
  9.                
  10.                 # 反向代理,处理用户端发送的请求
  11.         location /user/ {
  12.             proxy_pass   http://webservers/user/;
  13.         }
  14. }
复制代码
5、webSocket

5.1 什么是webSocket

WebSocket是基于TCP的一种新的网络协议。它实现了欣赏器与服务器全双工通信——欣赏器和服务器只必要完成一次握手,两者之间就可以创建持久性的连接,并进行双向数据传输。
5.2、WebSocket和HTTP协议的区别?为什么不用HTTP

特性WebSocketHTTP连接性质全双工(双向实时通信)半双工(单向请求-响应)持久性长连接(创建后持续保持)短连接(默认每次请求后关闭)自动推送服务端可自动推送数据服务端只能被动响应客户端请求 这两个功能对实时性要求极高,传统的HTTP请求-响应模式无法满足毫秒级推送的需求,因此我们采用WebSocket协议实现服务端自动推送,确保商家能第一时间处置惩罚订单。
5.3 WebSocket在项目中的应用场景

我们使用WebSocket实现了两个核心功能: ✅ 来单实时提示:当用户下单并付出成功后,系统立刻关照商家端有新订单。 ✅ 客户催单处置惩罚:用户点击催单按钮后,商家端实时收到催单关照,并触发语音播报。
通过WebSocket实现管理端页面和服务端保持长连接状态。当客户付出完成大概点击催单后,调用WebSocket的相干API实现服务端向客户端推送消息,客户端欣赏器解析服务端推送的消息,判断是来单提示照旧客户催单,进行相应的消息提示和语言播报
6、SpringTask

6.1、springTask怎么实现的超时自动取消订单的功能?

Spring Task(Spring 任务调度)是 Spring 框架提供的一种任务调度框架,用于实行定时任务、异步任务、任务监听、任务调度等。
苍穹外卖采用Spring Task实现订单超时自动取消功能,核心逻辑是每分钟扫描一次数据库中订单,筛选出创建时间超过15分钟且状态为"待付出"的订单,批量修改为"已取消"状态
7、数据库相干

7.1 数据库表你是怎么设计的

序号表名1employee(员工表)2category(分类表)3dish(菜品表)4dish_flavor(菜品口胃表)5setmeal(套餐表)6setmeal_dish(套餐菜品关系表)7user(用户表)8address_book(地址表)9shopping_cart(购物车表)10orders(订单表)11order_detail(订单明细表) 7.2 为什么用逻辑外键,而不用数据库自带的外键?


8、微信相干

8.1 微信登录是怎么实现的?


8.2怎样实现的微信付出功能?


完成微信付出有两个关键的步调:
1️⃣ 就是必要在商户系统当中调用微信背景的一个下单接口,就是天生预付出买卖业务单。
2️⃣ 就是付出成功之后微信背景会给推送消息。
9、你在项目中碰到了什么困难?

9.1处置惩罚公共字段的添补

如果都按照之前的操作方式来处置惩罚这些公共字段(创建时间,创建人id,修改时间,修改人id), 必要在每一个业务方法中进行操作, 编码相对冗余、繁琐。我们使用AOP切面编程,实现功能增强,来完成公共字段自动添补功能。
实现步调:
1). 自定义注解 AutoFill,用于标识必要进行公共字段自动添补的方法
2). 自定义切面类 AutoFillAspect,同一拦截参加了 AutoFill 注解的方法,通过反射为公共字段赋值
3). 在 Mapper 的方法上参加 AutoFill 注解

链接:
1、链接1
2、链接2
3、链接3
4、链接4
5、链接5

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 qidao123.com技术社区-IT企服评测·应用市场 (https://dis.qidao123.com/) Powered by Discuz! X3.4