当前位置: 首页 > news >正文

网络热门编程项目导学:黑马点评

本文作者:程序员鱼皮

免费编程学习 - 编程导航网:https://www.code-nav.cn

大家好,我是鱼皮。

之前已经给大家分享了三个全栈项目,比如瑞吉外卖什么的,这几个项目都是侧重于带大家学习框架的运用、以及一些简单的业务逻辑,但单独看代码就会发现没有太多的编程技巧可以学习。

这次给大家分享的项目则是一个专门用来学习 Redis 技术的 免费项目 —— 某马点评。事先说明,我可没有被绑架,而是前段时间我在复习 Redis 的时候把这个项目完整刷了一遍,觉得确实不错,才分享给大家。

这是我自己记录的笔记:

我当时学 Redis 的时候是先学会用法,再自己通过做项目来摸索其应用场景,根本没有这种系统的、项目实践式的教程。不得不感叹,现在学编程的资源真的是太丰富了、成本也越来越低了。

下面我带大家一起来学习下这个项目。

提示:本文超长,适合收藏

项目介绍

在线店铺点评 APP( H5 网页),有点类似美团点评。

特色:

  1. 项目整体比较精简,适合初学练手
  2. 项目中大量运用到了 Redis,极其适合学习 Redis 的同学来实战(事实上这个项目都是为了 Redis 课而生的)
  3. 项目的代码细节很多,能学到不少优化技巧

项目功能

包括:查看点评(热评)、发布点评、点赞

关注、查询关注的人发的帖子、查看好友共同关注

分类浏览店铺、查看附近的店铺

个人信息查看和管理

话说项目太仿真了,在用户编辑资料页竟然还能开 VIP?!🐶

项目资料

快速导学视频:https://www.bilibili.com/video/BV1PG4y1s7io

原课程视频地址:https://www.bilibili.com/video/BV1cr4y1671t

这个项目没有专门的课程,而是融合在了 Redis 的教程中,可以从 P24 开始看。

编程导航 的同学也可以直接获取我整理好的代码 + 学习资料 + 原创笔记 + 简历亮点:https://www.code-nav.cn/post/1808580989170089985

技术栈

后端

Spring 相关:

  • Spring Boot 2.x
  • Spring MVC

数据存储层:

  • MySQL:存储数据
  • MyBatis Plus:数据访问框架

Redis 相关:

  • spring-data-redis:操作 Redis
  • Lettuce:操作 Redis 的高级客户端
  • Apache Commons Pool:用于实现 Redis 连接池
  • Redisson:基于 Redis 的分布式数据网格

工具库:

  • HuTool:工具库合集
  • Lombok:注解式代码生成工具

前端

前端不是本项目的重点,了解即可:

  • 原生 HTML、CSS、JS 三件套
  • Vue 2(渐进式使用)
  • Element UI 组件库
  • axios 请求库

技术架构图

这个项目是单体项目,架构比较简单,下图依然是理想架构,实际上只用单台 Tomcat、MySQL、Redis 即可:

学习重点

这个项目几乎用到了 Redis 的所有主流特性,都值得重点学习,如官方提供的项目介绍图:

快速启动项目

请看这个视频:https://www.bilibili.com/video/BV1PG4y1s7io

项目学习

课程学习

这里给大家划分一下视频章节对应的知识点:

  • p1 - p23 Redis 基础学习
  • p24 - p25 本项目介绍
  • p26 - p34 Redis 短信登录和 Session 共享
  • p35 - p47 Redis 缓存应用
  • p48 - p49 Redis 实现全局唯一 id 生成
  • p50 - p55 传统秒杀实现方案
  • p56 - p68 Redis 实现分布式锁
  • p69 - p71 Redis 实现秒杀
  • p72 - p77 Redis 实现消息队列
  • p80 - p81 Redis 点赞及点赞排行榜
  • p82 - p83 Redis 实现共同关注
  • p84 - p87 Redis 实现 Feed 流
  • p88 - p90 Redis 实现附近店铺功能(GEO)
  • p91 - p93 Redis 实现签到
  • p94 - p95 Redis 实现 UV 统计

单纯为了完成项目的话,直接看 p24 - p95 即可。

代码学习

config 目录:存放项目依赖相关配置

  • MvcConfig:配置了登录、自动刷新登录 Token 的拦截器
  • MybatisConfig:配置 MyBatis Plus 分页插件
  • RedissonConfig:创建单例 Redisson 客户端
  • WebExceptionAdvice:全局响应拦截器

controller 目录:存放 Restful 风格的 API 接口

dto 目录:存放业务封装类,如 Result 通用响应封装(不推荐学习它的写法)

entity 目录:存放和数据库对应的 Java POJO,一般是用 MyBatisX 等插件自动生成

mapper 目录:存放操作数据库的代码,基本没有自定义 SQL,都是复用了 MyBatis Plus 的方法,不做重点学习。

service 目录:存放业务逻辑处理代码,需要重点学习

  • BlogServiceImpl:基于 Redis 实现点赞、按时间排序的点赞排行榜;基于 Redis 实现拉模式的 Feed 流,推荐学习
  • FollowServiceImpl:基于 Redis 集合实现关注、共同关注,推荐学习
  • ShopServiceImpl:基于 Redis 缓存优化店铺查询性能;基于 Redis GEO 实现附近店铺按距离排序,推荐学习
  • UserServiceImpl:基于 Redis 实现短信登录(分布式 Session),推荐学习(虽然没有真的实现短信登录,而是通过日志打印验证码代替)
  • VoucherOrderServiceImpl:基于 Redis 分布式锁、Redis + Lua 两种方式,结合消息队列,共同实现了秒杀和一人一单功能,非常值得学习
  • VoucherServiceImpl:添加优惠券,并将库存保存在 Redis 中,为秒杀做准备。

utils 目录:存放项目内通用的工具类,需要重点学习

  • CacheClient:封装了通用的缓存工具类,涉及泛型、函数式编程等知识点,值得学习
  • RedisConstants:保存项目中用到的 Redis 键、过期时间等常量,值得学习
  • RedisIdWorker:基于 Redis 的全局唯一自增 id 生成器,值得学习
  • RedisTokenInterceptor:自动刷新 Redis 登录 Token 有效期,值得学习
  • SimpleRedisLock:简单的 Redis 锁实现,了解即可,一般用 Redisson
  • UserHolder:线程内缓存用户信息,可以学习

学习建议

  1. 这个项目几乎用到了 Redis 的所有主流特性,非常适合已经学完 Spring Boot、还未系统学习过 Redis 的后端同学,其中秒杀功能、一人一单的实现需要格外重点学习。

  2. 课程质量极高,一句不少、一句不多、幽默风趣、百万 PPT,还能学到库表设计、代码抽象复用、JMeter 压力测试工具等实用知识。后端的初学者可以只看 p1 - p95、以及 p134 - p139 的最佳实践部分,高级篇和原理篇等把项目做完、且其他主流技术(如消息队列、微服务)学的差不多了,等面试前再看就行。

  3. 虽然项目的实现完整度一般,但是有难度的功能基本都实现了,建议有能力的同学把它完整实现,完全可以写在简历上。

  4. 在学习的过程中,可以多使用 Redis 可视化管理工具来观察数据的变化。比如 Quick Redis(https://quick123.net/)、RESP 等。

  5. 项目缺乏管理端,可以自行实现如店铺管理、点评审核等功能。


更多编程学习资源

  • Java前端程序员必做项目实战教程+毕设网站
  • 程序员免费编程学习交流社区(自学必备)
  • 程序员保姆级求职写简历指南(找工作必备)
  • 程序员免费面试刷题网站工具(找工作必备)
  • 最新Java零基础入门学习路线 + Java教程
  • 最新Python零基础入门学习路线 + Python教程
  • 最新前端零基础入门学习路线 + 前端教程
  • 最新数据结构和算法零基础入门学习路线 + 算法教程
  • 最新C++零基础入门学习路线、C++教程
  • 最新数据库零基础入门学习路线 + 数据库教程
  • 最新Redis零基础入门学习路线 + Redis教程
  • 最新计算机基础入门学习路线 + 计算机基础教程
  • 最新小程序入门学习路线 + 小程序开发教程
  • 最新SQL零基础入门学习路线 + SQL教程
  • 最新Linux零基础入门学习路线 + Linux教程
  • 最新Git/GitHub零基础入门学习路线 + Git教程
  • 最新操作系统零基础入门学习路线 + 操作系统教程
  • 最新计算机网络零基础入门学习路线 + 计算机网络教程
  • 最新设计模式零基础入门学习路线 + 设计模式教程
  • 最新软件工程零基础入门学习路线 + 软件工程教程

相关文章:

网络热门编程项目导学:黑马点评

本文作者:程序员鱼皮 免费编程学习 - 编程导航网:https://www.code-nav.cn 大家好,我是鱼皮。 之前已经给大家分享了三个全栈项目,比如瑞吉外卖什么的,这几个项目都是侧重于带大家学习框架的运用、以及一些简单的业务…...

如何在本地和远程删除 Git 分支?

如何在本地和远程删除 Git 分支? 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页,我是博主英杰,211科班出身,就职于医疗科技公司,热衷分享知识,武汉城市开发者社区主理人 擅长.n…...

08 STM32 DMA

DMA 协助CPU,完成数据转运工作。 两个程序: DMA数据转运,DMAAD多通道 DMA数据转运,将使用DMA,进行存储器到存储器的数据转运,也就是把一个数组里面的数据,复制到另一个数组里。 定义一个数组D…...

LLM之基于llama-index部署本地embedding与GLM-4模型并初步搭建RAG(其他大模型也可,附上ollma方式运行)

前言 日常没空,留着以后写 llama-index简介 官网:https://docs.llamaindex.ai/en/stable/ 简介也没空,以后再写 注:先说明,随着官方的变动,代码也可能变动,大家运行不起来,可以进…...

Python 异步爬虫:高效数据抓取的现代武器

标题:“Python 异步爬虫:高效数据抓取的现代武器” 在当今信息爆炸的时代,网络爬虫已成为数据采集的重要工具。然而,传统的同步爬虫在处理大规模数据时往往效率低下。本文将深入探讨如何使用 Python 实现异步爬虫,以提…...

【数据结构算法经典题目刨析(c语言)】使用数组实现循环队列(图文详解)

💓 博客主页:C-SDN花园GGbond ⏩ 文章专栏:数据结构经典题目刨析(c语言) 目录 一.题目描述 二.解题思路 1.循环队列的结构定义 2.队列初始化 3.判空 4.判满 5.入队列 6.出队列 7.取队首元素 8.取队尾元素 三.完整代码实…...

PTA L1-005 考试座位号

L1-005 考试座位号(15分) 每个 PAT 考生在参加考试时都会被分配两个座位号,一个是试机座位,一个是考试座位。正常情况下,考生在入场时先得到试机座位号码,入座进入试机状态后,系统会显示该考生…...

软件测试3333

禅道? 学习正则表达式 目标: 能说出软件测试缺陷判定标准 能说出项目中缺陷的管理系统 能使用Excel对于缺陷进行管理 能使用工具管理缺陷 一、用例执行 说明:用例执行不通过,执行结果与用例的期望结果不一致(含义&…...

JJJ:结构体定义中常加的后缀:attribute ((packed))

__attribute__ ((packed)): 的作用就是告诉编译器取消结构体在编译过程中的优化对齐,按照实际占用字节数进行对齐,是GCC特有的语法。这个功能是跟操作系统没关系,跟编译器有关 在GCC下:struct my{ char ch; int a;} sizeof(int)4…...

【HTML】DOCTYPE作用

<!DOCTYPE html> DOCTYPE是document type&#xff08;文档类型&#xff09;的缩写。是HTML5中一种标准通用标记语言的文档类型声明&#xff0c;告诉浏览器文档的类型&#xff0c;便于解析文档。不同渲染模式会影响浏览器对CSS代码甚至JS脚本的解析。它必须声明在第一行。…...

STM32学习记录-04-EXTI外部中断

1 中断系统 &#xff08;1&#xff09;中断&#xff1a;在主程序运行过程中&#xff0c;出现了特定的中断触发条件&#xff08;中断源&#xff09;&#xff0c;使得CPU暂停当前正在运行的程序&#xff0c;转而去处理中断程序&#xff0c;处理完成后又返回原来被暂停的位置继续…...

Android Studio 动态表格显示效果

最终效果 一、先定义明细的样式 table_row.xml <?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_h…...

Python 全栈系列264 使用kafka进行并发处理

说明 暂时考虑的场景是单条数据处理特别复杂和耗时的场景。 场景如下&#xff1a; 要对一篇文档进行实体处理&#xff0c;然后再对实体进行匹配。在这个过程当中&#xff0c;涉及到了好几部分服务&#xff1a; 1 实体识别服务2 数据库查询服务3 es查询服务 整个处理包成了服…...

【安全靶场】-DC-7

❤️博客主页&#xff1a; iknow181 &#x1f525;系列专栏&#xff1a; 网络安全、 Python、JavaSE、JavaWeb、CCNP &#x1f389;欢迎大家点赞&#x1f44d;收藏⭐评论✍ 一、收集信息 1.查看主机是否存活 nmap -T4 -sP 192.168.216.149 2.主动扫描 看开放了哪些端口和功能 n…...

0065__windows开发要看的经典书籍

windows开发要看的经典书籍_window编程书籍推荐-CSDN博客...

第133天:内网安全-横向移动域控提权NetLogonADCSPACKDC永恒之蓝

案例一&#xff1a;横向移动-系统漏洞-CVE-2017-0146 这个漏洞就是大家熟悉的ms17-010&#xff0c;这里主要学习cs发送到msf&#xff0c;并且msf正向连接后续 原因是cs只能支持漏洞检测&#xff0c;而msf上有很多exp可以利用 注意msf不能使用4.5版本的有bug 这里还是反弹权…...

【IoTDB 线上小课 06】列式写入=时序数据写入性能“利器”?

【IoTDB 视频小课】更新来啦&#xff01;今天已经是第六期了~ 关于 IoTDB&#xff0c;关于物联网&#xff0c;关于时序数据库&#xff0c;关于开源... 一个问题重点&#xff0c;3-5 分钟&#xff0c;我们讲给你听&#xff1a; 列式写入到底是&#xff1f; 上一期我们详细了解了…...

【机器学习】小样本学习的实战技巧:如何在数据稀缺中取得突破

我的主页&#xff1a;2的n次方_ 在机器学习领域&#xff0c;充足的标注数据通常是构建高性能模型的基础。然而&#xff0c;在许多实际应用中&#xff0c;数据稀缺的问题普遍存在&#xff0c;如医疗影像分析、药物研发、少见语言处理等领域。小样本学习&#xff08;Few-Shot Le…...

2024.08.14 校招 实习 内推 面经

地/球&#x1f30d; &#xff1a; neituijunsir 交* 流*裙 &#xff0c;内推/实习/校招汇总表格 1、校招 | 理想汽车2025“理想”技术沙龙开启报名 校招 | 理想汽车2025“理想”技术沙龙开启报名 2、校招 | 紫光国芯2025校园招聘正式启动 校招 | 紫光国芯2025校园招聘正式…...

国产双通道集成电机一体化应用的电机驱动芯片-SS6951A

电机驱动芯片 - SS6951A为电机一体化应用提供一种双通道集成电机驱动方案。SS6951A有两路H桥驱动&#xff0c;每个H桥可提供较大峰值电流4.0A&#xff0c;可驱动两个刷式直流电机&#xff0c;或者一个双极步进电机&#xff0c;或者螺线管或者其它感性负载。双极步进电机可以以整…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)

说明&#xff1a; 想象一下&#xff0c;你正在用eNSP搭建一个虚拟的网络世界&#xff0c;里面有虚拟的路由器、交换机、电脑&#xff08;PC&#xff09;等等。这些设备都在你的电脑里面“运行”&#xff0c;它们之间可以互相通信&#xff0c;就像一个封闭的小王国。 但是&#…...

C++_核心编程_多态案例二-制作饮品

#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为&#xff1a;煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例&#xff0c;提供抽象制作饮品基类&#xff0c;提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...

椭圆曲线密码学(ECC)

一、ECC算法概述 椭圆曲线密码学&#xff08;Elliptic Curve Cryptography&#xff09;是基于椭圆曲线数学理论的公钥密码系统&#xff0c;由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA&#xff0c;ECC在相同安全强度下密钥更短&#xff08;256位ECC ≈ 3072位RSA…...

pam_env.so模块配置解析

在PAM&#xff08;Pluggable Authentication Modules&#xff09;配置中&#xff0c; /etc/pam.d/su 文件相关配置含义如下&#xff1a; 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块&#xff0c;负责验证用户身份&am…...

什么是库存周转?如何用进销存系统提高库存周转率?

你可能听说过这样一句话&#xff1a; “利润不是赚出来的&#xff0c;是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业&#xff0c;很多企业看着销售不错&#xff0c;账上却没钱、利润也不见了&#xff0c;一翻库存才发现&#xff1a; 一堆卖不动的旧货…...

论文笔记——相干体技术在裂缝预测中的应用研究

目录 相关地震知识补充地震数据的认识地震几何属性 相干体算法定义基本原理第一代相干体技术&#xff1a;基于互相关的相干体技术&#xff08;Correlation&#xff09;第二代相干体技术&#xff1a;基于相似的相干体技术&#xff08;Semblance&#xff09;基于多道相似的相干体…...

【Go语言基础【13】】函数、闭包、方法

文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数&#xff08;函数作为参数、返回值&#xff09; 三、匿名函数与闭包1. 匿名函数&#xff08;Lambda函…...

排序算法总结(C++)

目录 一、稳定性二、排序算法选择、冒泡、插入排序归并排序随机快速排序堆排序基数排序计数排序 三、总结 一、稳定性 排序算法的稳定性是指&#xff1a;同样大小的样本 **&#xff08;同样大小的数据&#xff09;**在排序之后不会改变原始的相对次序。 稳定性对基础类型对象…...

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要&#xff1a; 近期&#xff0c;在使用较新版本的OpenSSH客户端连接老旧SSH服务器时&#xff0c;会遇到 "no matching key exchange method found"​, "n…...

MinIO Docker 部署:仅开放一个端口

MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...