
- 交换类排序 – 冒泡排序 鸡尾酒排序 奇偶排序 梳子排序 侏儒排序 快速排序 臭皮匠排序 Bogo 排序
- 选择类排序 – 选择排序 堆排序 Smooth 排序 笛卡尔树排序 锦标赛排序 圈排序
- 插入类排序 – 插入排序 希尔排序 二叉查找树排序 图书馆排序 耐心排序
- 归并类排序 – 归并
[……]阅读全文
一个纯正程序员的啰嗦

[……]阅读全文

关于足球
我从 98 年世界杯就开始看球了,从最早国内的申花球迷,到后来长期看英超诸强的足球、西甲双雄的足球,我也算是一介有一点儿球龄的老球迷。一直以来我很想说一说关于足球青训的话题,今年在莫耶斯带领下的曼联,球踢得无比难看,比赛输得体无完肤,我觉得我找到了一个契机。比赛看得多了,也就不那么容易激动,看球更加理性。和许许多多竞技运动一样,你无法准确预测一场比赛的结果,但是长此以往的比赛分析下来,能看得到许多问题,孰强孰弱一目了然。虽说曼联的比赛我几乎一场不落,但是看看国内论坛上的帖子,骂战是从来都不可避免的,但是对弗格森的盲目的个人崇拜和神化已经到了一个简直无可救药的地步了。我相信很多曼联球
[……]阅读全文

Trie 树,又叫做前缀树或者是字典树,是一种有序的树。从空字符串的根开始,往下遍历到某个节点,确定了对应的字符串,也就是说,任意一个节点的所有子孙都具备相同的前缀。每一棵 Trie 树都可以被看做是一个简单版的确定有限状态的自动机(DFA,deterministic finite automaton),也就是说,对于一个任意给定的属于该自动机的状态 (①) 和一个属于该自动机字母表的字符 (②),都可以根据给定的转移函数 (③) 转到下一个状态去。其中:
[……]阅读全文
一篇文章存成一个巨大的文件,总共大约有一亿个单词,要找出里面重复次数最多的。怎么做?
Hadoop 是一把威力巨大的榔头,在使用过 Hadoop 之后,看着任何东西都想把它给 map reduce 了。有一个关于 Jeff Dean 的小笑话,说在睡不着觉的时候,一般人是数羊,Jeff Dean 是 map reduce 他的羊群。所以,我的办法是,把这个文件拆分成若干个小文件,在 map 过程用 hash 算法保证相同的单词落入一个文件(这点很重要),计算单词出现次数,在 reduce 过程取得重复次数最多的单词来。
但是,真有必要这样啰嗦吗?
只有一亿个单词,简单估算一下,一个字母占据两个字节,假设单词平均长度 5,即便
[……]阅读全文

小 S 是一名新员工,他和很多踌躇满志的大学毕业生一样,实习+工作,他来到了一家非常对口自己爱好的公司,来到了一支温暖的团队 A,这支 30 人的大团队由老员工和新员工混合组成,年龄结构复合,有男有女,有从二十几岁到四十几岁的程序员,做的视频编解码项目。整个项目组的成员都是视频编解码领域的能手或专家,最多的有 10 年的相关经验,也有几项专利,小 S 觉得这样的人应该很耐得住寂寞,有很深的造诣。
有一位导师手把手地带着他学习和进入项目,陪他一起吃饭,和他聊天,给了他公司内部通用的学习材料。于是他很快上手,最开始有一些疑惑,但是小 S 积极地去询问问题,导师和同事都很乐于帮助他,于是他进步很快。公司有一个专门帮
[……]阅读全文

在这里可以找得到这些工具的列表,虽然官网上免责声明为 “The tools described in this section are unsupported and experimental in nature and should be used with that in mind. They might not be available in future JDK versions.”,但实际上这些工具还是非常有用的,尤其可以站在 JVM 的角度来定位问题。我在此简单罗列一些常用的工具和命令,以及相应的执行结果示例。如果你经常和 JVM 打交道,最好对这些工具的常用命令熟记。
jst
[……]阅读全文
因为项目的需要,学习使用了 Hadoop,和所有过热的技术一样,“大数据”、“海量” 这类词语在互联网上满天乱飞。Hadoop 是一个非常优秀的分布式编程框架,设计精巧而且目前没有同级别同重量的替代品。另外也接触到一个内部使用的框架,对于 Hadoop 做了封装和定制,使得更满足业务需求。我最近也想写一些 Hadoop 的学习和使用心得,但是看到网上那么泛滥的文章,我觉得再写点笔记一样的东西实在是没有价值。倒不如在漫天颂歌的时候冷静下来看看,有哪些不适合 Hadoop 解决的难题呢?

这张图就是 Hadoop 的架构图,Map 和 Reduce 是两个最基本的处理阶段,之前有输入数据格式定义和数据分片,之后 [……]阅读全文

最近在工作中我需要把数据从公共的 Data Warehouse(数据仓库)导出来,放到属于我们 team 自己账号的云端存储资源中去,然后再在我们的应用中查询这样的资源。需要导出数据是因为直接从 Data Warehouse 查询数据是一个缓慢而且异步的过程,而我们的应用数据查询需要实时性。现在要解决这个问题有一些 AWS 的服务可供我们可以选择,基本上分成了两大类:
第一类是存储和内容分发(Storage & Content Delivery):
[……]阅读全文

本文翻译自《Java 8 Explained: Applying Lambdas to Java Collections》。
Lambdas 表达式是 Java 8 的主题,在 Java 平台上我们期待了很久。但是,如果如果我们不在集合中使用它的话,就损失了很大价值。把现有接口迁移成为 lambda 风格接口的问题已经通过 default methods,也就是 defender methods 解决了。在这篇文章里面我们来看一看 Java 集合里面的批量数据操作(bulk operation)。
批量操作
最初的变更文档已经说了,批量操作是 “给 Java 集合框架添加的用以批量操作数据的功能,而它是基于 lam
[……]阅读全文
最近在看一本书,叫做 《思考的乐趣》,第 26 节 “我最爱的证明”,里面介绍了这样一则有趣的问题(文章链接在此):
设想一个平面上布满间距为 1 的横纵直线,形成由一个个 1×1 正方形组成的网格。任意给一个面积小于 1 个单位的图形,证明这个图形总能放在网格中而不包含任何一个格点。

初看这个论断,觉得似乎是正确的,但又不知从何下手。文中指出证明的思路很巧妙,让人感到数学的美妙。我的感触是,文中的证明大大地换了个角度,很有峰回路转的感觉。正在读这篇文章的你,不妨先思考一下,别急着往下看答案。
如果陷入了拼命去构造各种各样的图形类别,去思考不同类别图形的情况下,怎么去摆放这样的图形,使得图形不覆
[……]阅读全文
今天是来武汉的第四天。有机会来华科招聘毕业生,是一件很有趣也很有价值的事情。有一些是很有意思的见闻,更多的是锻炼以及收获。大学里面有很多优秀的人才,有一些人的错过则颇为可惜。请那些勤奋、有天赋而且有抱负的学生保持热情,至少我可以明确地感受到,人才的价值。互联网公司为了招聘到优秀的人才,倾注了非常多的精力。以我们为例,这一次来华科的招聘团队 7、8 个人里面,大部分都折腾得非常疲惫,每天也没什么时间吃午饭,晚上还要讨论结果、审阅简历,回酒店倒头就睡。但是很多非常有潜质的工程师,往往还持有其他互联网企业的 offer,这其中对人才的竞争是非常激烈的。
一些有趣的现象
相对于沿海地区、北京上海 [……]阅读全文
在系统设计阶段考虑全面很难,有许多人倾向于把整个设计分成若干阶段,在迭代中完成整个设计,这本身是非常好的,但是,就如同 “先做出来,以后再优化” 这样的经典谎言一样,本身并无错,只是许多程序员都不习惯于真正的迭代设计和迭代优化。举例来说,有一个日益复杂的类,每个人都修改一点点,一直到最后都没有人愿意去做重构,大家的心态都是一样的:“我只修改了一点点,为什么要我去动那么大的刀,于我没有任何好处”。我不在这里谈论这一问题的解决办法,我倒是想说,在开始阶段考虑清楚问题在多数情况下还是很有好处的,设计考虑得越是清楚,在后续阶段代码可以承受越多的变更而不腐朽。
再做系统设计的时候,我们常常会这样说:“一般
[……]阅读全文
今天晚上在北京航空航天大学举行了亚马逊今年第一场校园招聘会,我也上去过了一把 speaker 的瘾,做了 20 分钟的 tech talk。工作 5 年多以后第一次得以回到大学学校(虽然不是自己毕业的大学),走上略显陈旧的教学楼,闻到楼道里厕所的味道,我一下就记起大学来了。每年到了这个时候,总是有很多学生要面临择业的问题。有一些怀念,也有不少新的感触,虽说都很微小,我简单地记录在这里。我一直觉得如果这件事情可以放在刚入大学就进行,会有很多大学生明白自己应该在人生最荒诞的四年甚至六年、七年里面,可以做一些什么,不让自己后悔。
很多非计算机相关专业的学生想投身软件行业,甚至相当程序员。不少学生在担心自己专业不对
[……]阅读全文
首先,Jeff Dean 是谁?
我想许多程序员都对这个名字如雷贯耳,如果你没有听说过,可以扫一眼他的个人履历,你会感到无比惊讶的:
但是,最著名的就是他设计和实现了 Map Reduce 和 Big Table,这两项改变世界的技术。
坊间流传着许多关于 Jeff Dean 有趣的说法,我挑了一些我觉得有趣的列在
[……]阅读全文
最初我是在公司内部的 broadcast 上面听到有 principal 介绍到它的,和 AspectJ 归在一起。看了几个例子之后觉得有点意思,就去 Lombok 的官网上扒了一下。我们已经知道向 AspectJ、CGLib 等等都可以做到对已有 Java 代码在字节码层级的改变,无论是编译时期静态织入还是运行时期动态代理,对于我们使用 AOP 来减少那些重复性编码的劳动、增加切面性质的逻辑颇有帮助。这里有几个概念:
[……]阅读全文
What’re the basic qualities to a software engineer? Hard skills such as coding, testing, business knowledge and algorithm, and soft skills as communication, passion, attitude, resposibility and so on. Posted an article talked about the over estimation of algrithm, I would like to raise a similar po[……]阅读全文
在说 3D 图表以前,首先要明确两个概念,一个是数据的维度,一个是呈现数据载体的维度。对于数据的维度,一维的数据呈现,但是呈现的载体是二维的平面图,比如饼图:
已经能够很清晰地观察到数据的分布情况。数据如果增加一个维度,变成二维,呈现载体依然是二维的平面图:
数据表达依然是清晰的。但是,倘若再增加一维,这个时候就面临了两个问题:
这两个问题中,第一个问题从本质上说,无法解决。数据的维度越大,理解起来理所当然地,也越来越困难。
但是第二个问题,我们至少有两种解决办法。一种
[……]阅读全文
我忽然很好奇,想知道其他软件工程师的生活是什么样的?人永远都没有活在别人心中的形象那么绚烂,生活中总有无数烂事烦事需要处理,但是每个人都有自己享受生活的方式。逛了逛了各式技术博客和论坛,我发现大家似乎都太严肃了,太谦逊了,太学术了。做软件本来是一件很有意思的事情,但是这些帖子和文章无非就包括这么几种:
[……]阅读全文
项目中有一个对实时响应性比较高的服务,引入了 Memcached 以减少延迟和减少数据库压力。但是期间遇到了一些问题,这里记录一些调优细节。
客户端选择
统计信息
可以通过 nc 命令向 Memcached 服务端发送消息来获取统计信息,例如:
echo "
[……]阅读全文