首页
   VOID
取消

Netty源码解析

分析方式: 以下面的这一段经典的netty示例代码出发,熟悉netty的api编程模型 第二章从内存中的资源入手,理解资源的结构和使用,整理至第一章节 第三章从服务端的线程行为中 解析源码示例 EventLoopGroup bossGroup = new NioEventLoopGroup(1); EventLoopGroup workerGroup = new NioE...

泛型与bridge方法

提要 spring在ioc容器中进行反射调用的时候,例如@Controller的路由过程,这部分源码中常常涉及一个Bridge method的概念, 那么这个 桥接方法到底是什么?有什么作用?为什么离不开这个bridge方法?什么时候生成这个方法。what,how,why,when 一. 预备知识 1.1 泛型是什么? 泛型的英文名为generics, 广泛,通用的意思。泛型就是 ...

Reactor系列 - 函数式编程

什么是函数式编程? 要给一个东西下定义, 必须要将一个东西的特点具象化。比如像别人介绍一个东西。张三向李四介绍另一个李四不认识的人王五,如果张三跟李四说那个人叫王五,你见过的,那李四肯定不认识。那现实中你向别人介绍的时候是怎么介绍的呢,“那个脸上有很多大麻子,眼睛上面还有一条刀疤的人就是王五”,那王五的特征就有了大麻子,眼睛有刀疤。 那现在要认识函数式编程,那有什么特点的编程方式才能叫自...

Reactor系列- Reactive Stream api规范初识

一. 出现的原因 java在异步编程的时候需要各种的callback回调接口, 由这些回调接口来实现异步编程,但是这些异步接口可以散落在各处,产生各种各样的异步编程问题,例如: 回调接口的异常、超时处理困难 多个异步任务协同出了 重构问题 为了解决这些异步编程的各种解决的办法, 其中一种就叫做”reactor programming”, 就像面向对象编程,函数式编程一样...

sping核心模块

第一部分的IOC容器主要三大块: bean在IOC中是如何组织的 ioc容器的自定义和拓展实现 spring的常用注解以及实现 一. IOC容器 1.1 BeanFactory与ApplicationContext org.springframework.beans和org.springframework.context是构成spring IOC容器的基本包。 Be...

TSDB part(2) - WAL && Checkpoint

WAL 简介 wal是prometheus本地序列数据库的事务日志, 在发生 插入、更新和删除等操作的时候会先写入wal事务日志文件中, 然后再操作数据库 当prometheus宕机的时候可以根据这个文件进行恢复之前的数据。 事务日志这一特性也被广泛运用于关系型数据库中。 在Prometheus的上下文中, wal文件用于存储记录事件和内存映射,这个文件主要用于在重启的时候重放所有的...

TSDB part(1) - The Head Block

一. 内存结构 上图就是一个Promtheus的TSDB的一个缩略图,可以把TSDB的存储数据结构认为是由一个个按时间线性排列的Block块组成的,上图中主要包含四个部分 黄色部分就是在内存中的head block 橘色WAL(write ahead log)指的是事务日志 蓝色为内存通过mmap的方式映射到磁盘上的数据 灰色的即为在磁盘上的序列化数据 一个sa...

PromQL

一.PromQL 1.1.基本查询 匹配查询 PromQL的查询现在只要支持两种查询模式:完全匹配和正则匹配。 完全匹配 支持使用 = 和 != 的两种完全匹配模式 通过label=xxx和label!=xxx的两种模式进行完全匹配。 正则匹配 使用格式label=~regx表示选择符合正则表达式的,label=!~regx则表示排除 1.2.范围查询 直...

设计模式

一. 设计模式的分类和功能 设计模式的分类主要可以根据模式作用的目的和模式作用的范围来进行区分。 根据模式的目的进行区分 根据模式的作用范围来区分 1.1 根据模式目的进行划分 根据模式主要用来完成什么工作进行划分,主要分为三种创建型, 结构型,行为型。 创建型模式:主要用于描述怎样创建对象,将对象的创建和使用分离。(填写创建型模式包含哪些) 结构型模式:主要...

SnakeYAML

一. API入口 Yaml yaml = new Yaml() 线程不安全, 不可混用 二. 基本用法 snakeyaml支持从stream和string中加载文档 firstName: "John" lastName: "Doe" age: 20 Yaml yaml = new Yaml(); InputStream inputStream = this.getClass(...