关于远足

关于远足

昨天刚从Lake 22远足回来,感觉很疲劳,回想起这些时间的远足经历,可以写一写其中的感受。如果你也有此长期计划,打算用远足的方式来充实生活,或者锻炼身体,甚至只是打发时间,那可以参考下面的文字。

首先,我不是驴友,我也没有专业的远足设备。我只是在周末天气不错的时候,用远足的方式给自己找点乐子。经过一段时间的熏陶以后,就像写博客一样,已经养成了习惯。我在《旅行映像》里贴了一些远足的图文记录,但是

[......]阅读全文

分享到:

从Java和JavaScript来学习Haskell和Groovy(DSL)

从Java和JavaScript来学习Haskell和Groovy(DSL) 这是《从Java和JavaScript来学习Haskell和Groovy》系列的第四篇。

首先来理解DSL。

DSL(Domain Specific Language)指的是一定应用领域内的计算机语言,它可以不强大,它可以只能在一定的领域内生效(和GPL相比,GPL是General Purpose Language),表达仅限于该领域,但是它对于特定领域简洁、清晰,包含针对特定领域的优化。

当我

[......]阅读全文

分享到:

想起那些听过的流行歌曲

想起那些听过的流行歌曲

我们这一代人,很多都有一个不断演化着的音乐的梦想。

我们欣赏过很多音乐,听过很多歌,打开豆瓣音乐的时候,当我选择“八零后”频道,我确确实实感受到这些歌曲就是属于我的世界的,很难解释其中的原因。

虽然现在有时候依然去听那些新歌,但是就是很难再找到那根打动自己的神经。

我听张信哲的歌,最早最喜欢的是《别怕我伤心》,甚至在一些公众场合我都愿意拿出来唱一唱。

还有《爱如潮水》,当时买的是磁带,哪有什么C

[......]阅读全文

分享到:

从Java和JavaScript来学习Haskell和Groovy(元编程)

从Java和JavaScript来学习Haskell和Groovy(元编程)

本篇文章的话题是元编程。首先来认识元编程,我在第一篇《引子》里面已经介绍:元编程,指的是在运行时改变“类”的定义,例如访问、增加或修改等等。一言以蔽之,就是“用程序来写程序”。在第二篇的《类型系统》里面已经借由继承和接口的实现,介绍了一些利用元编程特性来增加或改变子类行为的方法。回顾语言发展的长河,其实是经历了一个从“对象 -> 类 -> 元类”到“对象 -> 原型”的发展过程

[......]阅读全文

分享到:

LeetCode题目解答——155~226题

[Updated on 9/22/2017] 如今回头看来,里面很多做法都不是最佳的,有的从复杂度上根本就不是最优解,有的写的太啰嗦,有的则用了一些过于tricky的方法。我没有为了这个再更新,就让它们去吧。

LeetCode上面的题目更新很快,而且题目是越来越不好做了。我把最新的155到226题目的思考和解答过程放在下面,解法有好有坏,有问题我们可以讨论。老规矩,有一些题目是要买一个特定的[......]阅读全文

分享到:

换组

换组

最近在忙于公司内部换组的事情,在亚马逊等等很多公司都有这样的政策文化,就是,如果你在这一个组工作一年以后,并且绩效不太差的话,都可以自己去寻找觉得喜欢的团队加入。我在当前的这个大组干了两年多了,经历了一些成败和风波,我觉得是时候离开去寻找一个更合我胃口的团队了,增加阅历和体验,当然,也肯定是新的挑战。在思考自己的职业未来的时候,其实是有不少选项的。大约是最近这一年,我越来越感觉到,在Amazon

[......]阅读全文

分享到:

手滑的故事

手滑的故事

最近看到这篇文章《小伙伴们手滑集》,觉得感慨很多,强烈推荐大家阅读。比如这样的例子:

UPDATE没有WHERE条件

而我则经历过delete没有写where条件的惨剧,这个惨剧是某些case下面代码调用触发的,不是手动执行SQL发生的。

还有臭名昭著的,我没有经历过,但是我有不止一个同事干过这样的事情:

rm -rf

都只是手稍稍地温柔地“滑了一下”而已嘛……

这些事情我觉得一下子很亲

[......]阅读全文

分享到:

建立动态规划状态转移方程的练习

建立动态规划状态转移方程的练习

大学里面算法课老师教导过动态规划,但是就像看书要把书看厚再看薄一样,要把动态规划彻底理解,还是需要一些时间的锻炼。解动态规划问题,每个人都有自己的习惯的套路,我的理解是最核心的过程有两部,一个是找出问题的一个一个子“状态”,再一个就是建立“状态转移方程”(就是所谓的“递推关系式”)。把这个过程搞定,基本上动态规划的题目就解

[......]阅读全文

分享到:

一点美中医疗的对比

一点美中医疗的对比 最近耳道感染,左耳朵又堵又疼,在美国几次就医,本人虽非医学专业出身,但从局外人的角度,想到和国内那些求医的历史,还是有一些比较可言。

首先对于医生的划分,国内基本上就是根据科室来完成,一个医生在一个科室,时间久了,经验丰富,遂成为出名的医生。好处在于医生更能够专精于自己的一亩三分地,专科阅历容易积累。而看看许多国内的专家,有大量的机会见各种各样奇怪的病人,并且手术的机会也会非常多,因此我猜测经

[......]阅读全文

分享到:

夏威夷游记

6天7夜,仅游玩了O'ahu一个岛,后来总结如果高效率地行进,可能这个岛屿4天就可以玩的差不多了。我很喜欢旅行,但是在旅行计划方面不太在行。夏威夷和我以前去过的菲律宾长滩岛比起来,更加现代一点,价格也贵了接近一倍。期间我们没有坐公交车,全程都租了车行进,并且我觉得花掉的钱里面,租车是最值得的。我把这篇文字记录下来,如果你也有夏威夷的出行计划,那么可以参考参考。

家人和我一起来,都说三个女

[......]阅读全文

分享到:

读写模型整理笔记

读模型

1、主键读

最常见的读模型,说是主键,其实也包括其它索引键,或者联合主键。

常见实现:hash,时间复杂度可以接近O(1);B树或变种:时间复杂度接近O(log(n))。

关于B树和变种:

B树(B-树):本质上是二叉查找树的升级版,变成了平衡的N叉查找树,这个N的范围根据磁盘一次读取的块大小来调整,这样复杂度log n的底数就从2变成一个更大的数,减少了树的高度。除此以外,还有一些额外的

[......]阅读全文

分享到:

从Java和JavaScript来学习Haskell和Groovy(类型系统)

从Java和JavaScript来学习Haskell和Groovy(类型系统) 接上文《从Java和JavaScript来学习Haskell和Groovy(引子)》

首先搞清几个概念:

  • 动态类型(Dynamic Typing)和静态类型:区别的核心在编译期还是运行时。静态类型的语言系统在编译期就明确知道每一个变量的类型,如果发现不合法的类型赋值就在编译期报错;动态类型则直到运行时才会报错。
  • 类型推导(Type Inference),类型推断是指可以在上下文中,编译

[......]阅读全文

分享到:

从Java和JavaScript来学习Haskell和Groovy(引子)

从Java和JavaScript来学习Haskell和Groovy(引子) 我记得刚接触计算机的时候,我就受到了两个非常巨大的错误观念的影响,这个观念最初是来自于老师的传授还是学长的教诲已经记不清了,但是直到我工作几年以后,才慢慢有了实际的体会:

  1. 学习和使用什么编程语言不重要,重要的是算法和设计;
  2. 程序员学习的精髓是面向对象的设计模式,掌握以后,一通百通。

简直就是是胡扯啊。也许在某个极其狭隘的上下文中还能这样说,但是泛泛而谈,这样的态度无疑是误人子弟的。

就说第一条

[......]阅读全文

分享到:

生活的鱼和熊掌

生活的鱼和熊掌 前方鸡汤高能预警。

读书的时候,曾经听到这样的说法,最近几个月,则又听到了两三次,人生选择论,鱼和熊掌说,或者生活跷跷板理论。跷跷板的特点就是,一头摁下去,另一头就起来。本人向来鄙视鸡汤,不过这个理论还是比较赞同的,看来今天破一次例。选择了A,就失去了B;选择了B,就无法得到A。所谓鱼和熊掌无法兼得便是如此。

生活总会值得吐槽

毕业后在南京工作的时候,觉得气候还算过得去,吴侬软语听起来也顺

[......]阅读全文

分享到:

系统设计典型问题的思考

系统设计典型问题的思考系统设计方面的问题问题是非常考验经验和思维过程的,而且和常见的算法问题、语言基础问题不同,涉及的面很广,还没有比较一致的判别标准。但无论如何,还是可以归纳一些常见的思路和典型问题的线索。

首先,反复沟通和澄清系统需求。只有把需求澄清清楚了,才可以开始思考并落到纸面上。但是需求的沟通应该是持续和循序渐进的,问题很难从一开始就思考全面。最重要的条目包括:

  • use cases,通常问题只需要2~3个u

[......]阅读全文

分享到:

一道随机数题目的求解

一道随机数题目的求解 有这样一道算法题:

给定一个能够生成均匀1~5随机枚举数的函数,请设计一个能够生成均匀1~7随机枚举数的函数。

就是说,有一个生成随机数的函数rand5,可能返回1、2、3、4、5这5个枚举值,其中每个值被返回的概率都是严格的1/5,现在需要设计一个类似的随机数函数rand7,可能返回1、2、3、4、5、6、7这几个枚举值,每个值被返回的概率都是严格的1/7。

先掩卷思考,脑海中

[......]阅读全文

分享到:

再谈程序员学英语

再谈程序员学英语

2012年的时候,我曾经写了一篇《程序员学英语》,总结了一些我对于英语学习的看法,包括为什么英语对于程序员来说如此重要,还有一些自己总结的英语学习的方法。时过境迁,在西雅图待了半年多了,于是在这些内容基础上,我现在有了一些新感触,以tips的记录在这里,希望对于像我这样对于英语学习天赋平平的程序员来说有所帮助。

先说明一点,通常情况下我不太赞同高强度的语言训练,譬如连续地花时间背诵红宝书,我没有

[......]阅读全文

分享到:

A page widgetization practice

A page widgetization practice

I was working on the page reconstruction recently, and here is how I divide a page into widgets and how do they interacts in this new attempt.

Core Concepts

Page and widget: A page is composed by sev

[......]阅读全文

分享到:

Java容器类型复习笔记

Java容器类型复习笔记 最近抽空把java.lang下面常用的那些容器类型(数据结构)复习了一下,这些东西是基础,平时使用的时候也可以很容易查得到,有些方法大概知道,但是总是弄混,如果可以记住那些重要方法,并且能够熟练使用的话,还是可以让编码过程变得容易很多。另外一个是实现机制,对于常用数据结构的实现机制,应该说是必须要熟知的。

另外,并发容器我之前整理过,放在这篇文章里。

Queue

  1. add和offer的区别在于达

[......]阅读全文

分享到:

直面歧视

直面歧视

最近在知乎上面看到不少关于歧视讨论的帖子,大部分人的观点都是,歧视是负面的,要避免歧视,尤其是在公众场合歧视的人,要惩戒。这条观点展开来的话题,大部分我都认同,只是我想补充的是,其实歧视没有那么遥远,不要把歧视的事情全部看做多么罪恶深重的事情,事情要一码一码分开来看,有轻有重,我向来厌恶鸡汤,统一的道德帝是可恶的。

首先,来澄清“歧视”的概念:歧视,是针对特定族群的成员,仅仅由于其身份或归类,而

[......]阅读全文

分享到: