今天在编写单元测试的时候遇到如下问题:

被测类中有一个String类型的static final字段,但是这个字段的值不适用于单测的场景,因此在单测中用反射强行设置了这个字段为需要的值。执行单测的时候发现实际使用的还是原来的值。打了断点查看此字段,又的确是新设置的值。

继续阅读

上一篇中提到了重写 hashCode() 方法时需要满足的通用约束,这次看一下最常用的 String 类是如何实现这个方法的。

查看 String 的源码,该方法的的实现是将 String 中的每一个字符当作整型,使用如下公式计算出最后的 hashCode:

其中 s 表示字符串,s[i] 是其中的第 i 个字符。

继续阅读

Java 中 equals()hashCode() 两个特殊方法估计没有人不知道的。这两个方法定义在 Object 类中,因此所有的 Java 对象都有这两个方法,并且我们可以重写这两个方法。

equals() 方法用来比较两个对象是否在逻辑上相等,这里就不再说了。在重写 equals() 方法时,我们往往得到一个忠告:重写 equals() 方法的同时一定要重写 hashCode() 方法。为什么有这样一条准则呢?

继续阅读

ThreadLocal 用于实现线程本地变量,即不同的线程访问同一个 ThreadLocal 变量都各自拥有一份互不相关的独立拷贝。ThreadLocal 可以用于在同一个线程中安全的跨对象实例传递数据。

如何实现一个 ThreadLocal 呢?最容易想到的方式就是使用一个 Map,以线程 ID 为 key,为每个线程保存不同的数据。比如下面的示例代码:

继续阅读

之前写了一个很简单的 python 脚本,做一些数据统计,主要就是从一些 http 接口里面查询数据。在控制台测试时一切正常,后来把输出重定向到文件时就抛UnicodeEncodeError异常了,异常信息如下:

继续阅读

Note: 本文的“黑科技”仅供娱乐。

在 shell 中执行命令时,有一些敏感的命令行参数我们希望能够隐藏掉,不在ps命令中被显示出来。比如mysql -u root -p password,我们肯定不希望password参数在别人运行ps命令时被看到。

为了达到上述目的,在 C 语言中可以通过将想要隐藏的参数置空来实现。比如想要隐藏程序的第一个参数,可以像下面这样做:

继续阅读

使用 oh-my-zsh 一定会使用 autojump 这个神器!autojump 提供了一种比 cd 命令更快捷的方式进入到曾经访问过的目录中。使用方法非常简单,示例如下:

这里还有一个youtube上的演示视频。

继续阅读

使用SSH客户端工具连接到 Linux 服务器执行操作是很多人的日常工作方式,但是客户端与服务器之间的网络设备可能设置了空闲连接检测,在连接上没有数据传输时会断开连接。因此,如果长时间连着 SSH 但没有进行操作,连接就会被断开。下次使用时需要重新进行连接,如果认证方式比较复杂的话会很麻烦。

在 Windows 上使用 SecureCRT 或 Xshell 时,选项中有“反空闲”或“保持连接存活”的选项,可以在连接空闲时每隔一段时间向服务器发送一个探测报文,避免连接被断开。

直接使用 Linux 的 ssh 客户端时可以使用 ServerAliveInterval 选项来达到保持连接存活的目的。

继续阅读

Git可以通过 .gitignore 文件来配置 repository 范围的 ignore 列表,非常方便。而 SVN 的 ignore 命令则是作用于指定目录之上,工程大的时候非常麻烦。

Windows 上使用 TortoiseSVN 可以通过 TortoiseSVN->Settings->General->Global ignore pattern 来设置全局的忽略列表。

继续阅读