颐和园半日游

image.png

来北京快两年了,住在中关村附近却一直没有去过颐和园,趁着四月初天气绝佳去了一趟。纯佛系观光,爬过万寿山,沿着昆明湖走了走,看到了大院里的玉兰花,没有什么香气,回来之后简单做了做功课,玉兰花又称早春花木,因为开花时无叶,故有木花树之称,另外也是上海市市花。

image.png

Antlr (Another Tool for Language Recognition)

Antlr是一个可以根据输入自动生成语法树并可视化的开源语法分析器,最近工作中有使用到,非常强大好用,所以简单做个介绍。

Antlr可以用在很多需要对输入语法做解析的场景,比如SQL的解析,Hive、Pig所使用的语言,Hibernate中HQL语言等等,它可以自动帮我们将输入的语言按照语法文件的定义去解析为AST抽象语法树,我们可以再去实现它生成的接口去进行相关AST处理的业务逻辑。

image.png

语法入门上手比较简单,大约半天就能学会。(简直是大学森编译原理课程大作业解决神器)

为什么Redis Pipline会这么快

循环IO是大坑,不管是RPC接口、SQL请求还是缓存操作都应该极力避免,循环转批量是最简单有效的方法,但是批量化的收益到底在哪里? 节省的只有网络IO吗?

在Redis官方文档中有一段对Pipline的介绍很有意思。

It's not just a matter of RTT

Pipelining is not just a way to reduce the latency cost associated with the round trip time, it actually greatly improves the number of operations you can perform per second in a given Redis server. This is because without using pipelining, serving each command is very cheap from the point of view of accessing the data structures and producing the reply, but it is very costly from the point of view of doing the socket I/O. This involves calling the read() and write() syscall, that means going from user land to kernel land. The context switch is a huge speed penalty.

When pipelining is used, many commands are usually read with a single read() system call, and multiple replies are delivered with a single write() system call. Because of this, the number of total queries performed per second initially increases almost linearly with longer pipelines, and eventually reaches 10 times the baseline obtained without pipelining.

书籍推荐

《沉默的病人》

多少恩爱的夫妻,都在寻找杀死对方的契机。

image.png

年初看完的一本推理小说,写作视角有点类似于东野圭吾的《恶意》,故事主线围绕女主人公的一幅画《阿尔刻提斯》展开。

希腊神话故事女主人公阿尔刻提斯,作为妻子自愿用自己的死救国王阿德墨托斯一命,但是没想到丈夫欣然同意了,就这样慷慨赴死了。

但没想到大力神赫拉克勒斯将阿尔刻提斯从地狱救了回来,她死而复生,阿德墨托斯再次见到妻子万分激动,但阿尔刻提斯却永远保持了沉默。

阿德墨托斯绝望地问赫拉克勒斯:“我妻子为什么站在那里,一句话也不说?”

引文

一旦你为什么东西命名,就会受到束缚,看不到它的全貌或者重要性;就会专注于遣词造句,其实修辞只会是个微不足道的部分,只是冰山之一角。

未得到表达的情感是永远不会消亡的。他们虽然被活埋,今后必将以更加丑陋的方式出现。

——西格蒙德.弗洛伊德

选择自己所爱的人就像选择心理治疗师,我们有必要问自己,这个人会不会对我忠诚,能不能听进去批评,承认所犯的错误,而且做不到的事情决不承诺?

建立在谎言与虚假基础上的东西,最终都会离你而去。记住,不忠诚的爱情,不配称之为爱情。

心理治疗的目的不是为了改变过去,而是为了帮助病人正视自己的历史,并为之感到悲痛。

——爱丽丝.米勒

文章推荐

《火星救援》中你应该知道的5个高可用系统故障恢复原则

Metrics For Your Web Application's Dashboards

通常应用需要关注的指标都是差不多的,当系统出现故障时,我们需要用它们来快速定位。文中介绍了一些关键的系统指标,这些都是目前服务监控系统需要具备的指标。

Finding Time to Become a Better Developer(寻找时间成为一名更优秀的程序员)

花费时间是一种投资。和所有投资一样,投资回报率是一个合理的期望。你的所得至少应该和投入一样多,希望是越多越好。

make it work, make it right, make it fast。这个是不错的口头禅但这里有一个陷阱:right并不意味着完美,fast也不是说越快越好。

Q.E.D.


Talk is cheap, show me the code.