假装自己是人类
性能对比: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 系列旨在对小问题做简短解答)

QQA: 什么是 Servlet

Servlet 没有标准的中文译名,我们会在学习 Java Web 编程(如 Spring)时遇到,你知道它是什么吗?

QQA: 如何启用 @Autowired

@Autowired 是 Spring 提供的一个注解,作用是自动装配 Bean 所需要的依赖。但 @Autowired 只是告诉 Spring 当前的 Bean 依赖了其它的 Bean,那么如何让 Spring 真正“启用”自动装配的功能呢?

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

WGAN 笔记

Wasserstein GAN(WGAN) 解决传统 GAN 的训练难,训练过程不稳定等问题了。WGAN 的背后有强劲的数学支撑,因此要想理解这它的原理,需要理解许多数学公式的推导。这个笔记尽量尝试从直觉的角度来理解 WGAN 背后的原理。