我的 2021 下半年 - 个人的一些感想与总结

我的2021下半年 - 个人的一些感悟与总结

开学 | 9月

9月份过的很快,在给之前桑蚕项目收尾的过程中,9月就这么过去了。

同时也迈入了研二,没了课,也成为了项目主力(虽然上半年就已经成为主力打工人了)。

总之就是忙也没忙到什么,闲也没闲下来。

一堆杂七杂八事情 | 10月

这个月开始,我一直在之前桑蚕计数上找方法。

尤其是老师找了一篇关于密集人群识别的论文,大概读了一个星期的论文,有了一定的头绪,尝试去做了做。

但是,唉,老师那边总是能整出一些事情,本来我用了小样本在尝试着去把这个方法迁移到蚕虫数量的识别上面。结果某一周突然接了一个仿真的项目,是关于流程仿真的。。。

实在是过于离谱,用了一个叫flexsim仿真的软件,简单弄了个demo,没想到甲方比我们还不懂,还认为这个简单的demo很专业。。。哪怕写一句代码,我也不会这么排斥这个项目。

结果那段时间很难受,很压抑,基本上好多事情都分给我们组做,都是些杂七杂八的事情,动不动就写文档。不过老师似乎看出来我状态不太好,压力有点大,最后还是没让我去做这个仿真的项目。

就这样10月就过完了。总结下来,10月就是一堆杂七杂八的事情,搞得我没有时间,静下心来沉淀。

历时1年的编译器 | 11月

11月开始,我逐渐闲了下来。

不过之前一堆烦心事,搞得自己很毛躁,进入了一种啥都不想干的状态。唉,最讨厌的就是这种状态,又没有兴趣去做些有意思的东西,又没那么想玩游戏。

不过期间我还是在看编译原理的课。从去年开始,我就跟着一本《Crafting Interpreters》的书写编译器,算是给我开了个头。后来的一年多时间里,我一直在看编译原理的书,包括一些欠缺的知识也都在一步步得去学习。

时隔1年之后,我的lox编译器算是完成的差不多了(ps:之前的lox是Java语言写的,效率不太行,而且其实不算是编译器,而是解释器。后来完成的是用C语言写的,其设计很像Java语言,现将代码编译为一定规则的中间而进制文件,然后送入到解释器中执行)

不过话说回来,JVM其实也就是解释器,Java代码编译为Class文件是为了跨平台设计的。

所以就当这个设计是为了以后跨平台(

其中对于原本的设计,我对其控制流程进行了增强,除了while、for以外,还增加了switch、continue和break关键字。

并且以前我就见过有些网站可以实时运行代码,那为什么我的lox不能呢?

然后我就用vue + element简单搭了个界面,同时给里面添加了几个模板代码供大家尝试,其中包括:

  1. 经典典中典之 “Hello World”

  2. 数字使用 + 相加,字符串使用 + 进行拼接,以及数字与字符串使用 + 拼接

  3. 控制流语句

  4. 另一典中典之无解典:斐波那契数列(不要在意无优化的递归嘛,优化了运行效率上去了,我下面写的计算运行时间的逻辑一直得到0就很尴尬唉

  5. image-20211213212558456

    (另一典中典了属于是

这个网站,xdm真的不准备点进来看吗

后续可能会尝试写一下做这个lox编译器的历程。

新项目来了 | 12月

本来上个月的月底,老师给我们布置了点任务,让我们把以前一个老项目拆分为微服务,为此我们还开会讨论了一下。

然后我就慢慢布置组里的同学们开始思考、写代码了。

我自己也在拆分的基础上,加了自己的想法。

我自己思考的这部分,是做文件存储系统,其基底是fastdfs服务器,在此之上做增强,包括了给文件分组,通过文件分组来进行打包下载,以及文件服务器的状态检测。

这个状态检测和打包下载是我重点做的一部分。

先来说说自己的设计吧

打包下载

打包下载部分就是先将文件通过fastdfs client将文件的字节流下载下来。在此处我做了策略,对于文件总大小小于200M的,我获取了字节流后,直接将其放置在memory中,然后通过工具包将其送入到Tar以及Gzip输出流中。(输出流的概念我就不多说了,可以理解为一种管道,和文件系统建立连接,将字节流通过该管道送到指定的文件中)

我这里使用Tar以及Gzip,就是为了将多个文件最终以tar.gz格式打包。

tar的作用是将多个文件打包在一起,gz(即Gzip)是对tar打包后的文件进行压缩。

在做之前,我还有点不太懂,为什么会有这么奇怪的后缀,用了两个后缀,叫tar.gz。

后来我查阅了资料了解到,因为7z于zip压缩格式都无法保留unix风格的文件权限。而tar格式可以保留,并且其只做了打包,也就是拼在一起,而使用gzip则是因为几乎所有Linux都支持而已。点击查看原回答

对于大于400M的,则使用线程池将获取的字节流直接先保存到文件系统中,减轻系统内存压力,然后再通过输入流读取,节省部分内存。

我这种做法其实也只是我自己拍脑袋想出来,并无实际验证效果如何,在快完工准备去实验这部分的时候老师那边就来活了。。。

服务器状态检测

这一部分借助了开源项目oshi,获取系统当前的状态信息,然后通过netty作为两个心跳链接的基础框架。

image-20211219192710917

client方通过心跳检测,每5s向server端发送当前系统状态数据。

而server端如果10s没有收到连接另一端client发送来的信息,就会发送检测信息,连续3次发送并且没有收到回应,则会断开连接。

只可惜服务器端的做完了,还差前端一点的时候,来活了,导致这个的前端展示没有做出来,还有上面打包压缩策略临界值也没有做测试。

再说回新项目

这个新项目还是做那种老一套的贸易系统,只不过需求文档太。。。简约(?)

属实是搞不明白各个数据结构间的关系,一个东西能有好几种叫法,还只给3周时间做,我真的无语了,属于是年底上分了。

后来了解到,原来是外包中的外包,唉。。。

客户要求年前,甲方接到后克扣一周,到我们这就得月底做完,放假前上线,又催时间,又画原型图,又分析需求,简直离谱。

主要是真的感觉做不完啊。

牢骚发完了,该给做完还得全力去做。

总结

今年自己折腾了一些东西,也学了一点稍微深入的东西,但还是感觉自己今年的进步没有去年大。虽然比起去年能力也是有肉眼上的增长,但那都是去年努力铺垫出来的。

下半年这个拆分微服务本来是个挺不错的挑战,逼着我去思考,去看软件设计的思想,可惜。。(还是短平快来钱快啊)

尤其是做这个存储系统中心,因为自己之前对于计算机网络以及netty的知识储备,做的速度还是很快的,也能感觉到计算机基础课程的重要性。

明年(或者说这个学期)的寒假很长,有50天,得要好好抓紧时间,开始准备实习的事情了,八股得开始看看,结合自己之前的学习与实践,给自己增添一些竞争力。

然后自己也有个小计划,那就是准备尝试跟着一个外国的教程,自己搭建8-bit CPU,这个也算是整点活以及学习吧。

来年继续加油,明年去个好的大厂!