值得學習17個C/C++ 超經典開源項目,面試加分

用分享的方式成長,用有趣的眼光看世界。 

歡迎來到22 26 25的博客
熱愛編碼、算法、知識總結,不定期更新有趣、有料、有營養內容。 讓我們共同學習,共同進步。

好文推薦:   從B站(嗶哩嗶哩)泄露的源碼裏發現了B站視頻推薦的祕密

                     白嫖來的入門級雲服務器有這麼幾個妙用(附教程)

                     Facebook前身 哈佛“選美”網站Facemash核心算法 --- ELO等級分制度(附源碼)

 

正文:

總結了17個 C/C++業內非常經典的開源項目,能夠很好的幫助上手與進階C/C++項目開發,積累項目經驗。

包含C/C++ 各個領域,超高含金量。 熟練掌握,面試加分項! 再也不用怕面試沒項目了!

另附:400+條實用C/C++框架、庫、工具整理 ,你能想到的都在這裏了

 

目錄

值得學習的C語言開源項目

Libevent

Memcached

Redis

Webbench

APR(Apache Portable Runtime)

NGINX

Tinyhttpd

cJSON

CMockery

Lua

SQLite

UNIX v6

NETBSD

值得學習的C++開源項目

LevelDb

Boost.Asio

SGI STL

Muduo


值得學習的C語言開源項目

Libevent

libev是一個開源的事件驅動庫,基於epoll,kqueue等OS提供的基礎設施。其以高效出名,它可以將IO事件,定時器,和信號統一起來,統一放在事件處理這一套框架下處理。基於Reactor模式,效率較高,並且代碼精簡(4.15版本8000多行),是學習事件驅動編程的很好的資源。

下載鏈接:https://github.com/libevent/libevent

Memcached

Memcached 是一個高性能的分佈式內存對象緩存系統,用於動態Web應用以減輕數據庫負載。它通過在內存中緩存數據和對象來減少讀取數據庫的次數,從而提供動態數據庫驅動網站的速度。Memcached 基於一個存儲鍵/值對的 hashmap。Memcached-1.4.7的代碼量還是可以接受的,只有10K行左右。
下載地址:http://memcached.org/

Redis

Redis 是一個使用 C 語言寫成的,開源的 key-value 數據庫。Redis支持的操作和數據類型比Memcached要多,現在主要用於緩存,支持主從同步機制,Redis的學習可以參考<>一書。

下載地址:http://redis.io/

Webbench

Webbench是一個在linux下使用的非常簡單的網站壓測工具。它使用fork()模擬多個客戶端同時訪問我們設定的URL,測試網站在壓力下工作的性能,最多可以模擬3萬個併發連接去測試網站的負載能力。Webbench使用C語言編寫, 代碼實在太簡潔,源碼加起來不到600行。

下載鏈接:https://github.com/LippiOuYang/WebBenchl

APR(Apache Portable Runtime)

這是由 Apache 社區維護的 C 開源庫,主要提供操作系統相關的功能(文件系統、進程、線程、用戶、IPC)。此外還提供了一些網絡相關的功能。

APR 原先是 Apache Web 服務器的一個組成部分,後來獨立出來,成爲一個單獨的開源項目。
主頁:https://apr.apache.org

NGINX

Nginx是由俄羅斯軟件工程師Igor Sysoev開發的一個高性能的HTTP和反向代理服務器,具備IMAP/POP3和SMTP服務器功能。Nginx最大的特點是對高併發的支持和高效的負載均衡,在高併發的需求場景下,是Apache服務器不錯的替代品。目前,包括新浪、騰訊等知名網站已經開始使用Nginx作爲Web應用服務器。
主頁:http://nginx.org/en/download.html

Tinyhttpd

tinyhttpd是一個超輕量型Http Server,使用C語言開發,全部代碼只有502行(包括註釋),附帶一個簡單的Client,可以通過閱讀這段代碼理解一個 Http Server 的本質。

下載鏈接:https://github.com/LippiOuYang/Tinyhttpd

cJSON

cJSON是C語言中的一個JSON編解碼器,非常輕量級,C文件只有500多行,速度也非常理想。
cJSON也存在幾個弱點,雖然功能不是非常強大,但cJSON的小身板和速度是最值得讚賞的。其代碼被非常好地維護着,結構也簡單易懂,可以作爲一個非常好的C語言項目進行學習。

項目主頁:http://sourceforge.net/projects/cjson/

CMockery

cmockery是google發佈的用於C單元測試的一個輕量級的框架。它很小巧,對其他開源包沒有依賴,對被測試代碼侵入性小。cmockery的源代碼行數不到3K,你閱讀一下will_return和mock的源代碼就一目瞭然了。
主要特點:

  • 免費且開源,google提供技術支持;
  • 輕量級的框架,使測試更加快速簡單;
  • 避免使用複雜的編譯器特性,對老版本的編譯器來講,兼容性好;
  • 並不強制要求待測代碼必須依賴C99標準,這一特性對許多嵌入式系統的開發很有用

下載鏈接:http://code.google.com/p/cmockery/downloads/list

Lua

Lua很棒,Lua是巴西人發明的,這些都令我不爽,但是還不至於臉紅,最多眼紅。
讓我臉紅的是Lua的源代碼,百分之一百的ANSI C,一點都不摻雜。在任何支持ANSI C編譯器的平臺上都可以輕鬆編譯通過。我試過,真是一點廢話都沒有。Lua的代碼數量足夠小,5.1.4僅僅1.5W行,去掉空白行和註釋估計能到1W行。
下載地址:http://www.lua.org/

SQLite

SQLite是一個開源的嵌入式關係數據庫,實現自包容、零配置、支持事務的SQL數據庫引擎。 其特點是高度便攜、使用方便、結構緊湊、高效、可靠。足夠小,大致3萬行C代碼,250K。
下載地址:http://www.sqlite.org/ 。

UNIX v6

UNIX V6 的內核源代碼包括設備驅動程序在內 約有1 萬行,這個數量的源代碼,初學者是能夠充分理解的。有一種說法是一個人所能理解的代碼量上限爲1 萬行,UNIX V6的內核源代碼從數量上看正好在這個範圍之內。看到這裏,大家是不是也有“如果只有1萬行的話沒準兒我也能學會”的想法呢?
另一方面,最近的操作系統,例如Linux 最新版的內核源代碼據說超過了1000 萬行。就算不是初學者,想完全理解全部代碼基本上也是不可能的。

下載地址:http://minnie.tuhs.org/cgi-bin/utree.pl?file=V6

NETBSD

NetBSD是一個免費的,具有高度移植性的 UNIX-like 操作系統,是現行可移植平臺最多的操作系統,可以在許多平臺上執行,從 64bit alpha 服務器到手持設備和嵌入式設備。NetBSD計劃的口號是:”Of course it runs NetBSD”。它設計簡潔,代碼規範,擁有衆多先進特性,使得它在業界和學術界廣受好評。由於簡潔的設計和先進的特徵,使得它在生產和研究方面,都有卓越的表現,而且它也有受使用者支持的完整的源代碼。許多程序都可以很容易地通過NetBSD Packages Collection獲得。

下載地址:http://www.netbsd.org/

值得學習的C++開源項目

LevelDb

LevelDb是谷歌兩位大神級別的工程師發起的開源項目,簡而言之,LevelDb是能夠處理十億級別規模Key-Value型數據持久性存儲的C++ 程序庫。
它是一個持久化存儲的KV系統,和Redis這種內存型的KV系統不同,LevelDb不會像Redis一樣狂喫內存,而是將大部分數據存儲到磁盤上。
  其次,LevleDb在存儲數據時,是根據記錄的key值有序存儲的,就是說相鄰的key值在存儲文件中是依次順序存儲的,而應用可以自定義key大小比較函數,LevleDb會按照用戶定義的比較函數依序存儲這些記錄。

主頁:https://github.com/google/leveldb

Boost.Asio

它是異步輸入輸出的核心。 名字本身就說明了一切:Asio 意即異步輸入/輸出。該庫可以讓 C++ 異步地處理數據,且平臺獨立。異步數據處理就是指,任務觸發後不需要等待它們完成。相反,Boost.Asio 會在任務完成時觸發一個應用。異步任務的主要優點在於,在等待任務完成時不需要阻塞應用程序,可以去執行其它任務。

異步任務的典型例子是網絡應用。如果數據被髮送出去了,比如發送至 Internet,通常需要知道數據是否發送成功。 如果沒有一個象 Boost.Asio 這樣的庫,就必須對函數的返回值進行求值。但是,這樣就要求待至所有數據發送完畢,並得到一個確認或是錯誤代碼。而使用 Boost.Asio,這個過程被分爲兩個單獨的步驟:第一步是作爲一個異步任務開始數據傳輸。 一旦傳輸完成,不論成功或是錯誤,應用程序都會在第二步中得到關於相應的結果通知.主要的區別在於,應用程序無需阻塞至傳輸完成,而可以在這段時間裏執行其它操作。

主頁:http://www.boost.org/doc/libs/1_58_0/doc/html/boost_asio.html

SGI STL

SGI STL是STL代碼的經典實現版本,雖然很多編譯器不直接使用這個版本,但是很多卻在此基礎之上進行改進的。比如GNU C++的標準庫就是在此基礎之上改進的。這份代碼還有一個好處是有註釋,代碼書寫非常規範,只要花些時間讀懂它並非難事。

主頁:https://www.sgi.com/tech/stl/download.html

Muduo

muduo 是一個基於 Reactor 模式的現代 C++ 網絡庫,它採用非阻塞 IO 模型,基於事件驅動和回調,原生支持多核多線程,適合編寫 Linux 服務端多線程網絡應用程序。

主頁:https://github.com/chenshuo/muduo

 

上一篇: 從B站 (嗶哩嗶哩) 泄露的源碼裏發現了B站視頻推薦的祕密

下一篇: 400+條實用C/C++框架、庫、工具整理 ,你能想到的都在這裏了

如果有什麼要補充的,歡迎下方👇評論區留言。

1份讚許 = 100分的認可,如果感覺還不錯,點個贊👍 支持一下吧 ~

不定期分享 有趣、有料、有營養內容,歡迎 訂閱關注 🤝 我的博客 ,期待在這裏與你相遇 ~


————————————————

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章