我,来自广东某双非24届的一个非科班本科生,在2021年,开启了我的后端之路...

2021即将过去,依稀记得去年的现在,我还在写着winform,此时此刻,我也算是个有半年经验的Golang后端了,心血来潮,写篇博客,给自己的2021划上一个句号。

前传——我是谁,我要干什么

年初,我还在写着winform

高中那会,我学的是C#,winform还算比较熟悉,刚开学的时候,也是闲的,为了解决我爸公司的票据管理问题,我揽下了个活,用winform写个系统,并且在寒假前写完了。

现在回看,这个系统不足的地方有很多,代码耦合度太高,没有做MVC分层,以至于后来出现了几个Bug都比较难处理,但是,这个项目算是我第一次接触大型项目(姑且算他大型项目吧)了。

当时,我还会用C#写一些小玩意,比如爬虫:

大约是寒假开始吧,我的C#之路就算是走到头了

寒假,初识Java,浅尝算法

初识Java

时间来到了寒假,我决定走Java后端这条路,开始了我的Java学习。

一开始,JavaSE阶段的时候,我感觉,Java就这??跟C#也没有差多少嘛,事实就是,Java确实跟C#没有差多少,所以JavaSE我很快就过完了。

Deepcode的学习任务之66!

可能是我以前有点基础,Deepcode的寒假学习任务对我来说还算简单,但是,我印象非常深刻的是第二天的一道题,计算66!,乍一看,没有问题,直接循环解决,没想到师兄留了一手,这玩意是个大数相乘,所以,我人生第一次接触这么复杂的算法,当年的实现,现在看来写得相当不优雅,甚至还有些Bug,但是当时的我相当有成就感。

浅尝算法

我这个人吧,就是不适合算法,真的不适合。

在寒假的时候,简单了解了一下CNN,还有Pytorch,嗯,没看懂,放弃了。

上学期初,大挑,转专业,考核

大挑

承蒙师兄的厚爱,在我没有正式通过考核的时候,把我带进了他们的大挑项目组。

在这个大挑项目里,我是最摸鱼的,我只贡献了三分软著,写了一小段申报书,帮师兄跑了一些测试,却收获的是一份大挑省特的奖状,惭愧惭愧。

转专业

初入大学的我,被调剂到了工商管理类专业,开始迷茫,不知所措,没有了方向。所幸,在Deepcode一轮面试的时候,师兄提了下,让我转专业到信管,转专业的种子就被埋下了。

四月份的时候,反复研究政策,因为我的学习很差,所以我方式附了二十多页的证明材料,以证明我真的有实力(交材料的时候怪不好意思的)。终于,千等万等,终于等来了转专业的面试,不得不说,这绝对比高考查分还紧张。

既然给我面试,那就是有手就行了,凭借我写过的票据管理系统和三份软著,以及还热乎的Java,我以绩点倒一,面试第一的成绩转入了信管,我的后端之路,有了专业相关的理直气壮。

考核

因为忙着大挑和转专业的事情,考核这件事我并没有太过于上心,甚至大部分时间都在画前端页面,当时的技术栈只到了JavaWeb,项目完成度也不高,毕竟只写了半天。不过还好,通过了,我正式成为了Deepcode的一员。

进工作室了!!!

我跟很多人都说过,我上大学做得最正确的决定,就是那天上厕所lashi的时候,看到了deepcode的推文,并填下了我的报名表,可以说,没有deepcode,就没有现在的我。

数据结构和算法

学习数据结构,是进入deepcode之后师兄要我们做的第一件事,什么栈、链表、树啥的,都是那个时候学的,还有各种排序算法,这些当年都用Java实现了一遍,现在估计忘得差不多了,改天再用golang实现一次(挖坑)。

当时写的数据结构↓

那次大佬的分享会

当时的分享会,让我感触很深,当时有在抖音、字节、腾讯、yy的大佬师兄给我们做分享以及一些建议,我也问了一些问题,比如关于golang相关的东西。那时,我第一次深入了解了互联网行业,第一次觉得自己这么有前途。

当时的大佬分享会↓

SSM

可能要让我的一些师弟师妹失望了,我的ssm是进了工作室之后才学的,当然,我对他们的要求是大一寒假结束之后尽量学到ssm(我自己都没搞定)。

学习ssm的过程,只有些许成就感,远没有以前玩winform来得快乐,整个学习过程甚至有点痛苦,尤其是mybatis,我看的那个课程还有分析源码的视频,直接让我看得一脸懵逼。尽管如此,我还是跟着视频写了一个ssm整合的项目,也算是我的第一个web项目了吧(考核项目不算)。

ssm项目写完之后,这个学期也接近尾声了。

暑假

这个暑假我只干了两件事:学408和转Golang,哦对,还有SpringBoot。暑假结束后,我跟Java半年的相爱相杀就结束了。

我与Golang的故事

众所周知,我从七月中旬开始,就正式放弃Java后端路线,转向Golang了(希望以后别打脸)。

初识Golang,应该还是在高中那会,有听说过Google的这个语言,后来也了解到,大厂开始逐步向Golang转移,今年7月份,我对Golang也还只是听说过的阶段。

当年跟大佬吹牛逼的时候,也提起过Golang,也许这就是冥冥中注定吧↓

当然,开始思考是不是要转Goalng,还是从那天晚上的分享会开始的:

我真正决定转Golang,还是在七月底的时候,我学完了SpringBoot,发现还是对Java提不起兴趣,因为我原本我的爱好就是写代码,Java给我带来的并不是快乐。深思熟虑之后,想着趁着还年轻,有时间,先尝试一下Golang,也就是那时候,我选择了转Golang后端开发。

很多时候,我觉得我把路子走窄了,因为就目前情况来说,国内后端的大环境依旧是Java,Golang只有大厂在用,也就是说,如果进不了大厂,我可能就真的找不到工作。当然,我不后悔。

就这样,我的Golang后端之路,开始了...

正传——我是正儿八经的后端

下半年这段时间,我的编码能力和业务能力突飞猛进,我从一个写两行查一次Google的初学者成长为到、业务代码非常熟练的CRUDer。

这段时间里,我经历了两个大项目,代码量加起来有1w7行左右,还挺有成就感的。

工作室招新系统

我对这个系统的评价是,业务复杂,技术简单,这是我的第一个从设计到编码完全独立完成前后端分离项目,一切都是第一次。

完结撒花↓

一个小小的想法

当时的我,真的是洗澡有感而发,要不要写一个招新系统,后来,因为我的这个想法,我们开发组前前后后忙了两个多月。

哦对,那天是七夕

制定文档

我们确定好需求后,就要开始制定需求文档了,这是我第一次了解接口设计规范,第一次听说 Restful,一切都是那么不熟练,因为不熟悉规范,接口天天变,每次都要跟前端扯皮大半天,从Markdown,到postman,再到Apipost,文档工具变了好几次,接口请求方式一会 POST一会 PUT,变来变去,终于,我们把文档定了下来。

新建文件夹

接口文档写好后,就要开始写后端了。因为没有经验,也没有参考,我在Github上面找了很多web项目参考他的项目结构,最终,我选择了一个Java味最浓的作为参考。

项目最初的样子↓

项目上线

上线的前一晚,我们忙到几乎通宵,本以为,只是分以下测试环境,给系统做最后一次测试,没想到的是,越是上线前,越多Bug,记得那天,我们改Bug和测试几乎通宵,我应该是四点多钟睡的觉。

好在,我们在10月24号00:00准时上线(该死的仪式感)

一些玄学的Bug

  • 前端没清缓存,测试环境和生产环境用了用一个token,导致两边id不一致,误删了一个生产环境的用户,还好当时在是在测试,但是这个Bug没办法复现,找了好久。
  • 数据库编码问题,导致存不了Emoji,有个用户头像有emoji,死活无法注册,就他有问题,后来通过日志发现是Emoji的问题,也因为难以复现,定位了很久

"P0事故"

事情是这样子的,我更新生产环境的代码的时候,测试环境用得多,手滑了,跑错脚本,把更新脚本 update.sh跑成了重新部署脚本 rebuild.sh,而这个重新部署的脚本,会删除日志和用户上传的文件,坏就坏在这个删除文件上面,数据库我做了备份,但是文件我没有任何备份,也就是说,所有用户上传的文件(简历),都被我删掉了,并且无法恢复。

这件事情,我还上了大佬的博客(好像并不值得骄傲):

事后复盘:

  1. 任何有删除操作的脚本都不应该出现在生产环境中
  2. 关键业务数据必须要做好多重备份
  3. 在跑任何脚本的时候都应该反复确认而不应该无脑回车
  4. 没有及时跑路(bushi)

一些展示

后台部分功能:

小程序端:

总结一下

这个项目,是我今年收获最大的项目,让我真正了解了前后端分离开发,了解了项目架构的设计,数据库设计,项目上线的流程,一些重大事故的预防等等,也让我的Golang编码能力有了大幅的提升,毕竟,都写了一万多行代码了,也该熟练了。

字节后端训练营(bushi)

这个项目,总结起来就是,各种新的尝试,项目不大,花里胡哨。

其实是前端训练营

这是字节跟我们学校的一个合作项目,前端训练营,我顺便参加了,想去了解以下前端,项目负责的部分却是后端,就是这么神奇,不过我还是学会了前端,顺便跟字节的工程师深入地探讨了下Golang的前景(他说我这个问题格局有点大),还是值得的。

一切为了性能

这个项目,如果只是实现功能的话,需求很简单,但是我不想这么简单,搞得各种花里胡哨(甚至想上微服务),主要就是给我学的新技术练手用的。

Redis和MongoDB

在此之前,Redis我只是有学习和了解过,并没有真正用过,所以这次我决定上Redis,练练手,顺便把高性能作为我们项目的亮点。

至于MongoDB,以前只是听过,这次决定用是因为有这么个需求,需要记录用户的使用记录生成年度报告,MySQL并不适合这种频繁写入的使用场景,因此我决定上MongoDB,顺便又学习了一种数据库,还是不错的。

答辩当天

距离答辩还有三分钟,我发现了一个Bug,让前端紧急修复,而我临时决定加一页PPT,刚好在答辩连麦前一秒两人统统搞定,算是个小插曲

答辩的时候,由我介绍项目,我们是第一组,啥也不懂,三分钟介绍完了项目,后来发现,其他组介绍项目用了十几分钟,亏了亏了。

项目地址

这个项目我觉得我们写得还可以的,大家有兴趣的话可以去看看:

演示地址:https://dc-news.kakkk.net/

仓库:https://gitee.com/byte-and-deepcode

API文档: https://docs.apipost.cn/preview/473e18a1df2f3349/7bdcdf73c6173536

谈谈后半年的收获吧

  • 学会了Golang、Gin、Gorm、Zap、gRPC、Redis、MongoDB、Vue3、Typescript、Resuful等等
  • 项目能力和格局有了进一步的提高
  • leetcode刷了点题(远远不够)
  • 写了两个项目
  • 好像没什么了

外传——杂七杂八的东西

第一次熬夜

从那以后一发不可收拾,一两点回宿舍算是日常了

为了榜一

我们有个Leetcode榜单:

为了榜一不讲伍德:

Gitee的菜地

下半年还挺绿,都是代码提交

Leetcode

明年一定好好刷题

image-20211231173551710

字节还去不去

这个表情包,出自我们前端之口,现在已经是个梗了

我在Deepcode的工位

有亿点点乱

展望一下2022

  • 刷题!刷题,还是tmd刷题!
  • 寒假写一个微服务的项目
  • 字节后端训练营(这个是真的后端训练营)好好做,争取一下?
  • 争取春招拿实习Offer,冲冲冲!!
最后修改:2021 年 12 月 31 日
如果觉得我的文章对你有用,请随意赞赏