Mr.Cai

想吃抻面。

btrace

0x01 demo import com.sun.btrace.annotations.*; import static com.sun.btrace.BTraceUtils.*; @BTrace public class EnterWorldScript { //监控某一个方法的执行时间 @OnMethod(clazz = "a.b.c", method = "pro...

jenkinsfile

0x01 demo pipeline { agent any tools { maven 'maven3.5.3' } stages { stage ('checkout') { steps { checkout([$class: 'SubversionSCM', add...

Mysql中的utf8

0x01 utf8 utf8最多可以存储6字节数据,然而在Mysql中却不是这样。 0x02 utf8mb3 在Mysql中,utf是utfmb3的别名,意思是最大可以存储3个字节,对照utf8的算法,3个字节可以存储16bit的数据,也就是可以表示65536个字符,这也是unicode的BMP字符。 0x03 utfmb4 在实际的应用中,我们经常存储一些不在BMP中的字符(生僻汉字、...

消费者驱动的契约测试

0x01 TDD的局限 单元测试,面向单体应用。优缺点不细讲,可自行搜索。在微服务架构中,我们如果使用单元测试代价太大,而且微服务之间经常会有耦合的情况,在测试A服务的时候不可避免的要启动依赖的其他服务,这样成本会很高,而且debug困难,测试效率低。如果我们对A服务的依赖服务实现stub,这样测试效率可以大大提高。 还有一种情况是A服务的Provider服务的接口发生改变,我们需要立刻捕捉...

Spring测试分组

0x01 问题 在对Spring程序进行集成测试的时候,有的时候我们希望能对其进行分组测试。比如,某些需要依赖redis server的单元测试,在执行集成测试的时候我们并不希望运行它,这就需要我们对测试用例进行分组。 正常的思路是Profile+命令行参数来对测试用例进行分组,但是在我尝试了下之后发现如下配置仍然在解析依赖。 @RunWith(SpringRunner.class) @Sp...

Spring Data Redis的Json对象解析器

0x01 问题 在kotlin中使用Spring Data Redis的时候如下配置无法解析对象。 @Bean open fun playerTemplate(factory: ReactiveRedisConnectionFactory): ReactiveRedisTemplate<String, Player> { val keySerializer = StringRe...

Spring Cloud重试机制

某些情况下我们无法设计出幂等的API接口,所以我们不能执行fail-retry这种策略。 0x01 问题 我没有开启ribbon,但是仍然有请求可以重试。 0x02 查看文档 看文档Spring Cloud提供了一个spring.cloud.loadbalancer.retry.enabled参数用来禁用loadbalancer的retry策略,但是在实际操作的时...

Spring Data Redis 源码分析

因为最近在使用WebFlux开发,在集成Redis的时候使用了Spring Data Redis 2.0提供的Reactive接口。 发现了几个问题,顺手看了下源码,然后提了几个PR。 DATAREDIS-779 ReactiveValueOperations.set[ifPresent|ifAbsent](…) does not return a value if valu...

Lettuce源码分析

0x01 简介 Lettuce是一个可伸缩线程安全的Redis客户端。多个线程可以共享同一个RedisConnection。它利用Netty框架来高效地管理多个连接。 0x02 向server发送请求 public interface StatefulConnection<K, V> extends AutoCloseable { ... <T> ...

G1 GC

仅限于Hotspot 0x01 分代GC 年轻代:堆区的一部分,对象生命周期很短,所以很适合频率较高的GC。分为2个Survivaor和1个Eden区,默认大小比例1:1:8。 老年代:堆区的一部分,对象生命周期较长,适合缓慢的GC频率。 永久代:jdk1.7之前用来实现方法区,用来存储字符串常量池、静态变量、类数据等。jdk1.7中把字符串常量池挪到...