贫瘠之地

出来混最重要的是什么?是出来

从 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

实现

阅读全文 »

在很长的一段时间,REST 都是一种且唯一一种构建 API 的 “标准”;它在某种程度上取代了 SOAP,后者是一个 “太多 XML” 的丑陋烂摊子

但是近些年新的选择出现了,2015 年,Facebook 向公众发布了 GraphQL,2016 年谷歌紧随其后发布了 gRPC

在本文中,我们将关注仍然被广泛使用的后者,并将其与 REST 进行比较

概述

下表将概述所讨论的要点,并显示 REST 和 gRPC 的亮点

阅读全文 »

基本使用

在项目中我们可以通过 ThreadLocal 来存储用户信息

其中一般会在过滤器/拦截器的入口处初始化用户信息,并在执行结束后对其进行清理

这样从请求进来一直到返回,我们只需要通过线程变量 ThreadLocal 获取用户信息即可,而不用每次都从数据库查出来

因为 ThreadLocal 是线程安全的,所以通常声明为一个静态单例变量

阅读全文 »

介绍

什么是泛型

泛型,即参数化类型

一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在调用时传入具体的类型(类型实参)

为什么要引入泛型

阅读全文 »
0%