论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
ToB企服应用市场:ToB评测及商务社交产业平台
»
论坛
›
软件与程序人生
›
程序人生
›
如何快速自学开源项目?试试我的诀窍
如何快速自学开源项目?试试我的诀窍
伤心客
金牌会员
|
2024-8-16 10:19:34
|
显示全部楼层
|
阅读模式
楼主
主题
821
|
帖子
821
|
积分
2463
大家好,我是程序员鱼皮。上周二晚上我直播带大家学习了一个 GitHub 上不错的开源聊天室项目 MallChat ,大家表示学到了很多,所以我专门剪出了一期项目导学视频,分享给大家:
https://www.bilibili.com/video/BV1Q142147yk
在讲解项目的过程中,我发现很多同学并不清楚如何快速学习项目、以及如何快速阅读源码。本日这篇文章,我就带大家领悟这些技能,以后再自学项目会轻松很多~
如何快速学习项目?
1、初步相识项目
打开一个 GitHub 上的开源项目后,第一件事就是去看项目的 README.md 介绍文档,可以速览一遍看看有没有帮助你学习的内容,好比技能选型、功能介绍、如何快速启动项目、架构设计、注意事项等等。
以 MallChat 聊天室为例:
https://github.com/zongzibinbin/MallChat
,项目介绍文档中包含对核心功能的介绍,可以看看有没有自己感兴趣的功能:
假如是公司内部的项目、或者比较成熟的开源项目,还会有 Wiki 文档,往往对项目的介绍会更加详细,但暂时不用通篇阅读,关注 “快速启动项目” 或者 “项目结构介绍” 的部分即可。
像我假如决心要学一个新的项目,除了 GitHub 官方文档外,还会在网上搜集一些相关资料,整理到自己的文档中,便于后续学习时能快速找到。
2、相识项目结构
看完项目介绍文档后,发起先从天主视角团体相识项目的结构,好比项目分为哪些模块、每个模块大致有哪些文件、文件命名规则如何等等,但不用进一步明白模块(或目次)内部的组织和实现方式。尤其对于复杂的微服务项目来说,如许做可以快速帮你定位到学习重点。
大多数情况下,大家应该都是把项目代码下载到当地来学习。但假如你只是为了快速相识项目,并不计划深入学习,实在有更高效的方式。
好比在 GitHub 仓库的主页按 。 句号键,就能快速进入网页版的代码编辑器,跟当地浏览项目的体验几乎一致:
对于有肯定经验的开辟者,一样平常会先查找关键文件,好比前端项目找 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 报错:
要想启动项目,传统方法就是自己安装所有依赖,但假如项目只有一个不起眼的位置用到了某个依赖,实在花时间去安装性价比不高。这时,我们可以用一种更简朴的方法,直接禁用掉用到这些依赖的 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 文件,一样平常我会先在当地初始化数据库,然后通过可视化图表来查看。
如图,表之间的关系一目了然!好比房间又分为单聊和群聊,一个房间内有多个会话和消息:
5、阅读代码
刚开始阅读代码时,不要急着一行代码一行代码地按照顺序去阅读,而是要先团体明白每个目次的
作用和目次内部的文件组织形式
,但暂时不必深入明白详细的实现方式。
举个例子,对于 MallChat 项目,你要先能明白红字中的信息:
查看某个目次内部的文件组织形式时,有一个小本领。可以直接在 IDEA 中右键点击某个包,查看 UML 结构图:
通过结构图,我们可以速览类之间的关系。好比下图中,工厂创建策略、两个详细策略继承了抽象策略类:
之后,你就可以找到感兴趣的项目核心功能模块进行学习了,分享几个学习本领:
1)假如想快速学习某个功能的实现,发起是通过文档等方式
先相识业务流程
,再学习源码。学习源码时,发起利用 Debug 模式启动项目,通过接口文档(或前端)发送请求,完备地分析一个请求的处理流程。
可以通过 IDEA 的 Endpoints 功能快速查看项目中的接口,并定位到源码:
2)假如想快速相识单个文件的核心结构(好比方法和属性),可以利用 IDEA 的 Structure 功能,如图:
3)可以通过 Call Hierarchy 功能查看方法、类或变量在程序中被调用的层次结构和关系。好比下图我查看了 doMark 方法的调用者视图,可以看到哪些方法调用了它,便于快速明白代码之间的交互,不用自己一层一层点进去看了。
4)可以通过 Find Usages 功能快速查看一个方法或者类在项目中所有的利用位置:
5)固然,对于复杂的功能,单独看代码可能是明白不了的,这时就需要搭配文档和代码注释了。什么?没有文档?!不写注释?!那就直接通过 Git 版本控制工具找到原作者去询问吧。
6、明白项目开辟流程和规范
在你熟悉了项目后,就可以实验参与开辟了。可以先通过
阅读项目的贡献指南或开辟文档
来明白项目的开辟流程、开辟规范等,跟项目的其他开辟者保持一致。假如有迷惑,可以看看别人的代码中是怎么做的,有样学样就行;实在不确定的话,最好是提前询问,不要提交一堆不符合规范的代码,再被别人打回来,浪费彼此的时间。
7、参与项目
最后,学习开源项目最好的方式就是亲身参与项目的开辟,这也是我不停发起大家做的,不仅能提拔本领、也能给自己的简历加分。
实在参与开源项目没有那么困难,可以先在项目的 Issues 部分查看别人反馈的 Bug,而且帮忙修复,熟悉整个参与开源项目的流程。之后还可以
跟作者沟通
并实验添加新功能、进行优化等。
假如想让你贡献的代码更快被作者接受,就肯定要做好沟通!由于我自己也有很多开源项目,也有小伙伴给我贡献过代码,但不可能所有的代码都接受。由于每个人关于项目的想法是不同的,在没有跟作者互换的情况下,可能你做的功能对项目并没有帮助、超出了项目的规划,反而会让项目更加复杂。团队开辟也是一样,大家要一起评审需求,确保需求是有价值的、和项目定位是匹配的,而不是谁想加功能就加功能。
OK,以上就是本期分享,原创不易,有帮助的话还请点赞支持哦!
更多编程学习资源
Java前端程序员必做项目实战教程+毕设网站
程序员免费编程学习互换社区(自学必备)
程序员保姆级求职写简历指南(找工作必备)
程序员免费面试刷题网站工具(找工作必备)
最新Java零基础入门学习路线 + Java教程
最新Python零基础入门学习路线 + Python教程
最新前端零基础入门学习路线 + 前端教程
最新数据结构和算法零基础入门学习路线 + 算法教程
最新C++零基础入门学习路线、C++教程
最新数据库零基础入门学习路线 + 数据库教程
最新Redis零基础入门学习路线 + Redis教程
最新计算机基础入门学习路线 + 计算机基础教程
最新小程序入门学习路线 + 小程序开辟教程
最新SQL零基础入门学习路线 + SQL教程
最新Linux零基础入门学习路线 + Linux教程
最新Git/GitHub零基础入门学习路线 + Git教程
最新操作体系零基础入门学习路线 + 操作体系教程
最新计算机网络零基础入门学习路线 + 计算机网络教程
最新设计模式零基础入门学习路线 + 设计模式教程
最新软件工程零基础入门学习路线 + 软件工程教程
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
伤心客
金牌会员
这个人很懒什么都没写!
楼主热帖
Java打怪之路----谷粒商场认证服务 ...
原型设计工具比较及实践--滴爱音乐 ...
Excelize 发布 2.6.1 版本,支持工作簿 ...
基于 SpringBoot + MyBatis 的博客系统 ...
《百万IT毕业生的心声:IT专业大学生毕 ...
Flink-使用流批一体API统计单词数量 ...
xtrabackup2版本和xtrabackup8版本对比 ...
sqlserver导入sql文件的方式
浅谈大数据广告下个人隐私保护,开发者 ...
Spring IOC官方文档学习笔记(十)之类 ...
标签云
挺好的
服务器
快速回复
返回顶部
返回列表