假装自己是人类
《科学究竟是什么?》

我们经常会吐糟一件事“不科学”,可“什么是科学”呢?也许你听说过“科学是可证伪的”这样的说法,这种观点正确吗?科学理论究竟揭示了现实,还是说它只是一种工具?如果你对这类问题有兴趣,那么这本书……也给不了你答案……

QQA: 如何从远程运行的 Vim 中复制内容

我们常常会用 ssh 登录远程机器,并在在其中 vim 命令编辑查看文件。一个常见的问题是如何无缝把选中的内容复制到本地的剪贴板呢?

Spring Security 实现 API Token 权限认证

常见的权限认证是通过提供“用户名密码”完成,业务中有一些 API,我们希望以 API Token 的形式验证。例如 URL 上加上 token /api?token=xxxx 就允许API 的访问。这种设计背后的逻辑是用户名密码拥有较高的权限,而 API token 可以只给出某个子系统的权限,类似于 Github 的 Personal API Tokens

本文会介绍如何用 Spring Security 来实现。Spring Security 虽然功能强大,但配置起来经常让人云里雾里,所以我们要试图了解一些 Spring Security 的工作原理,再具体实现 API Token 的权限认证。

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 的基本概念。