自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

root

IT技术宅

  • 博客(52)
  • 收藏
  • 关注

翻译 ZooKeeper Leader选举原理机制分析

什么场景下需要选举当 ZooKeeper 集群中的一台服务器出现以下两种情况之一时,需要进入 Leader 选举。(1)服务器初始化启动。(2)服务器运行期间 Leader 故障。几个重要参数和选举状态在分析选举原理前,先介绍几个重要的参数。(1)服务器 ID(sid):编号越大在选举算法中权重越大,比如有三台服务器,编号分别是 1,2,3。编号越大在选择算法中的权重越大,比如初始化启动时就是根据服务器 ID 进行比较。(2)事务 ID(zxid):值越大说明数据越新,权重

2021-11-02 10:43:20 452

翻译 接口幂等性保证设计方案

接口幂等性定义:是指用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了副作用。 insert操作,这种情况下多次请求,可能会产生重复数据。 update操作,如果只是单纯的更新数据,比如:update user set status=1 where id=1,是没有问题的。如果还有计算,比如:update user set status=status+1 where id=1,这种情况下多次请求,可能会导致数据错误。 常见业务场景 有时我

2021-11-02 09:59:14 255

原创 浏览器输入域名访问全流程解析

当你在浏览器中输入了一个网址URL,按下回车到页面展示内容的这个过程,发生了什么?可以从浏览器、服务器、计算机网络相关尝试分析。输入 URL 之后,浏览器做的第一件事情就是 DNS 域名解析。一 、DNS 域名解析我们分析五层网络模型时就知道了数据链路层传输的帧,并不是通过字符串寻找到目标主机,而是通过 MAC 地址找到目标主机的硬件地址,要通过 ARP 协议解析获取 MAC 地址,我们需要目标主机的 IP 地址,所以问题是如何通过域名获取对应 IP 地址。所以第一个步骤,我们需要获取域名.

2021-08-12 16:22:58 8387 2

原创 计算机网络(HTTPS协议)

一、HTTP 和 HTTPS 协议在研究 HTTPS 协议之前,我们先总结下 HTTP 协议的优点和缺点:优点 缺点 通信方式简单:基于请求和响应,客户端发起请求,服务器端返回响应 明文通信:信息明文传输,安全性低。 无需维护状态:HTTP 是无状态协议,不识别客户端。 没有状态:例如对于需要保持登录状态的网站,需要依靠其他外部方式(Cookie、Session)维护状态。 速度快,效率高。 如上表所示,HTTP 协议牺牲了安全性,换来了效率,但是在某些安全.

2021-08-12 15:51:25 209

原创 计算机网络协议(HTTP TCP UDP)

一、HTTP协议1、http定义HTTP(HyperText Transfer Protocol,超文本传输协议)是一个请求 - 响应(Request to Response)协议,位于网络模型的应用层,基于传输层的TCP协议。2、http请求-响应模型其次,HTTP 报文是在客户端和服务器端传输的数据报文,由起始行(Start Line)、请求头部(Request Header)和请求主体(Request Body)构成,从类型上分为请求报文(Reque...

2021-08-12 15:26:55 873 1

原创 计算网络分层

一、计算机网络是如何分层的1、分层模型总览首先,我们都知道最基础的分层协议是计算机网络 OSI(Open System Interconnection)体系。OSI 模型如上图(a)所示,网络结构被拆分为 7 层,自顶向下分别是应用层、表示层、会话层、传输层、网络层、数据链路层以及物理层。但是 OSI 模型是一种概念模型,虽然理论比较完整,并不实用。TCP/IP 体系如上图(c)所示,包含了应用层、传输层、网络层以及网络接口层,不过我们一般关注上面三层的内...

2021-08-12 14:56:27 199

原创 ZooKeeper基础知识分析罗列

一、ZooKeeper简介

2021-07-19 11:06:50 258 2

原创 分布式事务理论基础和面临场景

一、基础概念介绍1、事务的定义事务可以看做是一次大的活动,它由不同的小活动组成,这些活动要么全部成功,要么全部失败。2、事务分类2.1、本地事务定义:在计算机系统中,更多的是通过关系型数据库来控制事务,这是利用数据库本身的事务特性来实现的,因此叫数据库事务,由于应用主要靠关系数据库来控制事务,而数据库通常和应用在同一个服务器,所以基于关系型数据库的事务又被称为本地事务。数据库事务的四大特性:ACIDA(Atomic):原子性,构成事务的所有操作,要么都执行完成,要么全部

2021-06-30 10:58:12 167

原创 MyBatis 插件分析

一、插件定义介绍MyBatis插件实际上就是拦截器的实现过程,它是通过Jdk动态代理来实现的。可拦截的对象y

2021-06-21 18:01:00 258

原创 Class类文件分析和加载过程分析

一、Class文件中的数据类型 无符号数:无符号数属于基本的数据类型,以 u1、u2、u4、u8 来分别代表 1 个字节、2 个字节、4 个字节和 8 个字节;无符号数可以用来描述数字、索引引用、数量值或者按照 UTF-8 编码构成的字符串值; 表:表是由多个无符号数或者其他表作为数据项构成的复合数据类型,所有表都习惯性地以“info”结尾。表用于描述有层次关系的复合结构的数据,整个 Class 文件本质上就是一张表。 二、Class文件结构Class 文件是一组以(8位bi

2020-12-01 00:32:40 249 1

原创 设计模式的七大原则

一、设计模式的目的1、代码重用性2、可读性3、可扩展性4、可靠性5、使程序呈现高内聚、低耦合的特性二、设计模式的七大原则单一职责原则 接口隔离原则 依赖倒置原则 里氏替换原则 开闭原则 迪米特法则 合成复用法原则...

2020-11-23 17:47:32 221

原创 Spring Boot任务相关知识点

一、任务分类异步任务 定时任务 邮件任务1、异步任务使用场景:在执行业务方法的时候,为了返回的相应速度,就会用到异步处理,启用多线程的方式去跑业务中的任务配置异步任务的步骤:第一步:需要在springboot的启动类中开启异步的注解------@EnableAsync 第二步:需要在我们异步处理业务的方法上添加上@Async注解实例:/************spring boot的启动入口类*************/@EnableAsync //开..

2020-06-08 17:16:49 240

原创 Spring Boot自动配置知识点分析

一、配置文件分析Spring boot使用一个全局的配置文件(配置文件名是固定的):application.properties application.yml配置文件放在src/mian/resource目录货或者类路径下的/config下。.yml是YAML语言的文件,以数据为中心,比json、xml等更适合做配置文件,具体参考:http://www.yaml.org(参考语法规范)。1、yml配置server: port: 8081 path:/hellok:

2020-06-08 14:12:15 173

原创 Spring Boot入门篇

一、Spring Boot简介1、spring boot简介简化spring应用开发的一个框架。 整个spring技术栈的一个大整合。 J2EE开发的一站式解决方案。2、微服务的定义微服务是一种架构风格,一个应用应该是一组小型服务;可以通过http的方式进行互通。每一个功能元素最终都是一个可独立替换和独立升级的软件单元。微服务示意图:3、创建spring boot项目的环境约束二、Spring Boot HelloWord1、创建一个Maven工程

2020-06-08 00:48:47 205

原创 Spring事务知识点分析

一、事物中的属性事务的四种特性(ACID) 事务的传播行为 事务的隔离级别 事务之间的缺陷1、事务的四种特性(ACID)原子性:事务是一个原子操作,由一系列动作组成。事务的原子性确保动作要么全部完成,要么完全不起作用。 一致性:一旦事务完成(不管成功还是失败),系统必须确保它所建模的业务处于一致的状态,而不会是部分完成部分失败。在现实中的数据不应该被破坏。 隔离性:可能有许多事务会同时处理相同的数据,因此每个事务都应该与其他事务隔离开来,防止数据损坏。 永久性:一旦事务完成,无

2020-06-07 18:34:14 171

原创 Spring核心扩展点底层原理

一、Spring中的Bean的生命周期详解整体概要流程:Class--->创建对象--->依赖注入(属性赋值)--->init初始化(before,after)--->awre--->bean--->SpringContext(容器).1、第一阶段:Class--->创建对象(也就是怎么通过类来创建对象的)?class---->先扫描---->得到BeanDefinition----->创建对象1、BeanDefiniti

2020-06-07 14:30:54 381

原创 Mybatis缓存机制

一、缓存机制介绍1、缓存方式Mybatis系统中默认定义了两级缓存:分别是一级缓存和二级缓存1、默认情况下只有一级缓存(SqlSession级别的缓存,也称为本地缓存)开启。2、二级缓存需要手动开启和配置,它是记忆namespace级别的缓存。3、为了提高扩展性,Mybatis定义了缓存接口Cache,我们可以通过实现Cache接口来自定义二级缓存。2、一级缓存与数据库同一次会话期间查询到的数据会放到本地缓存中。 以后如果要获取相同的数据,直接从缓存中拿,没必要再去数

2020-06-05 20:52:41 147

原创 Mybatis Map映射文件解析

一、映射文件解析获取自增主键的值 参数处理封装 查询sql映射解析1、获取自增主键的值<insert id="addOkrRole" parameterType="com.tan.bo.OkrRole" useGeneratedKeys="true" keyProperty="id"> INSERT INTO okr_role(role_id, role_name, create_time, update_time, create_person, update_

2020-06-05 19:04:31 1091

原创 Mybatis全局配置文件解析

一、全局配置文件解析mybatis官方中文文档:https://mybatis.org/mybatis-3/zh/index.html本文主要分析的是setings设置 properties设置 typeAliases(类型别名)设置 typeHandlers(类型处理器)设置 环境配置(environments)设置 数据源(dataSource)设置 数据库厂商标识(databaseIdProvider)设置(移植性) 映射器(mappers)

2020-06-05 00:50:37 193

原创 Mybatis入门篇

一、Mybatis介绍与对比1、定义MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集。MyBatis 可以使用简单的 XML 或注解来配置和映射原生信息,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。mybatis项目地址:https://github.com/mybatis/mybatis-3

2020-06-04 17:22:11 142

原创 Java工厂模式

一、工厂模式定义介绍二、工厂模式的分类传统模式 简单工厂模式 工厂方法模式 抽象工厂模式1、传统模式(1)、传统方式的优缺点优点:比较好理解,简单易操作。 缺点:违反了设计模式的ocp原则,即对扩展开放,对修改关闭。即当我们给类增加新功能的时候,尽量不修改代码。(2)、具体实例分析实现类图第一步创建Pizza类,将该类做成一个抽象类/** * 将Pizza类做成抽象 */public abstract class Pizza { //

2020-06-02 11:24:02 166

原创 Java单例模式分析

一、单例模式的介绍与定义这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点。主要解决:一个全局使用的类频繁地创建与销毁。何时使用:当您想控制实例数目,节省系统资源的时候。如何解决:判断系统是否已经有这个单例,如果有则返回,如果没有则创建。关键代码:构

2020-06-01 16:08:31 162

原创 Java代理模式分析

一、代理模式的基本介绍1、代理模式的定义的好处,即特点代理模式:为一个对象提供一个替身,以控制对这个对象的访问,即通过代理对象访问目标对象。这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象功能。被代理的对象可以是远程对象、创建开销大的对象或需要安全控制的对象。代理模式有三种不同的模式:静态代理 动态代理(JDK代理、Cglib代理) JDK代理:基于接口的代理。 Cglib代理:可以在内...

2020-06-01 14:26:58 169

原创 Spring注解驱动(三)Bean自动装配

一、自动装配方式Spring利用依赖注入(DI),完成对ioc容器中各个组件的依赖关系赋值。自动装配的核心实现原理:调用AutowiredAnnotationBeanPostProcessor:后置处理器,来解析完成自动装配功能。@Autowired:spring定义的注解 @Resource(JSR250):基于Java规范的注解 @Inject(JSR330):基于Java规范的注解 自定义组件实现xxxAware的方式1、@Autowired:spring定义的注解

2020-05-31 16:31:36 201

原创 Spring注解驱动(二)生命周期和属性赋值

一、springbean的生命周期1、bean生命周期包含的内容模块bean的生命周期:bean创建-------初始化------销毁的过程bean创建:构造对象 单实例:在容器启动的时候创建对象。 多实例:在每次获取的时候创建对象。bean初始化:对象创建完成,并赋值好,调用初始化方法。bean销毁:单实例:容器关闭的时候销毁。 多实例:容器不会管理这个bean,...

2020-05-30 20:11:20 243

原创 Spring注解驱动(一)IOC容器注册方式

一、配置类我们想将一个类注册到IOC容器中首先要有个配置,一般有基于xml配置文件的方式和注解的方式。已知Person类package com.tan.bean;public class Person { private String name; private Integer age;}1、xml配置的方式(配置文件为:bean.xml)<bean id="person" class="com.tan.bean.Person"> &

2020-05-30 11:45:54 417

原创 MySql索引分析

一、MySql索引的介绍1、定义索引是帮助MySQL高效获取数据的数据结构,其本质是数据结构。简单的可理解为一句话:排好序的快速查找数据结构,用于排序和快速查找。一般来索引本身也很大,不可能全部存储在内存中,因此索引往往以索引文件的形式存储在磁盘上。2、常见疑问为啥都说,索引不能建立在频繁更新的字段上?原因是:因为你在平凡更新数据的时候,索引也同时会去维护操作数据的指向,这样我们在频繁更新数据的时候就会慢。3、索引的优势和劣势优势:提高数据检索的效率,降低数

2020-05-26 18:41:52 737

原创 Mysql锁机制相关分析

一、概述1、锁的定义:锁是协调计算机协调多个线程或线程并发访问某一资源的机制2、锁的分类:按照不同的维度划分:从对数据操作的的类型来分,分为,读锁和写锁。 从对数据操作的粒度来分,分为,表锁和行锁。3、锁操作:手动增加读表锁:lock table 表名称 read;手动增加写表锁:lock table 表名称write;查看是否加锁命令:show open tables查看会显示In_use,Name_locked, 当表加锁后In_use会显示1,表示.

2020-05-26 14:19:51 160

原创 SpringBoot+Dubbo项目整合搭建

一、Dubbo的实现架构图Dubbo内部组成机制:分为服务的提供者,Dubbo的容器,服务消费者,注册中心(zookeeper)、监控中心(Monitor)通信机制:使用netty通信服务器进行通信,netty是基于nio字符缓冲流来实现。二、环境的安装1、zookeeper环境搭建:下载地址:wgethttps://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.6.1/apache-zookeeper.

2020-05-25 12:06:31 7209 1

原创 RPC框架分析

一、RPC的介绍RPC(Remote Procedure Call Protocol)远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。简言之,RPC使得程序能够像访问本地系统资源一样,去访问远端系统资源。比较关键的一些方面包括:通讯协议、序列化、资源(接口)描述、服务框架、性能、语言支持等。简单的说,RPC就是从一台机器(客户端)上通过参数传递的方式调用另一台机器(服务器)上的一个函数或方法(可以统称为服务)并得到返回的结果。二、RPC.

2020-05-22 16:52:41 303

原创 NIO流原理解析

在 JDK1.4 之后,为了提高 Java IO 的效率,Java 又提供了一套 New IO(NIO),原因在于它相对于之前的 IO 类库是新增的。此外,旧的 IO 类库提供的 IO 方法是阻塞的,New IO 类库则让 Java 可支持非阻塞 IO,所以,更多的人喜欢称之为非阻塞 IO(Non-blocking IO)。一、NIO网络模型1、NIO网络模型猜想?Acceptor:接受客户端连接请求。 当客户端有连接请求之后,服务端会创建一个scoket,将它放入一个set集合中,.

2020-05-22 16:18:50 719

原创 synchronize底层原理分析

一、使用背景,为什么要使用synchronize?synchronize能干什么?1、Java多线程背景线程安全是并发编程中的重要关注点,应该注意到的是,造成线程安全问题的主要诱因有两点:一是存在共享数据(也称临界资源). 二是存在多条线程共同操作共享数据。因此为了解决这个问题,我们可能需要这样一个方案:当存在多个线程操作共享数据时,需要保证同一时刻有且只有一个线程在操作共享数据,其他线程必须等到该线程处理完数据后再进行,这种方式有个高尚的名称叫互斥锁,即能达到互斥访问目的的锁,也就是

2020-05-21 16:21:45 1032

原创 Java内存模型(JMM)底层原理

1、内存模型的概述Java内存模型(即Java Memory Model,简称JMM)本身是一种抽象的概念,并不真实存在,它描述的是一组规则或规范,通过这组规范定义了程序中各个变量(包括实例字段,静态字段和构成数组对象的元素)的访问方式。由于JVM运行程序的实体是线程,而每个线程创建时JVM都会为其创建一个工作内存(有些地方称为栈空间),用于存储线程私有的数据,而Java内存模型中规定所有变量都存储在主内存,主内存是共享内存区域,所有线程都可以访问,但线程对变量的操作(读取赋值等)必须在工作内存中

2020-05-20 18:18:56 608

原创 JVM底层原理相关分析

一、jvm介绍1、jvm是什么?JVM就是Java虚拟机(Java virtual machine)。JVM是JRE的一部分,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。JVM有自己完善的硬件架构,如处理器、堆栈、寄存器等,还具有相应的指令系统。2、jvm的类别(目前市场有3种虚拟机) 目前有三大Java虚拟机:HotSpot,oracle JRockit,IBM J9。主流HotSpot虚拟机,由sun公司研发。3、jvm的体系结构...

2020-05-20 14:46:17 744

原创 Java中间件的安装搭建

一、activeMQ相关安装下载地址:wget http://www.apache.org/dyn/closer.cgi?filename=/activemq/5.15.12/apache-activemq-5.15.12-bin.tar.gz&action=download启动activemq:1、如果报以下错误:[root@localhost bin]# ./activemq startINFO: Loading '/home/tank/soft/apache-activ

2020-05-10 16:39:47 341

原创 Java相关环境的安装搭建

一、jdk的安装jdk下载:1、通过官网直接下载:wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" https://download.oracle.com/otn-pub/java/jdk/8u201-b09/42970487e3af4f5aa5bca3f542482c60/jdk-8u201-linux-x64.tar.gz2、通过本地.

2020-05-10 16:38:48 253

原创 MySql优化(一)----优化分析

一般可以从以下几个方面进行优化正在上传…重新上传取消1)、sql及索引的优化是基石,是占比最大的一块,是日常开发中用到最多的优化点(要有一个结构良好的SQL,另外根据sql在表中建立些有效的索引[索引太多对我们写入操作也是 有一定的影响的,要适量要有效])。2)、sql的优化是建立在数据库表结构建立合理性基础上优化的(一般根据数据范式设计一个简单明了的表结构,尽量减少冗...

2020-05-10 15:58:09 411

原创 Java反射机制

简单的来说:1.通过new关键字创建对象操作对象,在编译时就已经确定。2.通过反射可以在程序运行过程中动态的操作对象,可以获得编译期无法获得的信息,动态操作最大限度发挥了java扩展性。

2020-04-16 16:53:24 180

原创 IDE神器使用技巧

下载安装下载地址:https://www.jetbrains.com/idea/download/#section=mac操作快捷键切换command+E:查看最近浏览的文件(应用场景,编辑窗口多的情况下)command+、或者command+shift+、:项目切换(多个项目切换使用)command+shift+A+搜索plugins+:安装插件精准搜索comma...

2020-04-14 18:49:44 448

原创 Java多线程

1

2020-04-10 16:31:51 208

空空如也

空空如也

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

TA关注的人

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