C++自救指南-项目实战篇
本篇章推荐 本🐭 仓库中珍藏的一些项目,有个人练手项目,也有企业级开源项目。选择一两个感兴趣的,抄 学起来!
# 如何跑通一个C++开源项目
现在,我们来尝试拉一个开源项目,来看看通常的 C++ 项目该如何构建
这里我选取了一个 0 依赖项目:Workflow (opens new window)
拉项目,并进入项目文件夹,然后切换打开文件夹(切换工作路径):
git clone https://github.com/sogou/workflow.git
cd workflow/
来看一下基本结构:
这里我的 cmake 插件在打开文件夹后自动帮我构建了一个 build,并编译了.
看一下官网文档如何编译的:
会发现,官方结构中 tutorial 是单独编译的,所以我们再次将工作目录调整到 tutorial 下:
有的友友操作时可能头文件在疯狂爆红,而我的头文件索引却是正确的,爆红的原因是因为你的 clangd 没有被正确地配置,请使用 GPT 学习如何让 clangd 正确的工作,并在 clangd 抽风的时候重启它(vscode 如何 ctrl + shift + p):
现在,开始调试代码,和之前的脚手架一样,右键调试:
至此,你已成功可以编译,调试 80% 以上的 C++ 项目了,之后就是 深入学习 CMake 的逻辑,和灵活使用 CMake Tools 插件罢了。
再三提醒,如果当中出现了各种各样奇怪的问题,尝试百度,但是依旧无法解决,可以将问题抛给 GPT,看看它是如何解决的 ~
新时代码农,要善于使用新时代工具 🔧
# 项目推荐
由于前后整理时间节点不同,本小节在内容划分上存在一些缺陷,各位见谅,链接都贴上了,大家找自己感兴趣的学就好了,不要管我的胡言乱语😭
# 项目推荐: 后端篇章
- WebServer:很烂大街。。但是你至少得看一遍。。。
https://github.com/qinguoyi/TinyWebServer (opens new window)
- Muduo : 人手一个,不论是不是后端方向都可以学一学
施磊老师 (opens new window)有出过一门手写Muduo的课,有条件的可以去看看。
- 恋恋辰风-全栈聊天项目:b 站某大佬目前在更新的项目,手把手教
C++ 全栈聊天项目(1)架构概述和登录界面_哔哩哔哩_bilibili (opens new window)
- sylar 服务器: 大佬全程手敲,不过字有点小
[C++ 高级教程]从零开始开发服务器框架(sylar)_哔哩哔哩_bilibili (opens new window)
- TinyRPC:我能想到的 C++ 能够写的为数不多的有用的项目就只有 RPC 框架了,这个是一众同质化产品当中文档最丰富的。。。
GitHub - Gooddbird/tinyrpc: c++ async rpc framework. 14w+qps. (opens new window)
- workflow:和上面的玩具不同,这个可是真正的在生产环境上部署的项目,如果上面的玩具满足不了你,就来看这个吧。网上也有非常多的资料,自行搜索。
- brpc:伟大,无需多言。 国内开源产品中文档写的最牛的项目之一,含金量懂的都懂。
- braft : 基于 brpc 构建的分布式一致性算法实现,Curve (opens new window) 当中使用的一致性算法组件就是它。(不知道该把这个项目放在哪,索性就放这里了,其实这只能算是分布式项目)
# 项目推荐: 存储篇
- cmu15-445: 手搓数据库引擎,存储方向应该人均一个吧
CMU 15-445/645 :: Intro to Database Systems (Fall 2022) (opens new window)
CMU 数据库系统导论-学习资料 (opens new window)
- Leveldb : 基于磁盘的 KV 存储引擎,谷歌出品,文档丰富,也是存储仔的人均项目
【硬核课堂】LevelDB 源码分析 (opens new window)
- 代码随想录:Raft + KV 存储: 预定下一个烂大街项目榜首,但是该学还得学。。。
- 成电分布式实验室新生计划:
GitHub - CDDSCLab/training-plan: 电子科技大学分布式存储与计算实验室新生训练计划 (opens new window)
- Curve:网易数帆 云原生分布式存储系统,社区对学生友好,参与过开源之夏
- ceph: 大多数公司都在用的分布式存储平台
- Doris : 实时数仓 非常有名
- ClickHouse :OLAP 实时分析的列式数据库 好火好火
GitHub - ClickHouse/ClickHouse: ClickHouse® is a free analytics DBMS for big data (opens new window)
- oceanbase: 蚂蚁开源,分布式关系型数据库
# 项目推荐:计算篇
- 高性能计算学习路线
高性能计算学习路线 | 高性能计算学习路线 (opens new window)
- workspace : 轻量级异步执行框架, 适合新人
抄学习
https://github.com/CodingHanYa/workspace (opens new window)
- concurrencpp : C++ 并发库,可以学习如何实现各种并发编程的技巧
- CGraph : 国人编写的图计算引擎,文档友好,非常适合新人学习
- taskflow : 图计算引擎的行业标杆,并行计算的王者,支持异构计算,文档友好(如果你英语还可以的话)
- PACMAN 组的 repo,短小精悍。每一个小项目背后可能都是一篇顶刊 or 顶会,很适合用来水简历
PACMAN Group, Tsinghua University (opens new window)
- workflow : 并行计算与异步通信框架,之前有介绍过
- nndeploy: 面向教学的模型端到端部署框架
- NCNN : 高性能神经网络前向计算框架, 面向移动端
# 项目推荐: 杂项
C++ 选手最苦恼的一个问题就是没有好的项目可以 抄 学习, 一届一届都多少年了,还是那个的 WebServer,作为一个把 github 当 b 站逛的闲人,我的 star 库存了一堆看起来还不错的项目,这次一把分享出来,解决大伙的项目焦虑
(注:古早以前整理,直接复制粘贴过来的,没有区分方向,而且可能有些项目上面已经推荐过了)
- 多生产多消费的无锁队列,8k star:GitHub - cameron314/concurrentqueue: A fast multi-producer, multi-consumer lock-free concurrent queu (opens new window)
- C++20 纯头文件网络库,项目比较新,且有使用文档:GitHub - fawdlstty/libfv: libfv is C++20 header-only network library, support TCP/SSL/Http/websocket (opens new window)
- coke,协程化的 workflow,大佬背书:GitHub - kedixa/coke: Coroutine C++ Workflow based on C++ 20 (opens new window)
- kcp:用户态下的 ARQ 协议实现,游戏界内很出名,issue 中有很多网络相关的讨论,值得学习:GitHub - skywind3000/kcp: ⚡️ KCP - A Fast and Reliable ARQ Protocol (opens new window)、GitHub - frimin/learning-kcp-protocol: KCP 协议基本数据结构和算法图文介绍 (opens new window)
- evpp:高度参考 muduo,看完 muduo 后可以研究一下:GitHub - Qihoo360/evpp: A modern C++ network library for developing high performance network service (opens new window)
- cloriSearch:简易引擎内核(貌似作者弃坑了)感兴趣可以看看:GitHub - shpilu/cloriSearch: 广告检索引擎(针对在线广告设计,支持简单倒排检索、范围检索、LBS 检索,持续完善中) (opens new window)
- yesdb:一个基于 Bitcask 的 KV 存储引擎(作者貌似是我关注的一个 b 站 up?可以看看他的仓库):GitHub - SYaoJun/yesdb: bitcask storage system【WIP】 (opens new window)
- work-stealing-queue:workflow 中拆分出来的 work-steal 队列,类似 goroutine 和 bthread 的设计,很值得学习:GitHub - taskflow/work-stealing-queue: A fast work-stealing queue template in C++ (opens new window)
- wfrest:workflow 的 restfull api,作者文档写的很完善:GitHub - wfrest/wfrest: C++ Web Framework REST API (opens new window)
- cv 模型推理服务器,workflow 的生态项目,算是科研课题与后端结合的案例: GitHub - MaybeShewill-CV/mortred_model_server: High Performan Ai Model Web Server. Mainly support co (opens new window)
- Turtle:C++17 的网络库,文档比较丰富,可以学习:GitHub - YukunJ/Turtle: A C++17-based lightweight high-performance network library (opens new window)
- smallkv:一个列存的、基于 LSM 架构的存储引擎,学过 15445 的应该很容器上手:GitHub - yangyang233333/smallkv: A small Key-Value storage engine written in C++. (opens new window)
- 八股文章集合,量大管饱:GitHub - 0voice/cpp_backend_awsome_blog: 2023 年最新整理 c++ 后端开发,1000 篇优秀博文,含内存,网络,架构设计,高性能,数据结构,基础组件,中间件,分 (opens new window)
- acid:C++ 实现的分布式服务治理项目,貌似作者有出教程?!:GitHub - zavier-wong/acid: A distributed service governance framework. 分布式服务治理框架 (opens new window)
- rocket,tinyrpc 作者新作,设计值得学习:GitHub - Gooddbird/rocket: c++ rpc framework, simplified version of tinyrpc。 (opens new window)
- C++ 实现的跨平台开发框架,作者挺牛的:GitHub - lailongwei/llbc: 一个简洁、高效、跨平台、多语言支持的服务端开发框架,面向 Service 及 Component,底层 c++ 实现。 (opens new window)
- muduo 的简化版,核心逻辑和 muduo 完全一致,作者有提供文档:GitHub - guangqianpeng/tinyev: Multithreaded network library in C++17 (opens new window)
- C++ 新特性教程,C++11 已经是 10 年前了,多学点新东西方便吹 GitHub - changkun/modern-cpp-tutorial: 📚 Modern C++ Tutorial: C++11/14/17/20 On the Fly | https://ch (opens new window)
- demo 级别的 socket 编程项目,适合刚看完游双后的新人:GitHub - eminfedar/async-sockets-cpp: Simple thread-based asynchronous TCP & UDP Socket classes in C (opens new window)
- 高 star 的线程池项目,文档非常丰富,适合英语较好的同学:GitHub - bshoshany/thread-pool: BS::thread_pool: a fast, lightweight, and easy-to-use C++17 thread p (opens new window)
- 作者在知乎高强度宣传,非常现代的 C 网络库,有兴趣可以看看:GitHub - ithewei/libhv: 🔥 比 libevent/libuv/asio 更易用的网络库。A c/c++ network library for developing TCP/UDP (opens new window)
- 知名 go 项目或者 C++ 项目的注解版本索引项目,很赞:GitHub - chenyahui/AnnotatedCode: 知名开源代码库的注释版:C++、Golang 等 (opens new window)
- wfrest 作者学生时代的网络库作品,文档依旧丰富,为作者点赞:GitHub - BurgerGroup/Burger: 🍔 c++11 Server based on coroutine and reactor (opens new window)
- cnatra:一个高效易用的 c++20 http 框架:GitHub - qicosmos/cinatra: modern c++(c++20), cross-platform, header-only, easy to use http framewor (opens new window)
- C++ 协程实现的 IO 库,外国作者,做了非常多 banckmark,值得学习:GitHub - netcan/asyncio: asyncio is a c++20 library to write concurrent code using the async/await s (opens new window)
- C++ 协程封装库,文档很丰富:GitHub - jbaldwin/libcoro: C++20 coroutine library (opens new window)
- C++20 + io_uring 实现的网络库,浙大 ✌️ 的项目,可惜我能力有限我看不明白,作者本人在 b 站也有号:GitHub - Codesire-Deng/co_context: A coroutine framework aimed at high-concurrency io with reasonabl (opens new window)
- 一堆八股文章:GitHub - hengqiali/AwesomeCpp: ---AWESOME--- C++ 学习笔记和常见面试知识点,C++11 特性,包括智能指针、四种强制转换、function 和 bind、移动语 (opens new window)
- demo 级别的缓存池项目,还有对应的教程,适合新手:GitHub - hansionz/ConcurrentMemoryPool: 📚 一个三级缓存的高并发内存池 (opens new window)
- 适合新人,手把手教你写 webserver,但是作者很久没更新了。。:GitHub - yuesong-feng/30dayMakeCppServer: 30 天自制 C++ 服务器,包含教程和源代码 (opens new window)
- 经典 webserver,1.3w star 了,惊!! 我刚学的时候才 6k 多呢。。C++ 后端太恐怖了:GitHub - qinguoyi/TinyWebServer: 🔥 Linux 下 C++ 轻量级 WebServer 服务器 (opens new window)
现在的项目同质化非常严重,所以要尽量要寻找自己和其他人有核心差异点,这也是面试官重点会问到的
深入学习一至两个中小规模的项目,不用贪多,因为面试时间有限,面试官通常只会专注问一两个。