- 博客(16)
- 资源 (1)
- 收藏
- 关注
原创 Linux I/O 原理和零拷贝
消息中间件中的零拷贝操作系统的零拷贝零拷贝的概念广义狭义之分广义上的零拷贝狭义上的零拷贝Linux I/O 机制IO中断与DMADMA的意义零拷贝的出现常见的零拷贝mmap 内存映射mmap定义mmap 后IO读取过程mmap的实现Mmap的在RocketMq中的实现sendFile定义IO读取过程Kafka中的 零拷贝Sendfile With DMA Scatter/Gather Copy背景实现IO读取过程 操作系统的零拷贝 最近在阅读消息中间件相关的源码,在消息存取时用到了mmap或者page ca
2021-03-24 13:56:32
247
原创 Kafka最新源码编译过程
开篇 最近准备研究一下kafka的源码,最直接的就是把源码下载下来,通过debug进行研究。经过一段折腾,最终把环境给搭建好了,在这里和大家分享一下。 步骤 第1步 安装 Java 和 Gradle 安装Idea的 Scala 插件 提示: 如果你电脑上没有安装过 Gradle 或者 Scala 可以先去官网上看一下 kafka 依赖的版本,然后下载成一样的,不然在编译过程中还会现在他们依赖的版本。或者修改配置文件改变版本号 第2步 下载 Kafka 的源码 使用如下命令: $ cd {要存储Ka
2020-07-09 18:33:12
2791
1
原创 Spring源码解析之创建AnnotationConfigApplicationContext发生了什么
开篇 本篇文章是Spring源码分享的第三篇,有了前两篇分享的基础,从这篇开始进行源码的分析。 因为是做源码分析且是逐行解析,以后的文章我会先把代码注视贴出来,然后最后做个总结。 通过这篇文章你可以获得什么 了解new AnnotationConfigApplicationContext() 时发生了什么 正文 当我们在代码中写了new AnnotationConfigApplicationContext(); 这行代码时,Spring帮我们做了一些什么? 如下代码: AnnotationCon
2020-07-08 21:37:15
598
原创 Spring源码解析之常用拓展点的使用
Spring拓展点的使用开篇阅读本篇文章你可以获得什么为什么要学习Spring拓展点常用的拓展点的分类Bean工厂的后置处理器什么是Bean工厂的后置处理器?实现了BeanFactoryPostProcessor的实现类实现了BeanDefinitionRegistryPostProcessor的实现类 开篇 本篇文章是分析Spring源码基础的第二篇文章章,第一篇文章请看 Spring源码解析之BeanDefinition 这篇文章主要讲解Spring在创建工厂和实例化Bean时用到的相关的拓展点,以便
2020-06-24 10:27:44
338
原创 IDEA重装后也打不开怎么办
背景 我电脑使用的是破解版的IDEA,今天不知道怎么回事,需要重新激活。然后就是一段拖拽,最后没有成功,想到可能是版本更新的问题,然后准备换一个新的激活的JAR,就把原来所有破解的jar包都删了,如下/Users/{}/.jetbrains/jetbrains-agent-v3.0.0.jar,并且也删除了对应的idea.vmoptions中自己添加的信息,我当时是以为删对了。然后就进行重启,发现怎么都打不开。着急 解决 打开 /Applications/IntelliJ IDEA.app/Contents
2020-06-23 23:19:26
1424
原创 Spring源码解析之BeanDefinition
Spring源码解析之BeanDefinition通过阅读本文你能获得什么为什么要学习BeanDefinitionBeanDefinition在Spring中的作用BeanDefinition的定义BeanDefinition的类型BeanDefinition的实战 通过阅读本文你能获得什么 1、什么是BeanDefinition 2、怎么用BeanDefinition定制化开发 为什么要学习BeanDefinition BeanDefinition看名称可以大致明白是用来描述spring中bean的
2020-06-18 19:54:19
697
原创 JVM调优基础篇-内存模型
JVM内存模型阅读完本文你可以获得什么?本文目的内存模型概述类加载子系统 阅读完本文你可以获得什么? 了解JVM调优三步曲 熟悉JVM内存模型 了解方法区、永久代、元空间的区别 知道为什么JDK8后从永久代变成了元空间 了解CLASS文件格式 本文目的 JVM调优,通俗的来讲分为三步:事前、事中、事后。 事前:是项目上线前根据对象大小,和预估流量进行计算,看看新生代、老年代、方法区,应该怎么设置大小 事中:是项目上线期间在还没有发生OOM之前根据GC的情况进一步判断参数配置 事后:是发生OOM后根据“
2020-05-23 20:18:50
339
转载 JVM指令手册
背景 最近在学习JVM字节码指令,通过 jclasslib 工具 可以显示出来命令,但是不知道是怎么在操作数栈和局部变量表怎么移动的,通过查寻指令手册才能看明白。列在这希望也能帮助学习JVM的你。 0x00 nop 什么都不做。 0x01 aconst_null 将 null 推送至栈顶。 0x02 iconst_m1 将 int 型-1 推送至栈顶。 0x03 iconst_0 将 int 型 0 推送至栈顶。 0x04 iconst_1 将 int 型 1 推送至栈顶 0x05 iconst_2
2020-05-22 21:59:43
274
原创 spring和mybatis整合为什么只定义了接口?为什么设置自动装配模型为BY_TYPE
背景 是不是还在疑惑为什么我们在工程中定义了接口mybatis就可以直接操作我们的数据库? 是不是想了解spring和mybaits整合的原理? 了解原理后我们能复用在工程上的东西是什么?换句话说怎么提高代码的逼格? 目的 基于上述背景,笔者准备深入源码带大家一探究竟,读完这篇文章大家可以的到的收获 了解Mybatis和Spring整合的底层原理 知道为什么只定义了接口就可以直接操作数据库 了解Spring中的拓展点和FactoryBean的使用 可以自己定义插件提高代码逼格 Spring中自动装配的类型
2020-05-20 18:12:45
807
原创 mysql基础-Innodb逻辑存储结构
通过阅读本文可以了解什么? 磁盘预读概念 数据页结构 innoDb的行格式 行溢出 VARCHAR(65535) 大小的列能不能创建 怎么定位到一条数据 为什么尽可能设置为非NULL字段 从InnoDB存储引擎的逻辑存储结构来看,所有的数据都被逻辑逻辑的存放在一个空间中,成为表空间。表空间又由 段、区、页组成。本文着重将页和行记录相关的数据 磁盘预读 mysql服务器是我们在生产环境中常用的服务器,大部分的存储引擎数据都是写入到磁盘中的而服务器每次读取数据时会先从pagecache读取数据,如果page
2020-05-18 10:27:03
526
1
原创 ZooKeeper的常用使用场景
ZK的常用使用场景 一、注册中心 实现方式 基于临时节点 基于监视通知机制 注意:ZK集群可能会挂掉,所以为了防止zk挂掉后我们还能正常的进行服务的调用,需要在本地做一次缓存,只有当产生变化时这份缓存才会失效 经典场景:dubbo中使用ZK做注册中心,并且引入了服务目录的概念,服务目录就是本地的一个缓存,但是当服务提供者列表发生变化时会更新这个缓存列表并且重新进行服务的导入 作为注册中心的缺点分析 数据一致性的需求:zk是一个cp的系统,但是注册中心更应该考虑a,当发生分区等问题时,只保证最终一致性
2020-05-17 16:46:52
624
原创 Zookeeper结构
zk的服务器模式 仲裁模式:zk复制集群中所有服务器的数据;大多数服务器保存数据成功后才返回客户端成功 独立模式:一个单独的服务器,zk的状态无法复制 会话 1.客户端设置的监视点和会话相关联,会话到期后等待中的监视点会移除 2.在对zk集合进行任何操作之前,必须先与服务器创建会话 3.当会话因为某种原因终止时,这个会话建立的临时节点也会消失 4.zk客户端可以透明的将会话从一个服务器转移到另一个服务器 5.会话提供了顺序保证,保证一个会话中的请求按FIFO的顺序执行,但当一个客户端打开了多个会话不能保证
2020-05-17 16:37:50
316
原创 Zookeeper的基础概念
ZK的设计目标 1.简单的数据结构:共享的树型结构,类似与文件系统,数据存储于内存; 2.可以构建集群:避免单点故障,超过半数就可以对外提供服务 ZAB协议; 3.顺序访问:对于每一个写请求,zk会分配一个全局唯一递增ID,利用这个特性可以实现高级的协调服务; 4.高性能:基于内存操作,服务于非事物请求,适用于读操作为主的场景; ZK可以做什么 1.数据的发布与订阅 :通过监听机制 2.命名服务 :依赖于临时节点 3.负载均衡 :依赖于临时节点 4.集群服务 :比如选主,依赖于临时节点
2020-05-17 16:35:57
231
原创 常用广告术语
CPM:全称(Cost Per Mille) CPM是一种展示付费广告,只要展示了广告主的广告内容,广告主就为此付费 CPC:全称(Cost Per Click) CPC是一种点击付费广告,根据广告被点击的次数收费 CPA:全称(Cost Per Action) CPA是一种按广告投放实际效果计价方式的广告,每次转化多少钱(如:注册) CPS:全称(Cost Per Sales) CPS是一种以实际销售产品数量来计算广告费用的广告,每次成功交易收费 CPT:全
2020-05-17 16:32:26
3424
原创 spring常用扩展点术语介绍
BeanDefinition 用来描述一个Bean,Spring会根据BeanDefinition来生成一个Bean,我们可以修改其中的属性来干预对象的生成。 BeanFactory 表示Bean工厂 ,常用的有DefaultListableBeanFactory以及AnnotationConfigApplicationContext等。 BeanFactory为Spring管理Bean提供了一套通用的规范。可以通过BeanFactory获得Bean。 FactoryBean 自己也是一个Bean,可以
2020-05-17 16:26:40
402
原创 JVM调优基础篇-java对象大小计算
背景简化:最近由于项目需要,需要计算一下对象的大小,防止放开灰度后导致服务期频繁GC 读完这篇文章可以获得什么? 对象的内存布局 指针压缩的原理 预估对象的大小 对象是否只能在堆上分配 基础 1、对象的内存布局 一个Java对象在内存中包括对象头、实例数据和补齐填充3个部分 由于本文主要是讲述对象的大小计算,所以不会详细讲解每个部分的作用,有兴趣可以上网搜索一些相关文章阅读。 对象头 所有对象都会有的部分: Mark Word Mark Word 用于存储对象自身的运行时数据 如哈希码(HashCod
2020-05-17 15:28:03
1657
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人