致读者
在开启正式实验之前,我希望读者可以耐心地看完作者本人留给各位读者的一些话。
在2024年10月份,那时候我刚结束完秋招,结果很顺利,拿到了多家大厂研发几乎接近顶薪的ssp offer,我在知乎写过一篇文章讲述了秋招经验总结,然后收到了很多读者的私信,普遍都是关于如何准备秋招、实习不好找,项目不知道怎么做这些问题,这些我都感同身受,对于那些实习经历丰富的同学可能秋招不会有太大问题,但还有很多同学因为各种外在因素即使有能力去实习却也无法去(比如导师禁止),实际上我就是在刚开启第一段实习没多久秋招就正式开始了,从某种意义上讲在找工作时我的实习经历相当于没有,但我在学校期间做了很多工程赛事并拿到了排名靠前的奖项,然后自身又完成了很多质量都不错的项目,所以秋招依然十分顺利,所以我觉得对于找工作来讲真正重要的是一个高质量的项目,实习不也是为了产生好的项目吗?
所以,我产生了一个想法,我想要做一个免费的、技术新颖的、有深度且可被量化的项目来帮助各位同学丰富自己的简历并助力秋招,且该项目一定要包含丰富且有深度的知识,这样在面试时既不会让面试官觉得这是一个水项目,又能在面试官深度挖掘项目时侃侃而谈,实际上我经历的几十场秋招几乎都是针对某一个项目问挖,但前提是你的项目需要让面试官觉得有深度,如果你能准确无误的回答出各种问题并加上自己的理解,那么面试几乎是必拿下。
那么问题来了,现在烂大街又或是质量残次不齐的免费或付费项目那么多,我又该怎么为我的项目选题呢?这时我想起来了在秋招时被问到但答得不好的知识点:协程。因为对C++编程较为熟悉,查阅资料后发现C++在20标准中正式支持了协程,而又在进一步的学习过程中我了解到了linux在2020年后逐渐发展完善的一项全新的异步IO技术:io_uring。更让人兴奋的来了,这两项技术就如同中国传统建筑中榫卯结构的两个部件:榫头与卯眼一般完美契合,随后在一个月的时间内我用空闲时间完成了第一版tinyCoro的研发。
但是第一版存在诸多问题,比如代码风格随意,功能过于简陋等缺陷,而我希望为读者呈现一个高质量的项目,于是第一版直接被推倒重来,我又花费了大量时间对项目进行了重构优化,并且在重构的过程中不断添加新的功能,为了使代码结构及项目组织更加清晰,我参照了github高star的C++项目的做法,就这样一遍遍的完善tinyCoro。
但是读者该怎么学习呢?如果只是写个文档讲讲tinyCoro的实现应该没什么人会看吧,这时我想到了cmu15445这门口碑极高的数据库课程,看来大家都喜欢这种通过自己完成代码然后让测试来检验结果的学习方式,因此我又花费了大量精力开发了一个额外的实验课程tinyCoroLab,仿照cmu15445的形式设置多组实验,先是下发实验书,然后实验者完成后利用我精心构造的针对功能、内存以及性能的测试,全面的衡量实验者的实现结果,这样实验者在实验过程中不仅要完成任务,还要高质量的完成任务。
那么实验者具体能从tinyCoroLab学到什么呢?太多了,光是C++协程和liburing以及二者之间如何搭配读者就可以和面试官聊上半天了,然后是如何利用eventfd构建轻量高效的的事件通知机制,如何调度协程任务执行,如何构建协程同步组件来优雅且高效的保证协程并发安全等等,知识点实在太多了,如果你对使用cmake构建C++项目不熟悉你还可以学习tinyCoro的项目组织方式以及如何将各类测试集成到项目开发中,总之,用心的完成tinyCoroLab你一定有所收获。
最后就是文档部分,我可以保证tinyCoroLab中的实验文档都是我一个字一个字的敲上去的,插图也全是我个人绘制,总之为了更好的制作这门课程我投入了远超预期的时间和精力。
不过这里要和读者说一声抱歉,因为tinyCoroLab的预备知识部分和tinyCoro为各个实验实现的代码解析部分设置了知识星球付费,自己投入的精力实在是太多了,但我核心绝不是为了收费,而是收费知识部分可替代性很强不影响实验进行。
预备知识主要包含C++协程和liburing的讲解,因为知识点过于复杂,所以我写了多篇文档基于自己的理解来解释这些概念,如果读者不想付费我也会提供开源的学习网址来供大家学习。
而对于tinyCoro为各个实验实现的代码解析部分,读者不想付费可以直接看tinyCoro的源代码就行,只是付费版解析部分我会对一些知识点进行重点讲解。
总之,tinyCoroLab这门课程刚完成制作不久,tinyCoro也有很多设计缺陷和bug,我也不敢称之为多么高质量的项目,但我真的尽我所能来让tinyCoroLab更加完善,让读者在实验的过程中真正有所收获,也希望读者能和我一起让tinyCoroLab变得更好。
最后,借用知乎的一个问题:你是如何发现自己的代码能力有所提升?cmu15445为大家提供了一个答案,那就是挑战高难度项目并通过一遍遍debug来查找自身的问题并改正。而我本人想通过tinyCoroLab再次诠释这个答案。
高难度的任务和严格的测试或许会让你挫败感强烈,但只有在一次次的失败后对问题重新审视并战胜它,我们才能变得更强!
祝各位小伙伴们的tinyCoroLab之旅一切顺利🎉🎉🎉!
Last updated