0%

在用 Git 管理包含中文的文件时,会出现类似这样的 “乱码”:

1
2
3
4
5
6
7
8
9
$ git status
On branch master
Your branch is up to date with 'origin/master'.

Untracked files:
(use "git add <file>..." to include in what will be committed)
"\345\271\277\345\221\212\345\220\214\346\255\245\345\271\263\345\217\260\346\216\245\345\217\243\346\226\207\346\241\2432.0.docx.new"

nothing added to commit but untracked files present (use "git add" to track)

解决方法是配置 Git 的全局属性 core.quotepathfalse,即执行命令 git config --global core.quotepath false,然后再执行 git status,就可以看到中文正常显示了:

1
2
3
4
5
6
7
8
9
$ git status
On branch master
Your branch is up to date with 'origin/master'.

Untracked files:
(use "git add <file>..." to include in what will be committed)
广告同步平台接口文档2.0.docx.new

nothing added to commit but untracked files present (use "git add" to track)

我们知道,使用 VisualVM 可以监控 Java 应用的各种运行时信息,包括资源占用、正在运行的线程等等。本文将简单介绍如何使用 VisualVM 的插件 Visual GC 来监控 Java 应用的垃圾回收情况。

阅读全文 »

Java 的垃圾回收算法一文中,我们知道 JVM 是根据一个对象有没有被引用来判断要不要对其进行垃圾回收的。但是,如果我们为了提升垃圾回收的效率,想要再把垃圾回收的条件更细化一些,比如只在内存非常紧张的时候才回收某些对象,那么光靠一个粗略的 “引用”,就显得心有余而力不足了。所以,在 JDK 1.2 版本之后,Java 扩充了引用的概念,将其扩充成了强引用软引用弱引用虚引用四个更细化的概念。

本文将参考《深入理解 Java 虚拟机 (第 3 版)》中再谈引用一节,简述一下这四种引用的概念,以及被引用的对象何时会被垃圾回收器回收。

阅读全文 »

在排查垃圾回收相关的问题时,一个必不可少的技能就是要能看懂 Java 的垃圾回收日志。本文将介绍打印 GC 日志相关的 JVM 参数,以及使用不同参数时 JVM 将会打印出的日志内容。

阅读全文 »

做技术,不能只知其然而不知其所以然。在知道了工具的原理之后,才能更高效的使用这个工具。在程序的世界里,源码里面没有秘密,看懂了源码,也就看懂了原理。

这次就来阅读一下 HashMap 的源码。

阅读全文 »

做技术,不能只知其然而不知其所以然。在知道了工具的原理之后,才能更高效的使用这个工具。在程序的世界里,源码里面没有秘密,看懂了源码,也就看懂了原理。

这次就来阅读一下 Object 类里面 hashCode 方法和 equals 方法的源码。

阅读全文 »

最近做了一个有点不一样的项目,它是将传入接口的业务参数以 JSON 的形式放在了一个统一的请求体里面,我要将它取出来,再反序列化到一个 Bean 里面。这样会带来一个问题,就是我不能直接使用 @Valid 注解来让框架自行校验参数的合法性,而需要手动调用 Validator 实现对 bean 的校验。

阅读全文 »

在使用 nohup 的时候,它总会打印一条 nohup: appending output to 'nohup.out' 这样的信息,并且必须敲一下回车。

因为 nohup: appending output to 'nohup.out' 这条信息是打印到 STDERR 的,所以解决的方法很简单,把 STDERR 重定向至 STDOUT 就可以了,比如这样:

1
nohup doSomething > nohup.out 2>&1 &

做技术,不能只知其然而不知其所以然。在知道了工具的原理之后,才能更高效的使用这个工具。在程序的世界里,源码里面没有秘密,看懂了源码,也就看懂了原理。

这次就来阅读一下 LinkedList 的源码。

阅读全文 »

在前后端分离的架构下,后端通常是一个 RESTFul 的接口,而因为 HTTP 的响应码数量有限,无法灵活的反映出接口执行的各种结果,在这种情况下,就需要通过自定义的结构来表达接口最终的状态和返回的信息。而我正好最近在一个项目中实现了一个基于 ControllerAdvice 的统一请求响应的功能,在这里记录一下实现的方式。

阅读全文 »