自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(131)
  • 收藏
  • 关注

原创 redis源码解读-大体的执行流程&一些常用的数据结构以及数据类型

看了一些关于redis 的相关文章,例如redis为什么这么快、redis的原理、redis的数据结构这些,但其只是从整体的结构来说明,并没有梳理源码的具体流程,但我不是很喜欢一些黑盒的东西,所以我们这一篇就通过跑redis的源码,来追踪redis源码中的一些数据结构。这篇文章的源码是基于redis 3.0版本,同时源码是直接从github上面clone下来的别人已经处理好的redis代码(windows平台),地址为:https://github.com/htw0056/redis-3.0-annotat

2021-07-17 11:42:02 314 1

原创 Mysql-主从配置&多主多从配置

​ 我们现在模拟的是主从(1台主机、一台从机),其主从同步的原理,就是对bin-log二进制文件的同步,将这个文件的内容从主机同步到从机。一、配置文件的修改1、主机配置文件修改配置​ 我们首先需要mysql主机(192.168.254.130)的/etc/my.cnf配置文件,添加如下配置:#主机唯一IDserver-id=1#二进制日志log-bin=mysql-bin#不需要同步的数据库binlog-ignore-db=mysqlbinlog-ignore-db=informatio

2021-05-05 21:23:33 2655 3

原创 JVM篇-垃圾收集的相关概念&具体算法使用

一、基本概念1、标记判断哪些是垃圾(标记阶段)​ 我们要进行垃圾收集,首先就需要判断哪些是垃圾需要被收集,简单来说就是哪些已经没有被使用到的例如对象,那怎样辨别这些对象呢?一般有两个算法:1)、引用计数法​ 就是用一个字段,如果这个对象被其他对象引用了,这个字段就+1,如果没有被引用释放了,就-1,这个字段如果为0,就能被判断为垃圾了。但会存在循环引用的问题,例如两个对象相互引用,但其实这两个对象都已经没有另外的第3个对象引用了,已经是垃圾了。2)、可达性分析算法(根搜索算法)​ 可达性算法是由

2021-03-23 21:16:39 502

原创 K8S系列-Kubernetes基本概念及Pod、Deployment、Service的使用

K8s的基本介绍、Pod、Deploy、Service的基本使用

2024-07-14 11:36:55 1142

原创 docker容器基本原理简介

​linux的cgroup、namespace、联合文件系统

2024-06-16 15:48:34 857

原创 Seata流程源码梳理下篇-TC

​ 这个是官网给出的定义,就是说其实全局事务的协调。具体来说例如:当某个TM(事务管理器)需要开启事务的时候,就需要一个协调者来驱动全局事务或提交,或回滚,这个概念我们开始的时候很容易与TM混淆。我们看到这两个一个是开始,一个是驱动,具体通过demo来说。

2023-09-24 14:38:15 212

原创 Seata流程源码梳理上篇-TM、RM处理

seata源码逻辑梳理-主要是TM、RM的处理

2023-01-08 16:16:59 1263 1

原创 JDBC与Spring事务及事务传播性原理解析-下篇

spring事务、事务的传播性使用,及其源码处理流程梳理

2022-11-13 17:57:30 514

原创 JDBC与Spring事务及事务传播性原理解析-上篇

jdbc的操作、Spring事务的传播性

2022-11-12 22:48:34 618

原创 Sentinel的基本使用(6)-整合SpringCloud

这一篇我们主要来介绍下`Spring-cloud`与`Sentinel`的整合使用,主要是对`feign`、`gateway`的控制。`feign`我们知道其是用来调用另一个微服务的。一、feign调用demo介绍1、属性配置&引用依赖​ 这是我们的项目,我们现在模拟的是spring-cloud-consumer调用spring-cloud-producer:我们整合sentinel,需要在consumer项目中添加依赖:<dependency> <group

2022-04-19 07:15:00 640

原创 Sentinel的基本使用(5)-控制台使用

这一篇我们主要介绍下`Sentinel`控制的使用(主要是结合SpringBoot),主要介绍其的一些配置作用,以及分析下其对`web`请求`endpoint`的处理一、控制台安装​ 这个我们去官网下载sentinel-dashboard,然后本地编译:​ 编译后其就会有一个有一个jar,我们直接运行就可以了:例如java -Dserver.port=9000 -jar sentinel-dashboard-1.8.3.jar之后我们就能访问了:http://localhost:9000:输

2022-04-17 10:06:15 2431

原创 Sentinel的基本使用(4)-热点参数限流

一、热点参数限流介绍​ 这一篇我们主要来介绍下热点参数限流,这个介绍我们看下官方的描述:何为热点?热点即经常访问的数据。很多时候我们希望统计某个热点数据中访问频次最高的 Top K 数据,并对其访问进行限制。比如:商品 ID 为参数,统计一段时间内最常购买的商品 ID 并进行限制用户 ID 为参数,针对一段时间内频繁访问的用户 ID 进行限制热点参数限流会统计传入参数中的热点参数,并根据配置的限流阈值与模式,对包含热点参数的资源调用进行限流。热点参数限流可以看做是一种特殊的流量控制,仅对包含热点

2022-04-16 12:46:27 3608 4

原创 Sentinel的基本使用(3)-系统规则

这一篇我们来分析下Sentinel系统规则的使用,这里我们再来看下官方对其的介绍。一、系统规则介绍系统保护规则是从应用级别的入口流量进行控制,从单台机器的 load、CPU 使用率、平均 RT、入口 QPS 和并发线程数等几个维度监控应用指标,让系统尽可能跑在最大吞吐量的同时保证系统整体的稳定性。系统保护规则是应用整体维度的,而不是资源维度的,并且仅对入口流量生效。入口流量指的是进入应用的流量(EntryType.IN),比如 Web 服务或 Dubbo 服务端接收的请求,都属于入口流量。系统规则支

2022-04-10 15:08:15 764

原创 Sentinel的基本使用(2)-熔断降级使用及源码分析

这一篇我们主要来分析下Sentinel的熔断降级,这个相关的官方文档。一、demo使用public class DegradeFlowDemo { private static final String resourceKey = "degradeResource"; private static int index = 0; public static void main(String[] args) throws InterruptedException {

2022-04-09 15:18:49 1252

原创 Sentinel的基本使用(1)-流量控制及其源码调用分析

首先Sentinel的一些基本介绍就不多说了,其是阿里开源的用于流量控制、熔断降级的这些高并发下的一些控制。下面我们直接看使用的案例。​ 首先在项目中我们引入对应的依赖<dependency> <groupId>com.alibaba.csp</groupId> <artifactId>sentinel-core</artifactId> <version>1.8.3</version><

2022-04-05 17:04:33 962

原创 Spring-Cloud系列-Hystrix源码解析

这一篇我们主要来看下Hystrix是怎样在OpenFiegn上做进一层封装的,主要梳理Hystrix封装逻辑。一、执行的熔断判断1、执行案例​ 我们配置了Hystrix的使用逻辑后@RequestMapping(value = "simple",method = RequestMethod.GET)public String simpleMethod(){ return feignConsumerClient.producerSimple();}@FeignClient(value

2022-03-19 09:18:58 774

原创 Spring-Cloud系列-Openfeign源码解析

这一篇我们主要来看下OpenFeign是怎样解析调用以及负载处理的。@FeignClient(value = "producer-server")public interface FeignConsumerClient { @RequestMapping(value = "producer/simple",method = RequestMethod.GET) public String producerSimple();}​ 我们这里是对producer-server微服务的

2022-03-14 14:48:29 904

原创 RocketMQ源码解析-Broker与Namesrv以及Consumer交互

​ 这一篇我们主要来分析下Broker里面的部分逻辑–Broker主要负责消息的存储、投递和查询以及服务高可用保证。下面我们就来大体梳理下其关于消息的投递、存储、拉取相关的一些逻辑。​ 我们知道broker实例时需要注册到namesrv中,然后其他的生产者、消费者再从namesrv中获取到对应的Broker实例信息,例如broker保存了哪些topic、topic对应的队列信息、此borker对应的ip信息等。一、Broker的启动初始化​ 下面我们来看下broker启动后的初始化加载:​ 在这里

2022-02-27 15:55:11 557

原创 RocketMQ源码解析-Store篇

这一篇我们主要来梳理下`RocketMQ`消息的存储,这一块的逻辑主要是在`rocketmq-store`模块​ 我们对于这个模块的逻辑梳理主要是借助这些测试类来debug分析主要是MappedFileQueue、MappedFile、CommitLog、MessageStore、ConsumeQueue、IndexFile这些类。我们主要是梳理这些类关于获取、存储消息的主要逻辑,梳理其的大致脉络。一、MappedFile​ 这个类主要对应操作的是我们的消息最终会写到的文件。1、初始化构建pu

2021-12-19 10:07:03 720

原创 RocketMQ源码解析-NameServer篇

在这一篇我们主要来看下NameServer是怎样保存topic、broker、cluster这些信息的。一、rocketmq-namesrv模块基本介绍​ 可以看到在它的源码中,namesrv其只有这些类(当然也有使用rocketMQ源码的其他的模块)。NamesrvController完成netty连接的初始化,然后DefaultRequestProcessor负责完成客户端具体要做的操作的派发,而关于注册信息相关的保存以及获取就是RouteInfoManager。二、重要类介绍1、Defaul

2021-12-12 11:10:31 1617

原创 SpringSecurity原理分析

距离上次更新已经5个月了,因为这段时间主要是面试准备+适应新公司的内容,8月份离职,9月份入职,虽然看了很多内容,但没有进行系统整理。之后应该也会渐渐的整理一些内容,会继续更新,虽然没什么人看,但还是说明下,_O(∩_∩)O哈哈~。​ 这一篇我们主要梳理下SpringSecurity的原理,SpringSecurity主要是用于认证、授权的,其的主要原理就是通过Filter来处理。一、SpringSecurity的基本原理1、基本流程​ SpringSecurity的基本原理就是应用了Tomcat容

2021-12-05 14:39:50 6477 3

原创 数据结构&算法篇(1)--二叉树的构建与遍历2-非递归遍历

二叉树的非递归遍历可以先看下上篇文章:二叉树的括号表示法构建&递归遍历- https://blog.csdn.net/qq_25179481/article/details/1190625471)、先序遍历/** * 非递归的二叉树先序遍历 * @return */public String stackTraversPreStr(){ StringBuffer buffer = new StringBuffer(); stackTraversPre(parent,b

2021-07-25 12:37:24 129 1

原创 数据结构&算法篇(1)--二叉树的构建与遍历

这一篇我们主要是通过二叉树的括号表示法来构建一颗二叉树1、二叉树的构建(括号表示法)1)、使用demo @Test public void stackBinaryTree() { StackBinaryTree stackBinaryTree = new StackBinaryTree("A(B(D(,G)),C(E,F))");// StackBinaryTree.Node<Character> node = stackBinaryTre

2021-07-24 19:24:28 794 2

原创 重读Spring系列(4)-Conditional注入Bean的判断

这一篇我们要梳理的主要是关于注入Bean的条件判断,只有满足对应的条件才注入对应的BeanDefinition。关于注入的条件判断目前我们知道是有3个地方,其中两个都是使用的ConditionEvaluator处理,另外一个是我们的上一篇提到的AutoConfigurationImportFilter。下面我们就按顺序来依次梳理。建议看下前两篇一、@Conditional1、结构@Target({ElementType.TYPE, ElementType.METHOD})@Retention(Ret

2021-06-15 16:41:04 1567

原创 重读Spring系列(3)-@SpringBootApplication注解的详细解析

这一篇我们来梳理下@SpringBootApplication这个注解它注入了那些内容。一、结构分析1、main方法使用​ 我们知道@SpringBootApplication是用在Main方法上面的,例如:@SpringBootApplicationpublic class SpringBootSimpleDemoApplication { public static void main(String[] args) { SpringApplication.run(Sprin

2021-06-15 16:38:56 337

原创 重读Spring系列(2)-一些配置注解的使用与源码解析

最开始的Spring系列我主要着重的是整个代码逻辑的实力,到现在有些都快一年了,或者也有几个月了,自己现在去看也有些看不下去了,毕竟代码逻辑有些复杂。并且自己以前也是刚开始了解Spring的源码,也是主要想了解Spring的代码到底是怎样的处理的。现在准备重新梳理下Spring我想了解的内容,这次我们不陷入代码的具体的实现,我们主要梳理Spring的一些结构、逻辑实现,同时也整理梳理过程中的一些Spring的组件用法。​ 我们这次主要是梳理下Spring中的一些引入直接:@Component、Compo

2021-06-08 23:30:23 233 5

原创 JDK类库源码分析系列2-AbstractQueuedSynchronizer(5)-ReentrantReadWriteLock

一、简介说明​ 这一篇我们来介绍下AbstractQueuedSynchronizer的另一个应用类ReentrantReadWriteLock。与之对应的是类似前面一篇的ReentrantLock,不过ReentrantLock其是以独占的模式获取锁,目前我们这个ReentrantReadWriteLock是有两用的,一种是读锁,也就是共享锁,另一种是Write写锁,也就是独占锁。​ 下面我们就来具体梳理下这个类。​ 这里我们可以通过一个很简单的例子来梳理逻辑。public class Reen

2021-05-23 12:15:04 97

原创 JDK类库源码分析系列2-AbstractQueuedSynchronizer(4)-CountDownLatch

一、简介说明​ 这一篇我们来介绍下AbstractQueuedSynchronizer的一个应用类CountDownLatch。其是用来进行计数的,调用其的countDownLatch.await()方法后,其一定会等到其初始化的计算为0才往下继续运行。​ 例如我们一个demo:public static void main(String[] args) { new Thread(new Runnable() { @Override public void ru

2021-05-23 12:14:17 82

原创 JDK类库源码分析系列2-AbstractQueuedSynchronizer(3)-Semaphore

一、简介说明​ 这一篇我们来介绍下AbstractQueuedSynchronizer的另一个应用类Semaphore。其有些类似上一篇的CountDownLatch,不过CountDownLatch其是初始化一个数,然后往下降一直到0。而Semaphore是初始化一个数N,然后我们将这个值理解为容量,这个容量最大只能为N了,可以往下降到0,当同时也能添加到最大N。我们可以借助这个来实现最大的并发数量控制,有点类似与令牌桶。​ 下面我们就来具体梳理下这个类。一、基本结构1、Semaphorepu

2021-05-23 12:13:07 110

原创 JDK类库源码分析系列2-AbstractQueuedSynchronizer(2)-ReentrantLock

上一篇我们梳理了`AbstractQueuedSynchronizer`(`AQS`)的一些方法,这一篇我们就来看其的子类实现`ReentrantLcok`可重入锁。一、结构1、继承关系public class ReentrantLock implements Lock, java.io.Serializable {​ 可以看到其是实现接口Lock。2、Lockpublic interface Lock { void lock(); void lockInterrupti

2021-05-23 12:12:11 132

原创 JDK类库源码分析系列-AbstractQueuedSynchronizer(1)

这一篇我们来分析一个Java中的一个线程安全&共享等相关的抽象类AbstractQueuedSynchronizer。​ 通过这个图片我们可以看到,我们使用的与共享资源并发控制&锁相关类如ReentrantLock、ReentrantReadWriteLock、CountDownLatch这些都是继承的这个类,下面我们就来分析下这个抽象类一、结构基本介绍public abstract class AbstractQueuedSynchronizer extends Abstr

2021-05-23 12:10:23 160

原创 SpringCloud篇-SpringCloud基本使用(1)

一、整体项目结构1、项目结构​ 首先我们创建一个父工程,然后其的POM文件是:<?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

2021-05-16 16:56:02 407 2

原创 RabbitMQ篇-各种发送消费模式的使用

一、基本介绍​ RabbitMQ是对AMQP(即Advanced Message Queuing Protocol,一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准的实现)的一种实现,其传输层是使用的TCP协议。1、virtual host & users​ vrital host是虚拟主机,而users用户是需要绑定到对应的虚拟主机的,而发送&接收消息都是面向的对应虚拟主机。​ 例如RabbitMQ的管理界面​ 用户是有对应到virtua

2021-04-18 16:03:16 2163

原创 JVM篇-性能查看相关工具

这篇我们来分析下JVM中自带的一些命令分析工具。一、jps (Java Process Status)​ 通过其能看到系统中所有的HotSpot虚拟机进程,通个其就能看到当前正在进行的Main类。1、命令使用​ 实首先我们通过jps -help来看下:​ 前面的usage就是其的用法,可以看到其的初始是分为-q&mlvV,这个的意义按正则表达式理解,也就是这两个以及后面的那些参数是能混合使用的。这里我们先运行我们的MyJvm类。1)、jps我们首先输入jps命令来看下:​ 这里就

2021-04-11 16:19:24 285

原创 Redis篇-Redis配置文件与RDB&AOF基本使用

一、启动连接1、启动通过命令./redis-server redis_config/redis.conf启动服务端,后面跟的是配置文件​ 这里还要注意redis.config的一个配置参数daemonize,也就是以守护进程的方式运行# By default Redis does not run as a daemon. Use 'yes' if you need it.# Note that Redis will write a pid file in /var/run/redis.pid w

2021-04-11 14:50:52 376

原创 JVM篇-常用控制参数使用分析

一:JVM选项简介有关于JVM的控制参数,官方有给出6种定义,我们逐一来看下其的使用。​ 然后我们如果要看到这些选项的开启&设置情况,可以使用-XX:+PrintFlagsFinal,例如我们使用-Xlog:gc* -Xmx120M -Xms120M -XX:+UseParallelGC -XX:+PrintFlagsFinal:二、Standard Options (标准选项)​ 这种是共用的参数,能被所有的JVM支持。​ 我们直接在命令端输入java或java -help就能展示这

2021-03-28 12:09:48 530 1

原创 JVM篇-结合源码分析垃圾收集器的类型

这一篇我们来看下JVM中的垃圾收集器,看下这些垃圾收集器是怎样选择以及初始化的一些信息。建议在看本篇文章的时候看下前面两篇一、基本介绍1、方法调用链关于垃圾收集器选择初始化就是在initialized_heap()方法的create_heap()方法:CollectedHeap* Universe::_collectedHeap = NULL;jint Universe::initialize_heap() { jint status = JNI_ERR; _collectedHe

2021-03-14 12:20:36 619 2

原创 JVM篇-oop-klass模型对类的描叙及类加载&实例化内存申请过程

一、oop-klass描叙1、介绍​ 在JVM内存用到了oop-klass模型来描叙对应的类及对象:oop(ordinary object ponter,普通对象指针),其是用来描叙对象的实例信息。klass,其是JVM内部用来描叙类的信息的,例如Java类的继承信息,成员方法等信息。同时JVM还有一种类型来封装对oop类型的行为-handle。2、handleclass Handle VALUE_OBJ_CLASS_SPEC { private: oop* _handle; prote

2021-03-07 19:48:10 657

原创 JVM篇-结合源码分析JVM堆内存&元空间的申请分配

一、堆内存的结构1、结构图​ 我们可以看到官方给的这张图。可以看到其堆可以有两种分配类型:一种就是JVM申请提交的内存(committed)以及目前还没有使用到的内存(Virtual),另一种就是按照分代的概念:年轻代(Young Generation)老年代(Tenured Generation)。​ 同时根据这个结构图我们可以知道在代与代之间还有空出来暂时没有使用到的内存。2、年轻代&老年代分配​ 我们可以看到在年轻代是有两个概念的划分的:Eden、Survivor,然后Surviv

2021-02-28 15:47:16 1116

原创 MySQL技术内幕InnoDB存储引擎阅读相关笔记-事务

一、事务概叙​ 事务:事务是数据库区别于文件系统的重要特性之一,事务会把数据库状态从一种一致状态转换为另一种一致状态,保证数据的完整性。在数据库提交工作时,可以确保所有的修改都已经报保存了,要么是所有的修改都不保存。1、事务的特性1)、原子性(atomicity)​ 原子性是指整个数据库事务是不可分割的工作单位。只有使事务中所有的数据库操作执行都成功,才算整个事务成功。如果事务中任何一个SQL语句执行失败,那么已经执行成功的SQL语句也必须撤销,数据库状态应该退回到执行事务前的状态。2)、一致性(

2021-01-30 12:49:18 145 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除