这次再带大家做一个 CPP的项目,实现 协程库,代码不多,算是小而美的轮子项目。
项目代码地址:https://github.com/youngyangyang04/coroutine-lib
为什么要做协程库?
1、不“烂大街”,主打一个差异化
其实webserver有一个好处,就是 相对容易上手,且可以继承很多东西,也就是扩展性很好。
webserver可以串联很大部分的基础知识,包括 C/C++,计算机⽹络,操作系统基础知识。
还有Linux环境下的网络编程、系统编程,数据库等知识,且有很大的扩展空间,可以扩展更多功能模块,cpp选手用webserver作为巩固基础知识的入门项目是非常合适的。
但是这个项目确实过于“烂大街”,如果不能做出新意,只是简单的照搬,或是简单做个功能扩展,拿webserver作为简历的主打项目竞争力有限的。
2、协程确实有用
面试中,面试官经常会问这样的问题,“你知道线程和进程区别吗?”然后会紧接着追问“你了解协程吗?
协程和进程、线程又有什么区别?
”我们通过基础知识的学习和如WebServer此类项目,已经对进程和线程有了比较深的理解,但对协程相关知识却知之甚少。
协程作为一种强大的并发编程技术,可以在需要处理大量I/O操作或者并发任务的情况下提高程序的性能和可维护性。
在许多场景应用广泛,如果我们能做一个协程库的项目,不但可以让简历更加出彩,对以后的工作也大有帮助。
3、协程库只是一个轮子,可以方便的应用在其他项目中,增加其他项目的“新意”
自己手动完成一个协程库,还可以直接将我们自己编写的协程库用在其他项目里。
就比如“烂大街”的WebServer,引入协程技术,不但可以提高并发和资源利用率,还大大简化了异步编程的复杂性,使代码更易于理解和维护,这样这个“烂大街”的项目也就有了新意。
4、增加知识的深度和广度,提高面试通过率
深入理解了协程技术后,即使面试官不主动问协程技术,就算问进程与线程,我们也可以主动提及协程,与线程和进程对比,引导面试官问协程相关的问题,主动展示自己知识的深度和广度,这会大大提高我们面试的通过率。
本项目文档
这次的项目文档依然非常齐全,从 前置知识 到 理论基础,从 动手实现 到 项目拓展 再到最后 简历如何写,面试会问的问题,都给大家安排了。
文档目录如下:
前序 为什么要做协程库? 所需要的基础知识 编程语言 操作系统&Linux 计算机网络 参考书籍&开源项目&博客 动手前先了解一下协程 什么是协程? 对称协程与非对称协程 有栈协程与无栈协程 独立栈与共享栈 协程的优缺点 协程基础知识 C++有哪些协程库? 开始动手 协程类的实现 协程调度 协程+IO 定时器 hook 写好了就完了吗? 项目扩展 协程+ 性能测试 如何应对面试? 简历怎么写? 面试会问哪些问题呢?
大家看完这份文档,直接就可以按照文档里的简历写法,写到自己的简历里。
面试官最喜欢问的项目难点,项目收获,都给大家列好了:
面试常见问题也给大家列出来,如果自己没时间理解,直接“背诵”
如果你认真做完项目,本项目文档给你一个可以自己拓展的方向:
做完了项目,是不是也得性能测试一下:
项目文档其他部分截图:
这份项目文档 在元旦前 就制作完了,并分享到知识星球里:
文档下载方式:
本PDF文档仅为星球内部专享,大家可以加入知识星球里获取PDF。PDF在星球置顶一:(里面也有GO项目精讲 , 前端项目精讲)
如果确实想白嫖文档,知识星球支持三天内全额退款,可以进去领完PDF再退款(大实话了),退款方式在知识星球APP右上角。(全程无套路)
扫码加入代码随想录知识星球,方向比努力更重要,一群人可以走的更远!
加入知识星球后,记得加如下微信,拉你到星球交流群: