假装自己是人类
跳表──没听过但很犀利的数据结构

跳表(skip list) 对标的是平衡树(AVL Tree),是一种 插入/删除/搜索 都是 O(log n) 的数据结构。它最大的优势是原理简单、容易实现、方便扩展、效率更高。因此在一 些热门的项目里用来替代平衡树,如 redis, leveldb 等。

最高楼层问题

一个人爬楼梯,每爬一层前先抛个硬币,如果是正面则继续向上,如果是反面则停下结束 ,问平均能爬到的最高层数是多少(期望)?

这个问题是不是太简单了?那么考虑 N 个人各自爬楼梯,都依照上面的规则,只统计它 们中爬得最高的楼层,问楼层数的期望是多少?

Maven Profile 与 Spring Profile 管理多环境打包

一般开发团队会有多个部署环境,如 dev 环境用于开发自测,QA 环境让测试团队测试, Production 环境作为线上环境。通常不同环境的配置不同,我们希望打包时的人力消耗最少。

性能对比:ReentrantLock vs Synchronized

记一次并发相关的性能测试。

QQA: Hibernate 为什么需要手工管理双向关联

Hibernate/JPA 中如果两个 Entity 之间的关联是双向的(不论是 @ManyToMany@OneToMany 还是 @OneToOne),都需要手动管理关联,为什么?

HTML 5 Drag and Drop 入门教程

在 HTML 5 之前,想要实现 Drag and Drop(拖拽/拖放)一般需要求助于 JQuery,所幸 HTML 5 已经把 DnD 标准化,现在我们能“轻易”地为几乎任意元素实现拖放功能。只是它的难度取决于你对 API 的理解程度,而官方文档并不好懂。这篇文章会一步步带你了解它的 API。

Kafka 入门介绍

Kafka 的大名相信大家早有耳闻,就是《变形记》的作者……咳咳……是一个著名的分布式消息队列,据说是因为作者特别喜欢作家卡夫卡才取名 Kafka 的。开始接触 Kafka 时最头疼的就是它的概念,什么是 group,什么是 partition …… 这里咱们从头开始理一理 Kafka 的基本概念。

为 vim + tmux 开启真彩色(true color)

有一些 vim 主题(如 gruvboxsolarized8)在 GUI 和终端下效果不同,有可能是因为这个主题需要 true color (24 位颜色) 的支持,而通常终端只开启 256 色的支持(如 xterm-256color)。下面来看看怎么开启 true color 支持。

Reactor 模式简介

如果你熟悉 Java 的 23 种设计模式,看到“Reactor 模式”可能就会一脸懵逼,这是什么鬼。Reactor 是一种应用在服务器端的开发模式(也有说法称 Reactor 是一种 IO 模式),目的是提高服务端程序的并发能力。

2^128 有多大

编程中,我们常常需要为“数据”指定 ID,那什么样的类型才“够大”呢?int? long? UUID? 这篇文章里,咱们从直觉的角度聊一聊“数字”有多大。

分享创造 rargs

rargs 是一个 rust 实现的命令行工具,它解 决的是 xargsparallel 等批量处理工具中无法自由引用输入的痛点。rargs 支持用正则表达式来匹配输入中的任意内容。例如,我们想恢复一些以 .bak 结尾的备 份文件,用 rargs 可以这么做:

ls *.bak | rargs -p '(.*)\.bak' mv {0} {1}
Python 元类 (MetaClass) 小教程

可能是 Ruby 带的头,大家喜欢把“元编程”称作魔法,其实哪有什么魔法,一切都是科学。而 meta classes 就是 Python 里最魔法的科学,也是 99% 的人用不到的科学。只是谁还不想学点魔法呢?

QQA: Python 中的 str 与 repr

有时候,你会需要为你的类实现 __str____repr__ 方法,你知道它们的作用 是什么吗?它们有什么区别吗?这个问题的答案一搜就能找到,如果恰巧这是你第一次看 到这个问题,不妨看看吧。

QQA: 为什么 java 中要写 getter/setter?

java 有一个不成文的规定,如果要访问一个类的 private 字段,就需要写 getter/setter 方法。但我们在其它语言却很少见到类似的约定,为什么?

QQA: Rust 中 Send 与 Sync 有什么区别

SendSync 是两个十分相近的 trait,它们是一起保证了 Rust 的线程安全,它 们又有什么异同点呢?

(Quick Question and Answer 系列旨在对小问题做简短解答)