每周分享(第3期)
最近在讀一本很有意思的書《直覺泵和其他思考工具》 [美] 丹尼爾·丹尼特[1]。書中介紹了77種思考工具,可以幫助我們在思維習(xí)慣上建立方法論體系,這一個個小工具被稱為直覺泵,意味著我們在思考時只需要根據(jù)具體事物和問題場景,去轉(zhuǎn)動直覺泵的旋鈕,以此來檢驗我們的直覺是否合理。

介紹幾個有意思的直覺泵:
奧卡姆剃刀: 如無必要, 勿增實體
如果你能找到一個更簡單的理論,包含更少的因素、更少的實體,而它也一樣可以很好地解釋現(xiàn)象,就不要再構(gòu)造一個大而無當(dāng)?shù)膹?fù)雜理論了。
奧卡姆掃把: 有意隱瞞對自己不利的證據(jù)
某些理論的辯護者們本著智性上最大的不誠實把對自己不利的事實往地毯下面掃。宣傳家們用這招來做群眾工作時尤其陰險,因為就像福爾摩斯偵探小說中著名的“半夜狗不叫”的故事一樣,只有專家才能注意到“缺席”的事實,而事實已經(jīng)被“奧卡姆掃把”從現(xiàn)場掃走了。
拉波波特法則: 批評他人的正確方式
你應(yīng)該非常清楚、生動、不偏不倚地重述對手的想法,使得你的對手說:
謝謝你,我剛才要是像你這么表述就好了。你應(yīng)該把對方觀點中你所同意的部分都列出來,尤其是那種并非被人們廣泛接受了的觀點。
你應(yīng)該提到那些從你對手那里學(xué)到的東西。
只有完成了以上三點,你才能說一句反駁或批評的話。
史特金定律: 不要把時間浪費在無意義的事情上
任何事物當(dāng)中的百分之九十都是垃圾(crap)。
百分之九十的分子生物學(xué)實驗、百分之九十的詩歌、百分之九十的哲學(xué)書、數(shù)學(xué)系里百分之九十的同行評議文章,等等,都是垃圾。每個領(lǐng)域都有一大堆愚蠢、平庸、糟糕透頂?shù)臇|西存在。為了不浪費你的時間和大家的耐心,請確保你關(guān)注的是你能找到的該領(lǐng)域最好的東西,比如獲獎之作、杰出成果、大家都贊不絕口的精品,而非糟粕。
在引言中有一句話讓我深受觸動。
神經(jīng)心理學(xué)家馬塞爾·金斯伯恩(Marcel Kinsbourne)說,思考之所以困難,是因為通向真理的崎嶇小徑與誘人的捷徑爭持不下,而捷徑往往只是條死胡同。我們在思考時所做的大多數(shù)努力就是在抵御誘惑。我們不斷受到它們的糾纏,還必須為了手頭上的任務(wù)硬著頭皮想下去。
類似于《思考, 快與慢》中的直覺性系統(tǒng)1,這種思考往往成本較低,是一條誘人的捷徑,偏見和自信會將我們帶向死胡同。
當(dāng)我們覺得“真理之燈”在手,自信滿滿地前行時。
很可能,我們的眼睛是瞎的,你走的路,也是錯的。
我想到同理的說法還有一種,”你拿著一把錘子,不能把所有問題都看成釘子。“
基于代價的慢查詢優(yōu)化建議
https://tech.meituan.com/2022/04/21/slow-query-optimized-advice-driven-by-cost-model.html
前幾天在公司內(nèi)網(wǎng)看到了這篇分享,寫的非常不錯,沒想到第二天就在技術(shù)團隊公眾號發(fā)出來了,原理基本是建立一套虛假的索引引擎來幫助計算慢查詢在不同索引搭配下的性能情況。之前學(xué)習(xí)過小米開源Soar[2],是一個對SQL的優(yōu)化分析工具,雖然不是基于業(yè)務(wù)情況的優(yōu)化分析,但是可以對目標(biāo)SQL給出一些解讀,提供一些可能忽略的關(guān)注點。
一個慢查詢?nèi)罩镜暮唵畏治觥?/p>
D:\mysql-8\bin\mysqld, Version: 8.0.12 (MySQL Community Server - GPL). started with:TCP Port: 3306, Named Pipe: MySQLTime 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: 0use sakila;SET timestamp=1601365009;/* ApplicationName=DataGrip 2020.2 */ SELECT SLEEP(11);
第一行,SQL查詢執(zhí)行的時間,第二行,執(zhí)行SQL查詢的連接時間,用戶和連接IP
第三行,記錄了一些我們比較有用的信息,如下解析:
-Query_time, 這條SQL執(zhí)行的時間,越長則越慢
-Lock_time, 在MYSQL服務(wù)器階段(不是在存儲引擎階段) 等待表鎖的時間
-Rows_sent,查詢返回的行數(shù)
-Rows_examined,查詢檢查的行數(shù),越長就越費時間
第四行設(shè)置時間戳,沒有實際意義,只是和第一行對應(yīng)執(zhí)行時間
第五行以及后面,執(zhí)行的sql語句記錄信息。
程序員的副業(yè)
在微博上看到左耳朵耗子關(guān)于程序員副業(yè)的分享[3],似乎可以套用史特金定律上,不要把時間浪費在無意義的事情上。

動態(tài)追蹤文章推薦
分享幾篇非常優(yōu)質(zhì)的動態(tài)追蹤技術(shù)的文章。
Java動態(tài)追蹤技術(shù)探究[4]
??? Java的Instruments給運行時的動態(tài)追蹤留下了希望,Attach API則給運行時動態(tài)追蹤提供了“出入口”,ASM則大大方便了“人類”操作Java字節(jié)碼的操作。
????基于Instruments和Attach API前輩們創(chuàng)造出了諸如JProfiler、Jvisualvm、BTrace、Arthas這樣的工具。以ASM為基礎(chǔ)發(fā)展出了cglib、動態(tài)代理,繼而是應(yīng)用廣泛的Spring AOP。
??? Java是靜態(tài)語言,運行時不允許改變數(shù)據(jù)結(jié)構(gòu)。然而,Java 5引入Instruments,Java 6引入Attach API之后,事情開始變得不一樣了。雖然存在諸多限制,然而,在前輩們的努力下,僅僅是利用預(yù)留的近似于“只讀”的這一點點狹小的空間,仍然創(chuàng)造出了各種大放異彩的技術(shù),極大地提高了軟件開發(fā)人員定位問題的效率。
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]?程序員副業(yè)的分享:?https://weibo.com/1401880315/LpAqyFfsd[4]?Java動態(tài)追蹤技術(shù)探究:?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
