黄枫谷

勿在浮沙筑高台。

大家在使用软件时基本上都遇到过乱码的问题,这是因为字符的编码和解码方式不一致导致的。由于计算机只认二进制数据,因此程序在存储、处理、传输字符时,需要将字符转化成二进制数据。通俗来讲,编码就是将字符转化为二进制数据,解码就是将二进制数据转化为字符。

阅读全文 »

伴随 Java 版本的更新,垃圾收集器(GC,Garbage Collection)也在不断迭代优化。从经典的 Serial,到划时代的并发收集器 CMS、再到全新思路设计的 G1、以及最新的低延迟收集器 Shenandoah、ZGC。虽然垃圾收集器的技术在不断进步,但没有最好的收集器,只有更合适的收集器。

阅读全文 »

Java 的异常分为两个体系,Error 和 Exception。Error 表示严重的错误,程序对此一般无能为力;而 Exception 则是运行时的错误,它可以被捕获并处理。今天遇到的 OOM(OutOfMemoryError) 就是一种 Error,而且是最严重的一种,它会导致 Java 进程关闭。

阅读全文 »

从 1995 年 JDK Beta 发布至今,Java 已迭代了 18 个大版本。其中 Java 8、11、17 为长期支持(LTS,Long-term support)的版本。 根据 JRebel 2022 年提供的报告,大部分人还在使用 Java 8,其次是 Java 11,但随着 Java 17(2021.09) 的发布,Java 将迎来新的格局。

阅读全文 »

Aviator 是一个高性能、轻量级的 Java 语言实现的表达式求值引擎,主要用于各种表达式的动态求值。Aviator 的实现思路与其他轻量级的求值器不同,其他求值器一般都是通过解释的方式运行,而 Aviator 则是直接将表达式编译成 Java 字节码,交给 JVM 去执行。

阅读全文 »

Lombok 是一种 Java 实用工具,可帮助开发人员消除 Java 的冗长,尤其是对于简单的 Java 对象(POJO),它通过注解来实现这一目的。但是当 Lombok 和 Mybatis 相遇时,会产生一些意想不到的结果。

阅读全文 »

代理模式是一种非常好理解的设计模式,生活中处处可见代理:张三作为一个明星,不可能什么事都由他自己干,于是他请了经纪人;张三 LOL 水平不够,又想上分怎么办,请游戏代练;张三逃税被抓怎么办,请律师帮忙打官司。无论是经纪人、游戏代练或是律师,他们都是帮张三干活,但又不能一手包办,只能帮张三处理一些他不愿干或干不了的事情。

阅读全文 »

我从 2016 就开始使用 Vim 编写代码,至今已 4 年有余。从最开始的各种不适应,到慢慢适应,再到现在已经离不开它了。这里要特别感谢一下黑牛,是他的坚持,才让我和 Vim 结缘。下面给大家分享一些使用 Vim 的心得。

阅读全文 »

数据压缩能够实现是因为多数现实世界的数据都有冗余。无损数据压缩通常利用了统计冗余,这样就能更加简练地、但仍然完整地表示发送方的数据,如行程长度编码(Run-length encoding)、霍夫曼编码(Huffman coding)。而在很多情况下,数据会包含比必要的还多的信息。例如,一张分辨率过高的照片,其中的细节肉眼可能已无法识别。若舍弃这些人类无法察觉的细节,就可以用更小的数据量来提供与原始数据相差无几的感官体验,这属于有损压缩。

阅读全文 »
0%