从易到难,推荐9个适合练手的C++项目

news2024/11/28 14:45:21

老有一些同学和我说学习了 C++ 以后,想要做些项目锻炼自己,让我从「简单到难」都推荐一些。

那有啥说的,必须推荐!毕竟 C++ 的优质项目我见过太多了!

下面我就按照「从易到难」的梯度,依次来推荐,总共 9 个。

一,简单难度

简单难度的 C++ 项目在适合 C++ 初学者的前提下,要有实际的应用场景,具体表现在:

  1. 逐步增长的难度

  2. 可以适当复用和模块化

  3. 清晰的文档和示例代码

基于这些特点,推荐以下 3 个项目。

1、TinyWebServer(14.5k+ star)

对于计算机的学生来说,网络编程的技能是必不可少的,本项目是 Linux 下 C++ 轻量级 Web 服务器,助力初学者快速实践网络编程,搭建属于自己的服务器!

传送门:https://github.com/qinguoyi/TinyWebServer

2、sudoku(840+ star)

用 C++ 实现的命令行数独游戏,命令行操作易上手,600多行代码,对于初学者来说也是毫无压力。

可惜的是这个项目的 star 有点少,还不到 1000,大家可以多关注一下,可以通过pull request的方式来添加功能或修复缺陷。

传送门:https://github.com/mayerui/sudoku

3、calculator(28.7k+ star)

大家的 Windows 系统上应该都有这个计算器,微软把它们系统预装的计算器工具开源了!

计算器提供标准、科学、程序员计算器的功能,以及各种度量单位和货币之间的转换功能。

它实现语言为 C++ 代码,大家没想到吧,这个计算器的实现并不复杂,但是大家可以从中学习下微软工程师是如何写代码的。

传送门:https://github.com/microsoft/calculator

另外,这里分享一套视频教程,7个实战小项目,希望可以给你一些帮助。

linux c/c++后端服务器开发实战项目,c/c++程序员提升编程能力必不可少的实战教程,部分项目提供源码,可写进简历!!!icon-default.png?t=N7T8https://www.bilibili.com/video/BV1vx4y1D7Hs/

免费学习地址:Linux C/C++开发(后端/音视频/游戏/嵌入式/高性能网络/存储/基础架构/安全)

需要C/C++ Linux服务器架构师学习资料加qun579733396获取(资料包括C/C++,Linux,golang技术,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK,ffmpeg等),免费分享

二,中等难度

中等难度这里我主要推荐的是适合个人练手的中等规模的 C++ 项目。

这样的项目具有一定的复杂性和功能性,能够在设计、实现和调试的过程中锻炼自己的 C++ 编程能力。

基于这些特点,推荐以下 3 个项目。

1、30dayMakeCppServer(4.6k+ star)

一切后台开发的基础,都是面向 Linux 的 C/C++ 服务器开发。

本项目 30 天自制 C++ 服务器,包含图文教程和源码,教你在 30 天内入门 Linux 服务器开发,讲解了 Socket、epoll、线程池、CMake 等知识点。

学习一门技术、一门编程语言固然重要,同样你也要了解底层的基础原理。比如一个 HTTP 请求的过程,为什么可实现高并发、如何控制 TCP 链接等等。

传送门:https://github.com/yuesong-feng/30dayMakeCppServer

2、How-to-Make-a-Computer-Operating-System(20.9k+ star)

如何用 C++ 制作一个计算机操作系统,这个项目就告诉你。

与其说这是一个项目,倒不如说是一本教大家如何从头开始用 C/C++ 编写计算机操作系统的在线书籍,如果能搞下来,对你的帮助会很大。

传送门:https://github.com/SamyPesse/How-to-Make-a-Computer-Operating-System

3、btop(15.6k+ star)

如果不借助别的工具,我们如何来知道自己电脑的处理器、内存、磁盘这些硬件的使用情况,如何知道网络和进程的统计信息?

btop 这个项目就是做这个的,通过这个项目学会如何去做一个界面炫酷的命令行资源监视器。

传送门:GitHub - aristocratos/btop: A monitor of resources

三,困难难度

困难难度的这些当然就是凭个人所不能及的,但用来学习却是极好的。

这里主要给大家推荐 3 个国内外大厂开源的优质 C++ 项目,保证高质量!

1、async_simple (1.4k+ star)

async_simple 是阿里开源的轻量级 C++ 异步框架。

该项目提供了基于 C++20 无栈协程(Lazy)、有栈协程(Uthread) 以及 Future/Promise 等异步组件,能够轻松完成 C++ 异步的开发。

目前这个项目广泛应用于阿里的图计算引擎、时序数据库、搜索引擎等系统。

#include <async_simple/coro/ConditionVariable.h>

SpinLock mtx;
ConditionVariable<SpinLock> cond;
int value = 0;

Lazy<> producer() {
  co_await mtx.coLock();
  value++;
  cond.notify();
  mtx.unlock();
  co_return;
}

Lazy<> consumer() {
  co_await mtx.coLock();
  co_await cond.wait(mtx, [&] { return value > 0; });
  mtx.unlock();
  assert(value > 0);
  co_return;
}

传送门:https://github.com/alibaba/async_simple

2、workflow(12.2k+ star)

workflow 是搜狗开源的 C++ 服务器引擎。

这个项目有点东西,支撑搜狗几乎所有后端 C++ 在线服务:

  • 搜索服务

  • 云输入法

  • 广告

  • ...

每日处理大概超过百亿的请求。

这是一个很棒的企业级程序引擎,可以满足大多数 C++ 后端开发需求。

比如快速搭建 http 服务器:

#include <stdio.h>
#include "workflow/WFHttpServer.h"

int main()
{
    WFHttpServer server([](WFHttpTask *task) {
        task->get_resp()->append_output_body("<html>Hello World!</html>");
    });

    if (server.start(8888) == 0) {  // start server on port 8888
        getchar(); // press "Enter" to end.
        server.stop();
    }

    return 0;
}

传送门:GitHub - sogou/workflow: C++ Parallel Computing and Asynchronous Networking Framework

3、folly(26.9k+ star)

folly 是 Facebook 开源的 C++ 工具库。

这个项目包含一系列高性能的 C++ 组件库,十分的方便且高效,而且是在 Facebook 内部被广泛应用。

该项目不仅代码规范测试用例充足,而且源码中包含丰富的注释。同样功能的函数为什么别人写的这么好,终于可以光明正大的偷师学艺了!

传送门:https://github.com/facebook/folly

就先推荐这几个,应该也足够你看了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1556506.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

反应式编程(一)什么是反应式编程

目录 一、背景二、反应式编程简介2.1 定义2.2 反应式编程的优势2.3 命令式编程 & 反应式编程 三、Reactor 入门3.1 Reactor 的核心类3.2 Reactor 中主要的方法1&#xff09;创建型方法2&#xff09;转化型方法3&#xff09;其他类型方法4&#xff09;举个例子 四、Reactor …

kafka学习笔记02(小滴课堂)

Kafka命令行生产者发送消息和消费者消费消息实战 已存在的kafka不能重复创建。 broker设置的是1&#xff0c;factor大于broker了&#xff0c;所以报错。 生产者发送消息&#xff1a; kafka列表出现了新的kafka。 我们使用这个kafka。 我们启动消费者&#xff1a; 我们现在不从…

机器学习--支持向量机(通俗版本+demo)

场景 假设我们要在一个在线零售平台上自动区分商品评论是正面的还是负面的。评论中的语言多种多样&#xff0c;且往往含有大量的非结构化文本数据&#xff0c;直接使用简单的规则来分类是非常困难。这时候我们采取支持向量机算法来分类是一个比较好的选择。 支持向量机 支持…

Find Any File (FAF) for Mac:您的专属文件搜索神器

在数字时代&#xff0c;我们的Mac硬盘中堆积着各式各样的文件&#xff0c;从工作文档到家庭照片&#xff0c;从音乐视频到学习资料&#xff0c;无一不体现出我们的生活和工作的丰富多彩。然而&#xff0c;当我们需要快速找到某个特定文件时&#xff0c;却常常在茫茫文件海中迷失…

PostgreSQL到Doris的迁移技巧:实时数据同步新选择!

PostgreSQL可以说是目前比较抢手的关系型数据库了&#xff0c;除了兼具多样功能和强大性能之外&#xff0c;还具备非常优秀的可扩展性&#xff0c;更重要的是它还开源&#xff0c;能火不是没有理由的。 虽然PostgreSQL很强大&#xff0c;但是它也有短板&#xff0c;相对于专业…

DHT22温湿度传感器驱动代码(C8T6)

最近做了一个小项目&#xff0c;总结了一下温湿度传感器dht22的驱动代码&#xff0c;方便大家使用。实测可用&#xff0c;注意修改自己的引脚还有初始化gpio即可。 DHT22.c #include "DHT22.h" #include "gpio.h" #include "usart.h" #include &…

数据处理库Pandas数据结构DataFrame

Dataframe是一种二维数据结构&#xff0c;数据以表格形式&#xff08;与Excel类似&#xff09;存储&#xff0c;有对应的行和列&#xff0c;如图3-3所示。它的每列可以是不同的值类型&#xff08;不像 ndarray 只能有一个 dtype&#xff09;。基本上可以把 DataFrame 看成是共享…

STM32 直接修改寄存器来输出内部时钟的方法

1. 在特殊情况下使能 MCO 功能的方法 在对某些不容易复现的问题进行代码调时&#xff0c;需要观察内部时钟的情况&#xff0c;但往往代码之前并没有使能 MCO 功能&#xff0c;在这种情况下就可以使用寄存器直接配置来输出内部时钟到GPIO 脚位上进行观察和测试。 下面的例子就…

泰迪智能科技荣获山东省“技能兴鲁”职业技能大赛优秀组织奖

近日&#xff0c;泰迪智能科技荣获了山东省“技能兴鲁”职业技能大赛——第四届山东省“云数”技能竞赛“优秀组织单位”。 据悉&#xff0c;山东省“技能兴鲁”职业技能大赛——第四届山东省“云数”技能竞赛是由山东电子学会、山东省信息产业协会主办的&#xff0c;该竞赛是通…

产品之美10| 小小提示词(hint),便于用户交互

最近AIGC功能火热&#xff0c;有文生图和图生图两种。当用户初次接触到文生图的时候&#xff0c;会有一刻停顿&#xff1a;我该怎用输入呢&#xff1f;这时候的hint就可以发挥作用了&#xff1a; 编辑框&#xff08;EditView)里面有可爱的小女孩&#xff0c;加风格卡通。用户看…

面试题1(京东)之HiveSql --- 难度:入门初级

第1题 有如下的用户访问数据 userIdvisitDatevisitCountu012017/1/215u022017/1/236u032017/1/228u042017/1/203u012017/1/236u012017/2/218u022017/1/236u012017/2/224 要求使用SQL统计出每个用户的累积访问次数&#xff0c;如下表所示&#xff1a; 用户id月份小计累积u01…

Linux+ARM 简单环境检测---软件部分

1、前言 这个是我学习linuxARM的在做的第一个软硬件结合项目&#xff0c;以往的类似这种整体类项目还是光单片机的时候&#xff0c;linux软件部分学习了差不多快一年了&#xff0c;因为各种事情耽搁&#xff0c;这个项目一直没有静下心来完成&#xff0c;不过终于哈哈哈哈搞完了…

摸鱼的时候可以干什么?

可以做什么&#xff1f;有了VScode&#xff0c;你想做啥都可以&#xff01; 1、刷知乎 上班总是忍不住刷知乎&#xff0c;但是又怕领导发现&#xff0c;这个插件可以帮助你悄无声息地愉快地浏览知乎&#xff0c;有多少人是用这款插件看到的这篇文章&#xff1f; 你甚至可以用 M…

Java反序列化JDK动态代理的关系

Java代理模式 为什么要学习代理模式&#xff1f;了解开发原理&#xff0c;才能明白漏洞的产生。这不仅仅是SpringAOP的底层&#xff01; [SpringAOP 和 SpringMVC] 代理模式的分类&#xff1a; 静态代理动态代理 静态代理 角色分析&#xff1a; 抽象角色&#xff1a;一般会…

【vue】一个小bug和key的引入

点击master Vue!删除后该list后输入框中的Jerry消失了 原因&#xff1a;vue当你更改元素时会在真实的dom中渲染并更新list。这两个goal是两个dom元素,触发点击事件后,vue并不会删除第一个dom元素,而是把第二个dom元素的动态内容({{ goal }} - {{ index }})复制到第一个dom元素…

Logback日志框架(超详细)

logback-classic-1.2.3.jarhttp://链接: https://pan.baidu.com/s/1cA3gVB_6DEA-cSFJN6MDGw 提取码: sn8i 复制这段内容后打开百度网盘手机App&#xff0c;操作更方便哦 logback-core-1.2.3.jarhttp://链接: https://pan.baidu.com/s/19eCsvsO72a9PTqpXvXxrgg 提取码: 5yp…

JHY-31复合电压继电器 额定电压Un=110VDC 板后接线 JOSEF约瑟

用途&#xff1a; JHY-31复合电压继电器使用于电力系统的继电保护线路中&#xff0c;作为各种类型故障的判别元件和电压闭锁元件。 继电器型号名称&#xff1a; 例:辅助直流工作电压为110V的复合电压继电器的订货代号为: JHY-31/110V。 工作原理&#xff1a; 继电器内部具有负…

云架构(二) 大使模式

Ambassador pattern &#xff08;https://learn.microsoft.com/en-us/azure/architecture/patterns/ambassador&#xff09; 简单描述 创建一个助手服务&#xff0c;这个服务代表消费服务或者应用程序发送网络请求。大使服务可以看做是与客户机同一个位置的进程外代理。 这种…

【JDK常用的API】包装类

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【Java】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收藏 …

微服务(基础篇-007-RabbitMQ)

目录 初识MQ(1) 同步通讯&#xff08;1.1&#xff09; 异步通讯&#xff08;1.2&#xff09; MQ常见框架&#xff08;1.3&#xff09; RabbitMQ快速入门(2) RabbitMQ概述和安装&#xff08;2.1&#xff09; 常见消息模型&#xff08;2.2&#xff09; 快速入门&#xff…