- 博客(381)
- 资源 (1)
- 收藏
- 关注
原创 【七】dubbo源码分析之服务目录Directory
简介Directory主要做什么事的:1.服务目录中存储了一些和服务提供者有关的信息,通过服务目录,服务消费者可获取到服务提供者的信息,比如 ip、端口、服务协议等。2.服务目录在获取注册中心的服务配置信息后,会为每条配置信息生成一个 Invoker 对象,并把这个 Invoker 对象存储起来,这个 Invoker 才是服务目录最终持有的对象。3.Invoker这是一个具有远程调用功能的对象。4.服务目录会随注册中心的变化而进行动态调整。继承关系图Node 这个接口继承者有
2020-11-02 20:43:28
467
2
原创 【六】dubbo源码分析之服务调用方refer(服务引用、服务订阅、创建invoker、创建代理、查看动态生成的.class文件)
前面一篇讲了服务调用方启动的大致流程本章主要讲refer服务引用,分成两个重点,一个是创建invoker,一个是创建代理。
2020-11-02 20:39:40
1461
原创 【三】dubbo源码分析之服务提供方export(服务暴露)
上一章讲了服务提供方启动的时候会扫描所有@Service注册,并注册相应的ServiceBean。spring发送ContextRefreshedEvent后每个ServiceBean会通过自生的export方法暴露。这章详细讲export怎么暴露服务,注册到注册中心。ServiceBean.export public void export() { super.export(); // Publish ServiceBeanExportedEvent
2020-10-27 21:00:51
976
1
原创 【二】dubbo源码分析之服务提供方启动(注解方式启动spring+dubbo)
测试使用代码:https://github.com/apache/dubbo-samples.git2.6.X分支服务提供方的启动代码:/* * * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additiona
2020-10-27 20:58:30
1134
转载 【转】深入理解Instrument
转自:https://www.throwable.club/2019/06/29/java-understand-instrument-first/前提很早之前就了解到目前主流的APM开源框架如Pinpoint、SkyWalking等等都是通过java.lang.instrument包提供的字节码增强功能来实现的。趁着对这块的热情还没消退,抽时间分析一下java.lang.instrument包的使用方式,记录下来写成一个系列的文章。本系列博文针对的是JDK11,其他版本的JDK可能不适合。
2020-10-21 20:15:12
1614
原创 Java动态生成字节码之Javassit
作者:rickiyang出处:https://www.cnblogs.com/rickiyang/p/11336268.htmljavassist使用全解析Java 字节码以二进制的形式存储在 .class 文件中,每一个 .class 文件包含一个 Java 类或接口。Javaassist 就是一个用来 处理 Java 字节码的类库。它可以在一个已经编译好的类中添加新的方法,或者是修改已有的方法,并且不需要对字节码方面有深入的了解。同时也可以去生成一个新的类对象,通过完全手动的方式。一、.
2020-10-21 20:14:33
1391
原创 mysql线上问题排查思路及常用命令
一、常用命令1.查看数据库配置的最大连接数show VARIABLES like 'max_connections'2.SHOW PROCESSLIST查看当前数据库运行的所有线程、命令、状态、耗时、SQLSHOW PROCESSLIST如果是root用户执行,能看到所有用户的当前的连接状态。如果是普通账号,只能看到当前账号占用的数据库连接。show proccesslist只能列出前100条,如果想看全数据的话要使用 show full processlist。.
2020-10-21 20:13:03
4318
1
原创 【一】springboot+dubbo、dubbo-admin项目搭建及使用
项目目录pom.xml<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.
2020-10-21 20:11:48
916
1
原创 【二十三】Spring Boot 源码分析之IOC初始化时加载Resource、解析出BeanDefinition、注册到容器中
一、IOC/DI简介Inversion of Control,控制反转。将对象的控制交给容器。Dependency Injection,依赖注入。将你需要依赖的对象直接给你注入进来。通俗的讲,把一个类看成一个Bean,Spring中有一个容器(ApplicationContext),用来装、创建、管理所有需要的Bean。不用自己去new一个对象了。容器会搞好对象,注入到程序中你要使...
2020-10-11 15:55:21
286
原创 【十五】MySQL中in、exists、not in 、not exists区别
在MYSQL的连表查询中,最好是遵循‘小表驱动大表的原则’在执行SELECT... FROM... WHERE ...IN(SELECT ...)查询时,通常是先执行IN()中的查询(并且执行这一次)IN中查询的表就是驱动表,所以这个表应该小一点。在执行SELECT... FROM... WHERE ...EXISTS(SELECT ...)查询时,通常是先执行SELECT... FROM... WHERE ...查询,此处查询的表才是驱动表,所以应该是小一点的表。一、in例子:SE.
2020-10-11 15:49:28
634
转载 【转】SPI服务加载机制注册驱动原理分析、线程上下文类加载器、违反双亲委派模型
转自:双亲委派模型与线程上下文类加载器https://blog.csdn.net/justloveyou_/article/details/72231425摘要:SPI机制是什么,有哪些应用场景,又带来了哪些问题? 双亲委派模型是Java推荐的类加载模型,但违背该模型的案例有哪些?为什么会违背,又是怎么解决这种case的? JDBC驱动加载的案例有哪些,SPI机制为它带来了哪些方便? 线程上下文类加载器的作用与应用场景?一、引子SPI机制简介SPI的全名为Service Prov
2020-10-11 15:48:43
715
原创 tomcat之NIO模型(NioEndpoint)及Connector相关配置
一、简介tomcat中最重要的两个大组件,Connector和Container,Connector组件负责网络请求接入,NIO模型即在Connector部分。它的主要任务是负责接收浏览器的发过来的 tcp 连接请求,创建一个 Request 和 Response 对象分别用于和请求端交换数据,然后会产生一个线程来处理这个请求并把产生的 Request 和 Response 对象传给处理这个请求的线程,处理这个请求的线程就是 Container 组件要做的事了。Connector中的各部分如下.
2020-10-11 15:21:15
4169
原创 【十四】MySQL Innodb RR隔离级别下到底是不是解决了幻读
我之前一直质疑网传mysql innodb的RR隔离级别下,next-key lock解决了幻读这种说法的准确性。这次理顺了。例子准备:场景一、select * from userorder sessionA sessionB 结果 解释 T1 start transaction; T2 start transaction; T3 select * from ...
2020-09-20 14:07:02
838
原创 【十三】MySQL索引的数据结构为什么用B+,而不是B,不是红黑树
前提具备知识点:【十一】MySQL中InnoDB及索引深入剖析(数据页、记录、页目录、B+树索引、聚簇索引、二级索引、索引优化 转自罗志赟)一、Mysql不用B-树的原因1.Mysql衡量查询效率指标之一磁盘IO次数,B+树节点小,磁盘IO次数少B-树和B+树最重要的区别:B+树只有叶节点存放数据,其余节点用来索引,而B-树是每个索引节点都会有Data域。这就决定了B+树更适合用来存储外部数据,也就是所谓的磁盘数据。从Mysql(Inoodb)的角度来看,B+树是用来充当索引的,一般来说.
2020-09-20 14:06:49
440
原创 CPU飙高、内存飙高、频繁FULLGC、程序越来越慢的排查思路(top jstack jstat jmap)
个人思路,出现CPU飙高、内存飙高、频繁FULLGC、程序越来越慢的问题,先dump线程、内存日志。一、dump的方式1.用jstack和jstate(1)top首先使用top命令查看当前系统哪个进程占用的CPU/内存最高可以用shift+P根据CPU使用率排序shift+m根据内存占用排序得到该有问题的进程ID,也就是上述操作中显示的PID。比如PID=11225top命令详解在另外一篇博客中有写(2)top -Hp 11225查看该进程内哪个线程的CPU/内存
2020-09-20 14:06:32
2906
原创 Java之jmap命令内存详情
一、简介jmap命令是一个可以输出所有内存中对象的工具,甚至可以将VM 中的heap,以二进制输出成文本。打印出某个java进程(使用pid)内存内的,所有‘对象’的情况(如:产生那些对象,及其数量)。64位机上使用需要使用如下方式:jmap -J-d64 -heap pid命令格式 jmap [option] <pid> (to connect to running process) 连接到正在运行的进程 jmap [option]
2020-09-20 14:06:17
1035
原创 Java之jstat命令内存统计
命令的格式如下:jstat [-option] [vmid] [间隔时间/毫秒] [查询次数]常见的option有:l class (类加载器) l compiler (JIT) l gc (GC堆状态) l gccapacity (各区大小) l gccause (最近一次GC统计和原因) l gcnew (新区统计) l gcnewcapacity (新区大小) l gcold (老区统计) l gcoldcapacity (老区大小) l...
2020-09-20 14:05:10
1173
原创 LINUX之top命令详解
一、简介top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况。可以按CPU使用.内存使用和执行时间对任务进行排序。二、参数含义top - 16:31:01 up 99days, 2:57, 1 user, load average: 0.17, 0.15, 0.14Tasks: 256 total, 1 running, 255 sleeping, 0 stopped, 0 zombie%Cpu(s): 1.0 us, 0.4 s
2020-09-20 14:04:38
472
转载 【三十】Redis之跳跃表
转自:死磕Redis5.0之跳跃表为什么选择跳跃表目前经常使用的平衡数据结构有:B树,红黑树,AVL树,Splay Tree, Treep等。想象一下,给你一张草稿纸,一只笔,一个编辑器,你能立即实现一颗红黑树,或者AVL树出来吗? 很难吧,这需要时间,要考虑很多细节,要参考一堆算法与数据结构之类的树,还要参考网上的代码,相当麻烦。用跳表吧,跳表是一种随机化的数据结构,目前开源软件 Redis 和 LevelDB 都有用到它,它的效率和红黑树以及 AVL 树不相上下,但跳表的原理相当简...
2020-09-20 14:04:17
218
1
原创 【二十九】如何实现LRU,redis如何实现LRU
一、LRU原理当内存不够的时候,先淘汰掉最不常用的。自己实现LRU的方式考虑:双向链表+hashmap链表的实现:每次新插入数据的时候将新数据插到链表的头部。每次缓存命中(即数据被访问),则将数据移到链表头部。当链表满的时候,就将链表尾部的数据丢弃。hashmap的实现:使用 HashMap 存储 key,这样可以做到 save 和 get key的时间都是 O(1),而 HashMap 的 Value 指向双向链表实现的 LRU 的 Node 节点总结一下核心操
2020-09-20 14:03:54
1188
转载 [分布式事务-TCC] 2. TCC的异常场景及应对机制【转】
本文转自[分布式事务-TCC] 2. TCC的异常场景及应对机制文章导航TCC的异常场景 幂等处理 产生原因 应对策略 空回滚 产生原因 应对策略 资源悬挂 产生原因 应对策略 三种异常总结 幂等 空回滚 资源悬挂 共通点 TCC的异常场景在分布式系统中,随时随地都需要面对网络超时,网络重发和服务器宕机等问题。所以分布式事务框架作为搭载在分布式系统之上的一个框架型应用也绕不开这些问题。具体而言,有以下常见问题:幂等处理 空回滚.
2020-09-06 17:13:32
755
原创 【二十】二叉树特性与遍历、树与二叉树的转换,树的遍历
一、二叉树的特性性质1若规定根节点的层次为0,则一棵非空二叉树的第 i 层上最多有(i >= 0)个结点性质2若规定空二叉树树的深度为-1(即根结点的深度为0),则深度为k的二叉树的最大结点数是(k>=-1)个性质3具有n个结点的完全二叉树的深度k为不超过lb(n+1)-1的最大整数性质4对于一颗非空的二叉树,如果叶结点个数为,度为2的结点树为,则有=+1性质5对于具有n个结点的完全二叉树,如果按照从上至下和从左至右的顺序对所有结点从0开始顺序编号...
2020-08-25 19:56:07
1046
原创 【十九】七类查找算法总结笔记
1.顺序查找2. 二分查找(折半查找)3. 插值查找4. 斐波那契查找5. 树表查找5.1 最简单的树表查找算法——二叉树查找算法。5.2 平衡查找树之2-3查找树(2-3 Tree)5.3 平衡查找树之红黑树(Red-Black Tree)5.4 B树和B+树(B Tree/B+ Tree)6. 分块查找7. 哈希查找...
2020-08-25 18:26:39
944
1
原创 【十二】MySQL查询缓存
可以通过下面的SQL查看当前查询缓存相关参数状态:SHOW VARIABLES LIKE '%query_cache%';输出结果类似下面:query_cache_type 查询缓存类型,有0、1、2三个取值。0则不使用查询缓存。1表示始终使用查询缓存。2表示按需使用查询缓存。 如果query_cache_type为1而又不想利用查询缓存中的数据,可以用下面的SQL:SELECT SQL_NO_CACHE * FROM my_table WHERE...
2020-08-16 22:55:40
741
原创 Hibernate笔记(核心组件、运行过程、缓存机制、对象状态转换)
参考:https://juejin.im/post/6844903573004746766一、Hibernate核心组件除配置文件,映射文件和持久化类外,Hibernate的核心组件包括以下几部分:1.Configuration类:用来读取Hibernate配置文件,并生成SessionFactory对象。一个Configeration 实例代表Hibernate 所有Java类到Sql数据库映射的集合。2.SessionFactory接口:产生Session实例工厂。3.Session
2020-08-16 21:46:15
270
转载 MyBatis之《深入理解mybatis原理》 MyBatis事务管理机制
本文转自:https://blog.csdn.net/luanlouis/article/details/37992171MyBatis作为Java语言的数据库框架,对数据库的事务管理是其非常重要的一个方面。本文将讲述MyBatis的事务管理的实现机制。首先介绍MyBatis的事务Transaction的接口设计以及其不同实现JdbcTransaction和ManagedTransaction;接着,从MyBatis的XML配置文件入手,讲解MyBatis事务工厂的创建和维护,进而阐述了MyBati..
2020-08-16 18:01:19
185
转载 Mybatis之《深入理解mybatis原理》 MyBatis的一级缓存实现详解 及使用注意事项
本文转自:https://blog.csdn.net/luanlouis/article/details/412809590.写在前面MyBatis是一个简单,小巧但功能非常强大的ORM开源框架,它的功能强大也体现在它的缓存机制上。MyBatis提供了一级缓存、二级缓存 这两个缓存机制,能够很好地处理和维护缓存,以提高系统的性能。本文的目的则是向读者详细介绍MyBatis的一级缓存,深入源码,解析MyBatis一级缓存的实现原理,并且针对一级缓存的特点提出了在实际使用过程中应该注意的事项。
2020-08-16 18:01:06
234
转载 Mybatis之《深入理解mybatis原理》 MyBatis的二级缓存的设计原理
本文转自:https://blog.csdn.net/luanlouis/article/details/414083410.简介二级缓存是Application应用级别的缓存,它的是生命周期很长,跟Application的声明周期一样,也就是说它的作用范围是整个Application应用。1、二级是mapper级别的缓存。使用二级缓存时,多个sqlSession使用同一个Mapper的sql语句去操作数据库,得到的数据会存在二级缓存区域,它同样是使用HashMap进行数据存储。相比一级缓存S
2020-08-16 17:23:16
197
转载 Mybatis之《深入理解mybatis原理》 MyBatis的架构设计以及实例分析
本文转自:https://blog.csdn.net/luanlouis/article/details/40422941MyBatis是目前非常流行的ORM框架,它的功能很强大,然而其实现却比较简单、优雅。本文主要讲述MyBatis的架构设计思路,并且讨论MyBatis的几个核心部件,然后结合一个select查询实例,深入代码,来探究MyBatis的实现。一、MyBatis的框架设计 注:上图很大程度上参考了iteye 上的chenjc_it所写的博文原理分析...
2020-08-16 17:22:56
168
原创 【十八】常见十种排序算法总结笔记
https://www.cnblogs.com/onepixel/articles/7674659.html一、排序算法简介1.1分类排序算法分为1.比较类排序插入排序 选择排序 交换排序 归并排序2.非比较类排序基数排序1.2 算法复杂度稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面。不稳定:如果a原本在b的前面,而a=b,排序之后...
2020-08-03 19:44:09
2654
15
原创 【七】Spring cloud Ribbon原理笔记
一、简介Ribbon是Netflix出品的一套负载均衡组件,提供了许多Rule规则从负载列表中选取合适的server实例。当实例出现问题时候,Riibbon本身具有自动移除问题实例的功能。二、核心组件组成部分 职能 Server Server 作为服务实例的表示,会记录服务实例的相关信息,如:服务地址,所属zone,服务名称,实例ID等 ServerList 维护着一组Server实例列表,在应用运行的过程中,Ribbon通过ServerList中的服务实例供负载均
2020-08-01 15:55:20
697
原创 【二十八】redis之Cluster集群间通信Gossip协议
一、Gossip 在Redis-Cluster中如何作用redis集群之间采用的Gossip协议进行通信。redis集群中每台机器上都保存了一份元数据,如果有节点出现了元数据变更会不断的新的元数据发给其他节点,让其他节点也进行元数据变更。这个跟zookeeper很不一样,ZK集群的元数据是集中式的,且是强一致性,主要由Leader外带提供写操作。在分布式系统中,需要提供维护节点元数据信息的机制,所谓元数据是指:节点负责哪些数据、主从属性、是否出现故障等状态信息。常见的元数据维护方式分为:集中
2020-08-01 15:53:17
1236
原创 序列化之protobuf
protobuf的编码及序列化介绍我觉得这两篇还可以深入 ProtoBuf - 编码深入 ProtoBuf - 序列化源码解析一、简介protobuf为Google开发的高性能序列化和反序列化工具官方文档给出的定义和描述:protocol buffers 是一种语言无关、平台无关、可扩展的序列化结构数据的方法,它可用于(数据)通信协议、数据存储等。Protocol Buffers 是一种灵活,高效,自动化机制的结构数据序列化方法-可类比 XML,但是比 XML 更小(3 ~ .
2020-08-01 15:52:06
479
转载 TCP协议如何保证可靠传输(校验何确认应答+序列号、超时重传、3握4挥、流量控制、滑动窗口、拥塞控制、慢开始、拥塞避免、快重传、快恢复)
TCP能够实现可靠传输是因为这几种机制1.面向连接,连接管理 ----------- 前提。(三次握手四次挥手)2.确认应答机制 ---------- 确定对方是否收到自己发送数据3.超时重传机制 ---------- 发送方等待超时没有,进行数据重传4.序号和确认序号 --------- 实现了应答机制,以及进行接收方的包序管理,实现数据有序交付校验和字段5.校验和字段 --------- 校验数据一致性,如果不一致则丢弃,对方法发送请求6.避免丢包机制--------滑动窗口机
2020-08-01 15:50:24
2678
原创 TCP ISN、三次握手、四次挥手
一、TCP数据包结构图其中比较重要的字段有序列号seq:占4个字节,用来标记数据段的顺序,TCP把连接中发送的所有数据字节都编上一个序号,第一个字节的编号由本地随机产生;给字节编上序号后,就给每一个报文段指派一个序号;序列号seq就是这个报文段中的第一个字节的数据编号。确认号ack:占4个字节,ack序号。表示期待收到对方下一个报文段的第一个数据字节的序号(seq)只有ACK=1时,确认序号字段才有效,ack=Seq+1。确认ACK:占1位,仅当ACK=1时,确认号ack字段才有效。A.
2020-08-01 15:49:41
2429
1
原创 【六】zookeeper 服务器选举与ZAB协议
一、服务器启动时期的Leader选举假设Server1 (myId 1)这台启动了,它是无法进行Leader选举的,要等到Server2 (myId 2)启动后,这两台机器能够进行相互通信,每台机器试图找到一个Leader,于是进入Leader选举流程1.每个Server会发出一个投票由于是初始情况,因此对于Server1和Server2来说,都会将自己作为Leader服务器来进行投票。每次投票包含的最基本的元素是:所推举的服务器的myid和ZXID。我们以(myid,ZXID)的形式来表示
2020-08-01 15:22:47
262
原创 【五】zookeeper 服务器处理会话创建请求
zookeeper 服务端对于会话创建的处理,大体可以分为请求接收、会话创建、预处理、事务处理、事务应用和会话响应6个大环节。大体流程图如图:一、请求接收1. I/O层接收来自客户端的请求在ZooKeeper中,NIOServerCnxn实例维护每一个客户端连接,客户端与服务端的所有通信都是由NIOServerCnxn负责的----其负责统一接收来自客户端的所有请求,并将请求内容从底层网络I/O中完整地读取出来。2.判断是否是客户端“会话创建”请求NIOServerCnx..
2020-08-01 15:14:46
328
hadoop-eclipse-plugin-2.9.0套装
2018-05-11
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅