如何记录技术日志?笔记结构两则:猜想与验证、知行合一

一、日常记录的意义

不积跬步无以至千里。记录日志在学习和工作中有多方面的好处。首先,它帮助个人巩固知识,将复杂的问题和解决方案清晰地记录下来,方便回顾和加深理解。其次,日志记录有助于跟踪进展,识别学习或项目中的瓶颈,及时调整计划,避免重复犯错。此外,日志还提供了一个个人成长的记录,能清楚地看到自己在不同时间段的进步,这种可视化的成果可以极大地提升自信和动力。最后,日志是分享与交流的工具,通过详细的记录与他人分享经验,能促进知识的传播与合作。

这里我分享两个我的常用方法:

  1. 解决问题的方法:猜想与验证。
  2. 知行合一:思路+步骤,先写出思路,再记录执行。

二、猜想与验证

这个方法来自卡尔波普尔。

卡尔·波普尔的“猜想与验证”理论强调,科学知识的产生不是通过归纳得来,而是通过提出大胆的猜想并进行严苛的验证。根据波普尔的观点,科学进步依赖于不断提出新的假设,并通过实验和观察去验证这些假设的有效性。新知识的产生往往来自于旧理论被证伪后,新的、更具解释力的理论取而代之。这一过程体现了科学的自我纠正机制:通过不断的猜想与验证,排除错误,接近真理。新知识的诞生因此不是线性的积累,而是通过对旧知识的批判与革新不断进化。

基于这个理论得出一个框架,下面是我个人制作的模板“猜测与验证模板表格”:

环节内容(自己填写,下面是引导语)

目的

试验目标是什么

原理分析

为了达到目标进行的原理和理论分析

猜测

猜测的内容描述

试验方法

试验方法及猜测证实与证伪的标准

试验过程

记录试验的过程日志

现象与结论

记录事实情况以及根据事实得出的结论

下一步行动

下一步行动计划

下一步行动可以再次使用这个模板,周而复始。中间环节可以根据需要选择部分或者整体。我用这个方法,通常能解决最复杂的、前所未见的那些bug。

示例笔记:

目的

确定Pbr version 慢的问题是否影响整体效率

原理分析

如果在每次启动或者请求的时候反复被调用,说明影响。就需要加一个缓存。理论上来说,一个系统中的部署,并不会经常变动版本号,因此版本号可以全部缓存下来,仅仅是需要计算一次,这样就节省了计算。在安装了或者更新了第三方包的时候才会发生变化。

猜测

Pbr version会被反复调用,导致整体较慢

试验方法

  • 插入记录调用version函数的代码。
  • cProfile进行分析,查看到底哪里慢。PR maybe?

试验过程

使用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
pbr (3.1.1)

代码:

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会被反复调用,影响整体效率。

下一步行动

使用火焰图分析慢的根源。

三、思路+步骤框架

王阳明的“知行合一”哲学强调,知识与行动不可分割,真正的智慧在于将所知付诸实践。这一理念在工作中有着重要的应用价值。知行合一,首先要确定目标,想下如何做这个事情,并记录下思考过程。而后再记录执行过程。用实践调整思考,用思考引导实践。如此完成不断迭代思考能力、实践能力。模板如下:

  1. 目标:确定目标
  2. 思路:逐条写下自己的思考过程
    1. 如何做xxxx:xxxx
    2. 如何解决xxxx:xxxx
  3. 步骤:按照思考过程,记录实践步骤。如果执行中发现问题,及时调整思考与步骤的条目。
    1. 如何做xxxx:操作日志具体内容
    2. 如何解决xxxx:操作日志具体内容

我的这个文章利用clickhouse的URL引擎做数据推送-CSDN博客就是用的这种结构。

一个具体的笔记示例:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值