首页 > 编程知识 正文

牛客网高级项目课资源,牛客网课程

时间:2023-05-06 19:53:28 阅读:212622 作者:1935

写在前面

先简单介绍一下,博主目前研三,找完工作后最近一段时间空闲时间比较多,因此就想把自己以前学习过的一些东西总结一下,以后也打算把新学习到的东西及时记录,即是能够方便以后随时查看,也是监督自己每天都能有所提升,以前也偶尔写过几篇博客,但都是浅尝辄止,因此准备先把以前的东西重新梳理一下,写的第一篇就是关于牛客网的高级项目课问答平台的,这个是博主接触的第一个java项目,也是决定入坑java的原因,下面就尽量详细的介绍一下这个项目的各个模块,在这里放上代码地址,感兴趣的同学可以自行下载查看,如果有不懂的也可以qq联系我,博主qq:2589656897,代码地址:github
想要视频的同学可以私聊我,我私发给你,下面就介绍一下这个项目的各个模块,希望能对也在做这个项目的同学提供一些帮助。

准备

准备工作就是一些工作环境的配置,博主主要是在windows平台上编码,IDE是intellijIDEA,除此之外还用到了MySQL与Redis数据库,具体的准备工作可以参考视频教程,讲的已经非常详细,在此不作多说,除此之外,由于博主并不是很熟悉前端,因此以下都是与后端编码相关,下面便开始的一个模块。

用户的登录与注册

登录与注册模块实现起来比较简单,总体来说就是把用户信息存入我们的MySQL数据库中,登录与注册表中主要包含的数据有用户id,用户名,密码,为了保证数据安全,密码不能以明文的方式存在数据表中,因此还需要有一列存储盐值,存在表中的密码为用户输入的密码与盐值使用MD5加密之后的字符串,除此之外还需要存储的就是用户的头像信息,有了这几列,一个基本用户的信息就被我们建立起来了,除此之外,为了保证访问效率,http具有无状态性,为了保证用户能够正常使用网站功能而非每次访问都需要重新输入账号密码,我们还要建立一张表存储用户的登录信息,每次访问只要与数据库比对携带的ticket,便可以知道访问者是谁,这张表需要存储的信息主要有用户id,用户名,ticket值,过期时间以及状态信息,只要用户点击退出,便将状态值置为0即可,下面就是该模块简答介绍。

(1)登录注册模块:

1.用户名及密码合法性检测,包括用户名与密码不能为空,以及用户名未被注册

2.验证用户名与密码,如果通过检验就下发一个ticket,通过cookie发放给客户端

3.客户端每次发起请求,都要与数据库对比ticket是否有效

4.在数据库存储的密码是md5加密字符串,防止密码泄露

此模块用到的数据库表有user表与loginTicket表

user表包含字段:id name password salt headUrl

loginticket表包含字段:id userid expiredtime status ticket

问题的评论与发表

问答网站最主要的功能当然就是问题与评论了,这个模块相对来说比较简单,整体思路就是把用户输入的问题与评论按照设定入库即可,但是在设计数据表结构时需要注意一点就是当一个用户发起评论的时候,他评论的即可能是一个问题,也可能是一个评论即评论的评论,还有可能对一个用户发起评论,此时要注意的就是,评论表如果设计成评论单个场景,那至少要有三张表,因此在设计评论表的时候,这里就取了一个巧,具体如下:
question表:
id,title,content,createdDate,userId,commentCount
comment表:
id,userId,entityId,entityType,content,createdDate,status

拦截器与敏感词过滤

在完成以上两个模块的时候,其实整个网站的基本功能已经实现,接下来就是一些功能添加以及优化工作,在这里首要的任务就是要保证网站的内容安全,不能出现一些不合理不合法的词汇出现,因此添加的第一个功能就是敏感词的过滤,在这里我们采用了字典树的方式建立了一棵敏感词树,当检测到用户输入包含敏感词的时候就进行过滤,除此之外还要注意的一点是还要进行一些html标签信息的过滤,敏感词过滤主要用在用户的注册时用户名,以及用户问题与评论的发表。
在本项目中我们定义的拦截器有两个:
1.每次客户端发起请求,都被拦截器拦下,检查cookie携带的ticket信息,根据ticket信息查表确定用户信息,将用户信息存下,以便使用,在后面用户发布问题或者发起评论的时候方便数据入库。
2.未登录跳转拦截器,此拦截器定义在第一个拦截器后面,如果检测未登录即ticket不存在,用户即是处于未登录状态,如果客户端要发表问题或评论等等需要个人数据的行为,就跳转到登录页面,先完成登录再继续接下来的操作。

赞踩

问答网站还有一个重要的功能就是点赞与点踩,赞踩从功能上来说用传统的关系型数据库也可以实现,但是由于这个功能关系型并非很强,用简单快速的非关系型数据库也可以实现,因此在该项目中就使用Redis数据库来实现赞踩功能,关于Redis数据库可以访问官方网站来学习相关使用:redis
在这里我们主要是用了Redis里面的set数据结构,以免用户频繁赞踩造成数据不实。

粉丝与关注列表

在该模块就是要实现用户或者问题的粉丝与关注列表,在这里我们依旧使用Redis数据库来实现该功能,只不过在设计如何存储方面要下一点小心思,在这个需求中也是使用Redis的sorted Set数据结构实现,但是在粉丝列表中key是用户或者问题的id+type组成,value是粉丝的id,在关注列表中,key是用户id+关注对象type,value是关注对象id,排序依据是时间产生的时间,除此之外还要注意的一点是在关注与粉丝列表进行操作的时候必须要保证事务性,Redis的事务主要是由multi与exec两个命令实现。

异步化

除了以上四个功能之外,还有一个比较重要的功能就是为了提升网站的性能,进行异步化操作是必然选择,异步化最常用的是借助一些消息队列工具来实现,在这里我们直接利用Redis的list数据结构来实现,Redis的的list是双端队列,我们可以利用向队列中添加任务与取出任务,来实现操作的异步化。实现方式比较简单,主要依托两个命令lpush与brpop操作。

结语

以上就是一个问答网站最基本的一些功能的实现,当然在该项目还有一些其他功能,但我觉得以上几个就是一个网站最核心最通用的几个功能,感兴趣的同学可以根据视频以及我这里提供的代码自己敲一敲,理解会更加深刻,如果有不明白的欢迎私信,我会尽力解答。该项目主要是基于springBoot来实现,后面我会详细介绍一下该框架与传统SSM框架使用上的一些不同。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。