值得学习17个CC++超经典开源项⽬,⾯试加分⽤分享的⽅式成长,⽤有趣的眼光看世界。
欢迎来到!
开源项目热爱编码、算法、知识总结,不定期更新有趣、有料、有营养内容。 让我们共同学习,共同进步。
好⽂推荐:
正⽂:
总结了17个 C/C++业内⾮常经典的开源项⽬,能够很好的帮助上⼿与进阶C/C++项⽬开发,积累项⽬经验。
包含C/C++ 各个领域,超⾼含⾦量。 熟练掌握,⾯试加分项! 再也不⽤怕⾯试没项⽬了!
另附:
⽬录
值得学习的C语⾔开源项⽬
Libevent
Memcached
Redis
Redis 是⼀个使⽤ C 语⾔写成的,开源的 key-value 数据库。Redis⽀持的操作和数据类型⽐Memcached要多,现在主要⽤于缓存,⽀持主从同步机制,Redis的学习可以参考<>⼀书。
Webbench
Webbench是⼀个在linux下使⽤的⾮常简单的⽹站压测⼯具。它使⽤fork()模拟多个客户端同时访问我们设定的URL,测试⽹站在压⼒下⼯作的性能,最多可以模拟3万个并发连接去测试⽹站的负载能⼒。Webbench使⽤C语⾔编写, 代码实在太简洁,源码加起来不到600⾏。
APR(Apache Portable Runtime)
这是由 Apache 社区维护的 C 开源库,主要提供操作系统相关的功能(⽂件系统、进程、线程、⽤户、IPC)。此外还提供了⼀些⽹络相关的功能。
NGINX
Tinyhttpd
tinyhttpd是⼀个超轻量型Http Server,使⽤C语⾔开发,全部代码只有502⾏(包括注释),附带⼀个简单的Client,可以通过阅读这段代码理解⼀个 Http Server 的本质。
cJSON
cJSON是C语⾔中的⼀个JSON编解码器,⾮常轻量级,C⽂件只有500多⾏,速度也⾮常理想。
cJSON也存在⼏个弱点,虽然功能不是⾮常强⼤,但cJSON的⼩⾝板和速度是最值得赞赏的。其代码被⾮常好地维护着,结构也简单易懂,可以作为⼀个⾮常好的C语⾔项⽬进⾏学习。
CMockery
cmockery是google发布的⽤于C单元测试的⼀个轻量级的框架。它很⼩巧,对其他开源包没有依赖,对被测试代码侵⼊性⼩。cmockery 的源代码⾏数不到3K,你阅读⼀下will_return和mock的源代码就⼀⽬了然了。
主要特点:
免费且开源,google提供技术⽀持;
轻量级的框架,使测试更加快速简单;
避免使⽤复杂的编译器特性,对⽼版本的编译器来讲,兼容性好;
并不强制要求待测代码必须依赖C99标准,这⼀特性对许多嵌⼊式系统的开发很有⽤
Lua
SQLite
UNIX v6
UNIX V6 的内核源代码包括设备驱动程序在内 约有1 万⾏,这个数量的源代码,初学者是能够充分理解的。有⼀种说法是⼀个⼈所能理解的代码量上限为1 万⾏,UNIX V6的内核源代码从数量上看正好在这个范围之内。看到这⾥,⼤家是不是也有“如果只有1万⾏的话没准⼉我也能学会”的想法呢?
另⼀⽅⾯,最近的操作系统,例如Linux 最新版的内核源代码据说超过了1000 万⾏。就算不是初学者,想完全理解全部代码基本上也是不可能的。
NETBSD
NetBSD是⼀个免费的,具有⾼度移植性的 UNIX-like 操作系统,是现⾏可移植平台最多的操作系统,可
以在许多平台上执⾏,从 64bit alpha 服务器到⼿持设备和嵌⼊式设备。NetBSD计划的⼝号是:”Of course it runs NetBSD”。它设计简洁,代码规范,拥有众多先进特性,使得它在业界和学术界⼴受好评。由于简洁的设计和先进的特征,使得它在⽣产和研究⽅⾯,都有卓越的表现,⽽且它也有受使⽤者⽀持的完整的源代码。许多程序都可以很容易地通过NetBSD Packages Collection获得。
值得学习的C++开源项⽬
LevelDb
LevelDb是⾕歌两位⼤神级别的⼯程师发起的开源项⽬,简⽽⾔之,LevelDb是能够处理⼗亿级别规模Key-Value型数据持久性存储的C++程序库。
它是⼀个持久化存储的KV系统,和Redis这种内存型的KV系统不同,LevelDb不会像Redis⼀样狂吃内存,⽽是将⼤部分数据存储到磁盘上。
其次,LevleDb在存储数据时,是根据记录的key值有序存储的,就是说相邻的key值在存储⽂件中是依次顺序存储的,⽽应⽤可以⾃定义key⼤⼩⽐较函数,LevleDb会按照⽤户定义的⽐较函数依序存储这些记录。
Boost.Asio
它是异步输⼊输出的核⼼。 名字本⾝就说明了⼀切:Asio 意即异步输⼊/输出。该库可以让 C++ 异步地处理数据,且平台独⽴。异步数据处理就是指,任务触发后不需要等待它们完成。相反,Boost.Asio 会在任务完成时触发⼀个应⽤。异步任务的主要优点在于,在等待任务完成时不需要阻塞应⽤程序,可以去执⾏其它任务。
异步任务的典型例⼦是⽹络应⽤。如果数据被发送出去了,⽐如发送⾄ Internet,通常需要知道数据是否发送成功。 如果没有⼀个象Boost.Asio 这样的库,就必须对函数的返回值进⾏求值。但是,这样就要求待⾄所有数据发送完毕,并得到⼀个确认或是错误代码。⽽使⽤ Boost.Asio,这个过程被分为两个单独的步骤:第⼀步是作为⼀个异步任务开始数据传输。 ⼀旦传输完成,不论成功或是错误,应⽤程序都会在第⼆步中得到关于相应的结果通知.主要的区别在于,应⽤程序⽆需阻塞⾄传输完成,⽽可以在这段时间⾥执⾏其它操作。
SGI STL
SGI STL是STL代码的经典实现版本,虽然很多编译器不直接使⽤这个版本,但是很多却在此基础之上进⾏改进的。⽐如GNU C++的标准库就是在此基础之上改进的。这份代码还有⼀个好处是有注释,代码书写⾮常规范,只要花些时间读懂它并⾮难事。
Muduo
muduo 是⼀个基于 Reactor 模式的现代 C++ ⽹络库,它采⽤⾮阻塞 IO 模型,基于事件驱动和回调,原⽣⽀持多核多线程,适合编写Linux 服务端多线程⽹络应⽤程序。
上⼀篇:
下⼀篇:
如果有什么要补充的,欢迎下⽅ 评论区留⾔。
1份赞许 = 100分的认可,如果感觉还不错,点个赞 ⽀持⼀下吧 ~
不定期分享 有趣、有料、有营养内容,欢迎 订阅关注 我的博客 ,期待在这⾥与你相遇 ~
————————————————
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论