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

仿牛客网社区Web开发项目代码逐行精读(更新中)

仿牛客网社区Web开发项目

    • 怎么看项目?
    • 如何调试
    • 项目前瞻
      • 技术架构
      • 项目亮点
    • 开始看代码
      • LoginController
      • DiscussPostController

怎么看项目?

  1. pom.xml看技术架构
  2. resource看配置文件,这个项目是前后端不分离的
  3. 以调试为导向,从前端入手检查
  4. 先看controller,只做调用;调用service,实现具体业务;service还会调用其他service
  5. 后看dao,与数据库相关
  6. 深入源码

如何调试

  1. 网页检查,看NetworkHeader是发送的请求,Preview是响应信息
  2. 找到接口,如:Login
  3. 找到该接口的.java文件,打断点调试,查看所带参数
  4. 再进到方法中,打断点,F8执行到下一断点

项目前瞻

技术架构

  • 核心框架:SpringBoot SSM
  • 持久层框架:Mybatis
  • 日志管理:SLF4J
  • 模板框架: ElasticSearch
  • 项目管理框架: Maven
  • 消息队列:Kafka
  • 缓存框架:Redis
  • 其他:Spring Security、Quatz、Caffeine

项目亮点

参考文章

  • 项目构建在Spring Boot+SSM框架之上,并统一的进行了状态管理、事务管理、异常处理;
  • 利用Redis实现了点赞和关注功能;
  • 利用Kafka实现了异步的站内通知;
  • 利用ElasticSearch实现了全文搜索功能,可准确匹配搜索结果,并高亮显示关键词;
  • 利用Caffeine+Redis实现了两级缓存,并优化了热门帖子的访问。
  • 利用Spring Security实现了权限控制,实现了多重角色、URL级别的权限管理;
  • 利用HyperLogLog、Bitmap分别实现了UV、DAU的统计功能,100万用户数据只需*M内存空间;
  • 利用Quartz实现了任务调度功能,并实现了定时计算帖子分数、定时清理垃圾文件等功能;
  • 利用Actuator对应用的Bean、缓存、日志、路径等多个维度进行了监控,并通过自定义的端点对数据库连接进行了监控。

开始看代码

启动zookeeper

bin\windows\zookeeper-server-start.bat config\zookeeper.properties

启动server

bin\windows\kafka-server-start.bat config\server.properties

LoginController

  1. 首先,总体上看看这个Controller包含哪些模块:
    • 未登录前,可以点击按钮得到注册和登录界面
    • 注册功能模块
    • 激活用户
    • 验证码模块
    • 检查账号密码
    • 登出
  2. Get、Post与Put
    • POST /url 创建
    • DELETE /url/xxx 删除
    • PUT /url/xxx 更新
    • GET /url/xxx 查看
  3. 注册功能模块先调用userService,userService:
    • 初始化一个HashMap,用于存放提示信息
    • 先进行空值处理,若参数为空直接返回
    • 调用userMapper,通过查询检查用户名和邮箱是否已经存在
    • 通过MD5算法对密码加密
    • 对User实体类创建的对象user,设置必要的数据,存入数据库
    • 通过TemplateEngine 和Context 的配合,使用thymeleaf模版来生产html文件
    • 调用MailClient工具类发送邮件,即上一步生成的html文件
  4. 激活模块调用userService,用不同数值来表示不同激活状态
  5. 验证码模块:
    • 服务器通过Cookie将验证码和用户标识发送给浏览器
    • 将验证码放入Redis,设置过期时间60s
    • 通过字节流向浏览器传输图片
  6. 检查账号密码:
    • 对密码进行md5加密,判断是否正确
    • 生成登录凭证,并将其存入Redis
    • 将登录凭证通过Cookie发送给浏览器

DiscussPostController

  1. 首先,总体上看看这个Controller包含哪些模块:

    • 发帖
    • 获取帖子详情页面
    • 置顶
    • 加精
    • 删帖
  2. 发帖模块:

    • 先创建DiscussPost实体对象

    • 调用discussPostService

      • discussPostService调用sensitiveFilter过滤敏感词,原理
    • 创建Event实体对象

      • 设置主题类型:有六种:评论、点赞、关注、分享长图、发帖、删帖。此处是发帖
      • 设置实体类型,有三种:帖子、评论、用户。此处是帖子
    • 调用eventProducer,生产者发布消息

    • 把帖子放入Redis中

  3. 获取帖子详情页面:

    • 查询帖子,根据帖子查询作者
    • 调用likeService查询点赞数量和当前用户对这个帖子的点赞状态
    • 遍历评论列表,创建评论VO(Value Object)列表,这个列表是要给用户看的。将查询到的数据put到Map,再add到List,最后放入model中。model中存放了数据,再经过渲染得到View,呈现给用户,这不就体现了Spring MVC嘛!
  4. 置顶、加精和删帖:

    • 设置不同的类型和主题,发布事件

相关文章:

仿牛客网社区Web开发项目代码逐行精读(更新中)

仿牛客网社区Web开发项目怎么看项目?如何调试项目前瞻技术架构项目亮点开始看代码LoginControllerDiscussPostController怎么看项目? pom.xml看技术架构resource看配置文件,这个项目是前后端不分离的以调试为导向,从前端入手检查…...

5G NR调制阶数与EVM关系以及对系统SNR要求分析

移动通信技术对数据传输速率要求越来越高。一种提高传输速率的思路是使用更高阶的QAM 调制方式,例如5G NR 的256QAM PDSCH,微波的1024QAM,2048QAM和4096QAM 调制。更高阶的QAM 调制方式对系统也提出了更高的要求。例如某个系统的EVM 测试结果…...

【NAS群晖drive异地访问】远程连接drive挂载电脑硬盘「内网穿透」

文章目录前言1.群晖Synology Drive套件的安装1.1 安装Synology Drive套件1.2 设置Synology Drive套件1.3 局域网内电脑测试和使用2.使用cpolar远程访问内网Synology Drive2.1 Cpolar云端设置2.2 Cpolar本地设置2.3 测试和使用3. 结语转发自CSDN远程穿透的文章:【群晖…...

react:hooks为什么不能写在条件语句里

背景 最近朋友在面试,说面试官问到了一个问题不会,说为什么 react hooks为什么不能写在条件语句里,今天我们来研究一下这个问题。 我们在来简单实现一个 useState: const reRender () > {stateIndex -1 ReactDOM.render(&…...

模型优势缺陷整理

(1)BERT 1. 计算资源消耗:bert模型是一个相对较大的模型,具有数亿个参数。因此,为了训练和使用bert模型,需要大量的计算资源和时间。 2. 学习不足问题:尽管bert模型在大规模语料库上进行了预训…...

编写猫咪相册应用 HTML

文章目录1. 标题元素标签2. p元素用于在网站上创建一段文本3. 注释4. 页面主要部分标识标签5. 通过使用img元素来为你的网站添加图片6. 使用锚点元素(a)链接到另一个页面7. 使用 section 元素将照片内容与未来的内容分开8. 无序列表(ul)元素,列表项(li)元素在列表中…...

基于Arduino与LabVIEW的远程家庭监控系统

在基于Arduino与LabVIEW的远程家庭监控系统中,Arduino Uno控制器需要完成以下功能:1)通过W5100网络模块接收并判断命令,采集和传输温度、煤气浓度、热释电传感器的数据,并通过W5100网络模块上传给LabVIEW软件。2&#…...

使用FRP(快速反向代理)实现内网穿透——以腾讯云服务器为例

一、FRP简介 FRP,即快速反向代理技术(fast reverse proxy)。本文的FRP程序是基于github开源项目GitHub - fatedier/frp。当前,该程序可实现:“将位于 NAT 或防火墙后面的本地服务器暴露给互联网”。它目前支持 TCP 和…...

d跨语言链接优化

原文 使用LDC的(LTO)链接时优化的简短文章,包含演示了如何提高程序性能的简单示例.因为LTO在LLVMIR级别工作,因此可跨越C/D语言优化! 重要提示:LDC/LLVM的LTO在窗口上不可用. 链接时优化 (LTO)链接时优化是指链接时的程序优化.链接器提取所有目标文件在一起,并合并到一个程序…...

【Linux】-- 进程概念的引入

目录 硬件 冯诺依曼体系结构 冯诺依曼体系结构推导 重点概念 网络数据流向 软件 操作系统(Operator System - OS) 概念 定位 进程内核数据结构PCB(task_struct) 通过系统调用创建进程-fork初始 fork基本用法 使用if进行分流 查看运行效果 …...

一文看懂“低代码、零代码”是什么?有什么区别?

低代码和零代码近几年热度一直居高不下,乍一看,很容易混淆低代码和零代码开发平台—— 因为它们都是传统开发的替代方案,旨在通过类似于可视化编程的功能加速软件开发过程。 但二者根本不是一回事。从开发人员经验 、目标角色到使用场景&…...

【华为OD机试真题】去除多余的空格(java)

去除多余空格 知识点字符串数组Q队列时间限制:2s空间限制:256MB限定语言:不限 题目描述: 去除文本多余空格,但不去除配对单引号之间的多余空格。给出关键词的起始和结束 下标,去除多余空格后刷新关键词的起始和结束下标。 输入: Life is painting a picture, not …...

【SQL 必知必会】- 第十三课 创建高级联结

目录 使用表别名 Oracle 中没有AS 使用不同类型的联结 自联结 用自联结而不用子查询 自然联结 外联结 全外联结 使用带聚集函数的联结 使用联结和联结条件 使用表别名 SQL 除了可以对列名和计算字段使用别名,还允许给表名起别名。这样做有两个主要理由&#xff…...

ios逆向工具有那些

以下是一些常用的 iOS 逆向工具: Cycript:一种用于在运行时动态分析和修改 iOS 应用程序的强大工具,可以与应用程序进行交互式调试和注入代码。 Frida:一个强大的动态二进制插桩工具,可以在运行时修改应用程序的行为&…...

【软件设计师14】UML建模

UML建模 稳定出一个,但是由于UML的图比较多,所以这种题比数据流图和数据库难度高 一般都会考用例图和类图,再附加其他的图 1. 用例图 包含关系include:比如登记外借信息必须先有用户登录 扩展关系extend:修改书籍…...

容器镜像的设计原理

1 概述: 1.1 历史概要 2016年,Docker制定了镜像规范v2,并在Docker 1.10中实现了这个规范。镜像规范v2分为Schema 1和Schema 2。 Schema 1主要兼容使用v1规范的Docker客户端(从2017年2月起,镜像规范v1不再被Registry支…...

arm64异常向量表

arm64异常向量表1 arm64异常向量表2 linux arm64异常向量表3 kernel_ventry宏4 异常向量表的保存4. VBAR_ELx寄存器4.2 __primary_switched4.3 __primary_switched1 arm64异常向量表 When an exception occurs, the processor must execute handler code which corresponds to …...

【测试面试】吐血整理,大厂测试开发岗面试题(1~4面),拿下年40w...

目录:导读前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜)前言 自动化测试面试题&am…...

SpringSecurity之权限模块设计

目录 前言 实现思路 代码结构 使用说明 前言 前面我们了解了关于微服务权限设计方案以及J W T的相关介绍,今天我们来聊一下,如何避免自己重复的写相同的代码,一次代码实现,即可完美复制到任何项目中实现权限相关的功能。 实现…...

002_双指针法

1.移除元素 目标:移除数组中的某一个元素 数组的元素在内存地址中是连续的,不能单独删除数组中的某个元素,只能覆盖。 1.1暴力解法 建立两个for循环,当查找到某个元素以后,将此元素后面的元素全部往前移动 时间复…...

家政维修平台实战20:权限设计

目录 1 获取工人信息2 搭建工人入口3 权限判断总结 目前我们已经搭建好了基础的用户体系,主要是分成几个表,用户表我们是记录用户的基础信息,包括手机、昵称、头像。而工人和员工各有各的表。那么就有一个问题,不同的角色&#xf…...

视频字幕质量评估的大规模细粒度基准

大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成

厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...

Python Einops库:深度学习中的张量操作革命

Einops(爱因斯坦操作库)就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库,用类似自然语言的表达式替代了晦涩的API调用,彻底改变了深度学习工程…...

Caliper 配置文件解析:fisco-bcos.json

config.yaml 文件 config.yaml 是 Caliper 的主配置文件,通常包含以下内容: test:name: fisco-bcos-test # 测试名称description: Performance test of FISCO-BCOS # 测试描述workers:type: local # 工作进程类型number: 5 # 工作进程数量monitor:type: - docker- pro…...

Python 实现 Web 静态服务器(HTTP 协议)

目录 一、在本地启动 HTTP 服务器1. Windows 下安装 node.js1)下载安装包2)配置环境变量3)安装镜像4)node.js 的常用命令 2. 安装 http-server 服务3. 使用 http-server 开启服务1)使用 http-server2)详解 …...

uniapp 集成腾讯云 IM 富媒体消息(地理位置/文件)

UniApp 集成腾讯云 IM 富媒体消息全攻略(地理位置/文件) 一、功能实现原理 腾讯云 IM 通过 消息扩展机制 支持富媒体类型,核心实现方式: 标准消息类型:直接使用 SDK 内置类型(文件、图片等)自…...

Xcode 16 集成 cocoapods 报错

基于 Xcode 16 新建工程项目,集成 cocoapods 执行 pod init 报错 ### Error RuntimeError - PBXGroup attempted to initialize an object with unknown ISA PBXFileSystemSynchronizedRootGroup from attributes: {"isa">"PBXFileSystemSynchro…...

麒麟系统使用-进行.NET开发

文章目录 前言一、搭建dotnet环境1.获取相关资源2.配置dotnet 二、使用dotnet三、其他说明总结 前言 麒麟系统的内核是基于linux的,如果需要进行.NET开发,则需要安装特定的应用。由于NET Framework 是仅适用于 Windows 版本的 .NET,所以要进…...

代理服务器-LVS的3种模式与调度算法

作者介绍:简历上没有一个精通的运维工程师。请点击上方的蓝色《运维小路》关注我,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。 我们上一章介绍了Web服务器,其中以Nginx为主,本章我们来讲解几个代理软件&#xff1a…...