商汇粹外网资源平台

搜索
查看: 2028|回复: 5

Github 上有哪些比较流行的 C、C++ 或 Java 的入门级项目? ...

[复制链接]

该用户从未签到

8

主题

24

帖子

86

积分

注册会员

Rank: 2

积分
86
发表于 2022-9-27 11:45:33 | 显示全部楼层 |阅读模式
可以推荐 Github 上一些比较好的开源项目吗?用 C 或者 Java 写的,最好不是那么复杂的,适合新手学习的。
回复

使用道具 举报

该用户从未签到

5

主题

30

帖子

124

积分

注册会员

Rank: 2

积分
124
发表于 2022-9-27 11:52:13 | 显示全部楼层
作为一名经常在 GitHub 上带薪划水的资深摸鱼党,这个问题真的太符合我的口味啦!
毕竟当年我还是个小菜鸟的时候,实习简历上的项目都来自 GitHub!
其实我当年在入门编程的时候,也有很大的困惑,即作为一个初学者不知道该怎么去找些适合自己的项目“大展身手”。
授人与鱼不如授人与渔!下面我将会做两件事

  • 推荐一些适合入门的 C、C++、Java 开源项目。
  • 告诉你怎么在 GitHub 上寻找适合自己的开源项目。
在正式开始之前,我想再唠叨一句:
很多同学在学开源项目的时候,有一个误区,容易一下子扎到源码里,这样就容易一下子迷失在层层函数的跳转里,最后开始自我怀疑,觉得开源项目是大佬的专属。
其实开源项目的学习是自顶向下的,就是先从大的面来了解项目的项目的概况(比如这个项目是干啥的,这个项目有什么特点,能用在什么地方),然后就是看它有哪些模块,项目之间什么关系,最后才是深入到源码。
呃,说了点题外话,大家别嫌烦,下面我们就开始推荐!记得先帮我点赞收藏,再看不迷路哟~
一、C 开源项目

对于刚开始看开源项目的同学,肯定要从简单的开始。
刚开始的时候肯定得看些代码风格好、短小精悍、结构清晰的入门开源项目!
1.acwj(5.7k+ star)

教你写 C 语言编译器的实战教程。
教程注重实战循序渐进,一步步教你如何用 C 语言写一个可以自己编译自己(自举)、能够在真正的硬件上运行的 C 语言编译器。

传送门:https://github.com/DoctorWkt/acwj
2.Tinyhttpd(7.3k+ star)

一个不到 500 行的超轻量型 HTTP Server,可以用来理解服务器程序的原理和本质。
C语言的入门级项目!
传送门:https://github.com/EZLippi/Tiny
3.db_tutorial(5.9k+ star)

用 C 从零创建一个简单的数据库。
传送门:https://github.com/cstack/db_tu
4. project-based-tutorials-in-c (7.6k+ star)

用 C 语言写玩具或项目的教程集合。
教程分为游戏开发、操作系统、计算机网络等分类,其中包含图文、视频、代码等资料。
传送门:https://github.com/rby90/project-based-tutorials-in-c
5.SimpleKernel(1.8k+ star)

一个用来练手的简单内核项目。
提供了各个阶段完成度不同的内核,可以选择从自己喜欢的地方开始。
传送门:https://github.com/Simple-XX/SimpleKernel
6.myscan(0.1k+ star)

开源的多线程 socket 扫描 IP 端口的程序。
目前仅支持 Windows 系统,代码简单可作为初学者学习项目。
传送门:https://github.com/nobackdoor/myscan
7.smartdns(4.1k+ star)

一个运行在本地的 DNS 服务器。能够提高网络访问速度等诸多妙用。
架构图如下:

传送门:https://github.com/pymumu/smart
可能现在在看这篇回答的你没有学过 C 语言,如果你想学 C 语言但是又不知道怎么学的话,我这里给你推荐一个视频,可以先了解一下。
C 语言核心技术》,足足 171 集,平均每集的时长也不长,大多数都在十分钟左右。很容易就看完,呃,而且这个在知乎上可以直接看。
内容就是包括常见的常量-变量、分支语句、循环语句、操作符和表达式、函数、数组、指针(指针和指针类型、二级指针和多级指针、指针表达式解析、指针运算、数 组指针、函数指针、回调函数)、调试技巧、程序环境和预处理 等等等等,反正很全,可以试试看!

地址我给你放在下面了:

当然如果觉得还可,你想成体系的学一下 C 语言,可以直接看我下面这篇文章:

二、C++ 开源项目

1.TinyWebServer(3.6k+ star)

Linux下C++轻量级Web服务器,助力初学者快速实践网络编程,搭建属于自己的服务器.

  • 使用 线程池 + 非阻塞socket + epoll(ET和LT均实现) + 事件处理(Reactor和模拟Proactor均实现) 的并发模型
  • 使用状态机解析HTTP请求报文,支持解析GET和POST请求
  • 访问服务器数据库实现web端用户注册、登录功能,可以请求服务器图片和视频文件
  • 实现同步/异步日志系统,记录服务器运行状态
  • 经Webbench压力测试可以实现上万的并发连接数据交换
传送门:GitHub - qinguoyi/TinyWebServer: Linux下C++轻量级Web服务器
2.libqalculate(545 star)

使用 C++ 编写的多功能计算器桌面应用、库和 CLI 程序。
它易于使用功能强大,支持大型可定制函数库、单位计算和转换、符号计算(包括积分和方程)。
作为用户你可以直接在命令行中使用,作为开发者你也可以在自己的项目中使用这个库。官方还制作了Qt和GTK两个版本的 GUI 计算器应用。

3.spdlog(12.7k+)

快速、上手简单的 C++ 日志库。示例代码:
#include "spdlog/spdlog.h"int main() {    spdlog::info("Welcome to spdlog!");    spdlog::error("Some error message with arg: {}", 1);    spdlog::warn("Easy padding in numbers like {:08d}", 12);    spdlog::critical("Support for int: {0:d};  hex: {0:x};  oct: {0:o}; bin: {0:b}", 42);    spdlog::info("Support for floats {:03.2f}", 1.23456);    spdlog::info("Positional args are {1} {0}..", "too", "supported");    spdlog::info("{:<30}", "left aligned");    spdlog::set_level(spdlog::level::debug); // Set global log level to debug    spdlog::debug("This message should be displayed..");        // change log pattern    spdlog::set_pattern("[%H:%M:%S %z] [%n] [%^---%L---%$] [thread %t] %v");    // Compile time log levels    // define SPDLOG_ACTIVE_LEVEL to desired level    SPDLOG_TRACE("Some trace message with param {}", 42);    SPDLOG_DEBUG("Some debug message");}
4.CPlusPlusThings(15.4k+star)

这是一个适合 C++ 初学者从入门到进阶的教程。
解决了面试者想要深入 C++ 及如何入坑 C++ 的问题。
除此之外,该仓库拓展了更加深入的语法分析、多线程并发等的知识,是一个比较全面的 C++ 从入门学习到进阶提升的项目。
5.indicators(1.7k+star)

一个使用 C++ 编写的进度条库,你可以用它在命令行中实现美观的进度条。它使用方便、线程安全、支持多种进度条样式。
6.sudoku(299 star)

C++ 实现的命令行数独游戏。600 余行代码,初学者也可以轻松学习。

7.dbg-macro(1.7k+)

打日志是 C++ 开发中必不可少的一种 debug 方式,dbg-macro 受 rust-lang 中 的 dbg 启发,提供比 printf 和 std::cout 更好的宏函数。主要有如下特点:

  • 美观的彩色输出(当输出不是交互式终端时,颜色将自动禁用)
  • 兼容 C++11,并且是 header-only
  • 支持基础类型和 STL 容器类型的输出
  • 除了基本信息外,还输出变量名和类型
  • 启用 DBGMACRODISABLE 生成 release 版
#include <vector>#include <dbg.h>// You can use "dbg(..)" in expressions:int factorial(int n) {  if (dbg(n <= 1)) {    return dbg(1);  } else {    return dbg(n * factorial(n - 1));  }}int main() {  std::string message = "hello";  dbg(message);  // [example.cpp:15 (main)] message = "hello" (std::string)  const int a = 2;  const int b = dbg(3 * a) + 1;  // [example.cpp:18 (main)] 3 * a = 6 (int)  std::vector<int> numbers{b, 13, 42};  dbg(numbers);  // [example.cpp:21 (main)] numbers = {7, 13, 42} (size: 3) (std::vector<int>)  dbg("this line is executed");  // [example.cpp:23 (main)] this line is executed  factorial(4);  return 0;}

三、Java 开源项目

1、guava(42.9k+ star)

Google 开源的 Java 三方类库,本身的源码非常值得大家学习。
该库提供包括集合、I/O、缓存、并发等开箱即用的工具方法,任何的 Java 应用都可以通过依赖的方式引入该项目。
2、o2oa(3.0k+ star)

Java 的支付工具库,可以非常轻松的完成支付模块开发。
o2oa 封装了常用的微信、QQ、支付宝、银联、PayPal 支付等支付方式的各种常用接口。
不依赖任何 MVC 框架,轻松接入到 Java 项目。
传送门:https://github.com/o2oa/o2oa
3、dataease(3.9k+ star)

dataease 是一个开源的数据可视化和分析工具。
采用 SpringBoot+Vue.js 技术栈实现,通过丰富的可视化图表让数据更加直观:

  • 数据连接:支持关系型数据库、Excel 等文件、Hadoop 等大数据平台、NoSQL 等各种数据源
  • 图表展示:支持 PC 端、移动端及大屏
  • 制作图表:支持丰富的图表类型、支持拖拉拽方式快速制作仪表板
  • 数据引擎:支持直连模式、本地模式

传送门:https://github.com/dataease/dataease
4、onedev(4.8k+ star)

一个用 Java 写的 Git 仓库管理平台,包含:

  • Git 版本管理
  • 持续集成
  • Issue 管理
  • 代码搜索、审查
  • ......

传送门:https://github.com/theonedev/onedev
5、OpenRefine(8.5k+ star)

一款用于清理数据的桌面工具。
通过可视化的方式分析、整理数据,支持 Windows、Linux、Mac 操作系统。
OpenRefine 拥有查询、过滤、去重、分析等功能,可以把杂乱的数据变成“整洁”的电子表格,还能够将结果导出成多种格式的文件。
不会编程和 SQL 的小伙伴们,也可以轻松分析海量数据啦!

传送门:https://github.com/OpenRefine/OpenRefine
6、fizz-gateway-community(557 star)

一个 Java 微服务网关。
支持热服务编排、自动授权选择、在线测试、监控、管理后台等功能。
帮助企业治理 API 服务降低重复代码投入,提高服务稳定性。

传送门:https://github.com/wehotel/fizz-gateway-community
7、JustAuth(12.5k+ star)
如你所见,它仅仅是一个第三方授权登录工具类库,它可以让我们脱离繁琐的第三方登录 SDK,让登录变得So easy!
JustAuth 集成了诸如:Github、Gitee、支付宝、新浪微博、微信、Google、Facebook、Twitter、StackOverflow等国内外数十家第三方平台。
还在持续扩充中...

传送门:https://github.com/justauth/Jus
四、适合自己的开源项目哪里找?

授人与鱼,不如授人与渔,与其掰碎了直接告诉你,我觉得学会在 GitHub 上寻找适合自己的小项目更重要!
我之前回答过一个问题:

这里面给大家推荐了一个去处:HelloGitHub,一个分享 GitHub 上有趣,入门级的开源项目。

GitHub 网址:https://github.com/521xueweihan/HelloGitHub
在项目中,内容每月 28 号以月刊的形式更新发布,主要是面向编程新手、热爱编程、对开源社区感兴趣人群的项目。更新的内容主要包括:各种语言的流行项目、入门级项目、让生活变得更美好的工具、书籍、学习心得笔记、企业级项目等。
这些项目都有一些共同的特征,那就是很酷,非常容易上手的项目,编程的魅力和便捷体验起来就是这么简单。
具体过多的我就不展开了,大家感兴趣的可以直接看我上面的回答。

除此以外,下面这些高赞回答相信也肯定对你有帮助!
1、作为一名数据分析师,Python 是我吃饭的家伙什,怎么能少了 Python 开源项目的推荐呢!

2、不过说实话,作为数据分析师,其实 70% 的时间都在用 SQL 解决问题。

3、有时候一些不是私密的数据得去自己苦逼的爬,用开源的爬虫项目它不香嘛!

4、作为一名科班出身的学长,经常会碰到诸如“C、C++、Python 哪个更适合新手?”的问题,这是我的个人之见。

希望对你有所帮助

开源项目这个东西还是要自己静下心来去研究,从中体会到作者的意图。
不然只是盯着看,看一百遍对自己也没什么用处。
最后希望大家未来都能成为最好的自己,如果觉得我写的还不错,记得帮我 @Rocky0429

点个赞~~
回复

使用道具 举报

该用户从未签到

2

主题

16

帖子

70

积分

注册会员

Rank: 2

积分
70
发表于 2022-9-27 11:58:53 | 显示全部楼层
不流行,昨天晚上做的小玩具,叫Piano Executer的玩意,其工作流程如下图

简单来说,这是一个通过脚本语言来控制钢琴的演奏的一个程序
包含:

  • 一个完整从词法分析到语法分析的编译型脚本编译器
  • 一个脚本指令流执行的虚拟机
  • 一个完全用数学物理方法建模的物理钢琴
  • 一个音频流混音器
  • 一个演奏用的脚本代码
这个程序可以让你使用算法编程方法来生成并演奏一个钢琴曲,例如,下面的代码演示的是逐步按下C4 D4 E4 F4 G4 A4 B4的音
#name "piano"#runtime thread 32#runtime stack 128host void Wait(int ms);//等待,毫秒为单位host void PianoKeyDown(string key);//钢琴键盘按下host void PianoKeyDownIndex(int index);//钢琴键盘按下,从左往右0-87一共88个键host void StartTrack(string trackFunction);//开始音轨函数export void track0(){  string note="CDEFGAB";     int i;     for(i=0;i<7;i++)     {           string snote;           snote[0]=note;           snote[1]='4';           PianoKeyDown(snote);           wait(800);     }} export int main(){   StartTrack("track0");}








当然,它最大支持32个音轨函数的同时播放,例如,下面的是do rui mi fa so la xi和经典的4536251和弦的混合播放
#name "piano"#runtime thread 32#runtime stack 128host void Wait(int ms);host void PianoKeyDown(string key);host void PianoKeyDownIndex(int index);host void StartTrack(string trackFunction);export void track1(){     string note="CDEFGABBB";     int i;     while(1)     {     for(i=0;i<7;i++)     {           string snote;           snote[0]=note;           snote[1]='4';           PianoKeyDown(snote);           wait(800);     }     }     }export void track0(){    int delay=800;    while(1)    {    //4    PianoKeyDown("F3");    PianoKeyDown("F4");    PianoKeyDown("A4");    PianoKeyDown("C5");    wait(delay);    PianoKeyDown("F4");    PianoKeyDown("A4");    PianoKeyDown("C5");    wait(delay);    //5    PianoKeyDown("G3");    PianoKeyDown("G4");    PianoKeyDown("B4");    PianoKeyDown("D5");    wait(delay);    PianoKeyDown("G4");    PianoKeyDown("B4");    PianoKeyDown("D5");    wait(delay);    //3    PianoKeyDown("E3");    PianoKeyDown("E4");    PianoKeyDown("G4");    PianoKeyDown("B4");    wait(delay);    PianoKeyDown("E4");    PianoKeyDown("G4");    PianoKeyDown("B4");    wait(delay);    //6    PianoKeyDown("A3");    PianoKeyDown("A4");    PianoKeyDown("C5");    PianoKeyDown("E5");    wait(delay);    PianoKeyDown("A4");    PianoKeyDown("C5");    PianoKeyDown("E5");    wait(delay);    //2    PianoKeyDown("D3");    PianoKeyDown("D4");    PianoKeyDown("F4");    PianoKeyDown("A4");    wait(delay);    PianoKeyDown("D4");    PianoKeyDown("F4");    PianoKeyDown("A4");    wait(delay);    //5    PianoKeyDown("G3");    PianoKeyDown("G4");    PianoKeyDown("B4");    PianoKeyDown("D5");    wait(delay);    PianoKeyDown("G4");    PianoKeyDown("B4");    PianoKeyDown("D5");    wait(delay);    //1    PianoKeyDown("C3");    PianoKeyDown("C4");    PianoKeyDown("E4");    PianoKeyDown("G4");    wait(delay);    PianoKeyDown("C4");    PianoKeyDown("E4");    PianoKeyDown("G4");    wait(delay);    }    } export int main(){   StartTrack("track0");   StartTrack("track1");}








当然,整个Piano Exectuer的代码如果除去PainterEngine部分的封装代码也比较简单

#include "windows.h"#include "stdio.h"#include "architecture/PainterEngine.h"#include "platform/modules/px_time.h"extern int PX_AudioInitializeHwnd(HWND hwnd);extern int PX_AudioInitialize(PX_SoundPlay* soundPlay);PX_SoundPlay soundPlay;px_char runtime_buffer[1024 * 1024 * 8] = {0};px_char script[1024 * 1024] = {0};PX_PianoModel pianoModel;//钢琴模型PX_Compiler compiler;//脚本编译器PX_VM vmInstance;//虚拟机//合成器合成px_void PX_PianoRead(px_void* userptr, px_byte* pBuffer, px_int readSize){        if (!readSize || readSize > 2048 * 2 * 2)        {                PX_memset(pBuffer, 0, readSize);        }        else        {                px_int oft = 0;                px_int count = readSize / 4;//2bytes 2channels                px_float out44100f[2048];                px_int i;                px_short* PCM = (px_short*)pBuffer;                PX_PianoModelGo(&pianoModel, out44100f, count);                for (i = 0; i < count; i++)                {                        PCM[oft++] = (px_short)(out44100f * 32768 * 8);                        PCM[oft++] = (px_short)(out44100f * 32768 * 8);                }        }}px_bool PX_VM_PianoKeyDown(PX_VM* Ins, px_void* ptr){        if (PX_VM_STACK(Ins, 0).type != PX_VM_VARIABLE_TYPE_STRING)        {                PX_VM_RET(Ins, PX_VM_Variable_int(0));                return PX_TRUE;        }        PX_PianoModelTriggerKey(&pianoModel, PX_VM_STACK(Ins, 0)._string.buffer);        printf(PX_VM_STACK(Ins, 0)._string.buffer);        printf("\n");        return PX_TRUE;}px_bool PX_VM_PianoKeyDownIndex(PX_VM* Ins, px_void* ptr){        if (PX_VM_STACK(Ins, 0).type != PX_VM_VARIABLE_TYPE_INT)        {                PX_VM_RET(Ins, PX_VM_Variable_int(0));                return PX_TRUE;        }        PX_PianoModelTriggerIndex(&pianoModel, PX_VM_STACK(Ins, 0)._int);                return PX_TRUE;}px_bool PX_VM_Wait(PX_VM* Ins, px_void* ptr){        if (PX_VM_STACK(Ins, 0).type != PX_VM_VARIABLE_TYPE_INT)        {                PX_VM_RET(Ins, PX_VM_Variable_int(0));                return PX_TRUE;        }        Ins->pThread[Ins->T].sleep = PX_VM_STACK(Ins, 0)._int;        PX_VM_RET(Ins, PX_VM_Variable_int(0));        return PX_TRUE;}px_bool PX_VM_CreateThread(PX_VM* Ins, px_void* userptr){        if (PX_VM_STACK(Ins, 0).type != PX_VM_VARIABLE_TYPE_STRING)        {                PX_VM_RET(Ins, PX_VM_Variable_int(0));                return PX_TRUE;        }        if (!PX_VMBeginThreadFunction(&vmInstance, PX_VMGetFreeThreadId(Ins), PX_VM_STACK(Ins, 0)._string.buffer, PX_NULL, 0))        {                PX_VM_RET(Ins, PX_VM_Variable_int(0));        }        return PX_TRUE;}int main(){        FILE* pf;        px_memory payload;        px_memorypool mp = MP_Create(runtime_buffer, sizeof(runtime_buffer));        px_dword now, lastUpdateTime;        printf("PainterEngine Piano Executer\n");        printf("load player script\n");        fopen_s(&pf,"piano.txt", "rb");        if (!pf)        {                printf("player script not found\n");                return PX_FALSE;        }        fread(script, 1, sizeof(script), pf);        fclose(pf);        printf("compiling....\n");        PX_MemoryInitialize(&mp, &payload);        if (!PX_CompilerInitialize(&mp, &compiler))return PX_FALSE;        if (!PX_CompilerAddSource(&compiler, script))        {                printf("compiler error:script too long.\n");                return PX_FALSE;        }        if (!PX_CompilerCompile(&compiler, &payload, "piano"))        {                printf("compiler error.check your script and try again\n");                return PX_FALSE;        }        printf("compile done\n");        if (!PX_VMInitialize(&vmInstance, &mp, payload.buffer, payload.usedsize))        {                return PX_FALSE;        }        PX_VMRegistryHostFunction(&vmInstance, "PianoKeyDown", PX_VM_PianoKeyDown, PX_NULL);        PX_VMRegistryHostFunction(&vmInstance, "PianoKeyDownIndex", PX_VM_PianoKeyDownIndex, PX_NULL);        PX_VMRegistryHostFunction(&vmInstance, "Wait", PX_VM_Wait, PX_NULL);        PX_VMRegistryHostFunction(&vmInstance, "StartTrack", PX_VM_CreateThread, PX_NULL);        printf("piano model building...\n");        PX_PianoModelInitialize(&pianoModel, PX_NULL, PX_NULL);        printf("build succeeded...\n");        if (!PX_SoundPlayInitialize(&mp, &soundPlay))        {                return PX_FALSE;        }        if (!PX_AudioInitialize(&soundPlay))        {                printf("sound device error.\n");                return PX_FALSE;        }        PX_AudioInitializeHwnd(GetConsoleWindow());        PX_SoundPlaySetUserRead(&soundPlay, PX_PianoRead, PX_NULL);        printf("running...\n");        lastUpdateTime = PX_TimeGetTime();        PX_VMBeginThreadFunction(&vmInstance, 0, "main", 0, 0);        while (PX_TRUE)        {                px_dword elapsed;                now = PX_TimeGetTime();                elapsed = now - lastUpdateTime;                lastUpdateTime = now;                PX_VMRunTime(&vmInstance, -1, elapsed);                if (!PX_VMIsRuning(&vmInstance))                {                        break;                }        }}
回复

使用道具 举报

该用户从未签到

3

主题

34

帖子

124

积分

注册会员

Rank: 2

积分
124
发表于 2022-9-27 12:05:33 | 显示全部楼层
Java 类别的开源项目我系统整理过,你可以在我的网站上找到对应的内容,地址:Java 开源项目精选 。

教程类
Java


  • JavaGuide :【Java 学习+面试指南】 一份涵盖大部分 Java 程序员所需要掌握的核心知识。
  • interview-guide :总结了后端面试八股文中的重点,希望能帮助各位准备互联网开发岗校招面试的同学。
  • toBeBetterJavaer :一份通俗易懂、风趣幽默的 Java 学习指南,内容涵盖 Java 基础、Java 集合框架、Java 并发编程、JVM、Java 企业级开发(Git、SSM、Spring Boot)等知识点。
  • advanced-java :互联网 Java 工程师进阶知识完全扫盲:涵盖高并发、分布式、高可用、微服务、海量数据处理等领域知识。
  • toBeTopJavaer :Java 工程师成神之路 。
  • technology-talk : 汇总 java 生态圈常用技术框架、开源中间件,系统架构、数据库、大公司架构案例、常用三方类库、项目管理、线上问题排查、个人成长、思考等知识
  • JCSprout :处于萌芽阶段的 Java 核心知识库。
  • bestJavaer : 这是一个成为更好的 Java 程序员的系列教程。
  • java-design-patterns : 用 Java 实现的设计模式。
计算机基础


  • cs-self-learning :计算机自学指南,汇总欧美众多名校高质量计算机课程。
  • CS-Notes :技术面试必备基础知识、Leetcode 题解、后端面试、Java 面试、春招、秋招、操作系统、计算机网络、系统设计。
  • Waking-Up :计算机基础(计算机网络/操作系统/数据库/Git...)面试问题全面总结。
系统设计

SpringBoot


  • springboot-guide :SpringBoot 核心知识点总结。 基于 Spring Boot 2.19+。
  • SpringAll :循序渐进,学习 Spring Boot、Spring Boot & Shiro、Spring Cloud、Spring Security & Spring Security OAuth2,博客 Spring 系列源码。
  • Springboot-Notebook :一系列以 Spring Boot 为基础开发框架,整合 Redis 、 Rabbitmq 、ES 、MongoDB 、Spring Cloud、Kafka、Skywalking 等互联网主流技术,实现各种常见功能点的综合性案例。
  • springboot-learning-example :Spring Boot 实践学习案例,是 Spring Boot 初学者及核心技术巩固的最佳实践。
  • spring-boot-demo :spring boot demo 是一个用来深度学习并实战 spring boot 的项目,目前总共包含 63 个集成 demo,已经完成 52 个。
  • SpringBoot-Labs :Spring Boot 系列教程。
相关文章:Github 点赞接近 100k 的 SpringBoot 学习教程+实战推荐!牛批!
SpringCloud


  • SpringCloudLearning : 方志朋的《史上最简单的 Spring Cloud 教程源码》。
  • springcloud-learning : 一套涵盖大部分核心组件使用的 Spring Cloud 教程。
  • SpringCloud :基于 SpringCloud2.1 的微服务开发脚手架,整合了 spring-security-oauth2、nacos、feign、sentinel、springcloud-gateway 等。
相关文章:Github 点赞接近 70k 的 Spring Cloud 学习教程+实战项目推荐!牛批!
Nginx


  • nginx-tutorial :一系列 Nginx 极简教程,包含HTTP 反向代理、HTTPS 反向代理、负载均衡、静态站点、文件服务器搭建等实战内容。
大数据


  • BigData-Notes :大数据入门指南 ⭐️。
  • flink-learning :含 Flink 入门、概念、原理、实战、性能调优、源码解析等内容。
开源书籍


  • 《Effective Java(第 3 版)》中英对照版 :《Effective Java(第 3 版)各章节的中英文学习参考。
  • 《DDIA(设计数据密集型应用)》中文版 :《Designing Data-Intensive Application》DDIA 中文翻译。
  • 《凤凰架构》 :讨论如何构建一套可靠的大型分布式系统。
  • 《分布式系统模式》中文版 :《Patterns of Distributed Systems》中文翻译。
实战项目类
博客/论坛/考试系统

下面这几个项目都是非常适合 Spring Boot 初学者学习的,下面的大部分项目的总体代码架构我都看过,个人觉得还算不错,不会误导没有实际做过项目的朋友。

  • vhr :微人事是一个前后端分离的人力资源管理系统,项目采用 SpringBoot+Vue 开发。
  • favorites-web :云收藏 Spring Boot 2.X 开源项目。云收藏是一个使用 Spring Boot 构建的开源网站,可以让用户在线随时随地收藏的一个网站,在网站上分类整理收藏的网站或者文章。
  • community :开源论坛、问答系统,现有功能提问、回复、通知、最新、最热、消除零回复功能。功能持续更新中…… 技术栈 Spring、Spring Boot、MyBatis、MySQL/H2、Bootstrap。
  • VBlog :V 部落,Vue+SpringBoot 实现的多用户博客管理平台!
  • My-Blog : My Blog 是由 SpringBoot + Mybatis + Thymeleaf 等技术实现的 Java 博客系统,页面美观、功能齐全、部署简单及完善的代码,一定会给使用者无与伦比的体验。
  • uexam :一个非常不错的考试系统!考试系统应用场景还挺多的,不论是对于在校大学生还是已经工作的小伙伴,并且,类似的私活也有很多。相关阅读:《好一个 Spring Boot 开源在线考试系统!解决了我的燃眉之急》 。
  • PassJava-Platform :一个基于微服务(SpringBoot、Spring Cloud)的面试刷题系统!相关阅读:《一个基于 Spring Cloud 的面试刷题系统。面试、毕设、项目经验一网打尽》。
相关文章:想要搭建个人博客?我调研了 100 来个 Java 开源博客系统,发现这 5 个最好用!
商城

下面的商城系统大多比较复杂比如 mall ,如果没有 Java 基础和 Spring Boot 都还没有摸熟的话不推荐过度研究下面几个项目或者使用这些项目当作毕业设计。

  • mall :mall 项目是一套电商系统,包括前台商城系统及后台管理系统,基于 SpringBoot+MyBatis 实现。
  • mall-swarm : mall-swarm 是一套微服务商城系统,采用了 Spring Cloud Greenwich、Spring Boot 2、MyBatis、Docker、Elasticsearch 等核心技术,同时提供了基于 Vue 的管理后台方便快速搭建系统。
  • onemall :mall 商城,基于微服务的思想,构建在 B2C 电商场景下的项目实战。核心技术栈,是 Spring Boot + Dubbo 。未来,会重构成 Spring Cloud Alibaba 。
  • litemall : 又一个小商城。litemall = Spring Boot 后端 + Vue 管理员前端 + 微信小程序用户前端 + Vue 用户移动端。
  • xmall :基于 SOA 架构的分布式电商购物商城 前后端分离 前台商城:Vue 全家桶 后台管理系统:Spring/Dubbo/SSM/Elasticsearch/Redis/MySQL/ActiveMQ/Shiro/Zookeeper 等
  • newbee-mall :newbee-mall 项目(新蜂商城)是一套电商系统,包括 newbee-mall 商城系统及 newbee-mall-admin 商城后台管理系统,基于 Spring Boot 2.X 及相关技术栈开发。
权限管理系统

权限管理系统在企业级的项目中一般都是非常重要的,如果你需求去实际了解一个不错的权限系统是如何设计的话,推荐你可以参考下面这些开源项目。

  • Spring-Cloud-Admin :Cloud-Admin 是国内首个基于 Spring Cloud 微服务化开发平台,具有统一授权、认证后台管理系统,其中包含具备用户管理、资源权限管理、网关 API 管理等多个模块,支持多业务系统并行开发,可以作为后端服务的开发脚手架。代码简洁,架构清晰,适合学习和直接项目中使用。核心技术采用 Spring Boot2 以及 Spring Cloud Gateway 相关核心组件,前端采用 vue-element-admin 组件。
  • pig:(gitee)基于 Spring Boot 2.2、 Spring Cloud Hoxton & Alibaba、 OAuth2 的 RBAC 权限管理系统。
  • FEBS-Shiro :Spring Boot 2.1.3,Shiro1.4.0 & Layui 2.5.4 权限管理系统。
  • eladmin : 项目基于 Spring Boot 2.1.0 、 Jpa、 Spring Security、redis、Vue 的前后端分离的后台管理系统,项目采用分模块开发方式, 权限控制采用 RBAC,支持数据字典与数据权限管理,支持一键生成前后端代码,支持动态路由。
  • SpringBoot-Shiro-Vue :提供一套基于 Spring Boot-Shiro-Vue 的权限管理思路.前后端都加以控制,做到按钮/接口级别的权限。
快速开发脚手架


  • RuoYi :RuoYi 一款基于基于 SpringBoot 的权限管理系统 易读易懂、界面简洁美观,直接运行即可用 。
  • ruoyi-vue-pro : 基于 SpringBoot,Spring Security,JWT,Vue & Element 的前后端分离权限管理系统。
  • Guns : 我在上大学的时候就了解和接触过了这个项目,当时我还是一个 Spring 入门不太久的小菜鸟。一晃,不经意间已经过去快 3 年了。Guns 功能齐全 ,采用主流框架 Spring Boot2.0+开发,并且支持 Spring Cloud Alibaba 微服务)。 适合企业后台管理网站的快速开发场景,不论是对于单体和微服务都有支持。
  • JHipster :开源应用程序平台,可在几秒钟内创建 Spring Boot + Angular / React 项目!
  • JeecgBoot :一款基于代码生成器的 JAVA 快速开发平台,开源界“小普元”超越传统商业企业级开发平台!
  • zuihou-admin-cloud :基于SpringCloud(Hoxton.SR7)
    + SpringBoot(2.2.9.RELEASE)
    的 SaaS 型微服务快速开发平台,具备用户管理、资源权限管理、网关统一鉴权、Xss 防跨站攻击、自动代码生成、多存储系统、分布式事务、分布式定时任务等多个模块,支持多业务系统并行开发, 支持多服务并行开发,可以作为后端服务的开发脚手架。
  • Erupt : 使用 Java 注解,快速开发 Admin 管理后台。零前端代码、零 CURD、不生成任何代码、自动建表、注解式 API,支持所有主流数据库,支持自定义页面,支持多数据源,提供二十几类业务组件,十几种展示形式,支持逻辑删除,动态定时任务,前端后端分离等。 核心技术:Spring Boot、JPA、Reflect、TypeScript、NG-ZORRO 等。
  • SmartAdmin : 互联网企业级的通用型中后台解决方案!使用最前沿的前后台技术栈 SpringBoot 和 Vue,前后端分离!代码质量非常高!
  • BallCat :一个功能完善的快速开发脚手架!除了最基本的权限管理,定时任务功能之外,还额外支持 XSS 过滤,SQL 防注入、数据脱敏等多种功能
相关文章

  • 听说你要接私活?Guide 连夜整理了 5 个开源免费的 Java 项目快速开发脚手架。
  • 解放双手,再来推荐 5 个 Java 项目开发快速开发脚手架!项目经验和私活都不愁了!
造轮子


  • guide-rpc-framework :一款基于 Netty+Kyro+Zookeeper 实现的自定义 RPC 框架-附详细实现过程和相关教程。
  • mini-spring :简化版的 Spring 框架,能帮助你快速熟悉 Spring 源码和掌握 Spring 的核心原理。代码极度简化,保留了 Spring 的核心功能,如 IoC 和 AOP、资源加载器等核心功能。
  • itstack-demo-jvm :通过 Java 代码来实现 JVM 的基础功能(搜索解析 class 文件、字节码命令、运行时数据区等。相关阅读:《zachaxy 的手写 JVM 系列》
  • Freedom :自己 DIY 一个具有 ACID 的数据库。相关项目:MYDB(一个简单的数据库实现)、toyDB(Rust 实现的分布式 SQL 数据库)。
专注 Java 原创干货分享,大三开源JavaGuide (Java学习+面试指南),开源4年,Github 120k star。

原创不易,欢迎点赞分享,欢迎关注 @JavaGuide,我会持续分享原创干货!加油,冲
回复

使用道具 举报

该用户从未签到

4

主题

14

帖子

46

积分

新手上路

Rank: 1

积分
46
发表于 2022-9-27 12:12:13 | 显示全部楼层
给大家推荐几个很不错的C++ github开源项目:
1.TinyWebServer
这是一个帮助初学者快速实现网络编程、搭建属于自己的轻量级Web服务器的小项目。
项目虽小但真的五脏俱全:

  • 使用线程池、非阻塞Socket、epoll(ET/LT均实现)、事件处理(Reactor及模拟Proactor)的并发模型。
  • 使用状态机解析HTTP请求报文,支持解析GET和POST请求
  • 访问服务器数据库实现web端用户注册、登录功能,可以请求服务器图片和视频文件
  • 实现同步/异步日志系统,记录服务器运行状态
  • 经Webbench压力测试可以实现上万的并发连接数据交换
代码地址:https://github.com/qinguoyi/TinyWebServer
感谢大家耐心阅读,程序员除了学好语言之外,计算机体系基础知识也很重要,尤其是算法,重中之重,大厂面试必考算法。这里给大家送一本阿里P8撰写的算法刷题笔记,身边不少朋友通过它加入大厂:





看看这本书的目录,非常经典:

2. OpenSSL
一个强大的安全套接字层密码库,加密HTTPS,加密SSH都贼好用,同时它还可以用于跨平台密码工具。
OpenSSL实现了以下功能:

  • 数据保密性:信息加密就是把明码的输入文件用加密算法转换成加密的文件以实现数据的保密。加密的过程需要用到密钥来加密数据然后再解密。
  • 数据完整性:加密也能保证数据的一致性。例如:消息验证码(MAC),能够校验用户提供的加密信息,接收者可以用MAC来校验加密数据,保证数据在传输过程中没有被篡改过。
  • 安全验证:加密的另外一个用途是用来作为个人的标识,用户的密钥可以作为他的安全验证的标识。SSL是利用公开密钥的加密技术(RSA)来作为用户端与服务器端在传送机密资料时的加密通讯协定。
代码地址:https://www.openssl.org/source
3.log4cpp
一个支持多线程、重定向的强大日志库,精简的代码实现绝对能让你有所收获。
Log4cpp有以下优点:

  • 提供应用程序运行上下文,方便跟踪调试
  • 可扩展的、多种方式记录日志,包括命令行、文件、回卷文件、内存、syslog服务器、Win事件日志等
  • 可以动态控制日志记录级别,在效率和功能中进行调整
  • 所有配置可以通过配置文件进行动态调整
  • 支持Java、C++、C、python等多种语言
代码地址:http://log4cplus.sourceforge.net
4.Chromium
这个开源代码学习起来难度较大,光是编译通过都要花费不力气,但的确值得好好学习。
还记得我从初中级工程师进化到高级工程师就是在一个个通宵研读Chromium代码中度过的。
Chromium的确够复杂,比如Chromium的多进程架构图:

chromium的代码目录包含这些模块:
base:通用代码集和基础组件实现库,包含字符串、文件、线程、消息队列等工具类集合。
cc:负责渲染绘制,chrome为什么高效就是因为有它。chrome:浏览器界面模块,大量调用了cc提供的接口。
content:多进程沙盒浏览器莫款,管理多进程和多线程。
gpu,OpenGL封装实现:CommandBuffer和OpenGL的兼容支持模块。
net:网络功能实现模块。
media:多媒体封装代码,实现视频播放等功能。
mojo:跨语言(C++ / Java / JavaScript)跨平台的进程间对象通信模块,类似AIDL的功能。
skia:图形库。
third_party:排版引擎。
ui:UI库。
ipc: 网络进程通信模块。
v8,V8 JavaScript 引擎库。
以上每一个模块要想真正理解,都得花很大的功夫,简单用一张图来说明以上模块的关系:

代码地址:https://chromium.googlesource.com/chromium/src.git
讲真,如果你是C++技术栈,把以上四个小项目学会,基本就是C++高级工程师水平了。
当年我看完这些代码瘦了好几斤,还流了不少鼻血,真的是一点点硬啃下来的。
另外,以上这些方法还需要配合多实操、多实践、多写代码!
纸上得来终觉浅,需知此事要躬行!只要自己做过的,能硬核输出的知识,才真正是自己的知识!
这里顺便给大家推荐一个github项目,这个项目收录了程序员需要学习的方方面面,包括计算机经典书籍、经典大厂面试题、各种图解tcp/ip、操作系统,欢迎大家访问学习,请不要吝啬您的star:
回复

使用道具 举报

该用户从未签到

8

主题

46

帖子

140

积分

注册会员

Rank: 2

积分
140
发表于 2022-9-27 12:18:53 | 显示全部楼层
一、C++ 入门级项目


1.1 一个项目入门 C++ 足以:CPlusPlusThings
CPlusPlusThings 是国人开源一个 C++ 学习项目。它系统地将 C++ 学习分为了【基础进阶】、【实战系列】、【C++2.0 新特性】、【设计模式】和【STL 源码剖析】、【并发编程】、【C++ 惯用法】、【学习课程】、【工具】、【拓展】。
作为一个全面系统的 C++ 学习项目,CPlusPlusThings 是优秀的,它合理地安排了 10 Days 的实战部分,在实战中了解语法和函数用法,唯一不足的是,在注释部分有些不尽人意,对部分新手程序员并不是很友好。【基础进阶】部分内容:


  • const 那些事
  • static 那些事
  • decltype 那些事
  • 引用与指针那些事
  • 宏那些事
GitHub 地址→https://github.com/Light-City/CPlusPlusThings
补充:






1.2 基础部分之算法:C-Plus-Plus
C-Plus-Plus 是收录用 C++ 实现的各种算法的集合,并按照 MIT 许可协议进行授权。这些算法涵盖了计算机科学、数学和统计学、数据科学、机器学习、工程等各种主题。除外,你可能会发现针对同一目标的多个实现使用不同的算法策略和优化。
GitHub 地址→https://github.com/TheAlgorithms/C-Plus-Plus
二、Java

1.mall:电商系统
包括前台商城系统及后台管理系统,基于SpringBoot+MyBatis实现。
前台商城系统包含首页门户、商品推荐、商品搜索、商品展示、购物车、订单流程、会员中心、客户服务、帮助中心等模块。
后台管理系统包含商品管理、订单管理、会员管理、促销管理、运营管理、内容管理、统计报表、财务管理、权限管理、设置等模块。



2.秒杀系统设计
关于高并发大流量如何进行秒杀架构的项目。学习之前,先快速入门MQ、SpringBoot、Redis、Dubbo、ZK、Maven,lua,效果会更好!



3.spring-boot-api-project-seed
基于Spring Boot & MyBatis的种子项目,用于快速构建中小型API、RESTful API~可以帮助我们摆脱重复劳动,专注于业务代码的编写,告别996。


4.微人事管理系统
前后端分离的人力资源管理系统,项目采用SpringBoot+Vue开发。



5.MarkdownEditors
基于Android的Markdown编辑器,项目功能本身不难,但是细节很多。


6.博客系统
基于SSM实现的个人博客系统,适合初学SSM和个人博客制作的同学学习。主要涉及技术包括的包括Maven,Spring,SpringMVC,MyBatis,Redis,JSP等。


7.MyBatis-Spring-Boot
是Spring Boot集成MyBatis的基础项目。


8.webporter
基于 webmagic 的 Java 爬虫项目。核心简单,但是涵盖爬虫应用的完整流程,是爬虫应用的实践样例。

9.shopping-management-system
该项目为多个小项目的集合,并且在持续更新中。内容包括网购管理系统、图书管理系统、超市管理系统等。适合Java基础到入门的爱好者。


10.会议系统
支持音频、视频、幻灯片(带有白板控件),聊天和屏幕的实时共享。用于在线学习可以实现:

  • 在线辅导(一对一)
  • 课堂翻转(在会议前记录内容)
  • 小组协作(多对多)
  • 在线课程(一对多)

<hr>最后,再给大家送上点干货!

下面这是一个高赞回答合集,建议大家点赞&收藏,Mark住别丢了,大学期间绝对用得上
1、怎么学好数据结构,看下面这个回答,已经获得了 21000+ 的赞和 50000+的收藏。

2、如何系统地学习算法,看下面这个回答,已经获得了 11000+ 的赞和 26000+的收藏。

3、新手该如何使用 GitHub,看下面这个回答,如果在大学期间就知道使用 GitHub ,那么能力远超同龄人。

4、想成为一名优秀的程序员,那么这些程序员平时都喜欢逛的论坛怎么说你也得收藏一些吧。

5、无论别人怎么说,我都是坚定不移的选择计算机专业。

6、如何系统地学习 C++ ,这个回答能帮你找到路线。

7、想要准备 Java 面试,那么这些面试题必须掌握。

赶紧点赞和收藏吧~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表