真心不粗!适合练手的13个C++开源项目
Linux开发架构之路 2025-01-09

1 C++ 那些事

这是一个适合初学者从入门到进阶的仓库,解决了面试者与学习者想要深入 C++及如何入坑 C++的问题。

除此之外,本仓库拓展了更加深入的源码分析,多线程并发等的知识,是一个比较全面的      C++ 学习从入门到进阶提升的仓库。


项目地址:https://github.com/Light-City/CPlusPlusThings

2 C++实现的各种算法的开源实现的集合

这个存储库是C++实现的各种算法的开源实现的集合,算法涵盖了计算机科学、数学和统计学、数据科学、机器学习、工程等领域的各种主题。

这些实现和相关文档旨在为教育者和学生提供学习资源。因此,对于同一个目标,可以找到多个实现,但使用不同的算法策略和优化。


开源地址:https://github.com/TheAlgorithms/C-Plus-Plus

3 C++ 实现的截图软件 Demo

仿 QQ 截图,C++ 实现的截图软件 Demo。

项目地址:https://github.com/wanttobeno/Screenshot

4 基于 C++ 实现的 HTTP 服务器

一款可运行的基于 C++ 实现的 HTTP 服务器,基于《TCPIP网络编程》和《Linux高性能服务器编程》实现的服务器项目。


项目地址:https://github.com/forthespada/MyPoorWebServer

5 WebFileServer文件服务器

不少同学学完C++和Linux后不知道做什么项目,所以很多同学都去做webserver,其实大家可以改进下webserver项目,比如实现一个文件服务器支持文件上传下载,后续可以再添加注册/登录/个人文件管理/文件分享等等功能,这样就可以写到简历里。


项目地址:https://www.bilibili.com/video/BV1bGkPYzExW/

6 用于 C++ 的图形用户界面库

Dear ImGui 是一个用于 C++ 的无膨胀图形用户界面库,它输出优化的顶点缓冲区,你可以在启用的 3D 应用程序中随时渲染这些缓冲区,特别适合集成到游戏引擎(用于工具)、实时 3D 应用程序、全屏应用程序、嵌入式应用程序或操作系统功能非标准控制台上的任何应用程序中。

项目地址:https://github.com/ocornut/imgui

Dear ImGui 的核心是独立的,不需要特定的构建过程,你可以将 .cpp 文件添加到现有项目中。

ImGui::Text("Hello, world %d", 123); if (ImGui::Button("Save")) MySaveFunction(); ImGui::InputText("string", buf, IM_ARRAYSIZE(buf)); ImGui::SliderFloat("float", &f, 0.0f, 1.0f);

Result:深色风格(左),浅色风格(右)/字体:Roboto-Medium,16px

调用 ImGui::ShowDemoWindow() 函数将创建一个展示各种功能和示例的演示窗口

7  仿微信聊天软件--QT客户端+Linux C++后端

这个项目类似微信一样,可以加好友,可以一对一聊天,也可以群聊,并且还支持Linux C++后端程序。


项目地址:https://www.bilibili.com/video/BV1XukbYmEY5/

8 手撸STL

STL是C++的重要组件,C++开发几乎没有不使用STL的,然而光会用是不够的,还需要明白它的实现原理。

智能指针 vector array stack queue deque map set string 这些常用的数据结构最好自己都实现一遍。

水平高的可以直接参考gcc源码(https://github.com/gcc-mirror/gcc)


刚入门的朋友不建议看源码,费时费力又不能提升开发能力,这里推荐大家看看这份C++ STL面试题,包含STL中不同容器的实现原理。


地址:https://www.bilibili.com/video/BV1Yoz2YZEgV/?vd_source=c059eb5a3b0ff5a8b664287bf79885e4

9 手撸Json

Json是特别常用的序列化数据结构(https://tech.meituan.com/2015/02/26/serialization-vs-deserialization.html)


很多人面试的时候被问到过如何实现一个Json。大家可以通过手撸一个Json来提高自己的C++水平哈。

水平高的可以直接参考这个C++Linux项目-Web多人聊天,可以通过该项目掌握MySQL+Redis+Websocket+Json等知识的运用,这个项目还可以根据自己的技术栈进行进一步扩展,形成自己独一无二的项目。

项目地址:https://www.bilibili.com/video/BV1iYtrezEkA/?vd_source=c059eb5a3b0ff5a8b664287bf79885e4

10 C++音视频项目--屏幕录制软件

想往音视频开发方向发展的同学可以看看这个项目,这个屏幕录制的项目支持区域录制、全屏录制,支持缩放录制的视频分辨率等


项目地址:https://www.bilibili.com/video/BV1CHChY3EMb/?vd_source=c059eb5a3b0ff5a8b664287bf79885e4

11 操作系统

这个在网上有专门的课程,推荐大家看看MIT6.S081课程。课程主要是操作系统的设计与实现,以及它们作为系统编程基础的应用。主要内容包括虚拟内存、文件系统、线程、上下文切换、内核、中断、系统调用、进程间通信、软件与硬件之间的协调与交互等。使用适用于RISC-V架构的多处理器操作系统xv6来说明这些主题。个人实验任务包括扩展xv6操作系统,例如支持复杂的虚拟内存特性和网络功能。


MIT6.S081课程资料:https://www.bilibili.com/video/BV1sUrWYXEJg/?vd_source=c059eb5a3b0ff5a8b664287bf79885e4

12 聊天服务器 smallchat(C实现)

项目简介:smallchat 是一个简单的基于 C 语言实现的聊天服务器和客户端项目。通过这个项目,开发者可以学习和掌握基本的网络编程技术,理解聊天应用程序的核心实现原理。smallchat 项目代码量小,结构清晰,非常适合初学者学习和实践网络编程。

**涉及技术:**C 语言、Socket 编程、多线程编程、网络协议设计与实现、终端控制、非阻塞 I/O

项目亮点:

  1. Socket 编程:通过 Socket 编程实现服务器与客户端之间的通信,展示了如何使用 C 语言进行网络编程。

  2. 多线程处理:使用多线程技术处理多个客户端连接,展示了并发编程的能力。

  3. 基本聊天功能:实现了一个简单的聊天服务器和客户端,包括消息的发送和接收。

  4. 简单命令处理:实现基本的命令处理功能,如设置昵称等,展示了如何在聊天应用中处理用户命令。

  5. 终端控制:通过设置终端为原始模式,展示了如何控制和处理终端输入。

  6. 模块化设计:代码结构清晰,模块化设计,使得项目易于理解和扩展。

源码下载链接:https://github.com/antirez/smallchat


13 RPC 框架

项目简介:实现一个远程过程调用(RPC)框架,使不同主机上的程序能够通过网络调用彼此的函数。这个项目将帮助你掌握网络通信、序列化、多线程编程和协议设计的核心概念,展示你在设计和实现高性能分布式系统方面的能力。

涉及技术:C++、网络编程、序列化/反序列化、多线程编程、协议设计、数据一致性等。

项目亮点

  • 并发处理:使用多线程技术处理多个客户端请求,展示你在并发编程方面的掌握。

  • 序列化/反序列化:实现高效的数据序列化和反序列化,确保数据在网络传输中的完整性和效率。

  • 协议设计:设计并实现高效的通信协议,确保数据在客户端和服务器之间的高效传输。

  • 数据一致性:确保远程调用的请求和响应在分布式环境下的一致性和可靠性。

  • 分布式架构设计:实现跨主机的远程过程调用,展示你对分布式系统架构的理解和应用能力。

  • 高可用性:通过实现连接池和重试机制,确保RPC服务在网络波动或节点故障时的高可用性。

  • 高性能:优化网络通信和数据处理效率,展示你在高性能系统设计方面的能力。

源码下载链接:https://github.com/Gooddbird/tinyrpc

tinyrpc 项目总览


tinyrpc RPC调用执行示意图:


14 分享一些做项目的心得

1. 在Linux环境编写项目:

企业级的项目大多部署在Linux服务器上,所以你得熟悉Linux环境。我推荐使用Ubuntu,并且需要熟练掌握编译工具链如gcc/g++、make和makefile等,这样在编译和部署项目时能游刃有余。

2. 利用已有项目:

不一定要从0到1实现一个项目,这样难度太大(大佬除外)。你可以先把别人优秀的项目下载下来,自己把代码跑起来,配置环境、跑代码、看结果,然后研究别人的代码实现了什么功能、如何实现的,是否可以优化一下,加一些自己的独特思考。这样你就有了丰富的内容可以和面试官聊。

3. 项目实战经验:

举个例子,我曾在简历上展示过一个项目,是在实现HTTP服务器的基础上加了在线大整数运算功能。当时我是从0到1实现了一个MiniMuduo作为服务器框架,并在其基础上实现了HTTP服务器,还参考了Tinyhttpd项目,加入了CGI技术,支持万位以上数字的四则运算。

4. 项目中的思考和优化

在做项目时,一定要有自己的思考。比如,做一个HTTP服务器项目,一定要使用wrk等压测工具进行性能测试,优化其QPS(每秒查询率)。面试官肯定会问很多关于项目的细节问题,比如项目难点、HTTP服务器的性能如何、QPS多少、如何优化提升QPS、性能瓶颈在哪、为什么使用CGI技术、CGI是什么、解决了什么问题等等。


声明: 本文转载自其它媒体或授权刊载,目的在于信息传递,并不代表本站赞同其观点和对其真实性负责,如有新闻稿件和图片作品的内容、版权以及其它问题的,请联系我们及时删除。(联系我们,邮箱:evan.li@aspencore.com )
0
评论
  • 相关技术文库
  • C语言
  • 编程
  • 软件开发
  • 程序
下载排行榜
更多
评测报告
更多
EE直播间
更多
广告