Code Life

boris1993的个人博客

刚刚登录到我的服务器之后,看到 motd 提示有一个僵尸进程。本来处理僵尸进程很简单,杀掉它的父进程就行了。但是紧接着我发现这个进程是属于一个 Docker 容器的,因为我想要更优雅地处理掉它,就顺藤摸瓜找到了对应的容器并将其重启了。这里就记录下我的排查过程以供参考。

阅读全文 »

最近在试着用 TypeScript 写点东西,在用 catch (error) {} 代码块处理异常的时候,看到了一个很难理解的错误 TS18046: error is of type unknown。网上一顿冲浪之后,看到了 Kent C. Dodds 的一篇博客 Get a catch block error message with TypeScript。我跟着文章的内容成功解决了这个问题,并且解答了我的疑惑,所以想要翻译出来帮助到更多的人。

以下内容除特别注明外,皆翻译自原文。我亦不对内容做任何的担保,并不对任何可能产生的后果(包括但不限于文件丢失或功能异常)负责。

阅读全文 »

前些天在 Atlassian 的文档中看到一篇关于管理点文件(即.bashrc 之类以点开头的文件)的文章《Dotfiles: Best way to store in a bare git repository》,感觉很有参考价值,遂决定翻译出来,希望能帮到更多的人。

以下内容除特别注明外,皆翻译自原文。我亦不对内容做任何的担保,并不对任何可能产生的后果(包括但不限于文件丢失)负责。

阅读全文 »

今天看到一篇推文说 Homebrew 也支持类似 package.json 的方式来管理电脑上安装的应用,感觉这玩意挺实用的,像我上回换电脑还是照着 brew list 的输出再一个个装,有了它的话就可以一键安装了。而且除了 Homebrew 之外,它还可以导出通过 App Store 安装的软件和 VS Code 插件。那么,就小小折腾一下。

阅读全文 »

想来用了这么久的 Spring Boot,但一直没仔细了解它是怎么启动的。那既然想起来了,不如趁热打铁,从它的入口开始,深入看看 Spring Boot 在启动时都做了些什么。

阅读全文 »

前段时间拿 ConcurrentHashMapTimer 简单整了个带过期功能的缓存,那用都用了,顺便就看看 Timer 这玩意是咋实现的。

阅读全文 »

在实现一个双检锁单例的时候,IDEA 提示我要给 INSTANCE 实例加上 volatile 修饰符。当时并不明白为啥,所以选择相信 IDE。但是还是那句话,不能知其然不知其所以然啊,自己写的代码,不能自己心里没底不是。于是乎我一顿网上冲浪,终于整明白了为啥双检单例必须要用 volatile 修饰符。

阅读全文 »
0%