贫瘠之地

华北无浪漫,死海扬起帆
多少个夜晚,独自望着天

0%

背景

对于单机限流,可以使用 Guava 等工具

如果需要对所有服务进行限流,就需要使用依赖同一个数据资源

简单的方案可以使用 Redis 记录限流相关信息进行实现,Redisson 的 RRateLimiter 就是基于 Redis 实现的全局限流工具,使用了令牌桶的思想

基本使用

阅读全文 »

背景

观察者模式(Observer Pattern)用来处理某个值得关注的状态的对象状态变更,进而执行相应的操作

将自身的状态改变通知给其他对象, 我们也将其称为 发布者 (publisher)

所有希望关注发布者状态变化的其他对象被称为 订阅者 (subscribers)

所有订阅者都必须实现同样的接口, 发布者仅通过该接口与订阅者交互, 接口中必须声明通知方法及其参数, 这样发布者在发出通知时还能传递一些上下文数据

阅读全文 »

背景

一段时间没有使用 github SSH 操作,今天突然发现 Hexo deploy 无法正常 push 到仓库

报错信息为

1
2
3
4
5
ssh: connect to host github.com port 22: Connection refused
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

开始以为是 SSH 配置存在问题,但是检查了配置以及仓库情况并没有发现问题

阅读全文 »

从 Ferrari 到 Hard Start,这里有 9 款我们最爱的 50/50 shots 酒单

50/50 shots 诸如 Ferrari 和 M&M 多年来一致是业内宠儿;不过随着越来越受欢迎,派对者们找到了将鸡尾酒作为配料的方式,这种形式已经扩展为一种易于复制并创作的模式

这是一个简单的模板:取一杯苦杏仁酒(amaro),将其与另一种利口酒或更高度烈酒等分

各种各样的变化,无论你是在寻找一种令人大开眼界的宿醉方式:例如 Hard Start,或者是一杯复杂性堪比鸡尾酒的 shot:例如 Mezcaletti

阅读全文 »

可继承 Inheritable

InheritableThreadLocal 是官方提供的类,区别于 ThreadLocal 的功能就是使子线程创建时会赋值父线程当时的 ThreadLocal 值(引用),实现开启线程后将线程本地变量传递

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class ThreadLocalTest {

// 这里如果将 ThreadLocal 实现换为 ThreadLocal,则子线程内获取为 null
private static final ThreadLocal<String> THREAD_LOCAL = new InheritableThreadLocal<>();

public static void main(String[] args) {
THREAD_LOCAL.set("Hello World");

new Thread(() -> {
System.out.println(Thread.currentThread() + " " + THREAD_LOCAL.get());
}).start();

System.out.println(Thread.currentThread() + " " + THREAD_LOCAL.get());
}
}
1
2
Thread[main,5,main] Hello World
Thread[Thread-0,5,main] Hello World

实现

阅读全文 »