服务端开发的实习总结

两个月的实习期过得好快,不知不觉就快结束了。昨天和宁哥(我的leader兼mentor)聊了一会,再回想一下这段时间的实习经历,虽然并没有做出什么项目,但还是感觉受益良多(至少比放假天天摸鱼好多了)。感觉有必要也忍不住写一篇实习总结,来记录一下这两个月的历程。

1.时间线

以一个比较流水账的形式先来串一下时间线。

  • 2021.12.25——2021.12.26

坐飞机来到北京,到早已订好的酒店安顿下,唯一做的正事就是提前了解了一下去公司的路线、计算了一下时间,其余时间就像放假。

不过要特别提一下,平时上课都是踩点摸鱼,会做这种提前计算时间的事情,算是里程碑的事情了hhhhhh(不过最后还是变成踩点怪了

  • 2021.12.27——2022.12.31(第一周)

到公司报道,见到了学长。

第一个星期没有什么正事,我要做的事情是和一个调度器有关的,而这个调度器又是在一个蜘蛛系统下面的,所以宁哥陆续发了我两个wiki,先后让我了解一下整个蜘蛛系统的结构和调度器的结构。

看这种说明性的文档,相比于直接接触这个系统下某部分的代码,我想难度应该已经是小很多了,但是我仍然有很多看不懂的地方,即便一直搜资料,也有很多搜不到的,或者搜到也没法快速理解的东西。

接着,我就只能靠着记录关键词、概括这种方式,把这些wiki的东西里面缩成笔记了,还强行记忆了一下。不过现在看来似乎用处不大,不理解的东西强行记着,如果没有加以使用的话,忘得很快。

不久,宁哥找我开了一个小会,讲了一下当前调度器存在的问题,还有我接下来的工作,仍然是听不懂的,寄了。

可能宁哥那时候以为我会在这连续实习六个月,没有考虑到返校这件事,所以安排的计划比较长远,跟我讲的也比较多。

简而言之,这个星期看了文档,听了任务介绍,但是基本啥都没懂

好在后来宁哥后面给我指定了一个具体的任务,大致就是从数据库读数据,然后进行一些条件判断。这就好比拿到一道具体的算法题,先不管会不会,至少和自己以前做的事情有关联了。

我感觉我可能就是这样,初接触公司项目这种没有接触过的东西,就会畏难、迷茫,但是从自己熟悉的地方切入,就会感觉心里有点底,好受一些

在这个星期的末尾,宁哥还发了一下我会用到的redis数据库的地址以及我编码所在的云服务器,想让我根据数据库里面的表结构和要实现的东西联想一下,顺便熟悉一下vim,可惜一样没做好…

还有一个业务外的任务,就是回去学习设计原则

  • 2022.1.4——2022.1.7(第二周)

画了一个"类图",不是严格的那种,但是能看懂的那种,完全没有面向对象的思想,似乎就是面向过程编程,之前学的设计原则,属于是背下了概念,没有学以致用。

之后就是去写代码,要实现的东西很简单,但是我完全不了解redis命令,去简单学习了一波redis基本命令的使用、如何用C++程序连接redis数据库,最后总算把代码完成了。

代码核心逻辑很简单,而做好数据读入这里反而我花了比较多的时间。

业务之余,了解了一下C++bind和function,并且思考了一下设计原则和封装、继承、多态的关系

  • 2022.1.10——2022.1.14(第三周)

宁哥给了我一个网络接口,我可以把代码嵌入原有的一部分代码里面,当然这对于整个代码的结构以及维护都是破坏性的…不过宁哥给我的只是一个测试环境,让我先验证功能。

嗯,那就随便试一下功能。

结果,编译挂了…具体为什么我也记得不是很清楚了,但是特此去学习了一下Makefile

能正常编译链接成可执行文件了,测试一下,嗯,没问题。

但是实际开发东西,肯定不能像我这样,直接嵌代码回已有的代码里面(不符合开闭原则好吧),对数据库的操作也不是直接调用最底层的hiredis.h,我实现的代码需要放到对应的cpp里…反正新人入坑缺点当然是说不完的

首先,调用底层的hiredis,要专门连接redis、发送命令、把数据放到指定地方…代码会对redis有很多读写,这样写明显冗余了。

他们的做法是,在hiredis.h上封装了一层redis_client.h/cpp,再封装一层db_manager.h/cpp,也就是hiredis.h->redis_client->db_manager,redis_client负责简化代码,不用我们从轮子开始写,而db_manager直接提供接口给业务层,可以完成填充数据库、检测积压、获取redis某些表的数据并组织化存放…

层层封装,各司其职,虽然现在的封装缺点也不少,比如不同的业务层,其实对应的db_manager也不同,因为所需的接口也不同,这个还需要整合。

诸如此类,但是不管怎么样,都让我对公司项目开发代码有了一个全新的认识,跟我们在学校写代码完全是两个世界。

当然,自己在业务外,也去学习了socket网络编程和多进程的知识。

  • 2022.1.17——2022.1.21(第四周)

接着,就需要我按照这样流程,利用已有的redis_client,把自己所要实现的代码完成在db_manager中。

虽然听起来这个任务很简单,但是实际上对于初次接触也没那么简单(当然肯定一点不难的),加上一些其他原因,完成这件事花了这个星期百分之六七十的时间吧。

不过在了解完redis基础,基本开发过程以后,工作生活就没那么"杂"了,主要就是不需要边写边学,而是专心完成要实现的功能就行了。

  • 2022.1.25-2022.1.30(第五周,干到过年)

按照这个流程做完以后,由于我的代码(之后就称为info_center了,毕竟干的事情确实和名字一样),还需要拓展出更多功能,需要满足各个条件的组合查询,那么我就不能单单作为一个函数待在db_manager下了,就需要另写一个cpp,用一个类来实现各种查询。

至此,我的info_center一跃到业务层,使用db_manager的接口来做事情了。

噢,让我见识到了这才是开发过程的全新面目,原来还有一层…

之后我就先把之前的代码移植到新开的info_center,拓展了不少功能,比如支持组合查询、将结果以json文本输出等。

这些事情慢慢磨,一周也过去了。

  • 2022.2.7——2022.2.11(第六周,年后返工)

开始对我的info_center测试…

功能测试没问题,唔,性能测试挂了,有两方面,一个是宁哥增加了redis的数据,导致我的业务耗时过长;另一个就是我的代码会有线程安全问题。

为此特地了解了一下**线程安全、可重入函数、redis查询优化(pipeline)**这些零散知识点。

不知道是工作量少了很多,还是我对这种边学边改轻车熟路了,星期过半就完成。

后来功能测试和性能测试都过了。

不过,很遗憾的是,这些代码核心逻辑很简单,而且在线上工作的代码里面,就有一个更加完备的info_center(哇,名字都是重合的),所以我写的确实也只能算一个小玩具,小demo

但我总算更了解如何开发一个业务层代码的过程了

在业务外,我还去学习了一下多线程以及网络通信模型的知识

  • 2022.2.14——2022.2.17(第七周)

这周的任务是阅读一个prefetch业务的demo,这个还未上线,有几千行,不过有一部分代码我使用过,并且这部分代码的开发的流程我大概知道的,所以读起来也不算慢。

可惜,我太注重代码细节、cpp之间的关系,没有跳出框架,从调度器的层面去思考这些代码,换句话说,没有站在一个比业务本身更高的层面去看代码,属于本末倒置了。

宁哥提醒我以后,我重新去看了一遍,从这段代码具体干了什么,变成这段代码完成的是调度器那部分功能、对redis的读写是怎样的这种视角,总算读得更清楚了一些。

但不好的是,我现在依然没有办法把代码流程给别人捋的很清楚,宁哥说的话大概是"你现在说的流程,大概只有我能听懂"。

所以他给我的下一个要求就是,如果和把这些代码的流程,脱离代码本身,给除了他以外的人讲清楚;还有就是试着比较这部分代码的info_center,和我之前写的info_center异同所在。

当然,还有一个更有难度的要求,就是这部分代码为什么这么做,有没有更好的解决方案。

之后几天,准备run了,大概也不会有之前写info_center的事情来做了,时间线就串到这。

2.学到了什么

想不到,时间线居然占的是文章的大部分。

首先就是很多零散的知识点,Makefile、多线程、多进程、还未使用过的设计原则设计模式…也都是浅尝辄止,之后有空或许会慢慢挂上来。

再有就是提前了解了公司开发一个业务,实现一个功能的流程,当然每个公司,甚至是一个公司的不同小组、部门也不一样吧,就是现在这个过程,就是我没接触过的,甚至是不少学生也未曾接触过的。以后无论是继续在这任职,还是换一个地方码代码,熟悉流程的感受和过程应该偶读和现在不太一样了,也许会没那么畏难、没那么陌生了。

还有就是,接触到一套实现业务的代码,我该怎么玩明白呢?

——算是我自己总结的方法吧,至少比下次瞎读要好。

——第一步,就是要站在一个足够高的位置去"审视"这段代码,是先有的业务,才有的功能,从而有的代码。

——第二步,就是能做到,给一个并非这个流程的参与者,去讲清楚代码流程。类似于我们学习的时候,给不会这题的人讲清楚,自己也必然深刻理解了这道题。

——第三步,就是如果自己写有类似功能的代码,可以比较一下,看看各自的长短处在哪,有没有可以借鉴的地方。

——最后,就是能想明白为什么会有这部分代码,为什么这么写,能不能有更好的设计方案。

两个月的时间不长,我学到的大概就是以上的东西了吧。

(噢,通过写info_center,训练了一下写模拟的能力,虽然可能没什么用

3.未来发展

这个我分为两部分了,一部分是公司的,一部分是自身的。

3.1公司

不知道还会不会回来这里,但是可以暂时记录一下。这个就我自己看懂就行了。

  • 读完了prefetch的demo,需要把之前整个的调度器的代码拿下来,把prefetch的demo嵌入进去,代码量比较大,prefetch这几千行代码也不过是调度器的一部分,而且过程中肯定有不少修改。之后把新的代码放到docker运行。
  • 当前的系统并非真正的分布式,而且将任务以某种方式分配到不同机器上,并行处理。而之后需要以真正的分布式系统来实现。

3.2个人

  • 网络编程的发展是UDP->TCP->RPC框架->微服务,当前我大概就学习了一点TCP层面的知识,可以按这个途径继续去深入学习。
  • 学习完网络编程的知识,还可以补充一下打日志的内容。
  • 面经,刷题,这种必备的就不必细说了
  • 将正在做的web服务器完成,有余力可以在做一个项目,redis、STL之类的都可以。
  • MySQL和Redis了解颇少,需要深入学习的。

大概就这些了。

4.业务以外

这里属于一些题外话吧。

首先就是第一次体会了独自过年,孤独肯定是有的,不过也算一种经历吧。如果没有特殊节日,一个人的日子倒也挺无拘无束的。

最近几年第一次锻炼的假期…以往基本都天天跑步养成习惯了(这个类似的小伙伴应该知道有多难受)

至于公司方面,不知道别的地方,至少我所在的小组工作还算轻松的,加班的话是没有的,宁哥人也很好,让我学到不少东西。

最后,就是好好等着开学吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值