- VisualStudio2022插件的安装及使用-编程手把手系列文章
- pprof-在现网场景怎么用
- C#实现的下拉多选框,下拉多选树,多级节点
- 【学习笔记】基础数据结构:猫树
总体上是这几点:
因为作者不一定太关心文档和注释:大多数人以正确实现为主要目标。所以要祈祷文档和注释是正确的,或者说大多数是正确的.
为什么不考虑没有文档和注释的情况?理由很简单,如果该项目不出名,作者也懒得维护,所以这些东西没有或不完善是很正常的.
So,挑著名一点的吧.
如果文档的质量足够高,那么文档中会记录代码每个部分,至少是关键部分的概览,并且还会关联到代码中的变量名.
如redis的backlog,实际上你可以直接通过grep在代码中找到对应的变量,到此就可以直接推测哪些函数在操作backlog,这样可以帮助你理解代码.
issue是用户对作者提需求,所以它至少可以解释为什么有这个功能.
但是能够提issue的人都应该是程序员,所以不论是作者还是用户都会讨论这个功能或bug的原因、设计细节.
比如redis用的epoll,是epoll_create而不是epoll_create1,原因就是兼容旧版本内核.
理由很简单,代码是复杂的,而人容易忘事情.
且不说读代码,就算是写代码。你今天写了一个函数,两周后你看到了,可能会在想“这是谁写的shit”.
不要相信手中的草稿纸会记录清楚这一切,因为首先纸笔写下的内容不方便修改,你可能要把一大堆东西写到一片很小的空间里,其次草稿纸就是帮助你理解一小段东西的,所以会很乱,所以第二天来了,就再也不想看了.
我曾经就很喜欢用草稿纸,结果是虽然写了很多,但是第二天几乎还是从头来。看看我用了多少草稿纸吧,里面的笔是一个参考物.
如何整理?首先利用电子技术,画一遍执行流程图,流程图旁边至少标记这是哪个函数做的事情,甚至你可以精确到哪一行。然后记下你今天研究的问题是什么,下一个要研究的问题是什么。如果有网页,记得也贴上.
如果还用上了断点,记得也保存一份断点.
因为读代码的时候,对整个项目的理解度不足,所以出现了一些难以理解的部分,可以考虑跳过.
怎么对不理解的内容留个印象?
首先,如果可以的话,看注释,或者利用关键词查文档,大概了解一下这是干嘛的。比如redis在复用rdb的时候,注释里说这是复制缓冲区。但是你不知道这个缓冲区是什么,也不知道其作用。查看了一下,操作了backlog,得知这个是复制命令的历史记录的位置.
/* Perfect, the server is already registering differences for
* another slave. Set the right state, and copy the buffer.
* We don't copy buffer if clients don't want. */
if (!(c->flags & CLIENT_REPL_RDBONLY))
copyReplicaOutputBuffer(c,slave);
但是还是不理解怎么办?没办法,你只能在整理的时候,在哪个文件的哪些地方有不理解的地方.
读代码的时候,你至少要明白整个程序最基础的部分,比如线程模型。然后还要找到一些明显很通用的东西,比如TCP连接的封装。如果你不读线程模型,那么你就不知道一个流程走完了,其接下来的步骤.
比如一个PING/PONG,收到了PING,然后设置写入回调来发送PONG。如果不理解线程模型,这个很可能就被忽略了.
当然还有一些东西要注意的,比如定时器,一定要知道作者的设计。我个人不建议redis的定时器的实现,因为它要做太多事情了!一个serverCron里面做的事情非常多,既要管cluster,还要管主从复制,还要更新自己的状态,还要负责重连! 。
当然我暂时没想明白什么样的定时器能够同时做到编写时容易,且读代码的时候也容易的.
最后此篇关于一种基于祈祷的开源项目学习方法的文章就讲到这里了,如果你想了解更多关于一种基于祈祷的开源项目学习方法的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我正在使用 NetBeans 开发 Java 中的 WebService,并使用 gradle 作为依赖管理。 我找到了this article关于使用 gradle 开发 Web 项目。它使用 Gr
我正在将旧项目从 ant 迁移到 gradle(以使用其依赖项管理和构建功能),并且在生成 时遇到问题>eclipse 项目。今天的大问题是因为该项目有一些子项目被拆分成 war 和 jar 包部署到
我已经为这个错误苦苦挣扎了很长时间。如果有帮助的话,我会提供一些问题的快照。请指导我该怎么办????在我看来,它看起来一团糟。 *** glibc detected *** /home/shivam/
我在 Ubuntu 12.10 上运行 NetBeans 7.3。我正在学习 Java Web 开发类(class),因此我有一个名为 jsage8 的项目,其中包含我为该类(class)所做的工作。
我想知道 Codeplex、GitHub 等中是否有任何突出的项目是 C# 和 ASP.NET,甚至只是 C# API 与功能测试 (NUnit) 和模拟(RhinoMocks、NMock 等)。 重
我创建了一个 Maven 项目,包装类型为“jar”,名为“Y”我已经完成了“Maven 安装”,并且可以在我的本地存储库中找到它.. 然后,我创建了另一个项目,包装类型为“war”,称为“X”。在这
我一直在关注the instructions用于将 facebook SDK 集成到我的应用程序中。除了“helloFacebookSample”之外,我已经成功地编译并运行了所有给定的示例应用程序。
我想知道,为什么我们(Java 社区)需要 Apache Harmony 项目,而已经有了 OpenJDK 项目。两者不是都是在开源许可下发布的吗? 最佳答案 事实恰恰相反。 Harmony 的成立是
我正在尝试使用 Jsoup HTML Parser 从网站获取缩略图 URL我需要提取所有以 60x60.jpg(或 png)结尾的 URL(所有缩略图 URL 都以此 URL 结尾) 问题是我让它在
我无法构建 gradle 项目,即使我编辑 gradle 属性,我也会收到以下错误: Error:(22, 1) A problem occurred evaluating root project
我有这个代码: var NToDel:NSArray = [] var addInNToDelArray = "Test1 \ Test2" 如何在 NToDel:NSArray 中添加 addInN
如何在单击显示更多(按钮)后将主题列表限制为 5 个(项目)。 还有 3(项目),依此类推到列表末尾,然后它会显示显示更少(按钮)。 例如:在 Udemy 过滤器选项中,当您点击查看更多按钮时,它仅显
如何将现有的 Flutter 项目导入为 gradle 项目? “导入项目”向导要求 Gradle 主路径。 我有 gradle,安装在我的系统中。但是这里需要设置什么(哪条路径)。 这是我正在尝试的
我有一个关于 Bitbucket 的项目。只有源被提交。为了将项目检索到新机器上,我在 IntelliJ 中使用了 Version Control > Checkout from Ve
所以,我想更改我公司的一个项目,以使用一些与 IDE 无关的设置。我在使用 Tomcat 设置 Java 应用程序方面有非常少的经验(我几乎不记得它是如何工作的)。 因此,为了帮助制作独立于 IDE
我有 2 个独立的项目,一个在 Cocos2dx v3.6 中,一个在 Swift 中。我想从 Swift 项目开始游戏。我该怎么做? 我已经将整个 cocos2dx 项目复制到我的 Swift 项目
Cordova 绝对是新手。这些是我完成的步骤: checkout 现有项目 运行cordova build ios 以上生成此构建错误: (node:10242) UnhandledPromiseR
我正在使用 JQuery 隐藏/显示 li。我的要求是,当我点击任何 li 时,它应该显示但隐藏所有其他 li 项目。当我将鼠标悬停在文本上时 'show all list item but don
我想将我所有的java 项目(223 个项目)迁移到gradle 项目。我正在使用由 SpringSource STS 团队开发的 Gradle Eclipse 插件。 目前,我所有的 java 项目
我下载this Eclipse Luna ,对于 Java EE 开发人员,如描述中所见,它支持 Web 应用程序。我找不到 file -> new -> other -> web projects
我是一名优秀的程序员,十分优秀!