假装自己是人类
Expression Problem 随想

大家都听过 程序 = 数据结构+算法,从另一种意义上说 程序 = 数据+操作。 Expression Problem 指的是如何在不修改已有的源代码,添加新的数据或操作。它提供了一种新的视角,来看待编程语言和程序设计。

QQA: Spring Data 如何查询属性是否在列表中

每篇文章有多个标签,选中多个标签,要求找出含有该标签的文章。同时如果选中标签为空,则返回所有文章。Spring Data/JPA 如何实现?

加权随机采样 (Weighted Random Sampling)

一个集合里有 n 个元素,每个元素有不同的权重,现在要不放回地随机抽取 m 个元素,每个元素被抽中的概率为元素的权重占总权重的比例。要怎么做呢?

QQA: jstat gcutil 的输出是什么意思

当 Java 程序有性能问题时,尤其是响应时间有突然变化时,最好第一时间查看 GC 的状态。一般用 jstat -gcutil <pid> 1s 来查看,那么它的输出又是什么含义呢?

理解系统负载

topuptime 等命令会输出系统的平均负载 (Load Average),一般会有三个值,分别代表 1 分钟,5 分钟和 15 分钟的平均负载。那“负载”又是什么含义呢?

跳表──没听过但很犀利的数据结构

跳表(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? 这篇文章里,咱们从直觉的角度聊一聊“数字”有多大。