摘要:
乱码是所有程序员都经历过的噩梦。 拯救你生命的只有 UTF-8。 如果你不知道用什么字符集,用 UTF-8,如果没有强制要求,也用 UTF-8,相信我,没错的。 从上面的网页使用的编码就知道为什么了。如果你的公司还在使用 ISO-8895-1 的话,你可以好好鄙视下,说明这公司负责技术的不行嘛。 如 阅读全文
摘要:
在 Java 中 String 对象是我们最常用的对象。 在本文章中,我们主要对 String 对象使用的 String Pool 进行一些简单的介绍。 Java 定义 String 后,String 是存储在 String Pool 中的,以便于加快字符串的访问和处理。 正是有这个方面的访问需求, 阅读全文
摘要:
一直到 Java 8,Strings 在 Java 中使用字符数组进行存储的,同时使用的是 UTF-16 字符集,因此每一个字符将会使用 2 字节的内存。 从 Java 9 开始,Java 提供了一个叫做压缩字符(Compact Strings)的存储概念。 这个存储将会针对字符串使用 char[] 阅读全文
摘要:
在 Java 6 中,我们唯一可以做的优化就是通过增加 PermGen 内存空间来提供更多的存储。 可以通过在 JVM 中使用参数来实现: -XX:MaxPermSize=1G 从 Java 7 开始,我们可以为 String Pool 指定更多的参数来扩展和减少 String Pool 的大小。 阅读全文
摘要:
手工修改引用的意思就是通过程序来手工修改 String 字符串使用的指针来获得我们需要的值。 手工修改指针的方法为 intern()。 手工修改 String 在 String 存储池中的引用,JVM 将会在我们需要的时候返回这个引用。 让我们来创建一个测试用例: String constantSt 阅读全文
摘要:
当我们创建 String 对象的时候,如果使用 new() 的方式来创建一个 String 对象,JVM 将会每次都会在 heap 内存中为我们创建的 String 对象开辟一个存储空间来进行存储。 但是,如果我们使用赋值方式创建 String 对象的话,JVM 首先将会对我们赋的值到 String 阅读全文
摘要:
因为构造 String 对象有几种不同的方法,我们可以通过直接赋值的方式构造 String 对象,我们也可以通过 new 的方式来构造一个 String 对象。 在这里我们需要说说如果使用 new 这个关键字来构造的 String对象。 简单来说,如果你使用了 new 这个关键字来构造 String 阅读全文
摘要:
我们都知道 Strings 在 Java 中是不可变的( immutable),因此 JVM 可以通过访问这个字符串的引用,或者我们可以借用指针的这个概念来访问 String 字符串。 通过指针访问字符串值的这个过程就可以称为引用(interning)。 当我们在内存中创建一个字符串的时候,JVM 阅读全文
摘要:
概述 在本文章中,我们主要用来说明为什么应该使用 char[] 数组来存储密码,而不是使用 String 来存储密码。 需要注意的是,为了密码的安全,我们通常都会将用户输入的密码 MD5 加密哈希后进行存储。 我们通常是不会在后台中存储明文的用户密码的,这篇文章主要目的就是为了说明字符串在 Java 阅读全文
摘要:
Discourse 使用了用户等级的方式来识别用户的级别和对网站的忠诚程度。 通常新用户的级别是比较低,限制也是比较多的。 如下图显示的用户级别数量: 通常在网站中,第 0 和 第 1 的信任级别比较多。 建议,如果你使用 Discourse 的网站的话,尽量进入信任级别 1 中。 如何进入信任级别 阅读全文