仿牛客网项目---项目总结

2024-03-11 19:12
文章标签 总结 项目 仿牛 客网

本文主要是介绍仿牛客网项目---项目总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本篇文章是对整个项目的一个总结。下面这张图要好好理解。

整个项目都是构建在SpringBoot之上的,所以把它画到最底下,其它技术依托在springboot之上。但是springboot并不是技术的核心,而只是起到了一个辅助的作用,它的作用仅仅是降低其它技术的使用难度,仅此而已。

那我们所有技术的核心是什么呢?我认为是Spring!因为我们所有的技术都是围绕Spring来展开的。对于重点的,我们所要关注的技术,在图中都已经画了下划线。

在Spring之上,我们用到了它的很多模块,比如SpringMVC,解决了这个前后端请求交互的问题,然后我们用到了Spring Mybatis,可以访问数据库。还用了Spring Securtiy,用来管理我们项目中安全层面的内容,管理我们项目中的权限。因为这3个技术是构建在Spring之上的,由Spring进行整合的,所以把它们画到Spring的上方。

而SpringBoot,Spring,SpringMVC,Spring Mybatis,Spring Security这5个技术放在了一块儿,意思是这些内容就是我们整个项目的基石。或者说,我们整个项目的绝大部分请求,都是用这些技术实现的,或者说它们都是基于这些技术。当然我们也用到了其它技术,那这些其它技术呢,就是不同的技术解决不同的模块,不同的问题。

权限模块

开发了注册,登录,退出功能,这些没什么好说的。然后就是状态功能,状态功能就是在每个页面上怎么去显示登录用户的用户名,头像。然后我们开发了设置功能,就是可以上传头像,修改密码。最后还开发了授权功能,就是不同类型的用户登录进来,我们让你访问不同的功能。

这些功能虽然我们开发是开发完了,但是我们必须关注一个非常重要的话题:会话管理。因为我们整个权限模块其实是构建在会话管理之上的,你想想,如果没有会话,那 后端根本记不住前端,那根本开发不出来整个项目。如果你想要一个项目有长期的交互,或者说连续的交互,要开发这样的逻辑,就必须要有会话管理。

关于会话管理,我们需要了解cookie和session,它们各自发挥什么样的作用,它们的区别是什么。

然后后来的话,我们的项目规避了session,不用session了。为什么呢?因为我们考虑到项目在分布式部署的时候,session会有一些问题。具体的问题看之前我写的博客:【cookie和session】娓娓道来cookie和session-CSDN博客

那如果我们不用session的话,怎么解决问题?我的项目中使用的是Redis,把数据存到Redis里,另外还用到了ThreadLocal。总之,对于权限管理,我们从技术上关注interceptor,从业务上关注会话管理。

核心模块

在开发完权限模块后,我们又开发了核心模块。核心模块功能比较多,包括首页,帖子,评论,私信,异常和日志。不过其实这些 功能也都差不多,也就那样吧,特别是首页,帖子,评论,私信这4个功能,都是基于SpringMVC实现的。而异常和日志则用到了一些通用的技术。

从业务角度来说,我们在开发这个模块有两个重点:敏感词和事务。对于敏感词的话,我们主要关注一下它是怎么过滤的,前缀树的结构以及相关的一些算法。对于事务的话,我们这个模块确实是解决了一些事务的问题。

当然了,这个模块肯定也是基于我们之前说的5种技术之上实现的。除了这5种技术之外,还用到了advice(控制器的通知),我们用advice来处理异常。另外我们还用到了AOP,AOP统一记录了业务层的日志。但是其实我感觉这个功能有点薄,感觉其它地方没怎么用到AOP,不过好多人说AOP很重要,这点我也是搞不懂。

性能模块

在开发完核心模块后,我们就开发了性能模块,也就是对性能要求高的模块。这里这些模块包含了社交网站中比较常见的一些功能:点赞,关注。这些功能需要高频的访问,需要高性能。那我们就利用redis开发这样的功能。当然redis肯定不止干这么一件事,它还可以干一些更高级的事,比如说可以用redis做缓存。对于这一块而言,redis肯定是最重要的,我们应该也要多关注redis这方面的内容,比如说关注一下它的数据结构,每种数据结构适合解决什么样的数据问题。

通知模块

再接下来我们又开发了通知模块。这哥模块其实就只有一个功能:系统通知。我们在这里用到了消息队列的框架:kafka。对于这个框架其实在使用的时候很简单,我们需要关注的并不是这个框架是怎么用的,这种只要你看看教程,是个人都会用,我们关键要看的是框架背后的一些通用的原则,比如说kafka的模式:生产者与消费者模式。我感觉只有理解了生产者消费者模式,你才有可能明白,在什么时候可以用到这个功能,这个功能可以帮助我们解决一个什么样的问题。当你要解决的时候,你自然会想到,哎,我可以用kafka,因为里面有一个生产者消费者模式,对解决这个问题很适用哦。

搜索模块

最后,我们开发了这个项目的搜索模块。搜索模块就一个功能:全文搜索。全文搜索的意思是我们针对帖子做一个全面的搜索,搜索帖子的各个字段。在这里我们用到了新的框架:Elasticsearch。这个框架在使用的时候也是比较简单的,我们复习时也是关注一下它的数据结构既可,也可以找一些文章看看Elasticsearch索引相关的内容。

以上就是我对于整个项目从技术到业务所做的一个总结!

这篇关于仿牛客网项目---项目总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/798786

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template

如何用Docker运行Django项目

本章教程,介绍如何用Docker创建一个Django,并运行能够访问。 一、拉取镜像 这里我们使用python3.11版本的docker镜像 docker pull python:3.11 二、运行容器 这里我们将容器内部的8080端口,映射到宿主机的80端口上。 docker run -itd --name python311 -p

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

在cscode中通过maven创建java项目

在cscode中创建java项目 可以通过博客完成maven的导入 建立maven项目 使用快捷键 Ctrl + Shift + P 建立一个 Maven 项目 1 Ctrl + Shift + P 打开输入框2 输入 "> java create"3 选择 maven4 选择 No Archetype5 输入 域名6 输入项目名称7 建立一个文件目录存放项目,文件名一般为项目名8 确定

git使用的说明总结

Git使用说明 下载安装(下载地址) macOS: Git - Downloading macOS Windows: Git - Downloading Windows Linux/Unix: Git (git-scm.com) 创建新仓库 本地创建新仓库:创建新文件夹,进入文件夹目录,执行指令 git init ,用以创建新的git 克隆仓库 执行指令用以创建一个本地仓库的

Vue3项目开发——新闻发布管理系统(六)

文章目录 八、首页设计开发1、页面设计2、登录访问拦截实现3、用户基本信息显示①封装用户基本信息获取接口②用户基本信息存储③用户基本信息调用④用户基本信息动态渲染 4、退出功能实现①注册点击事件②添加退出功能③数据清理 5、代码下载 八、首页设计开发 登录成功后,系统就进入了首页。接下来,也就进行首页的开发了。 1、页面设计 系统页面主要分为三部分,左侧为系统的菜单栏,右侧

二分最大匹配总结

HDU 2444  黑白染色 ,二分图判定 const int maxn = 208 ;vector<int> g[maxn] ;int n ;bool vis[maxn] ;int match[maxn] ;;int color[maxn] ;int setcolor(int u , int c){color[u] = c ;for(vector<int>::iter

整数Hash散列总结

方法:    step1  :线性探测  step2 散列   当 h(k)位置已经存储有元素的时候,依次探查(h(k)+i) mod S, i=1,2,3…,直到找到空的存储单元为止。其中,S为 数组长度。 HDU 1496   a*x1^2+b*x2^2+c*x3^2+d*x4^2=0 。 x在 [-100,100] 解的个数  const int MaxN = 3000

状态dp总结

zoj 3631  N 个数中选若干数和(只能选一次)<=M 的最大值 const int Max_N = 38 ;int a[1<<16] , b[1<<16] , x[Max_N] , e[Max_N] ;void GetNum(int g[] , int n , int s[] , int &m){ int i , j , t ;m = 0 ;for(i = 0 ;