GitHub项目推荐--适合练手的13个C++开源项目

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项目,比如实现一个文件服务器支持文件上传下载,后续可以再添加注册/登录/个人文件管理/文件分享等等功能,这样就可以写到简历里。

项目地址:Linux C++项目推荐:WebFileServer文件服务器+如何快速上手C++大项目

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++后端程序。

项目地址:C++项目推荐,QT项目推荐-仿微信聊天,QT客户端+Linux C++后端

8 手撸STL

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

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

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

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

地址:C++进阶,要不要看《STL源码剖析》-其实看C++STL八股文面试题就足够了

9 手撸Json

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

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

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

项目地址:C++Linux项目推荐-Web多人聊天+MySQL+Redis+Websocket+Json,可以写简历的C++项目

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

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

项目地址:C++音视频项目推荐-桌面录制,支持全屏和选区录制-可写简历

11 操作系统

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

MIT6.S081课程资料:麻省理工6.s081课程,深入掌握linux操作系统,互联网大厂C++面试题必备

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是什么、解决了什么问题等等。

### 解决方案分析 当遇到 Nacos 启动时出现 `EXCEPTION_ILLEGAL_INSTRUCTION` 的问题时,通常表明 JVM 或其依赖的本地库遇到了不兼容的情况。以下是可能的原因以及解决方案: #### 可能原因 1. **硬件架构不匹配** 如果运行环境中的 CPU 架构与 JDK 编译目标不符,则可能导致非法指令错误。例如,在某些 ARM 或低功耗处理器上运行针对高性能 x86_64 优化的二进制文件可能会触发此问题[^1]。 2. **JDK 版本冲突** 使用了不适合当前操作系统的 JDK 版本也可能引发此类问题。尤其是不同版本之间的 JIT 编译器行为差异较大时,容易导致崩溃[^3]。 3. **第三方库损坏或缺失** 当应用程序加载外部动态链接库(DLL/so 文件)失败或者这些库本身存在问题时,也会抛出类似的致命错误消息[^2]。 4. **配置参数不当** 如引用提到的服务重启后无法正常工作可能是由于之前设置了一些特定于首次启动条件下的参数,在后续再次尝试连接数据库或其他资源未成功初始化前就执行业务逻辑造成的[^4]。 #### 推荐措施 ##### 方法一:验证并调整 JDK 安装包 确保所使用的 JDK 是官方发布的稳定版,并且与其操作系统平台完全适配。如果怀疑现有安装有问题可以重新下载最新对应版本替换旧版本。 ##### 方法二:修改启动脚本增加调试选项 通过编辑 nacos/bin/startup.sh 脚本来加入额外的日志记录功能以便更好地定位具体哪个部分出了差错: ```bash #!/bin/bash nohup java -Xlog:gc*:file=/tmp/gc.log:time,uptime,pid,tid,level,tags \ -XX:+HeapDumpOnOutOfMemoryError \ -Dnacos.standalone=true \ -jar /path/to/nacos-server/target/nacos-server.jar > nohup.out & ``` 上述命令片段增加了垃圾回收日志输出路径(-Xlog),并在发生内存溢出(OOM)事件时自动保存堆转储文件(-XX:+HeapDumpOnOutOfMemoryError)。 ##### 方法三:清理残留数据重置状态 按照提示信息描述的现象来看,有可能是因为上次关闭过程中未能妥善释放所有占用资源而导致下次开启时报错。因此建议先停止正在运行实例(如果有),接着删除临时目录下相关内容后再试一次完整的冷启流程: ```shell rm -rf ./data/* ./stop.sh && sleep 5s && ./startup.sh -m standalone ``` 注意这里假设项目根目录存在名为"data"子文件夹用于存储持久化资料;实际操作需依据实际情况确认确切位置以免误删重要文档! --- ### 总结 综上所述,面对 Nacos 出现 Java 运行时期间检测到严重错误(`FATAL ERROR`)情况时,应优先排查基础软硬件设施一致性状况,同时借助增强型诊断工具收集更多上下文线索辅助判断根本诱因所在之处^[]^.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值