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

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

整个项目都是构建在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.mzph.cn/news/736929.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vue之性能优化

1.路由懒加载 所谓路由懒加载,其实就是路由通过import动态引入,而不是在文件最上面一个个全部引入,因为JS执行的时候会优先执行引入的文件,如果一次性引入过多,则会增加处理时长。 2.图片懒加载 图片在网页加载过程…

svg简单教程

推荐查看这个视频 一小时讲完SVG 简介 scalable 英 /ˈskeɪləbl/ 美 /ˈskeɪləbl/ adj. (计算机) 可扩展的;可改变大小的,可缩放的;可攀登的;可称量的;可去鳞的 vector 英 /ˈvektə/ 美…

搭建prometheus、grafana监控平台

程序员的公众号:源1024,获取更多资料,无加密无套路! 最近整理了一波电子书籍资料,包含《Effective Java中文版 第2版》《深入JAVA虚拟机》,《重构改善既有代码设计》,《MySQL高性能-第3版》&…

php调用guzzlehttp库时出现Segmentation fault的解决方案

先说结论,这个问题的原因是因为php7.4与openssl3不兼容产生的,解决方案如下: 输入openssl version -a查看openssl版本,如果是3以上的版本与php7.4不兼容,7.4以下的没测试过,估计也有问题。我最终是安装上了…

安装配置Spark集群

安装Spark集群主要包括以下步骤: 1、下载Spark安装包,在各节点中安装部署spark集群 2、配置整合 3、启动并测试 下载Spark 可以从官方网站下载合适的版本。当前环境已经提供了安装包,存放在 /opt/software目录下。 在node1节点上安装Sp…

SpringCloudAlibaba 网关gateway整合sentinel日志默认路径修改

SpringCloudAlibaba 网关gateway整合sentinel 实现网关限流熔断 问题提出 今天运维突然告诉我 在服务器上内存满了 原因是nacos日志高达3G,然后将日志文件发给我看了一下之后才发现是gateway整合sentinel使用了默认日志地址导致日志生成地址直接存在与根路径下而且一下存在多…

第16章——西瓜书强化学习

在强化学习中,智能体通过与环境的交互来学习如何做出决策。在每个时间步,智能体观察当前的环境状态,并根据其策略选择一个动作。环境会对智能体的动作做出响应,并给出一个奖励信号(reward),该信…

安装zabbix

部署Zabbix监控平台 部署一台Zabbix监控服务器,一台被监控主机,为进一步执行具体的监控任务做准备: 安装LNMP环境源码安装Zabbix安装监控端主机,修改基本配置初始化Zabbix监控Web页面修改PHP配置文件,满足Zabbix需求…

zeta新增三个任务教程,即将刷新,速撸

这期是延续上期的教程,前面的任务不变,所以直接复制的前面的教程,多了三个任务更新在后面。 简单说一下,zeta是已经发币的公链项目,但是它社区还有6%的用户激励token份额没发完,做主网的几个简单任务可以获…

「CISP题库精讲」CISP题库习题解析精讲5道

前言 本节只要对CISP考试中的5道习题进行详细的讲解,时间比较少,敲多少道,就算多少道,反正全部也就1400多道。 习题部分 第一题 某企业内网中感染了一种依靠移动存储进行传播的特洛伊木马病毒,由于企业部署的杀毒软件,为了解决该病毒在企业内部传播,作为信息化负责人…

文章解读与仿真程序复现思路——电网技术EI\CSCD\北大核心《含海上风电制氢的综合能源系统分布鲁棒低碳优化运行》

本专栏栏目提供文章与程序复现思路,具体已有的论文与论文源程序可翻阅本博主免费的专栏栏目《论文与完整程序》 论文与完整源程序_电网论文源程序的博客-CSDN博客https://blog.csdn.net/liang674027206/category_12531414.html 电网论文源程序-CSDN博客电网论文源…

U盘文件剪切丢失如何挽救?专家教你两招轻松恢复

一、遭遇U盘文件剪切丢失,你该怎么办? 在日常办公和生活中,U盘作为便捷的移动存储设备,常常承载着重要的文件和数据。然而,有时我们会遇到这样一个令人头疼的问题:明明在电脑上将U盘中的文件剪切到了某个位…

SQL 中: 索引的建立和删除

目录 实验过程创建索引修改索引删除索引查询索引查看索引信息分析索引待续、更新中 实验过程 1 在STUDENT表的sno列上创建一个非聚簇索引,索引名为“student_sno_idx”。 CREATE INDEX student_sno_idx ON STUDENT (sno);2.在STUDENT表上按sno的升序,…

【Java】:按位与、按位或

按位与运算符( & ) 当且仅当两个操作数的二进制的某一位均非0时,该位的结果才为1。 int a 5; int b 3; int c a & b; //c 1// 0 1 0 1 a 5 // 0 0 1 1 b 3 // 0 0 0 1 c 1按位或操作符( | )&#xff…

【脚本玩漆黑的魅影】全自动对战宫殿

文章目录 原理主要代码全部代码 原理 对战宫殿是让宠物自己打,不需要我们选技能,所以用来刷对战点数很合适。 需要准备三个主力。 主要是根据屏幕截图进行各种操作。 1,外面的对话,除了选自由级以外,其他都是直接点…

Exception异常处理

1. 两种异常处理机制 1.1 使用 throw 关键字手动抛出异常 使用throw关键字抛出异常,代码会的显得简单明了 如下图所示 1.2 使用 try-catch 捕获异常 使用try-catch进行捕获异常,往往会使代码变得更加笼统,层层包裹 如下图所示 2. 自定义…

mybatisplus的条件构造器

条件构造器wrapper,主要用于构造sql语句的where条件,他更擅长这个,但也可以用于构造其他类型的条件,比如order by、group by等。 条件构造器的使用经验: 基于QueryWrapper的查询 练习1. void testQueryWrapper(){Q…

吴恩达机器学习笔记 十八 制定一个性能评估标准 学习曲线 高偏差 高方差

一个模型的好坏的评估基准可以从下面几个方面考虑: 1.考虑人类在这个问题上的表现 2.对比竞争算法的表现 3.根据经验猜测 判断是高偏差还是高方差 训练样本数量越多,越难完美地拟合每个样本,因此 J_train 会逐渐增大一点点,但泛…

算法——滑动窗口之找到字符串中所有的字母异位词,串联所有单词的子串

6.找到字符串中所有的字母异位词 题目:. - 力扣(LeetCode) 6.1如何快速判断两个字符串是否是异位词 假设现在有s1 aabca,s2 abaca,那么这两个就是异位词,容易想到的判断方法就是将两个字符串按照字典序排序,再依次比较,但是时间复杂度很高;我们看看…

分享软件项目实施方案模板

本项目在实施过程中将遵守做到以下几个方面: 与建设单位共同完成整个系统软件、网络等设计,负责系统的开发、测试、调试、人员培训、系统的试运行和交付,并保证系统质量。负责系统的维护、应用软件的升级和更新。提出对系统硬件设备的相关技术要求。在项…