伤心客 发表于 2024-8-16 10:19:34

如何快速自学开源项目?试试我的诀窍

大家好,我是程序员鱼皮。上周二晚上我直播带大家学习了一个 GitHub 上不错的开源聊天室项目 MallChat ,大家表示学到了很多,所以我专门剪出了一期项目导学视频,分享给大家: https://www.bilibili.com/video/BV1Q142147yk
https://pic.yupi.icu/1/image-20240813101949787.png
在讲解项目的过程中,我发现很多同学并不清楚如何快速学习项目、以及如何快速阅读源码。本日这篇文章,我就带大家领悟这些技能,以后再自学项目会轻松很多~
 
如何快速学习项目?

1、初步相识项目

打开一个 GitHub 上的开源项目后,第一件事就是去看项目的 README.md 介绍文档,可以速览一遍看看有没有帮助你学习的内容,好比技能选型、功能介绍、如何快速启动项目、架构设计、注意事项等等。
以 MallChat 聊天室为例:https://github.com/zongzibinbin/MallChat ,项目介绍文档中包含对核心功能的介绍,可以看看有没有自己感兴趣的功能:
https://pic.yupi.icu/1/%E9%A1%B9%E7%9B%AE%E5%A4%A7%E7%BA%B2.jpg
假如是公司内部的项目、或者比较成熟的开源项目,还会有 Wiki 文档,往往对项目的介绍会更加详细,但暂时不用通篇阅读,关注 “快速启动项目” 或者 “项目结构介绍” 的部分即可。
像我假如决心要学一个新的项目,除了 GitHub 官方文档外,还会在网上搜集一些相关资料,整理到自己的文档中,便于后续学习时能快速找到。
 
2、相识项目结构

看完项目介绍文档后,发起先从天主视角团体相识项目的结构,好比项目分为哪些模块、每个模块大致有哪些文件、文件命名规则如何等等,但不用进一步明白模块(或目次)内部的组织和实现方式。尤其对于复杂的微服务项目来说,如许做可以快速帮你定位到学习重点。
大多数情况下,大家应该都是把项目代码下载到当地来学习。但假如你只是为了快速相识项目,并不计划深入学习,实在有更高效的方式。
好比在 GitHub 仓库的主页按 。 句号键,就能快速进入网页版的代码编辑器,跟当地浏览项目的体验几乎一致:
https://pic.yupi.icu/1/image-20240813103851222.png
对于有肯定经验的开辟者,一样平常会先查找关键文件,好比前端项目找 package.json(Node.js)、Java 项目找 pom.xml(Maven)或 build.gradle(Gradle)、Python 项目找 requirements.txt 或 setup.py 等,这些文件通常包含项目依赖和设置信息。假如项目是比较规范的,一样平常通过依赖和设置信息就能快速明白项目结构了。
举个例子,看到 aop 依赖,就知道项目用到了切面;看到 freemarker 依赖,就知道项目资源目次中会有 FTL 模板文件;看到 Redisson,就知道会有初始化 Redisson 客户端的设置类,这些就是积累经验的重要性了。
 
3、运行项目

假如要正式学习项目,先不要急着去阅读源码,而是要先把项目在当地乐成运行,便于后续边调试边学习。
运行项目的步调很简朴,用 git clone 命令将项目复制到你的电脑,然后根据 README 文件或其他文档中的指示,安装项目的必要依赖项、修改当地运行设置、并终极运行项目。
虽然步调很简朴,但实际往往是大家把项目拉到当地后各种各样的报错信息,所以运行项目时要格外注意以下几点:

[*]确保自己体系环境和项目要求一致,好比注意下前端 Node.js 和后端 JDK 版本要求。
[*]确保项目依赖的版本和项目要求一致,好比后端依赖的 MySQL 和 Redis 版本。对于这种主流的技能,一样平常情况下只要别用太新的版本,基本不会影响项目的运行。
[*]修改当地运行设置为自己的,好比数据库账号、密码等,而且要格外注意不要读取错了设置文件,否则可能改了半天还在迷惑 “怎么设置没生效呢”?
碰到报错是很正常的,由于不是所有的开源项目都做到了 “易用易上手”,碰到报错时,我们只要定位到关键报错信息,然后顺藤摸瓜找到对应的文件去修改即可。实在搞不定,这不还有搜索引擎和 AI 么?
这里分享一个常用的快速运行项目的本领。有的时候项目用到了很多依赖(好比 MallChat 中用了 MinIO、RocketMQ 等),但是我们当地并没有安装这些依赖,导致项目无法启动。如下图,由于我没安装 RocketMQ,导致启动时连接 RocketMQ 报错:
https://pic.yupi.icu/1/1722932260989-8aed7ccf-16ed-4eaf-aeff-fbde397da1fc.png
要想启动项目,传统方法就是自己安装所有依赖,但假如项目只有一个不起眼的位置用到了某个依赖,实在花时间去安装性价比不高。这时,我们可以用一种更简朴的方法,直接禁用掉用到这些依赖的 Bean 加载。
好比在启动类加上 exclude ,就能快速禁用某些依赖的自动加载,示例代码如下:
@SpringBootApplication(exclude = {RocketMQAutoConfiguration.class})但是,禁用了 RocketMQ Bean 的初始化后,假如有代码用到了这个 Bean,就会由于缺失依赖的 Bean 而报错。这种情况下,可以利用 @Lazy 注解对 Bean 进行懒加载,用到的时候才会加载,启动项目时就不会报错了~ 示例代码如下:
public class MQProducer {<br>   @Autowired<br>   @Lazy<br>   private RocketMQTemplate rocketMQTemplate;<br>} 
4、相识业务流程和库表设计

在阅读代码学习前,最好先团体相识项目的业务流程和库表设计,有助于明白后续阅读源码时的顺序和学习方向。
核心业务流程可以通过阅读文档、或者自己体验体系的方式来相识。好比对于聊天室体系,核心业务流程就是:用户登录 => 用户上线 => 添加好友 => 创建房间 => 加入房间 => 发送消息 => 消息审核 => 其他用户吸收消息 => 回复消息。
相识项目的库表设计也是有本领的,比起直接看 SQL 文件,一样平常我会先在当地初始化数据库,然后通过可视化图表来查看。
https://pic.yupi.icu/1/image-20240813114734440.png
如图,表之间的关系一目了然!好比房间又分为单聊和群聊,一个房间内有多个会话和消息:
https://pic.yupi.icu/1/image-20240813114823749.png
 
5、阅读代码

刚开始阅读代码时,不要急着一行代码一行代码地按照顺序去阅读,而是要先团体明白每个目次的 作用和目次内部的文件组织形式 ,但暂时不必深入明白详细的实现方式。
举个例子,对于 MallChat 项目,你要先能明白红字中的信息:
https://pic.yupi.icu/1/image-20240813111041045.png
查看某个目次内部的文件组织形式时,有一个小本领。可以直接在 IDEA 中右键点击某个包,查看 UML 结构图:
https://pic.yupi.icu/1/image-20240813111551735.png
通过结构图,我们可以速览类之间的关系。好比下图中,工厂创建策略、两个详细策略继承了抽象策略类:
https://pic.yupi.icu/1/image-20240813111617407.png
之后,你就可以找到感兴趣的项目核心功能模块进行学习了,分享几个学习本领:
1)假如想快速学习某个功能的实现,发起是通过文档等方式 先相识业务流程 ,再学习源码。学习源码时,发起利用 Debug 模式启动项目,通过接口文档(或前端)发送请求,完备地分析一个请求的处理流程。
可以通过 IDEA 的 Endpoints 功能快速查看项目中的接口,并定位到源码:
https://pic.yupi.icu/1/image-20240813112517519.png
2)假如想快速相识单个文件的核心结构(好比方法和属性),可以利用 IDEA 的 Structure 功能,如图:
https://pic.yupi.icu/1/image-20240813112224522.png
3)可以通过 Call Hierarchy 功能查看方法、类或变量在程序中被调用的层次结构和关系。好比下图我查看了 doMark 方法的调用者视图,可以看到哪些方法调用了它,便于快速明白代码之间的交互,不用自己一层一层点进去看了。
https://pic.yupi.icu/1/image-20240813113004748.png
4)可以通过 Find Usages 功能快速查看一个方法或者类在项目中所有的利用位置:
https://pic.yupi.icu/1/image-20240813113504673.png
5)固然,对于复杂的功能,单独看代码可能是明白不了的,这时就需要搭配文档和代码注释了。什么?没有文档?!不写注释?!那就直接通过 Git 版本控制工具找到原作者去询问吧。
https://pic.yupi.icu/1/image-20240813113843347.png
 
6、明白项目开辟流程和规范

在你熟悉了项目后,就可以实验参与开辟了。可以先通过 阅读项目的贡献指南或开辟文档 来明白项目的开辟流程、开辟规范等,跟项目的其他开辟者保持一致。假如有迷惑,可以看看别人的代码中是怎么做的,有样学样就行;实在不确定的话,最好是提前询问,不要提交一堆不符合规范的代码,再被别人打回来,浪费彼此的时间。
 
7、参与项目

最后,学习开源项目最好的方式就是亲身参与项目的开辟,这也是我不停发起大家做的,不仅能提拔本领、也能给自己的简历加分。
实在参与开源项目没有那么困难,可以先在项目的 Issues 部分查看别人反馈的 Bug,而且帮忙修复,熟悉整个参与开源项目的流程。之后还可以 跟作者沟通 并实验添加新功能、进行优化等。
假如想让你贡献的代码更快被作者接受,就肯定要做好沟通!由于我自己也有很多开源项目,也有小伙伴给我贡献过代码,但不可能所有的代码都接受。由于每个人关于项目的想法是不同的,在没有跟作者互换的情况下,可能你做的功能对项目并没有帮助、超出了项目的规划,反而会让项目更加复杂。团队开辟也是一样,大家要一起评审需求,确保需求是有价值的、和项目定位是匹配的,而不是谁想加功能就加功能。
 
 
OK,以上就是本期分享,原创不易,有帮助的话还请点赞支持哦!
 
更多编程学习资源


[*]Java前端程序员必做项目实战教程+毕设网站
[*]程序员免费编程学习互换社区(自学必备)
[*]程序员保姆级求职写简历指南(找工作必备)
[*]程序员免费面试刷题网站工具(找工作必备)
[*]最新Java零基础入门学习路线 + Java教程
[*]最新Python零基础入门学习路线 + Python教程
[*]最新前端零基础入门学习路线 + 前端教程
[*]最新数据结构和算法零基础入门学习路线 + 算法教程
[*]最新C++零基础入门学习路线、C++教程
[*]最新数据库零基础入门学习路线 + 数据库教程
[*]最新Redis零基础入门学习路线 + Redis教程
[*]最新计算机基础入门学习路线 + 计算机基础教程
[*]最新小程序入门学习路线 + 小程序开辟教程
[*]最新SQL零基础入门学习路线 + SQL教程
[*]最新Linux零基础入门学习路线 + Linux教程
[*]最新Git/GitHub零基础入门学习路线 + Git教程
[*]最新操作体系零基础入门学习路线 + 操作体系教程
[*]最新计算机网络零基础入门学习路线 + 计算机网络教程
[*]最新设计模式零基础入门学习路线 + 设计模式教程
[*]最新软件工程零基础入门学习路线 + 软件工程教程

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 如何快速自学开源项目?试试我的诀窍