最近做项目的总结与收获(2021年8月) 1 总结 1.1 做的事情
这个月也是做了一个中规中矩的微服务项目吧,一开始看到项目架构的时候觉得内容特别多,但实际做完之后发现其实还是驾驭的了的。
一个月下来,感觉自己做的事还是蛮多的,但又感觉不算很多,其实也就那么些东西。讲讲我在项目开发中的一个过程吧,大致如下;
需求分析——>概要设计(画脑图,分工,前期项目搭建)——>详细设计(数据库、接口)——>业务开发&简单测试——>技术优化
需求分析 & 概要设计
最先就是需求分析,根据发来的一个演示文档和需求文档,几十号人一起对需求做了拆解,分析,画了一些思维导图,分析有那些模块,大概要负责什么样的功能,虽然没有写概要设计文档,但脑海里都是有印象的。这阶段首要目的应该就是让所有人对要做的项目有一个整体上的认知吧,也方便之后分工与合作。
于此同时还划分了三个开发小组和架构部、助理,助理的话主要是项目文档的编写和代码检查,以及一些比较细节的东西吧。
架构负责前期项目的搭建,主要分了前台、后台、网关、鉴权、搜索、定时任务,以及common,config这些大的模块,参与架构的人会对这些模块的相关内容进行一定的设计与搭建吧,当然也是各有分工的了,并且也是在三组内的,也就是另外的任务吧。
三个小组首先是简单的划分了一下组长和学委吧,我也是担任了一组的学委,中间过程还是有点曲折的,留到心路历程再讲吧。
详细设计
在需求文档分析完成后三个小组也接到了相应的任务,我在的一组也是接到了名人堂,首页,内容,以及评价这四个模块,之后就是详细设计了,数据库设计,接口设计什么的。也是开会分工了一下,然后搞了个共享文档出来,对每个功能点进行了一些分化,然后分给了小组的成员吧。之后的数据库设计,接口设计也是在文档当中写了。
接口设计的时候本来是要写文档的,小组里面的人发现了一个好用的接口设计工具,apifox吧,之后就转战apifox了。其实感觉这阶段发挥的不算很好,本来正常的效果是要有一个接口的设计思路,便于后续开发。但实话说没有碰代码的话对于接口的思路是没有太多感觉的吧,所以其实还是有很多遗漏的地方。不过至少是有这么个过程,对后面多少还是有点帮助的。
开发
然后的话就是正式搞代码了,common大体是封装了些通用的返回值类,以及全局异常处理,和一个Asserts类用来抛异常吧。之后的话也是写了一个案例出来,让大家熟悉整体的Controller,Service怎么写,统一编码风格,有个规范吧。也是用了mybaitsPlus生成了代码,写了基本的crud接口和逻辑。相应的业务逻辑自然都是写在service里面的。另外也是学到了可以用注解对参数做参数效验吧,感觉也确实是蛮方便的。
当然也会有一些复杂的逻辑了,像名人堂的排行榜用redis实现什么的。尤其评分表要去查5个表,实话说是真的恐怖,还好有mybaitsPlus的Service,直接注入其它service去处理就好了,也是用了mp的条件构造器找数据,和stream流API去对数据做处理吧。写完就感觉之前学的mybatis xml都没什么用了= =,写代码多方便啊。不过该学的还是要学吧,毕竟今后很有可能要对老项目做优化的。中间也是有各种各样的问题,像git怎么去操作,代码检查,参数效验,restful风格的接口什么的,都是有做交流和探讨的吧。项目启动的一些bug也是有解决的。
中间还考虑到一个逻辑删除和唯一索引冲突的问题,看了阿里规范还说有唯一性的必须得加,因为即使service逻辑处理的再好也会有脏数据产生。想了想还是使用了加联合唯一索引的方式,将逻辑删除字段也加进来,并且删除时填充值为自增的id的值吧这样被删除的值唯一索引就不会生效了,也就能够正常逻辑删除。并且也不会影响到查询,修改操作,因为mp是带where deleted=0的,索引还是能加速。不过肯定会有不足的地方吧,比如最左前缀原则什么的,以及不根据id删的话查询会回表。当然这些后面还是能优化的吧。感觉这部分方案并不是很好,但多少是有自己的一份思考的,姑且留下自己的脚印吧。
(其实也可以填充timestamp,但实际有update_time字段,也有一样的效果,所以还是选择更简单的填充id了,改下相应字段类型,然后加上mp注解`@TableLogic(delval = "id")`就好。其实只要能满足填充的值不会重复什么值都行)
之后的话就是做一些技术上的优化了,有三个任务,搭es的,搭日志收集elk的,以及搭主从、多数据源和redis的。实话说三个任务都想做,但也只能选一个吧。嘛,不过多少还是能交流一下方案的吧。我们讨论了下还是选了elk,一方面迟早要知道,另一方面也能多了解些东西。然而实际做的时候简单搭一下环境,写下logstash配置文件,就没有太多要做的事情了,有点尴尬= =。嘛,不过实际来讲要全面理解的话其实还是有蛮多内容的,比如切面,整合logstash的配置,logstash内部的配置(input,filter,output),es和kibana的可视化。但基本上也是简单了解下就好了吧,会用就行,大体还是交给运维做的。
当然自己也是稍微尝试了下主从和多数据源配置,以及redis与spring-cache的注解配置吧,感觉也同样学到很多了。
1.2 学到的东西
感觉还是学到蛮多东西的吧,技术上肯定是有不小进步,交流的过程中也是把各种基础什么的都磨练扎实了吧。在发现和解决各种错误的同时,也能考虑到这些问题的原因,和今后如何避免,这些都是宝贵的经验。
除了技术方面,也有其它方面的成长吧,比如总结和写文档的能力。 开发过程中也是感觉开会沟通的效率并不算很高,一方面人比较多,时间多少会有冲突。所以开会之余我也是写了一些总结性的文档,把各种技术要点截图标记出来,给组员们参考吧。或多或少都是有帮助的,对大家来说也能更清晰的知道要注意的点,对我来说也能更好的去做总结和传达,也能更加清楚的了解整个项目涵盖的技术点吧。
表达方面多少也有成长。开会的时候自然也是要讲些内容的,我的表达能力并不算很好,但比起以前多少还是有提升吧。当然还是有很多不足的,我也清楚,今后依然还是要多锻炼下的。
1.3 一些心路历程
一开始其实我是不太想当组长或学委的,一方面觉得自己表达不太行,上不得台面,一方面对自己技术也不清楚具体在哪个水平。之后因为确实没人,我还是鼓起勇气站出来了吧。当然也不是说为了当什么官啊之类的,主要还是为了帮助大家,交流技术的同时也能帮到自己吧。没想到的是我确实是有这个能力去帮助大家,也是意料之外的了。
开发的时候也有人觉得我好像什么都懂的样子,其实并不是这样,没有人一开始就懂的,都是慢慢学习加练习才上来的,可能我花在学习方面的时间相对较长一点(因为没有实际工作,也没有很多琐碎的小事耽误时间),所以看起来经验丰富吧。但实话说,如果大家花上相同的时间在学习上,其实并不会比我差,肯定还要更好。闻道有先后,术业有专攻嘛。我总归还是会有不擅长的地方,有不了解的地方,这时候就得靠会的人相互协调,一起做好了。在团队当中合作才是最重要的事情,要团队中的哪个人能单纯靠自己在规定的时间内完成整个项目,那还要团队干什么呢?
1.4 还需要提升的地方
虽然确实学到很多,但感觉还是有很多不足的。
1 表达 表达上我还是习惯想到什么讲什么,条理依然说不上清晰,一方面把想的东西讲出来确实有难度,有时候讲出来的好像跟我想的内容都有差别= =。还是要学会先抓住一个中心去说,再说明重点,这样才看起来清晰一点吧。
2 沟通与调动 其实感觉在沟通的时候多少有点吃力,一方面我不太会调动气氛,不太能很好的将大家的积极性发挥出来吧。并且不同人也有自己的工作,身心上来讲也是比较累的,我也能理解。但我觉得至少有问题的话还是要问的,本身我表达能力不是很好,如果没弄明白要做什么肯定是我说的不太好,而不是大家的问题。哪里没弄明白即使会上不问,会后也是要问的。可能我说的东西没什么营养,多少还是没能引发大家思考吧。
3 技术 其实很多人都是比我强的,只是可能他自己没意识到。我只是站在了台面上,让大家看到了而已,只是做了些总结性的,排错性的工作,都是解决些难度不大的问题。而大家解决的有架构的,有技术上实现的,那些在背后不知不觉解决很多问题的人才是真正强的。希望所有人都能相信自己吧,真正强的人并不是本身就很强,而是因为他有一颗不断变强的心。只要愿意去做,真的就能做好的。
4 其它提升 其实感觉自己成长的速度慢下来了。本来如果说我有工作,在实习的话,那其实慢一点也正常,但没有在工作,能够每天纯粹的去学习,提升自己,那肯定还是要多认真一点,因为浪费的时间都是我失去的机会成本啊。但实际上我是一直沉浸在项目中了,其它方面的提升实话说是很有限的。正常来讲我也应该去锻炼自己的求职能力了,但想到项目就忍不住只想考虑项目的问题,实在不想去解决求职的问题。想进大厂的话可能还是得尽可能认真扩充自己才对吧。但现实的问题是我大四还有部分课程,要是在其它城市求职学校课程又多少会有影响,在本地就职又没有特别合适的工作,大部分是中小厂。另外虽然相信自己能力,但实际上来说也没有实习经历,实话说真心有点难。总之姑且还是进入求职状态了吧,试着投了些简历了。 还是得靠自己去解决这些问题吧。
2 有关读书
虽说要求这个月看一本书吧,看到是看了,只不过不是技术方面的书籍。8月是看的《世界顶级思维》和《拖延心理学》,主要是学校方面举办的读书打卡活动,每天也是有在微信上打卡的,记录自己的心得。一方面呢觉得自己不能只注重技术的成长,另一方面学校推荐打卡的书籍也没有技术书籍吧。实话说我对自己技术方面的成长要求还算是蛮严格的,有空就会磨练一下,所以综合上来考虑的话还是决定暂且先看看其它能让我深入思考的书籍吧,毕竟感觉影响我前进脚步的已经不只是技术了,我更需要对其它的方面做提升。等到这次活动结束,我自然还会去选择看些自己需要去看的书籍。
读书的心得就不搬运了,截图为证吧:
3 今后
1 主线:继续求职。 实话说求职虽然不能急,但现在没实习的话感觉自己总归还是差了些什么。也不知道自己投的那些简历什么时候才能面到啊= =。现在实话说到底是实习好还是直接全职好都不确定。校招全职工作的话可能还得补充很多方面的东西了,时间上安排可能也不好;实习的话不是大厂也好像没必要,不是分布式之类的项目我姑且还是有能力去处理业务的;但大厂实习好像也没有再招了吧= =,并且可能也难进。总之还是得积极的去找吧。另外我目前对自己的开发效率方面还是比较放心的吧,毕竟做的项目其实还是不算少的了。主要还是熟悉项目和业务的速度不敢保证,如果技术栈不太合,还得多学些东西。嘛,总归还是有解决的办法的, 哪里有空位补上就好。
2 学业 学业大体其实压力不大了,主要就是还有课程,如果工作了的话时间安排就不太好。总之看情况去解决吧。毕设的话对我来说找好课题基本上就不难了,微服务分布式的项目都做了还怕这些= =。主要还是时间问题吧。
3 技术成长 技术上来讲虽说这次是做了分布式的项目,但其实还是有很多问题没有解决的,只能说有这么个型吧,比较像实际的工作场景了,但我对架构方面和技术方面的理解可能还是存在一定的问题的,像缓存具体的设计思路,多表联系与缓存的设计,分布式的事务问题,以及幂等性什么的,这些都还没有真正解决。没有到实际的业务场景下,这些也只能暂且先放着,留待后续的优化了。今后还是要多学些东西的吧。