面试实战
为了帮实验者更好的使用 tinyCoroLab 准备实习和秋招特此增加了面试实战环节,我在秋招中参与了 30+ 场大厂面试且通过率超过 95%,绝大部分面试官都会将大部分时间花在对 tinyCoro 的项目考察,主要原因如下:
tinyCoro 使用的技术相比市面上其他流行的项目更加新颖
tinyCoro 涉及到的知识点众多,任何一个技术点都具有十足的技术深度
tinyCoro 通过 BENCHMARK 证明了其本身设计的高效,即项目已被深度量化
因此读者应当明白一个高质量的项目对于秋招面试是有多么重要,而对于 tinyCoroLab 作者用亲身经历帮大家验证了该项目质量的可靠性,读者可以放心大胆的将精力投入到 tinyCoroLab 中。
接下来我将整理自身关于 tinyCoroLab 的面试经历来帮助读者使用 tinyCoroLab 更好的备战秋招!
💡付费版文档包含更详细的面试实战内容哦!
问题一:你为何要做这个项目
🧑💼面试官:你先介绍一下你的 tinyCoro 项目吧
tinyCoro 是一个 Linux 系统环境下的以C++20 协程技术和 Linux io_uring 技术相结合的高性能异步协程库。高效且全能的 io_uring 和 C++20 无栈协程的轻量级切换相组合使得 tinyCoro 可以轻松应对 I/O 密集型负载,而 C++20 协程的特性使得用户可以以同步的方式编写异步执行的代码,大大降低了后期维护的工作量,且代码逻辑非常简单且清晰,除此外tinyCoro 还提供了协程安全组件,以协程 suspend 代替线程阻塞便于用户构建协程安全且高效的代码。
🧑💼面试官:所以是异步编程库对吗?现有的异步库不是很多吗?
现有的异步库存在诸多问题,比如这些库底层使用的 IO 模型例如多路复用 IO epoll 只支持网络 IO,aio 使用受限大,且容易出现伪异步的情况,而且大多数异步库使用回调的写法,这会使逻辑支离破碎,加大项目维护难度。
而 tinyCoro 就是为了解决这些问题而生,其核心使用了强大的异步 IO 技术 liburing 和 C++20 协程,得益于 liburing,tinyCoro 可以支持 Linux 上绝大多数的 IO 并且可以高效完成 IO 事件,再搭配上 C++20 协程,用户可以使用 tinyCoro 以同步的方式编写异步代码,所有的异步操作都是由库底层支持的,拒绝丑陋的回调函数写法。
综上,tinyCoro 更像是一个六边形战士,简洁优雅且高效。
🧑💼面试官:既然你把 liburing 和 C++20 协程描述的这么厉害,那为何工业界没广泛应用呢?
主要原因有两个:
liburing 从 2018 年由 Linux 官方人员发起,但直到近几年才达到一个稳定可用的程度,因此受众有限。
C++20 协程存在很多争议,即是否能提高程序性能,协程单独使用是没有什么用的(请实验者想想为什么),甚至会因为创建协程资源对项目引入额外的运行开销,因此必须找到另外一门技术,让协程真正发挥作用。
针对第二个原因,我想我为 C++20 协程技术找到了搭档,在经过调研发现 liburing 简直为协程量身打造,而在开发完 tinyCoro 后对其进行压测其结果确实达到了我的预期。
另外该技术没在工业界广泛应用的一个重要原因便是其并不能带来巨大的性能提升,可能只有百分点级别,这并不值得为已有项目更换底层技术,但是我还是看好 C++ 协程技术和 liburing 未来的发展。
Last updated