# 2024年度总结——项目和毕设

​ 2024年,是我加入编程导航的第一年,这一年,跟着鱼皮做完和正在做的项目有四个,分别是用户中心、伙伴匹配、API开放平台和手写RPC框架。印象里我是从大三下开始接触到编程导航的,邀请我的人是我的表哥,之后我就开始跟着鱼皮写项目,改bug,一点点地提升自己。

​ 现在是大四上的学期末,毕业设计已经开题,现在我就要用我从编程导航学习到的知识,进行毕业设计项目的编写了。

​ 下面具体讲一下我这一年都做了什么。

1.项目🎓

1.1 用户中心🚲

​ 用户中心想必很多小伙伴都做过,我也不例外,通过学习用户中心项目,我学会了如何从0到1搭建起一个前后端分离的项目,并且成功将项目部署到了远程服务器上。

​ 在这个项目中,我学会了基础的用户登录态识别、错误码和返回值的封装、前后端跨域问题解决、使用多种方式进行项目的部署等等很有价值的知识。

​ 其中我对两件事情的印象比较深刻,一个是前端修改登录逻辑,另一个是项目的部署上线。

1.1.1 前端登录逻辑修改

​ 在修改前端登录逻辑,实现用户登录状态保存的时候遇到了许许多多的问题,调试了很久,中间遇到过登录成功却不主动跳转到欢迎页,但是直接访问欢迎页又正常的奇怪问题,那几天脑子里想的都是为什么不跳转啊,现在回想起来都头疼,回想起来,最主要的原因是没用过ant design pro,对于它里面方法的调用逻辑完全不熟悉,只能一点点去了解和适应。

1.1.2 项目的部署上线

​ 搞定了本地的前后端交互,接下来就要学习如何把项目部署上线了,为此,我使用学生优惠购买了远程服务器,进行项目的部署,一开始非常不适应,因为平时用电脑都是图形化界面,但是远程服务器只有命令行,无论要做什么,都要敲指令。

​ 在部署的过程中,总会遇到端口占用、启动失败、环境变量配置等问题,通过解决这些问题,我对于命令行的操作变得更熟练了。

​ 在编写年度总结的时候,我回看了用户中心的笔记,在如何上传文件到远程服务器这部分,我尝试了配置ssh,防火墙、端口开放、配置文件修改也做了,但还是无法在命令行使用ssh上传文件,最后我选择了另一种方法,使用WinSCP这款软件,最终成功上传;这启示我:有时候遇到了难以解决的问题,换一种方式也未尝不可,不要太死板,不能因小失大,如果我一直执着于这个,完成用户中心的时间可能就更久了。

1.2 伙伴匹配🛵

​ 伙伴匹配是跟着做的第二个项目,印象比较深刻的是整合Swagger+Knife4j接口文档、大量数据导入、分布式锁和推荐算法。

1.2.1 整合接口文档

引入knife4j后,根据编写的后端controller和dto,就可以生成一个可供前端、后端使用的接口文档,真的很方便,虽然使用的过程中也遇到了一些问题。

​ 比如说找不到某些方法和dto,明明写了,但是查看接口文档的时候却没有;有时候是后端没有重新clean和install,有时候是没用Post和@RequestBody;不过使用的次数变多后,很快就能察觉到问题所在了。

1.2.2 数据导入

​ 导入大量数据到数据库中,以前从来没有做过这种事情;在进行数据导入的时候,我感受到了数据量大后优化的必要性,因为我现在使用的是个人电脑进行数据存储,插入10万条数据用了10秒,如果我使用的是性能较差的远程服务器,那时间就更久了;

​ 导入后,再去看看伙伴匹配系统的页面,发现页面渲染了很久,最后报错了,原因是发送给前端的数据多达30万条,前端很难接收,因此数据量大起来后,分页也很有必要。

1.2.3 分布式锁

​ 以前学操作系统的时候接触过锁,但是没接触过分布式锁,当我们考虑多个后端进程的时候,只用锁是不行的,因为单个锁只对单个JVM生效,这时候就要考虑使用中间件,让后端进程在一个地方抢锁,只有抢锁成功才能执行,而且要注意判断锁和删除锁操作的原子性。

1.2.4 推荐算法

​ 说起算法,我只有在学校学习《算法设计与分析》这门课和伙伴匹配接触过,这样一想,我算法方面相当薄弱。

​ 在伙伴匹配系统中,鱼皮带我们使用的是编辑距离算法实现用户推荐,但是我测试的时候发现了一个奇怪的地方,就是推荐的次序不对,相同标签多的在少的用户后面,我看了一下编辑距离算法实例,发现编辑距离是直接适用于字符串之间的,但是我们的标签是一个列表,里面才是字符串,举个例子就是["java","男"]和["男","java"]的编辑距离是1,而不是0,当标签变多,加入次序不同,问题越严重,所以如果编辑距离算法要用到我们的伙伴匹配中,需要进行改进。

1.3 API开放平台🚌

API开放平台相比于上面的两个项目,有更多我之前极少接触的东西,比如签名认证、Sping Cloud的gateway,也就是网关;还有RPC远程调用;

1.3.1 签名认证

​ 之前做项目,要说到安全方面,最多有一个登录和角色校验,对于签名认证,从来没涉猎过,和账号密码不同,签名认证的密钥不应该直接在网络上传递,防止他人拦截请求,获取密钥,取而代之的是签名,使用密钥+请求参数等,使用签名算法生成。

​ 除此之外,还需要随机数和时间戳,来防止请求被重现,当时还想过:为什么又要加随机数,又要加时间戳呢?是否是多此一举?我自己使用反证法证了一下

  1. 如果只有随机数,会怎样呢?为了保证请求不会被重现,只能一直保存随机数,但是我们的存储空间是有限的,这样做肯定会出问题。
  2. 如果只有时间戳,那我们设置的时间不能太短,防止因为用户网速慢等原因调用接口失败,那时间戳未到期前,别人可以随便复现你的请求,这也不行
  3. 当时间戳和随机数都存在时,当时间戳未到期,随机数发挥作用,当时间戳到期了,随机数就可以移除,让时间戳发挥作用。

1.3.2 gateway

​ 网关,之前也没接触过这个概念,了解一点后发现它的作用很强大,可以路由转发,负载均衡,统一鉴权等等,我们可以使用网关统一接收请求、进行签名认证、打印日志、把请求转发到我们的接口项目。

1.3.3 RPC远程调用

​ 之前只在一个沙龙项目中使用过类似的东西,但是当时不知道它叫RPC,只记得Dubbo和zookeeper,现在再学一次,才回忆起来,原来Dubbo是一款RPC框架,zookeeper是注册中心。

​ RPC远程调用比起发请求要轻松许多,特别是使用Dubbo,引入依赖,在需要被调用的类上写注解,然后就可以像使用本地类一样使用不属于自己项目的类,真是太方便了!!!

1.4 手写RPC框架🚝

1.4.1 基础实现

首先我跟着鱼皮写了基础的RPC框架,实现了使用自己的框架完成RPC调用,了解了RPC调用,作为服务消费者和服务提供者,需要做什么事情。

  • 服务双方都要使用同样的序列化器进行数据的序列化和反序列化
  • 服务的消费者要发起调用,为此需要进行代理,有静态代理和动态代理,静态代理需要一个个服务类编写,比较麻烦,动态代理用反射机制和工厂模式,可以轻松完成服务调用。
  • 服务的提供者需要先注册服务,再处理调用——通过反射机制调用服务的实现类,将结果返回给消费者。

1.4.2 优化

完成了基本的功能,接下来就要思考这样的调用有哪些地方可以优化。

1.4.2.1 全局配置加载

​ 首先可以想到的有配置,我们的RPC框架要给用户使用,就不可能指望用户自己用修改代码的方式修改配置,我们可以通过配置文件的方式,用户只需要填写一点需要的信息,框架就能加载用户配置。

1.4.2.2 注册中心

​ 在基础调用中,服务提供者的地址是写死的,但是服务提供者的地址很可能会变化,而且实际使用时,很明显服务的提供者不会只有一个的,服务的消费者同时也可能是服务的提供者,所以实现注册中心很有必要。

1.4.2.3 其他优化

​ 由于我们学校要求毕业设计提前进行,所以首先RPC框架项目只做到完成简单注册中心,其他的优化需要抽时间进行学习了。

2.毕设⚔

2.1 从项目中吸收经验

在设计我的毕业设计作品的时候,我马上想到了我做过的用户中心和伙伴匹配系统,当然并不是说照搬,而是我可以用我学过的这两个项目的经验指导我的毕业设计,比如用户中心的经验让我可以了解如何快速搭建一个后台管理系统,并进行优化,而伙伴匹配系统的经验让我可以了解如何制作一个移动端H5页面的项目,给用户使用。项目使用的技术栈也可以供我参考。

2.2 遇到的问题

​ 在学习编程导航项目和平时的项目学习的过程中,大多数时候都是跟着教程写,虽然对代码也有自己的思考,但是没怎么做过拓展,对于没做过或仅仅接触一次的业务,总有种不知所措的感觉,而且写的时候总会想要一次性把事情做完,但是又会由于难以做到而拖慢了进度,这是需要注意的。

​ 下面说一下我要做的功能,包括排队功能、支付功能。

2.2.1 排队功能

​ 首先来说排队功能,在之前做的项目中,我不曾接触过这种需要实时通信的功能,为此,我需要多多查阅资料,把这个功能集成到我的项目中。

2.2.2 支付功能

​ 然后是支付功能,这个功能倒是接触过,在我大三下的时候,某公司给我们软件专业的做过一次实训课程,其中就带我们实现了支付宝的模拟支付,但是我在思考我的毕业设计的时候突然发现有点不太对,如果给用户使用的话,现在大家用的都是手机,但是当时支付是跳转到了支付宝的网页支付页面,不知道毕业答辩的时候会不会有老师指出我这不符合实际需求,我可能还需要思考一下。

3. 其他🎉

​ 总结一下2024,我一点点跟着编程导航学习,之前实现前后端交互都要做很久,现在可以完成基础的前后端交互,思考优化点,并把自己学习到的知识运用到毕业设计中,不再是以前那个只要代码能跑就行的菜鸟程序员了,但是我的知识掌握得还是不够牢固,而且知识层面还是比较浅,今后也会跟着教程继续学习,2025继续进步。

#2024年度总结

0个评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
下载 APP