源码阅读技巧篇

2023-05-16

转载请注明原创出处,谢谢!

说在前面

本人水平有限,下面的一些都是本人的思考与理解,如果有那里不对,希望各位大佬积极指出,欢迎在留言区进行评论交流、探讨。

主题

  • 为什么要读源码
  • 读什么样的源码
  • 有什么技巧
  • 思考、交流
  • 坚持

为什么要源码

说到读源码,让我想起来了读书,古语有云:“读破万卷书,下笔如有神”。

  • 多读读大师的想法技巧
  • 通过大量阅读进行积累
  • 把一些零碎的知识点整合起来

就拿RocketMQ来说,它是如何实现高性能、高可用。之前写过高可用的一些思考和理解里面的特性他应该都满足,RocketMQ就是把这些很多零散的知识点整合运用之后写出的非常牛逼的项目。

读什么样的源码

依旧拿读书来说,我们应该读什么书呢? 读名著,读大师的书。那么读源码在我看来是一样的,尽量进行选择,如果不选择有时候还会浪费时间等。只要是优秀的从那个开始无所谓。

有什么技巧

个人常用的有如下,欢迎留言区补充。

  • 先让项目可以跑起来(很重要的一点
  • debug
  • 打印日志以及修改log4j日志级别
  • 查看调用栈
  • 全文搜索
  • 大胆猜测再验证

在多线程以及网络方面阅读调试应该是最难的(关于多线程我的史上最难的一道Java面试题 (分析篇)这篇文章最后也提到了一些小技巧),通常断点有时候不好使,所以通过打印日志,搜索等比较方便,有些由于为了代码的灵活性,高度抽象很不好找,通过日志里面的一些关键词搜索,在加猜测,对不对可以加注释(可能就不执行了那么表示是对的),可以加日志等进行验证。

备注:欢迎关注我的公众号【匠心零度】,后续源码类分析的时候会运用上述技巧进行说明等。

思考、交流

  • 多思考是很有必要的,这样理解大师的代码也好理解,并且我们不仅仅是看,可能以后在自己的项目中就会用这种思想这种技巧,所以需要多思考。
  • 多与一些大佬交流,我学习jvm就是遇到问题大佬们帮助我解决、交流学习的,所以交流也是重要途径。

看阿里RocketMQ的时候,发现开源的不支持消息轨迹查询,也是由于之前看过了解过,经过自己的思考,感觉如果需要加上应该不难(前提是需要把RocketMQ源码整体看懂,可以在指定地方加埋点),其实apm产品已经很多了,比如鹰眼、CAT、pinpoint等,其实他们都是基于Google Dapper思想。

RocketMQ的MessageID就是一个特别好的东西,用于将调用链的各个调用重新关联起来。之后在结合Hbase的rowkey特性直接一拉整个调用链就都出来了,如果在好点,可以根据消息内容、时间各各条件通过es或者solr查询得到MessageID,之后在通过Hbase把整个拉出来即可。

所以看出来了吧,如果RocketMQ源码读的差不多,想加进来很容易啊,所以重要吧!!!

坚持

上面的都是次要的,这条是最重要的:坚持,滴水穿石、持之以恒,可能在短期看不出来效果,因为需要一个量变到质变以及破茧成蝶的过程。

如果读完觉得有收获的话,欢迎点赞加关注。


个人公众号,欢迎关注,查阅更多精彩历史!!!

匠心零度公众号

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

源码阅读技巧篇 的相关文章

  • 一个止传SWF的好网站

    SwfCabin 是一個免費swf空間 xff0c 最初建立的構想在於 如何在網路上將swf檔分享給別人 使用者可以將swf檔上傳到 SwfCabin 然後獲得一個連結 xff0c 其他人便可以在該頁面看到您所上傳的swf檔案 上傳檔案時
  • SqlServer教程:经典SQL语句集锦

    SQL分类 xff1a DDL 数据定义语言 CREATE xff0c ALTER xff0c DROP xff0c DECLARE DML 数据操纵语言 SELECT xff0c DELETE xff0c UPDATE xff0c INS
  • matlab练习程序(获取鼠标坐标)

    还是一个函数的使用ginput clear all close all clc img 61 ones 200 200 imshow img x y 61 ginput 这里鼠标左键点击一次 x y 添加一个值 xff0c 点四次就有四个值
  • 收到了免费的Visual Studio 2005 EE

    昨天 xff0c 收到了Micorsoft寄来的MSDN开发精选 xff08 5 xff09 xff0c 其中就包含了SQL Server 2005 Express Edition和Visual c 2005 EE xff0c xff0c
  • H3C交换机SNMP配置详解

    H3C交换机SNMP配置 1 启动 关闭SNMP Agent服务 在系统视图模式下 xff1a 启用 xff1a snmp agent 关闭 xff1a undo snmp agent 注 xff1a 缺省情况下snmp agent是关闭的
  • ppp的chap认证完全配置

    网络环境 xff1a CHAP认证命令 xff1a cisco config interface s0 0 cisco config if encapsulation ppp cisco config if ppp authenticati
  • MAVLink认识、使用、自定义

    对mavlink的认识 MAVLink是针对小型飞行器 xff08 MAV xff09 的一个lightweight header only message marshalling library 由头文件构成的信息编组库 它被封装成C结构
  • WHY数学图形可视化工具(开源)

    WHY数学图形可视化工具 软件下载地址 http files cnblogs com WhyEngine WhyMathGraph zip 源码下载地址 http pan baidu com s 1jG9QKq6 软件的开发语言是C 43
  • docker学习笔记16:Dockerfile 指令 ADD 和 COPY介绍

    一 ADD指令 ADD指令的功能是将主机构建环境 xff08 上下文 xff09 目录中的文件和目录 以及一个URL标记的文件 拷贝到镜像中 其格式是 xff1a ADD 源路径 目标路径 如 xff1a test FROM ubuntu
  • 无限“递归”的python程序

    如果一个函数直接或者间接调用了自己 xff0c 那么就形成了递归 xff08 recursion xff09 xff0c 比如斐波那契数列的一个实现 def fib n if n lt 61 2 return 1 else return f
  • FreeRTOS 二值信号量,互斥信号量,递归互斥信号量

    以下转载自安富莱电子 xff1a http forum armfly com forum php 本章节讲解 FreeRTOS 任务间的同步和资源共享机制 xff0c 二值信号量 二值信号量是计数信号量的一种特殊形式 xff0c 即共享资源
  • 替代vnc图像远程工具NOMACHINE

    最近再做关于oracle rac集群的实验 难免要在图像界面下进行操作 以前都用的是vnc 但是vnc貌似比较占资源而已图像质量不是很好 今天无意发现了一个替代VNC的好工具NOMACHINE 它的官方网址是 http www nomach
  • antd-design LocaleProvider国际化

    1 LocaleProvider 使用 React 的 context 特性 xff0c 只需在应用外围包裹一次即可全局生效 import LocaleProvider from 39 antd 39 import zh CN from 3
  • python 读取文件、并以十六进制的方式写入到新文件

    usr bin env python infile 61 file 34 in mp3 34 34 rb 34 outfile 61 file 34 out txt 34 34 wb 34 def main while 1 c 61 inf
  • perl的内置函数scalar

    scalar可以求数组的长度 xff0c 但是 xff0c 在scalar的说明里面并没有这一项 Forces EXPR to be interpreted in scalar context and returns the value o
  • sqlalchemy批量删除数据、全量删除

    问题 xff1a sqlalchemy如何批量删除多条数据 解决 xff1a 使用参数synchronize session 61 False xff0c 或for循环 方法 xff1a users 61 self db query Use
  • 经典的同态滤波算法的优化及其应用参数配置。

    同态滤波 xff0c 网络上有很多文章提到过这个算法 xff0c 我们摘取百度的一段文字简要的说明了该算法的核心 xff1a 同态滤波是一种减少低频增加高频 xff0c 从而减少光照变化并锐化边缘或细节的图像滤波方法 关于该算法 xff0c
  • Trajectory following with MAVROS OFFBOARD on Raspberry Pi

    原文链接 Trajectory following with MAVROS OFFBOARD on Raspberry Pi Jaeyoung Lim August 10 2016 404warehouse Small Projects B

随机推荐

  • 职位介绍 之 嵌入式开发工程师

    笔者电子信息专业硕士毕业 xff0c 获得过多次电子设计大赛 大学生智能车 数学建模国奖 xff0c 现就职于南京某半导体芯片公司 xff0c 从事硬件研发 xff0c 电路设计研究 对于学电子的小伙伴 xff0c 深知入门的不易 xff0
  • Elementui el-dialog 组件我又学会了一种新的用法

    1 新建弹窗Form vue文件 将visible属性设置为true lt template gt lt div gt lt el dialog title 61 34 提示 34 visible 61 34 true 34 width 6
  • webpack系列——实现一个行内样式px转vw的loader

    需求 自从有了postcss来处理css文件 xff0c 我们可以快速进行网站适配的开发 xff0c 只需要改改参数 xff0c 样式按照设计稿的px写 xff0c webpack编译自动转换成rem或者vw等 但是 xff0c 标签内的p
  • Scrapy爬虫 - 获取知乎用户数据

    2016 04 10 Scrapy爬虫 获取知乎用户数据 安装Scrapy爬虫框架 关于如何安装Python以及Scrapy框架 xff0c 这里不做介绍 xff0c 请自行网上搜索 初始化 安装好Scrapy后 xff0c 执行 scra
  • 百度云下载的压缩吧损坏问题解决

    有时用百度云下载压缩包回来之后会出现损坏不能解压的问题 xff0c 比如 xff1a 1 使用网页的批量下载 xff0c 此时百度云会压缩成一个包 xff0c 格式为zip xff0c 而下载下载回来之后用WinRAR解压就会出现CRC校验
  • 理解BPDU Guard的意义(BPDU Guard在全局配置与接口配置上的区别)

    BPDU Guard xff08 BPDU保护 xff09 xff0c 简单的讲它的意义就是一个不该接收 BPDU的端口 xff0c 比如被启动了 portfast的端口 xff0c 一旦收到 BPDU报文 xff0c 那么 BPDU保护功
  • frida hook java原生算法同时打印调用堆栈

    coding UTF 8 import frida sys jsCode 61 34 34 34 function showStacks Java perform function send Java use 34 android util
  • 步步为营 .NET 设计模式学习笔记 十六、Facade(外观模式)

    概述 在软件开发系统中 xff0c 客户程序经常会与复杂系统的内部子系统之间产生耦合 xff0c 而导致客户程序随着子系统的变化而变化 那么如何简化客户程序与子系统之间的交互接口 xff1f 如何将复杂系统的内部子系统与客户程序之间的依赖解
  • tld 标签元素

    每个自定义标签都必须在tld文件中声明 xff0c tld文件只不过是一个XML文件 根元素是 lt taglib gt xff0c 它包含一个或者多个 lt tag gt 标签 xff0c 该元素用来声明定制标签 TLD 文件中的元素标签
  • cuda中用cublas库做矩阵乘法

    这里矩阵C 61 A B xff0c 原始文档给的公式是C 61 alpha A B 43 beta C xff0c 所以这里alpha 61 1 xff0c beta 61 0 主要使用cublasSgemm这个函数 xff0c 这个函数
  • cv_bridge中的编码模式与实现

    image encodings cpp文件是关于图像编码模式的源文件 xff0c 其中规定了RGB的图像以及深度图的编码模式 该编码文件image encodings cpp所依赖的头文件图 命令空间 sensor msgs image e
  • Pixhawk进阶开发

    使用者 初见Pixhawk 大家知道Pix是一个出色的开源飞控 xff0c 那到底什么是Pixhawk呢 xff0c 它有那些种类 它的硬件是怎么设计的 xff0c 软件是基于什么方式设计的 xff0c 我们怎么连接 初始化配置 怎么调节参
  • Java程序心得体会

    学习Java是一件快乐的事情 xff0c 刚开始学习的时候还有点难 xff0c 后来慢慢熟悉了Java的程序操作 xff0c 在错误中获得技巧 xff0c 一次又一次的失败 xff0c 让我对Java产生了兴趣 xff0c 现在对Java既
  • linux网卡顺序发生变化,(linux)复制的虚拟机网卡eth0变成了eth1或其他名称后修正方法...

    正在使用的虚拟机 xff0c 复制之后 xff0c 发现网卡名称发生了变化 xff0c 修正方法如下 xff1a 比如eth0变成了eth1 xff1a ifconfig xff1a udev动态管理设备文件 xff1a cat etc u
  • Android中的Android中的Surface和SurfaceView

    一 什么是Surface 简单的说Surface对应了一块屏幕缓冲区 xff0c 每个window对应一个Surface xff0c 任何View都要画在Surface上 传统的view共享一块屏幕缓冲区 xff0c 所有的绘制必须在UI线
  • 创新AI技术引领手机芯片发展方向,麒麟970荣获中国好设计金奖

    11月24日 xff0c 2017年中国好设计颁奖仪式在深圳正式召开 xff0c 奖项一共设置为金奖 银奖 创意奖 入围奖四个级别 而麒麟970作为人工智能领域的代表性产品 xff0c 也是唯一的芯片产品 xff0c 在今年的85个项目中脱
  • 史上最全阿里 Java 面试题总结

    以下为大家整理了阿里巴巴史上最全的 Java 面试题 xff0c 涉及大量 Java 面试知识点和相关试题 JAVA基础 JAVA中的几种基本数据类型是什么 xff0c 各自占用多少字节 String类能被继承吗 xff0c 为什么 Str
  • 图象传输协议——PCoIP

    PCoIP 是一种高性能显示协议 专为交付虚拟桌面而构建 无论最终用户具有什么任务或处于何位置 均可为其提供内容极为丰富的最佳桌面体验 借助 PCoIP 整个计算体验先经过在数据中心进行 压缩 加密和编码 然后再通过标准 IP 网络传输到启
  • VB6 对象库未注册问题

    以下是个人使用VB6出现对象库未注册问题的解决方法 已成功 xff01 一 注册ocx文件 mscomctl ocx文件放进路径C Windows System32 xff08 64是此路径 xff0c 由于本人是64位系统32位未测试 x
  • 源码阅读技巧篇

    转载请注明原创出处 xff0c 谢谢 xff01 说在前面 本人水平有限 xff0c 下面的一些都是本人的思考与理解 xff0c 如果有那里不对 xff0c 希望各位大佬积极指出 xff0c 欢迎在留言区进行评论交流 探讨 主题 为什么要读