帕累托法则(Pareto Principle) 也就是所谓的 80/20 法则.
这一法则适用于众多领域. Barry Boehm 的研究表明, 程序中 20% 的子程序耗费了 80% 的执行时间.
因此, 在程序的性能调优中, 找到并改进那关键的 20% 的代码, 就能让整体的性能得到大幅提升.
--<<代码大全2>>
帕累托法则(Pareto Principle) 也就是所谓的 80/20 法则.
这一法则适用于众多领域. Barry Boehm 的研究表明, 程序中 20% 的子程序耗费了 80% 的执行时间.
因此, 在程序的性能调优中, 找到并改进那关键的 20% 的代码, 就能让整体的性能得到大幅提升.
--<<代码大全2>>
介绍了如何使用 p6spy log 输出应用最终执行的 sql 语句, 以方便调试
在上一篇的 配置 mybatis 打印出执行的 sql 及返回的结果集 中, 说到了在 mybatis 中如何打印出执行的 sql, 但是还是遗留了一个问题, 也即是它的输出的 sql 并不是最终可执行的, 而是类似于 jdbc 那种 PrepareStatement
的形式, 参数的值是用问号代替的, 如下:
select * from user where username = ? and password = ?
虽然其参数值通常也会一起输出, 但如果我们对查询的结果有疑问, 想去数据库里自己执行看看, 就不得不自己去拼凑那些最终的 sql:
select * from user where username = 'admin' and password = '123456';
如果参数特别多的查询, 这会成为一个麻烦. 那么, 是否有方式可以直接输出最终的 sql 呢? 一种方式就是下面将要介绍的 p6spy log.
先看其输出的效果:
26:33 #1607390793732 | took 7ms | statement | connection 0| url jdbc:p6spy:mysql://localhost:3306/code_sample?serverTimezone=GMT%2B8
select * from user where username = ? and password = ?
select * from user where username = 'admin' and password = '123456';
26:33 list size: 1
可以看到, 除了那种 PrepareStatement
的形式, 还有最终的 sql. 那么, 要如何去实现这样的效果呢?
另注: 这里的日志布局我启用了一种极简的风格, 只有"分钟:秒数", 具体见 配置简化开发阶段日志输出布局 的介绍.
多数的错误属于编程人员自己的失误.
Andy Hunt 和 Dave Thomas 说: 如果你看到地上的马蹄印, 应当设想是马而不应该设想成斑马.
操作系统可能并没有崩溃, 数据库可能还是好好的.
--<<代码大全2>>
天之道, 损有余而补不足.
人之道则不然, 损不足以奉有余.
--<<老子(道德经)>>
通过具体的例子, 介绍了兰切斯特方程及其带来的启示, 同时与马太效应作了对比.
兰切斯特方程(Lanchester equation) 是一位英国工程师弗雷德里克·兰切斯特(Frederick Lanchester)在一战期间(1916)发展出的一系列用于描述对战双方战斗力的微分方程.
又称兰切斯特定律(Lanchester's Law), 其中, 兰切斯特有时也翻译为兰彻斯特.
那么这个方程到底讲了什么, 它又能带给我们什么启示呢?