每周分享(第3期)
共 3111字,需浏览 7分钟
·
2022-05-04 17:33
最近在读一本很有意思的书《直觉泵和其他思考工具》 [美] 丹尼尔·丹尼特[1]。书中介绍了77种思考工具,可以帮助我们在思维习惯上建立方法论体系,这一个个小工具被称为直觉泵
,意味着我们在思考时只需要根据具体事物和问题场景,去转动直觉泵的旋钮,以此来检验我们的直觉是否合理。
介绍几个有意思的直觉泵:
奥卡姆剃刀: 如无必要, 勿增实体
如果你能找到一个更简单的理论,包含更少的因素、更少的实体,而它也一样可以很好地解释现象,就不要再构造一个大而无当的复杂理论了。
奥卡姆扫把: 有意隐瞒对自己不利的证据
某些理论的辩护者们本着智性上最大的不诚实把对自己不利的事实往地毯下面扫。宣传家们用这招来做群众工作时尤其阴险,因为就像福尔摩斯侦探小说中著名的“半夜狗不叫”的故事一样,只有专家才能注意到“缺席”的事实,而事实已经被“奥卡姆扫把”从现场扫走了。
拉波波特法则: 批评他人的正确方式
你应该非常清楚、生动、不偏不倚地重述对手的想法,使得你的对手说:
谢谢你,我刚才要是像你这么表述就好了。
你应该把对方观点中你所同意的部分都列出来,尤其是那种并非被人们广泛接受了的观点。
你应该提到那些从你对手那里学到的东西。
只有完成了以上三点,你才能说一句反驳或批评的话。
史特金定律: 不要把时间浪费在无意义的事情上
任何事物当中的百分之九十都是垃圾(crap)。
百分之九十的分子生物学实验、百分之九十的诗歌、百分之九十的哲学书、数学系里百分之九十的同行评议文章,等等,都是垃圾。每个领域都有一大堆愚蠢、平庸、糟糕透顶的东西存在。为了不浪费你的时间和大家的耐心,请确保你关注的是你能找到的该领域最好的东西,比如获奖之作、杰出成果、大家都赞不绝口的精品,而非糟粕。
在引言中有一句话让我深受触动。
神经心理学家马塞尔·金斯伯恩(Marcel Kinsbourne)说,思考之所以困难,是因为通向真理的崎岖小径与诱人的捷径争持不下,而捷径往往只是条死胡同。我们在思考时所做的大多数努力就是在抵御诱惑。我们不断受到它们的纠缠,还必须为了手头上的任务硬着头皮想下去。
类似于《思考, 快与慢》中的直觉性
系统1,这种思考往往成本较低,是一条诱人的捷径,偏见和自信会将我们带向死胡同。
当我们觉得“真理之灯”在手,自信满满地前行时。
很可能,我们的眼睛是瞎的,你走的路,也是错的。
我想到同理的说法还有一种,”你拿着一把锤子,不能把所有问题都看成钉子。“
基于代价的慢查询优化建议
https://tech.meituan.com/2022/04/21/slow-query-optimized-advice-driven-by-cost-model.html
前几天在公司内网看到了这篇分享,写的非常不错,没想到第二天就在技术团队公众号发出来了,原理基本是建立一套虚假的索引引擎来帮助计算慢查询在不同索引搭配下的性能情况。之前学习过小米开源Soar[2],是一个对SQL的优化分析工具,虽然不是基于业务情况的优化分析,但是可以对目标SQL给出一些解读,提供一些可能忽略的关注点。
一个慢查询日志的简单分析。
D:\mysql-8\bin\mysqld, Version: 8.0.12 (MySQL Community Server - GPL). started with:
TCP Port: 3306, Named Pipe: MySQL
Time Id Command Argument
# Time: 2020-09-29T07:36:49.892756Z
# User@Host: root[root] @ localhost [127.0.0.1] Id: 179
# Query_time: 11.002052 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 0
use sakila;
SET timestamp=1601365009;
/* ApplicationName=DataGrip 2020.2 */ SELECT SLEEP(11);
第一行,SQL查询执行的时间,第二行,执行SQL查询的连接时间,用户和连接IP
第三行,记录了一些我们比较有用的信息,如下解析:
-Query_time, 这条SQL执行的时间,越长则越慢
-Lock_time, 在MYSQL服务器阶段(不是在存储引擎阶段) 等待表锁的时间
-Rows_sent,查询返回的行数
-Rows_examined,查询检查的行数,越长就越费时间
第四行设置时间戳,没有实际意义,只是和第一行对应执行时间
第五行以及后面,执行的sql语句记录信息。
程序员的副业
在微博上看到左耳朵耗子关于程序员副业的分享[3],似乎可以套用史特金定律上,不要把时间浪费在无意义的事情上。
动态追踪文章推荐
分享几篇非常优质的动态追踪技术的文章。
Java动态追踪技术探究[4]
Java的Instruments给运行时的动态追踪留下了希望,Attach API则给运行时动态追踪提供了“出入口”,ASM则大大方便了“人类”操作Java字节码的操作。
基于Instruments和Attach API前辈们创造出了诸如JProfiler、Jvisualvm、BTrace、Arthas这样的工具。以ASM为基础发展出了cglib、动态代理,继而是应用广泛的Spring AOP。
Java是静态语言,运行时不允许改变数据结构。然而,Java 5引入Instruments,Java 6引入Attach API之后,事情开始变得不一样了。虽然存在诸多限制,然而,在前辈们的努力下,仅仅是利用预留的近似于“只读”的这一点点狭小的空间,仍然创造出了各种大放异彩的技术,极大地提高了软件开发人员定位问题的效率。
Dynamic Tracing with DTrace & SystemTap[5]
A Tracing Technique using Dynamic Bytecode Instrumentation of Java Applications and Libraries at Basic Block Level[6]
References
[1]
《直觉泵和其他思考工具》 [美] 丹尼尔·丹尼特: https://book.douban.com/subject/30340107/[2]
Soar: https://github.com/XiaoMi/soar[3]
程序员副业的分享: https://weibo.com/1401880315/LpAqyFfsd[4]
Java动态追踪技术探究: https://tech.meituan.com/2019/02/28/java-dynamic-trace.html[5]
Dynamic Tracing with DTrace & SystemTap: https://myaut.github.io/dtrace-stap-book/app/java.html[6]
A Tracing Technique using Dynamic Bytecode Instrumentation of Java Applications and Libraries at Basic Block Level: https://hal.inria.fr/inria-00613720/document