一、日常记录的意义
不积跬步无以至千里。记录日志在学习和工作中有多方面的好处。首先,它帮助个人巩固知识,将复杂的问题和解决方案清晰地记录下来,方便回顾和加深理解。其次,日志记录有助于跟踪进展,识别学习或项目中的瓶颈,及时调整计划,避免重复犯错。此外,日志还提供了一个个人成长的记录,能清楚地看到自己在不同时间段的进步,这种可视化的成果可以极大地提升自信和动力。最后,日志是分享与交流的工具,通过详细的记录与他人分享经验,能促进知识的传播与合作。
这里我分享两个我的常用方法:
- 解决问题的方法:猜想与验证。
- 知行合一:思路+步骤,先写出思路,再记录执行。
二、猜想与验证
这个方法来自卡尔波普尔。
卡尔·波普尔的“猜想与验证”理论强调,科学知识的产生不是通过归纳得来,而是通过提出大胆的猜想并进行严苛的验证。根据波普尔的观点,科学进步依赖于不断提出新的假设,并通过实验和观察去验证这些假设的有效性。新知识的产生往往来自于旧理论被证伪后,新的、更具解释力的理论取而代之。这一过程体现了科学的自我纠正机制:通过不断的猜想与验证,排除错误,接近真理。新知识的诞生因此不是线性的积累,而是通过对旧知识的批判与革新不断进化。
基于这个理论得出一个框架,下面是我个人制作的模板“猜测与验证模板表格”:
环节 | 内容(自己填写,下面是引导语) |
目的 | 试验目标是什么 |
原理分析 | 为了达到目标进行的原理和理论分析 |
猜测 | 猜测的内容描述 |
试验方法 | 试验方法及猜测证实与证伪的标准 |
试验过程 | 记录试验的过程日志 |
现象与结论 | 记录事实情况以及根据事实得出的结论 |
下一步行动 | 下一步行动计划 |
下一步行动可以再次使用这个模板,周而复始。中间环节可以根据需要选择部分或者整体。我用这个方法,通常能解决最复杂的、前所未见的那些bug。
示例笔记:
目的 | 确定Pbr version 慢的问题是否影响整体效率 |
原理分析 | 如果在每次启动或者请求的时候反复被调用,说明影响。就需要加一个缓存。理论上来说,一个系统中的部署,并不会经常变动版本号,因此版本号可以全部缓存下来,仅仅是需要计算一次,这样就节省了计算。在安装了或者更新了第三方包的时候才会发生变化。 |
猜测 | Pbr version会被反复调用,导致整体较慢 |
试验方法 |
|
试验过程 | 使用version函数: [root@controller ~]# time python -c "import pbr.version;pbr.version.VersionInfo('python-openstackclient').version_string()" real 0m0.475s user 0m0.388s sys 0m0.085s root@ubuntu:~# time python -c "import pbr.version;pbr.version.VersionInfo('python-openstackclient').version_string()" real 0m0.362s #同样较慢 user 0m0.240s sys 0m0.120s 对比将缓存在文件里的读出来: echo '{"python-openstackclient":"3.14.3"}'> version.json [root@controller ~]# time python -c "import json;json.load(open('version.json')).get('python-openstackclient')" real 0m0.067s user 0m0.054s sys 0m0.013s 查看版本号: [root@controller tmp]# pip list | grep pbr pbr 4.2.0 root@ubuntu:~# pip list | grep pbr 代码: https://github.com/openstack/pbr/blob/master/pbr/version.py 相关bug Bug #1866991 “version_string() and semantic_version() etc is slo...” : Bugs : PBR |
现象与结论 | Pbr version会被反复调用,影响整体效率。 |
下一步行动 | 使用火焰图分析慢的根源。 |
三、思路+步骤框架
王阳明的“知行合一”哲学强调,知识与行动不可分割,真正的智慧在于将所知付诸实践。这一理念在工作中有着重要的应用价值。知行合一,首先要确定目标,想下如何做这个事情,并记录下思考过程。而后再记录执行过程。用实践调整思考,用思考引导实践。如此完成不断迭代思考能力、实践能力。模板如下:
- 目标:确定目标
- 思路:逐条写下自己的思考过程
- 如何做xxxx:xxxx
- 如何解决xxxx:xxxx
- 步骤:按照思考过程,记录实践步骤。如果执行中发现问题,及时调整思考与步骤的条目。
- 如何做xxxx:操作日志具体内容
- 如何解决xxxx:操作日志具体内容
我的这个文章利用clickhouse的URL引擎做数据推送-优快云博客就是用的这种结构。
一个具体的笔记示例:
1. 目标:磁盘写入性能测试及对比
2. 思路:
1. 目标对象
1. 产品测试机器:
a. 磁盘1:30G
b. 磁盘2:1T
2. 我的电脑本机
a. 固态的
b. 机械硬盘
2. 测试命令:
写入速度
dd if=/dev/zero of=testfile bs=1M count=1024 oflag=direct && rm testfile
读取速度
hdparm -Tt /dev/vda1
3. 测试结果
1. 产品测试机器:
a. 磁盘1:30G
root@ubunt:/# dd if=/dev/zero of=testfile bs=1M count=1024 oflag=direct
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 1.48303 s, 724 MB/s
root@ubunt:/# hdparm -Tt /dev/vda1
/dev/vda1:
Timing cached reads: 13396 MB in 1.99 seconds = 6719.11 MB/sec
XXXXXX(identify) failed: Inappropriate ioctl for device
Timing buffered disk reads: 1044 MB in 3.00 seconds = 347.47 MB/sec
b. 磁盘2:1T
root@ubunt:/data# dd if=/dev/zero of=testfile bs=1M count=1024 oflag=direct
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 1.55516 s, 690 MB/s
root@ubunt:/data# hdparm -Tt /dev/vdb1
读速度
/dev/vdb1:
Timing cached reads: 13060 MB in 1.99 seconds = 6550.95 MB/sec
XXXXXX(identify) failed: Inappropriate ioctl for device
Timing buffered disk reads: 1012 MB in 3.00 seconds = 336.78 MB/sec
2. 我的电脑本机
a. 固态的
$ dd if=/dev/zero of=testfile bs=1M count=1024 oflag=direct && rm testfile
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 0.59258 s, 1.8 GB/s
b. 机械硬盘
$ dd if=/dev/zero of=testfile bs=1M count=1024 oflag=direct && rm testfile
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 12.5114 s, 85.8 MB/s