自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 一篇文章带你读懂MySQL的事务机制原理

一、事务1.1 多事务并发执行访问MySQL  通常而言,我们都是在业务系统里开启事务来执行增删改操作,我随便给大家举个例子,下面的代码大家看看。@Transactionalpublic void doService() { // 增加一条数据 addUser(); // 更新一条数据 updateUser(); // 删除一条数据 deleteUser();}  所以一般来说,业务系统是执行一个一个的事务,每个事务里可能是一个或者多个增删改查的SQL语句。  这个事务的概念想必

2021-07-18 15:02:24 631

原创 一篇文章带你读懂MySQL的InnoDB存储引擎Buffer Pool原理

一个不变的原则:网络连接必须让线程来处理一条SQL语句的执行  MySQL内部的工作线程从一个网络连接中取出来一个SQL语句,然后交给SQL接口去执行SQL语句,SQL接口将SQL语句交给查询解析器去解析SQL,解析完SQL,查询解析器再将SQL语句交给查询优化器,去获取一个最优的执行计划,最后交由执行器,执行器根据这个执行计划去调用存储引擎的接口,完成SQL语句的执行。一、InnoDB存储引擎1.1 基于InnoDB存储引擎完成一条更新语句的执行更新语句:update users set na

2021-07-11 14:37:19 653

原创 JVM运行原理以及垃圾回收机制

一、Java代码运行流程1.1 Java程序运行流程  我们平时写的代码究竟是怎么运行起来的?我们简单看一下一个 Java 程序的执行过程,它到底是如何运行起来的?我们写好的代码,是要通过JVM才能运行的。编译,也就是将我们写好的.java代码编译成.class文件,.class字节码文件才是可以被运行起来的。JVM 想要运行.class字节码文件中的代码,首先要把.class文件中包含的各种类加载进来,此时用到了类加载器。JVM采用类加载器把编译号的.class字节码文件加载到JVM内存中

2021-06-26 16:55:13 794

原创 Redis集群搭建

1. 集群搭建需要的环境Redis集群至少需要3个节点,因为投票容错机制要求超过半数节点认为某个节点挂了该节点才是挂了,所以2个节点无法构成集群。要保证集群的高可用,需要每个节点都有从节点,也就是备份节点,所以Redis集群至少需要6台服务器。因为我没有那么多服务器,也启动不了那么多虚拟机,所在这里搭建的是伪分布式集群,即一台服务器虚拟运行6个redis实例,修改端口号为(7001-7006),当然实际生产环境的Redis集群搭建和这里是一样的。2. 集群搭建具体步骤如下(注意要关闭防火墙)(1

2021-04-14 14:28:46 249

原创 MySQL主从同步及MHA高可用架构搭建

1. 环境软件版本环境&软件版本虚拟机&VMware WorkstationWorkStation 10服务器&CentOS7.8数据库&Mysql5.7.28远程连接& MobaXterm_Personal_10.510.52. 环境架构介绍架构如图所示,4台机器的IP和角色如下表:IP角色权限192.168.43.127数据库Master可读写、主库192.168.43.21

2021-03-17 23:22:22 284

原创 MySQL高级系列(四)—— MySQL集群架构

第1节 集群架构设计1.1 架构设计理念在集群架构设计时,主要遵从下面三个维度:可用性扩展性一致性1.2 可用性设计站点高可用,冗余站点服务高可用,冗余服务数据高可用,冗余数据保证高可用的方法是冗余。但是数据冗余带来的问题是数据一致性问题。实现高可用的方案有以下几种架构模式:主从模式简单灵活,能满足多种需求。比较主流的用法,但是写操作高可用需要自行处理。双主模式互为主从,有双主双写、双主单写两种方式,建议使用双主单写1.3 扩展性设计扩展性主要围绕着读操作扩展和

2021-03-09 20:12:17 741 1

转载 MySQL高级系列(三)—— MySQL事务和锁

第三部分 MySQL事务和锁第1节 ACID 特性  在关系型数据库管理系统中,一个逻辑工作单元要成为事务,必须满足这 4 个特性,即所谓的 ACID:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。1.1 原子性原子性:事务是一个原子操作单元,其对数据的修改,要么全都执行,要么全都不执行。修改—》Buffer Pool修改—》刷盘。可能会有下面两种情况:事务提交了,如果此时Buffer Pool的脏页没有刷盘,如何

2021-02-21 21:37:17 156

原创 MySQL高级系列(二)—— MySQL索引原理

第二部分 MySQL索引原理第1节 索引类型索引可以提升查询速度,会影响where查询,以及order by排序。MySQL索引类型如下:从索引存储结构划分:B Tree索引、Hash索引、FULLTEXT全文索引、R Tree索引从应用层次划分:普通索引、唯一索引、主键索引、复合索引从索引键值类型划分:主键索引、辅助索引(二级索引)从数据存储和索引键值逻辑关系划分:聚集索引(聚簇索引)、非聚集索引(非聚簇索引)1.1 普通索引  这是最基本的索引类型,基于普通字段建立的索引,没有任何限

2021-02-15 10:14:18 267

原创 MySQL高级系列(一)—— MySQL架构原理

第一部分 MySQL架构原理第1节 MySQL体系架构MySQL Server架构自顶向下大致可以分网络连接层、服务层、存储引擎层和系统文件层。一、网络连接层客户端连接器(Client Connectors):提供与MySQL服务器建立的支持。目前几乎支持所有主流的服务端编程技术,例如常见的 Java、C、Python、.NET等,它们通过各自API技术与MySQL建立连接。二、服务层(MySQL Server)  服务层是MySQL Server的核心,主要包含系统管理和控制工具、连接池

2021-02-13 11:27:54 4600 3

原创 Dubbo架构与入门实战

1、Dubbo 架构概述1.1 什么是Dubbo  Apache Dubbo是一款高性能的Java RPC框架。其前身是阿里巴巴公司开源的一个高性能、轻量级的开源Java RPC框架,可以和Spring框架无缝集成。1.2 dubbo 的特性  Apache Dubbo 提供了六大核心能力:面向接口代理的高性能RPC调用,智能容错和负载均衡,服务自动注册和发现,高度可扩展能力,运行期流量调度,可视化的服务治理与运维。1.3 Dubbo 的服务治理  服务治理(SOA governance),企

2020-12-23 14:27:32 162

原创 Zookeeper深入进阶

1. Zookeeper深入进阶1.1 ZAB协议1.1.1 概念  在深入了解zookeeper之前,很多同学可能会认为zookeeper就是paxos算法的⼀个实现,但事实上,zookeeper并没有完全采用paxos算法,而是使⽤了⼀种称为Zookeeper Atomic Broadcast(ZAB,Zookeeper原子消息广播协议)的协议作为其数据⼀致性的核心算法。  ZAB协议并不像Paxos算法那样 是⼀种通用的分布式⼀致性算法,它是⼀种特别为zookeeper专门设计的⼀种支持崩溃恢

2020-12-22 09:48:05 224 1

原创 Zookeeper六种常见应用场景

1. Zookeeper应用场景  ZooKeeper是⼀个典型的发布/订阅模式的分布式数据管理与协调框架,我们可以使用它来进行分布式数据的发布与订阅。另一方面,通过对ZooKeeper中丰富的数据节点类型进行交叉使用,配合Watcher事件通知机制,可以非常方便地构建⼀系列分布式应用中都会涉及的核心功能,如数据发布/订阅、命名服务、集群管理、Master选举、分布式锁和分布式队列等。那接下来就针对这些典型的分布式应用场景来做下介绍。1.1 数据发布/订阅  数据发布/订阅(Publish/Subsc

2020-12-09 09:49:31 2223

原创 Zookeeper简介、安装、基本使用

1. Zookeeper简介1.1 分布式系统定义及面临的问题  ZooKeeper最为主要的使用场景,是作为分布式系统的分布式协同服务。  我们将分布式系统定义为:分布式系统是同时跨越多个物理主机,独立运行的多个软件所组成系统。类比⼀下,分布式系统就是一群人一起干活。人多力量大,每个服务器的能力是有限的,但是通过分布式系统,由n个服务器组成起来的集群,能力是可以无限扩张的。  优点显而易见,人多干活快,并且互为备份。但是缺点也很明显。我们可以想象⼀下,以⼀个小研发团队开发软件为例,假设我们有⼀个5

2020-12-08 10:23:31 329

原创 基于Netty自定义RPC

一、基于Netty自定义RPCRPC又称远程过程调用,我们所知的远程调用分为两种,现在在服务间通信的方式也基本以这两种为主:是基于HTTP的restful形式的广义远程调用,以spring could的feign和restTemplate为代表,采用的协议是HTTP的7层调用协议,并且协议的参数和响应序列化基本以JSON格式和XML格式为主。是基于TCP的狭义的RPC远程调用,以阿里的Dubbo为代表,主要通过netty来实现4层网络协议,NIO来异步传输,序列化也可以是JSON或者hessian2

2020-11-28 13:21:12 314 3

原创 分布式架构之网络通信

一、分布式架构网络通信  在分布式服务框架中,一个最基础的问题就是远程服务是怎么通讯的,在Java领域中有很多可实现远程通讯的技术,例如:RMI、Hessian、SOAP、ESB和JMS等,它们背后到底是基于什么原理实现的呢?1.1 基本原理  要实现网络机器间的通讯,首先得来看看计算机系统网络通信的基本原理,在底层层面去看,网络通信需要做的就是将流从一台计算机传输到另外一台计算机,基于传输协议和网络IO来实现,其中传输协议比较出名的有tcp、udp等等,tcp、udp都是在基于Socket概念上为某

2020-11-26 09:13:31 1731

原创 MyBatis基础回顾及高级应用

一、Mybatis相关概念1.1 对象/关系数据库映射(ORM)  ORM全称Object/Relation Mapping:表示对象-关系映射的缩写  ORM完成面向对象的编程语言到关系数据库的映射。当ORM框架完成映射后,程序员既可以利用面向对象程序设计语言的简单易用性,又可以利用关系数据库的技术优势。ORM把关系数据库包装成面向对象的模型。ORM框架是面向对象设计语言与关系数据库发展不同步时的中间解决方案。采用ORM框架后,应用程序不再直接访问底层数据库,而是以面向对象的放松来操作持久化对象,而

2020-11-25 11:16:05 356

原创 Tomcat 核心流程源码分析

一、源码构建1.1 下载源码1.2 源码导入IDE之前准备工作解压 tar.gz 压缩包,得到目录 apache-tomcat-8.5.50-src在 apache-tomcat-8.5.59-src 源码目录下创建 source 文件夹将 conf、webapps 目录移动到刚刚创建的 source 文件夹中在 apache-tomcat-8.5.59-src 源码目录下创建 pom.xml 文件,文件内容如下:<?xml version="1.0" encoding="UTF

2020-11-24 19:12:25 227

原创 分布式理论与设计策略

第1章 分布式理论1.1 分布式架构系统回顾1.1.1 分布式系统概念  分布式系统是一个硬件或软件组件分布在不同的网络计算机上,彼此之间仅仅通过消息传递进行通信和协调的系统。  通俗的理解,所谓分布式系统,就是一个业务拆分成多个子业务,分布在不同的服务器节点,共同构成的系统称为分布式系统,同一个分布式系统中的服务器节点在空间部署上是可以随意分布的,这些服务器可能放在不同的机柜中,也可能在不同的机房中,甚至分布在不同的城市。Tip:分布式与集群的区别:集群:多个人在一起作同样的事 。分布

2020-11-24 09:47:40 1182

原创 分布式集群架构场景化解决方案

分布式和集群  分布式和集群是不⼀样的,分布式⼀定是集群,但是集群不⼀定是分布式(因为集群就是多个实例⼀起工作,分布式将⼀个系统拆分之后那就是多个实例;集群并不⼀定是分布式,因为复制型的集群不是拆分而是复制)第一部分 一致性Hash算法1.1 什么是Hash算法百度百科对Hash的解释:Hash算法简介Hash算法可以将一个数据转换为一个标志,这个标志和源数据的每一个字节都有十分紧密的关系。Hash算法还具有一个特点,就是很难找到逆向规律。Hash算法是一个广义的算法,也可以认为是一种思

2020-11-21 21:23:01 393 6

原创 Tomcat 高级应用

一、Tomcat 类加载机制剖析Java类(.java)—>字节码⽂件(.class) —> 字节码文件需要被加载到jvm内存当中(这个过程就是⼀个类加载的过程)类加载器(ClassLoader,说白了也是⼀个类,jvm启动的时候先把类加载器读取到内存当中去,其他的类(比如各种jar中的字节码文件,自己开发的代码编译之后的.class文件等等))要说 Tomcat 的类加载机制,首先需要来看看 Jvm 的类加载机制,因为 Tomcat 类加载机制是在 Jvm 类加载机制基础之上进行了⼀些

2020-11-14 12:12:36 217

原创 Nginx 知识简介

主要内容:第一部分:Nginx基础回顾(Nginx是什么?能做什么事情(应用在什么场合)?常用命令是什么?)第二部分:Nginx核心配置文件解读第三部分:Nginx应用场景之反向代理第四部分:Nginx应用场景之负载均衡第五部分:Nginx应用场景之动静分离第六部分:Nginx底层进程机制剖析第一部分 Nginx基础回顾百度百科Nginx介绍:1.1 Nginx 到底是什么?  Nginx 是⼀个高性能的HTTP和反向代理web服务器,核心特点是占有内存少,并发能力强1.2 Ng

2020-11-13 19:17:22 290

原创 自定义持久层MyBatis框架

一、自定义持久层MyBatis框架1.1. 分析JDBC操作的问题public class JDBCTest { public static void main(String[] args) throws Exception { Connection connection = null; PreparedStatement preparedStatement = null; ResultSet resultSet = null;

2020-11-06 10:52:10 182

原创 手写实现迷你版 Tomcat

  Minicat要做的事情:作为⼀个服务器软件提供服务的,也即我们可以通过浏览器客户端发送http请求,Minicat可以接收到请求进行处理,处理之后的结果可以返回浏览器客户端。整体思路:(1)提供服务,接收请求(Socket通信)(2)请求信息封装成Request对象(Response对象)(3)客户端请求资源,资源分为静态资源(html)和动态资源(Servlet)(4)资源返回给客户端浏览器我们递进式完成以上需求,提出V1.0、V2.0、V3.0版本的需求:V1.0需求:浏览器请求h

2020-11-04 09:49:46 934 2

原创 Tomcat 知识简介

第一部分 Tomcat 系统架构与原理剖析  B/S(浏览器/服务器模式) 浏览器是客户端(发送http请求) ———> 服务器端第 1 节 浏览器访问服务器的流程  http请求的处理过程  注意:浏览器访问服务器使用的是Http协议,Http是应用层协议,用于定义数据通信的格式,具体的数据传输使用的是TCP/IP协议。请求过程说明:(1)用户在浏览器输入url地址然后出发访问或者是搜素框输入关键词进行搜索。(2)浏览器向服务器发起TCP连接请求(中间进行三次握手)。(3)服务器

2020-11-03 15:09:44 246

原创 Spring 基础简单回顾

第⼀部分 Spring 概述第1节 Spring 简介Spring 是分层的 full-stack(全栈) 轻量级开源框架,以 IoC 和 AOP 为内核,提供了展现层 Spring MVC 和业务层事务管理等众多的企业级应用技术,还能整合开源世界众多著名的第三⽅框架和类库,已经成为使用最多的Java EE 企业应用开源框架。Spring 官方网址:http://spring.io/我们经常说的 Spring 其实指的是Spring Framework(spring 框架)第2节 Spring

2020-11-03 08:41:21 756

原创 Spring Boot源码剖析

  传统的Spring框架实现一个Web服务,需要导入各种依赖Jar宝,然后编写对应的XML配置文件等,相较而言,Spring Boot显得更加方便、快捷和高效。那么,Spring Boot究竟如何做到这些的呢?接下来分别针对Spring Boot框架的依赖管理、自动配置和执行流程进行深入分析。一、依赖管理  首先我们创建一个Spring Boot项目,引入spring-boot-starter-web依赖问题1:为什么导入dependency时不需要指定版本?  我们在创建Spring Boot

2020-11-02 19:32:21 388

原创 Spring Boot 高级应用

一、Spring Boot数据访问  SpringData是Spring提供的一个用于简化数据库访问、支持云服务的开源框架。它是一个伞形项目,包含了大量关系型数据库及非关系型数据库的数据访问解决方案,其设计目的是使我们可以快速且简单地使用各种数据访问技术。Spring Boot默认采用整合SpringData的方式统一处理数据访问层,通过添加大量自动配置,引入各种数据访问模板xxxTemplate以及统一的Repository接口,从而达到简化数据访问层的操作。  Spring Data提供了多种类型数

2020-10-31 11:30:40 715

原创 Spring Boot 基础简单回顾

一、约定优于配置 Build Anything with Spring Boot:Spring Boot is the starting point for building all Spring-based applications. Spring Boot is designed to get you up and running as quickly as possible, with minimal upfront configuration of Spring.  上面是引自官网的

2020-10-29 09:51:58 475 1

原创 Spring MVC 运行流程源码剖析

一、Spring MVC请求处理流程流程说明第一步:⽤户发送请求至前端控制器DispatcherServlet第二步:DispatcherServlet收到请求调⽤HandlerMapping处理器映射器第三步:处理器映射器根据请求Url找到具体的Handler(早期指实现Controller接口的类,现在注解模式下,类中的每个方法都是一个Handler),生成处理器对象及处理器拦截器(如果有则生成)⼀并返回DispatcherServlet第四步:DispatcherServlet调⽤Hand

2020-10-20 14:37:19 227

原创 Spring MVC 简单回顾

第⼀部分 Spring MVC应用第1节 Spring MVC简介  Spring MVC是Spring 给我们提供的⼀个用于简化Web开发的框架1.1 MVC 体系结构经典三层架构(代码架构)  我们的开发架构⼀般都是基于两种形式,⼀种是 C/S 架构,也就是客户端/服务器;另⼀种是 B/S 架构,也就是浏览器服务器。在 JavaEE 开发中,几乎全都是基于 B/S 架构的开发。那么在 B/S 架构中,系统标准的三层架构包括:表现层、业务层、持久层。三层架构在我们的实际开发中使⽤的⾮常多。 

2020-10-18 20:06:25 662

原创 MyBatis源码剖析

1. 传统方式源码剖析public class MybatisTest { /** * 传统方式 * * @throws IOException */ public void test1() throws IOException { // 1. 读取配置文件,读成字节输入流,注意:现在还没解析 InputStream resourceAsStream = Resources.getResourceAsStream("

2020-10-13 10:44:58 441 6

空空如也

空空如也

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

TA关注的人

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