# my_note **Repository Path**: liuyj99/my_note ## Basic Information - **Project Name**: my_note - **Description**: 个人学习笔记! - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: https://blog.csdn.net/m0_38082783 - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2024-09-23 - **Last Updated**: 2024-09-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## [阅读源码的五步速读法](https://zhuanlan.zhihu.com/p/426904327) > 阅读代码是程序员最重要的技能之一,我们每天都在读同事的代码或者第三方库的代码,那怎么高效的阅读代码呢?分享下我的源码阅读方法。 ### 1. 第一步,通过文档和测试用例了解代码的功能 1. 阅读源码前要先了解代码的功能,可以通过文档或者测试用例,了解代码做了什么,输入和输出是什么。 2. 了解功能是阅读源码的基础,后面才会有方向感。 ### 2. 第二步,自己思考功能的实现方式 1. 知道了源码有啥功能之后,要先思考下如果自己实现会怎么做。有个大概的思路就行。 2. 如果想不通可以看下源码用到了哪些依赖库,这些依赖库都有啥功能,再想下应该怎么实现。 3. 如果还想不通也没关系,重要的是要先自己思考下实现方式。 ### 3. 第三步,粗读源码理清实现思路 1. 你已经有了一个大概的实现思路,然后再去读源码,看下它是怎么实现的。和你思路类似的地方很快就可以掠过去,而且印象也很深,和你思路不一样的地方,通过读代码搞清楚它的实现思路。 2. 这一步不用关心细节,知道某段代码是干啥的就行,关键是和自己的思路做 diff,理清它的整体实现思路。 ### 4. 第四步,通过 debugger 理清实现细节 1. 粗读源码理清了实现思路之后,对于一些部分的具体实现可能还不是很清楚,这时候就可以通过 debugger 来断点调试了。 2. 构造一个能触发该功能的测试用例,在关心的代码处打一个断点,通过 debugger 运行代码。 3. 这时候你已经知道这部分代码是干啥的了,单步调试也很容易理清每一条语句的功能,这样一条语句一条语句的搞懂之后,你就很容易能把这部分代码的实现细节理清楚。 4. 这样一部分一部分的通过 debugger 理清细节实现之后,你就对整体代码的思路和细节的实现都有了比较好的掌握。 ### 5. 第五步,输出文章来讲述源码实现思路 1. 当你觉得对源码的实现有了比较好的掌握的时候,可以输出一篇文章的方式来讲述源码的整体思路。 2. 因为可能会有一些部分是你没注意到的,而在输出的过程中,会进行更全面的思考,这时候如果发现了一些没有读到的点,可以再通过前面几步去阅读源码,直到能清晰易懂的把源码的实现讲清楚。这样才算真正的把代码读懂了。 3. 这就是我觉得比较高效的阅读源码的方法。 ### 6. 总结 #### 6.1 阅读源码的方法分为五步: 1. 通过文档和测试用例了解代码的功能 2. 自己思考功能的实现方式 3. 粗读源码理清实现思路 4. 通过 debugger 理清实现细节 5. 输出文章来讲述源码实现思路 #### 6.2 这五步缺一不可: 1. 缺了第一步,不了解功能就开始读源码,那读代码会没有方向感 2. 缺了第二步,不经过思考直接读源码,理解代码实现思路的效率会降低 3. 缺了第三步,不理清整体思路就开始 debugger,会容易陷入细节,理不清整体的思路 4. 缺了第四步,不 debugger 只大概理下整体思路,这样不能从细节上真正理清楚 5. 缺了第五步,不通过输出文章来检验,那是否真的理清了整体思路和实现细节是没底的 ## 笔记 ### 1. OpenCV-Python #### 1.1 OpenCV-Python 基础 > 根据[《英特尔 OpenCV 初级认证课程》](https://edu.csdn.net/course/detail/37754)学习笔记,查询资料对课程内容的理解! 1. [OpenCV-Python学习(1)—— OpenCV历史与安装](https://blog.csdn.net/m0_38082783/article/details/127101348) 2. [OpenCV-Python学习(2)—— OpenCV 图像的读取、显示和保存(cv.imread、cv.imshow、cv.imwrite)](https://blog.csdn.net/m0_38082783/article/details/127103274) 3. [OpenCV-Python学习(3)—— OpenCV 图像色彩空间转换(cv.cvtColor)](https://blog.csdn.net/m0_38082783/article/details/127109047) 4. [OpenCV-Python学习(4)—— OpenCV 图像对象的创建与赋值(numpy.zeros、numpy.zeros_like、numpy.ones)](https://blog.csdn.net/m0_38082783/article/details/127123068) 5. [OpenCV-Python学习(5)—— OpenCV 图像像素的读写操作](https://blog.csdn.net/m0_38082783/article/details/127202720) 6. [OpenCV-Python学习(6)—— OpenCV 图像算术操作(cv.add、cv.subtract、cv.multiply、cv.divide)](https://blog.csdn.net/m0_38082783/article/details/127239540) 7. [OpenCV-Python学习(7)—— OpenCV 轨迹栏操作和键盘响应操作(cv.createTrackbar、cv.getTrackbarPos、cv.waitKey)](https://blog.csdn.net/m0_38082783/article/details/127264083) 8. [OpenCV-Python学习(8)—— OpenCV 颜色表操作(cv.LUT、cv.applyColorMap)](https://blog.csdn.net/m0_38082783/article/details/127284681) 9. [OpenCV-Python学习(9)—— OpenCV 通道的分离与合并(cv.split、cv.merge、cv.mixChannels、cv.inRange)](https://blog.csdn.net/m0_38082783/article/details/127384118) 10. [OpenCV-Python学习(10)—— OpenCV 图像二值化处理(cv.threshold)](https://blog.csdn.net/m0_38082783/article/details/127429506) #### 1.2 OpenCV-Python 实战 1. [OpenCV-Python实战(1) —— 给图片添加图片水印【利用 OpenCV 像素的读写原理实现】](https://blog.csdn.net/m0_38082783/article/details/127445270) ### 2. Taro React #### 2.1 入门篇【项目配置】 > 入门篇介绍了从安装,开发中的配置问题,记录解决对应的问题。 1. [【taro react】---- VSCode 配置用户代码片段](https://blog.csdn.net/m0_38082783/article/details/120842341) 2. [【taro react】---- 使用 redux 的配置笔记](https://blog.csdn.net/m0_38082783/article/details/121114985) 3. [【taro react】---- h5路由配置取消路由上的#](https://blog.csdn.net/m0_38082783/article/details/124473946) 4. [【taro react】---- 项目打包生成不同目录【代码编译到不同生产目录】](https://blog.csdn.net/m0_38082783/article/details/124681720) 5. [【taro react】---- 微信小程序 通过 Jenkins 实现自动化部署](https://blog.csdn.net/m0_38082783/article/details/125515158) #### 2.2 实战篇【组件开发】 > 实战篇是实际开发中的组件的封装,部分比较有意思的效果,以及一些特殊实际问题的解决办法! 1. [【taro react】---- Stepper 步进器组件封装](https://blog.csdn.net/m0_38082783/article/details/120976287) 2. [【taro react】---- 时间罗盘实现](https://blog.csdn.net/m0_38082783/article/details/124667579) 3. [【taro react】---- 兼容微信小程序和H5的海报组件](https://blog.csdn.net/m0_38082783/article/details/126341003) 4. [【taro react】---- 团购或秒杀的批量倒计时实现](https://blog.csdn.net/m0_38082783/article/details/126380497) #### 2.3 错误篇【开发报错】 > 错误篇是在实际开发中遇到的一些错误的处理方法! 1. [【taro react】---- Uncaught SyntaxError: Unexpected token ‘<‘](https://blog.csdn.net/m0_38082783/article/details/120429447) 2. [【taro react】 ---- Uncaught TypeError: Cannot read properties of null (reading ‘getContext‘)](https://blog.csdn.net/m0_38082783/article/details/120458894) 3. [【taro react】---- 编译微信小程序后报错:Error: Minified React error #321;](https://blog.csdn.net/m0_38082783/article/details/124959644) 4. [【taro react】---- 编译H5运行后报错:Uncaught ReferenceError: $RefreshSig$ is not defined](https://blog.csdn.net/m0_38082783/article/details/124984203) #### 2.4 问题篇【开发异常】 > 问题篇是开发中遇到的一些问题的解决方法! 1. [【taro react】---- 打包微信小程序后 onShow 多次执行(随着进入页面的次数在不断的累计)](https://blog.csdn.net/m0_38082783/article/details/125217481) 2. [【taro react】---- h5跳转后生命周期多次执行](https://blog.csdn.net/m0_38082783/article/details/124604666)