自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

任我行哟的博客

生命不息奋斗不止。

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

转载 MySQL中explain执行计划中额外信息字段(Extra)详解

SQL执行计划是经过优化器决策,产生的SQL在数据库内部执行的访问路径计划;由如下语法得到:explain select col1,col2 from t1..;desc select col1,col2 from t1..;1 2理解输出各个列的含义id:每个select子句的标识id select_type:select语句的类型 table:当前表名 显示查询将访问的分区,如果你的查询是基于分区表 type:当前表内访问方式 possible_keys:可能使用到的索引

2021-02-03 16:33:41 2499

原创 XXL-JOB任务执行器源码解析

一:XXL-JOB任务执行器源码思路1、首先第一件事不要虚就是干,DOWN下源码之后,发现任务执行器和我们写的项目没有什么太大的区别,也是基于SpringBoot,然后思考一下,万物都有生命周期,那任务执行器创建以及初始化是从哪里开始的呢?把Module下的文件夹一个个打开,发现就那么几个类。所以XXLJOB的源码相对其他框架来说其实很简单的。2、这不就发现任务执行器是在这里被创建的吗3、点开XxlJobSpringExecutor看看4、通过该类发现核心代...

2020-12-28 10:31:58 6973

原创 XXL-JOB简述

一:整体架构XXL-JOB是一个分布式任务调度平台。它主要分为两部分:调度中心,任务执行器。如下图二:什么是任务执行器上图1处MODULE,就是任务执行器,类似于我们基于@EnableScheduling 注解编写的定时任务代码。三:什么是调度中心上图1处MODULE,就是任务调度器器,可以将它比做Eureka,任务执行器将节点元数据信息注册到调度中心,由调度中心根据我们指定的策略去进行调度任务执行器执行定时任务代码。四:如何使用XXLJOB1、码云上down下代码2、在项目的目录下

2020-12-28 10:24:48 3860 2

原创 设计原则简述

一:如何评价代码从可维护性、可读性、可扩展性评价代码的质量。可维护性:(别人在你代码上改bug不会花费大量的脑细胞担心改了之后引来更多的bug)可读性:(PR的时候能够明白你代码的思路)可扩展性:(迭代添加逻辑的时候易于落地)二:如何将可维护性、可读性、可扩展性落地要落地的话,需要有扎实的设计思想、设计原则、重构经验。设计思想:面向对象设计思想,以类或者对象为基本单位,基于封装、抽象、继承、多态四大特性进行编码。封装:通过private、protected、public.

2020-12-16 14:49:38 1370

原创 LinkedList源码

LinkedList源码一:LinkedList底层数据结构LinkedList底层是基于双向链表实现。二:LinkedList源码2.1 默认构造方法什么都没有 /** * Pointer to first node. * Invariant: (first == null && last == null) || * (first.prev == null && first.item != null) */transient No

2020-12-15 11:37:28 115

原创 ArrayList源码

ArrayList源码一:ArrayList底层结构ArrayList底层结构是基于数组实现的。二:ArrayList源码2.1:默认构造方法是一个空数组 private static final int DEFAULT_CAPACITY = 10; private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {}; public ArrayList() { this.elementData = DEFAULT

2020-12-15 11:32:12 82

原创 ansible安装

Ansible安装一:安装Yumwget http://yum.baseurl.org/download/3.2/yum-3.2.28.tar.gztar xvf yum-3.2.28.tar.gz cd yum-3.2.28 ./yummain.py install yum yum check-update yum update 二:安装Ansibleyum install ansibleansible --version三:PlayBook 编排待完成

2020-12-10 17:53:54 79

原创 如何进行系统压测,JVM性能调优

1、使用Jmeter或者阿里云付费压测2、压测观察机器带宽、CPU、内存总体使用率,JVM进程CPU、内存使用率3、jstat -gc pid 1000 100 观察对象回收状况、与gc频率。4、dump内存快照,看是否存在JVM参数设置不合理导致频繁full gc、还是代码存在内存泄露。5、进行JVM参数调优或者代码优化。...

2020-12-09 15:23:38 615

原创 线上系统OOM如何排查

线上系统OOM排查1、使用top命令看一下线上的CPU、内存是否正常。2、定位异常进程,看日志。3、如果是OOM,用jstat -gc pid 1000 100(每秒)监控JVM内存运行状况和gc频率。4、jmap -dump:live,format=b,file=dump3.hprof pid ,使用jmap dump内存快照。5、使用MAT工具进行分析。...

2020-12-09 15:14:29 2571

原创 JMeter使用

JMeter使用一:JMeter用来干嘛的二:JMeter使用一、下载二、准备工作三、使用JMeter测试HTTP3.1、创建测试计划3.2、配置参数3.3、测试四、在JMeter中使用变量一:JMeter用来干嘛的Jmeter用来进行压测,想要对系统进行优化,通过压测从带宽、CPU、内存、磁盘、系统架构、JVM等角度分析,一步一步调参优化。二:JMeter使用一、下载可以自行到官网找到下载链接或者使用下面的链接进行下载:http://mirror.bit.edu.cn/apache//jmet

2020-12-08 18:10:59 284 1

原创 深入理解Seata流程

一:概述 Seata是阿里开源的一个分布式事务解决方案,主要用的是基于二阶段提交思想的AT模式,通过注解实现非业务侵入。在看Seata源码前,首先要做的是理解它的原理。毕竟代码是基于原理具象化,而原理是代码的抽象化!二:原理-二阶段提交 二阶段提交有三个角色: 1、TC(Transaction Coordinator),事务协调者,在源码中Seata Server...

2019-12-20 12:19:41 1810

原创 程序包io.seata.codec.protobuf.generated不存在

程序包io.seata.codec.protobuf.generated不存在,导致io.seata.server启动不了本地执行下mvn clean install -DskipTests=true

2019-12-19 13:23:54 1369 2

原创 三分钟理解:什么是XSS与CSRF攻击

这两个关键词也是老生常谈了,但是还总是容易让人忘记与搞混~。XSS与CSRF这两个关键词时常被拉出来一起比较(尤其是面试),我在这里也在写一篇扫盲文,也帮自己整理一下知识脉络。这篇文章会用尽量“人话”的语言解释这二个关键词,让同学们对跨域,安全有更深一层次的了解。国际惯例,先上一下维基百科:XSS:跨站脚本(Cross-site scripting,通常简称为XSS)是一种网站应用程...

2019-12-11 10:07:39 583

原创 Redis配置文件参数中文详解

Redis是一个高性能的key-value数据库。 Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可以再次加载进行使用。 Redis不仅仅支持简单的key-value类型的数据,同时还提供list,set,zset,hash等数据结构的存储。 Redis支持数据的备份,即master-slave模式的数据备份。 为了更好的使用redis,我们需要详细的了...

2019-11-14 10:52:22 302

原创 Docker部署-Redis Sentinel(哨兵集群)不能实现自动故障转移

一:slave配置文件加参数:slave-announce-ip 192.168.15.117slave-announce-port 6372二:sentinel配置文件加参数:sentinel announce-ip 192.168.1.10sentinel announce-port 26379解释,因为sentinel上报的元数据信息是docker容器内部ip与po...

2019-11-14 10:49:49 1368

原创 一:IDEA之Maven构建微服务项目父子模块

总共两部:创建parent项目、创建子模块项目创建parent项目1.打开IDEA,注意这里不要勾选模板,用模板创建过maven项目的小伙伴都知道模板创建项目非常慢,所以这里不要选模板,需要的文件夹我们后面自己来创建就可以了。所以这个页面直接点击下一步。2.填入坐标和模块的名字,如下:3.设置工程的路径然后点击finish:4.OK,这样一个project就创建好了,...

2019-09-12 16:11:55 2959

原创 三分钟理解:什么是红黑树

一:什么是红黑树 红黑树其实是一个平衡性被弱化的二叉搜索树,我们带着问题来看文章。 1、什么是平衡树什么又是二叉搜索树呢? 2、为什么红黑树的平衡性要被弱化? 3、为什么Java中HashMap,TreeMap底层结构要使用红黑树呢? 平衡树的概念:任意节点其左子树和右子树的高度差不能大于1(不了解树的概念的同学可以看上篇文章) 二叉搜索树概念:任意...

2019-08-10 11:33:56 419

原创 三分钟理解:什么是树

一:什么是树如上图所示,该结构就是树。上图所示不是树结构,因为兄弟节点是相连的,什么是兄弟节点呢,看下文解释 如上图A节点就是B节点的父节点,B节点是A节点的子节点。B、C、D这三个节点的父节点是同一个节点,所以它们之间互称为兄弟节点。我们把没有 父节点的节点叫作根节点,也就是图中的节点E。我们把没有子节点的节点叫作叶子节点或者叶节点,比如图中的G、H、I、J、K、L都...

2019-08-10 11:31:46 286

原创 三分钟理解:Java中什么是移位运算符

一:什么是移位运算符 在Java中,最高位代表符号位(0为正数,1为负数), 0...010000(...表示中间省略了25个0)为正16,1...010000为负16。 <<(带符号左移) ,>>(带符号右移),>>>(不带符号右移)。 int 16 可以表示为 0...010000 (...表示中间省略了25个0) 1...

2019-08-08 16:16:58 222

原创 三分钟理解:为什么重写equals就必须重写 hashCode

一:什么是equals、hashCode equals( ),hashCode( )都属于Object类的方法,而在Java中所有的类都继承Object类。在Object类中 :1、不被重写的equals方法是判断两个引用是否指向堆内存中的同一块地址2、不被重写的hashCode是根据内存地址计算出hash值。 所以这个时候我们需要重写equals方法,来满足我们的业...

2019-08-07 14:40:35 1935

原创 多线程-线程池深入分析

一:什么是线程池 在Java中new一个线程,除了在堆内存开辟一份空间、初始化一个对象外,还需要进行系统调用,操作系统为线程分配系统资源,当频繁的创建和销毁线程,导致的系统开销非常大,因此使用线程池对线程进行复用可以节省系统资源的开销。二:线程池的生命周期线程有五种状态:新建,就绪,运行,阻塞,死亡,线程池同样有五种状态:Running, SHUTDOWN, STOP, TIDYI...

2019-08-05 17:09:29 116

原创 JUC-AQS框架

一:什么是AQS AQS(AbstractQueuedSynchronizer)是JUC中的基础框架,例如ReentrantLock,CountDownLatch等组件都是基于AQS实现同步控制。二:AQS独占式获取和释放同步状态在了解AQS中线程如何获取同步状态前,需要了解Node类, AQS内部由一个双向队列实现对同步状态的管理,可以看成多生产者单消费者模型,当线程没有...

2019-08-05 13:29:01 250

原创 多线程-线程概念

一:进程与线程的区别 进程是资源分配的最小单位,线程是资源调度的最小单位。一个程序的生命周期,对应着进程的创建,运行,中止。进程拥有独立的地址空间,同一进程下的多个线程共享进程的地址空间。二:线程的生命周期如上图所示,线程有6个状态:分别是新建状态,就绪状态,运行状态,阻塞状态,等待状态,超时等待状态,中止状态。 新建状态:当new一个线程对象时,此时线程出于新建状...

2019-08-04 17:21:19 83

原创 生产环境 接口优化思路

事情起因,看了下日志,某接口响应时间达到了10s,吓了一跳,于是捋下思路,不能慌思考了下首先看业务代码(是不是代码写的有问题)->explain sql语句 查看是否没走索引(目的 提高查询效率 减少磁盘io等待时间) -> sql查出来的数据 是否垃圾字段特别多(目的 充分利用带宽 减少网络io等待时间)最后发现sql优化并不一定都是索引的问题,也有可能是人为查了许...

2019-05-16 17:33:19 411

原创 多线程-synchronized深入分析

一:什么是synchronized synchronized是java关键字,初学者接触多线程,为了保证线程安全,接触的最多的应该是synchronized。 synchronized可以保证方法、代码块在运行时,同一时刻只有一个线程可以执行,基于happens-before的监视器锁规则可以推断出共享变量的可见性(happens-before规则概念前文有写)。 可以把s...

2019-05-14 15:45:56 110

原创 多线程-JMM从底层解决线程安全

一:什么是JMM 从字面上理解JMM(Java Memory model)就是java定义了一个底层内存操作的一个抽象。 当多线程同时对共享变量进行操作时,会存在原子性,可见性,有序性问题。JMM抽象定义了每个线程有自己的本地内存,共享变量存在主内存中,JMM通过控制主内存与线程的本地内存的交互来保证线程之间的可见性。 通过抽象JMM可以让程序员使用JMM定义的规则合理的按需禁用...

2019-05-09 15:57:27 434

原创 多线程-出现非线程安全的底层原因

一:什么是非线程安全 一提到多线程,有经验的程序员就会考虑线程安全问题,那在什么情况下会出现线程安全的问题呢? 很多人可以轻而易举的总结出:当多个线程同时竞争共享变量时会出现线程安全问题。 但是对于底层为什么会出现这种情况却不清楚了。二:非线程安全的源头 出现非线程安全的源头归因于:原子性、可见性、有序性。 2.1:导致原子性的源头: 很多初学者会认为i+...

2019-05-08 11:27:10 460

原创 三分钟理解Spring源码-spring开篇(下)

授人以鱼不如授人以渔,《三分钟理解Spring源码》专栏教你如何学习、思考、阅读Spring框架,并应对其它开源框架不再畏惧。这篇文章就一句话,要想好好啃源码,去Github,或者网上找资源,把Spring源码先下载下来,后面的文章会介绍看源码思路、如何找入口、如何找主线。(你要只想面试快速提高,这篇文章可以忽略— —,直接关注后面更新的文章)介绍两个IDEA分析源码小技巧,会分析继承结构...

2018-11-27 23:44:58 478

原创 三分钟理解Spring源码-spring开篇(中)

授人以鱼不如授人以渔,《三分钟理解Spring源码》专栏教你如何学习、思考、阅读Spring框架,并应对其它开源框架不再畏惧。接着上篇的文章讲,上篇的文章讲述了什么是IOC,这篇讲述什么又是AOP? 一样的在看这篇文章之前,大家不妨先花点时间思考一下。1、AOP的设计原理1:在Spring中,AOP的实现有两种方式,如果一个 Bean 是基于接口实现的,则Spring会采用JDK的动态...

2018-11-24 21:58:58 864

原创 三分钟理解Spring源码-spring开篇(上)

授人以鱼不如授人以渔,《三分钟理解Spring源码》专栏教你如何学习、思考、阅读Spring框架,并应对其它开源框架不再畏惧。 做Java开发的朋友基本都是每天接触Spring框架,说到Spring,我相信所有人张开就可以来,Spring不就是IOC,AOP嘛,我的大部分项目都是基于Spring开发的。对,没错,现在大家思考一下什么是IOC?什么又是AOP呢?如果看了这个提问后完全没...

2018-11-21 23:20:16 742

原创 Mybatis防止sql注入原理

SQL 注入是一种代码注入技术,用于攻击数据驱动的应用,恶意的SQL 语句被插入到执行的实体字段中(例如,为了转储数据库内容给攻击者)。[摘自] SQL注入 - 维基百科SQL注入,大家都不陌生,是一种常见的攻击方式。攻击者在界面的表单信息或URL上输入一些奇怪的SQL片段(例如“或'1'='1'”这样的语句),有可能入侵参数检验不足的应用程序。所以,在我们的应用中需要做一些,来防备这...

2018-11-02 10:49:59 8737

原创 深入浅出-Spring事务

1 初步理解理解事务之前,先讲一个你日常生活中最常干的事:取钱。 比如你去ATM机取1000块钱,大体有两个步骤:首先输入密码金额,银行卡扣掉1000元钱;然后ATM出1000元钱。这两个步骤必须是要么都执行要么都不执行。如果银行卡扣除了1000块但是ATM出钱失败的话,你将会损失1000元;如果银行卡扣钱失败但是ATM却出了1000块,那么银行将损失1000元。所以,如果一个步骤成功另一个...

2018-10-31 17:29:27 151

原创 深入浅出-Redis理论

简单来说 Redis 就是一个数据库,不过与传统数据库不同的是 Redis 的数据是存在内存中的,所以存写速度非常快,因此 Redis 被广泛应用于缓存方向。 另外,Redis 也经常用来做分布式锁。Redis 提供了多种数据类型来支持不同的业务场景。 除此之外,Redis 支持事务 、持久化、LUA 脚本、LRU 驱动事件、多种集群方案。 本文将从以下几个方面全面解读 R...

2018-10-22 12:16:51 210

原创 spring cloud config 动态刷新配置 /bus/refresh 404 not found

上一篇学习了spring cloud config的基本使用,但发现有个问题,就是每次更改配置后,都需要重启服务才能更新配置,这样肯定是不行的。在上网查资料了解后,spring cloud支持通过AMQP来实现配置的实时更新。一,安装的的RabbitMQ安装RabbitMQ二,改造配置服务器和客户端,一2.1在配置服务器和客户端一两个模块下的POM文件添加&lt;depend...

2018-10-17 23:40:35 5761

原创 Mac下RabbitMQ安装

1.使用brew来安装 RabbitMQ//跟新brewbrew update//安装rabbitmqbrew install rabbitmq2.RabbitMQ 的启动cd  /usr/local/sbin./rabbitmq-server 3.RabbitMQ 启动插件待RabbitMQ 的启动完毕之后,另起终端进入cd  /usr/local/sbin 。启动...

2018-10-15 20:54:36 338

转载 如何实现一个简单的RPC

RPC的实现原理正如上一讲所说,RPC主要是为了解决的两个问题:解决分布式系统中,服务之间的调用问题。 远程调用时,要能够像本地调用一样方便,让调用者感知不到远程调用的逻辑。还是以计算器Calculator为例,如果实现类CalculatorImpl是放在本地的,那么直接调用即可: 现在系统变成分布式了,CalculatorImpl和调用方不在同一个地址空间,那么就必须要进...

2018-10-12 22:44:17 107

转载 什么是RPC

如何科学的解释RPC说起RPC,就不能不提到分布式,这个促使RPC诞生的领域。假设你有一个计算器接口,Calculator,以及它的实现类CalculatorImpl,那么在系统还是单体应用时,你要调用Calculator的add方法来执行一个加运算,直接new一个CalculatorImpl,然后调用add方法就行了,这其实就是非常普通的本地函数调用,因为在同一个地址空间,或者说在同一块...

2018-10-12 22:43:04 136

原创 RestTemplate 深度解析

一、概述本文主要介绍 Spring Web 模块中的 RestTemplate 组件的原理、优缺点、以及如何扩展以满足各种需求。在介绍 RestTemplate 之前,我们先来谈谈 HTTP Client,谈谈选择一个优秀的 HTTP Client 实现的的重要性,以及一个优秀的 HTTP Client 应该具备哪些特性。在 Java 社区中,HTTP Client 主要有 JDK 的...

2018-10-11 20:51:31 3561

原创 Quartz时间设置

每天凌晨2点 0 0 2 * * ?和每天隔一小时 0 * */1 * * ?例1:每隔5秒执行一次:*/5 * * * * ?例2:每隔5分执行一次:0 */5 * * * ?在26分、29分、33分执行一次:0 26,29,33 * * * ?例3:每天半夜12点30分执行一次:0 30 0 * * ? (注意日期域为0不是24)每天凌晨1点执行一次:0 0 1 * * ?...

2018-10-08 19:50:26 4016

原创 springboot重定向中文参数乱码

对中文参数进行编码即可解决乱码:&amp;str=URLEncoder.encode(“中文”)

2018-09-28 20:13:53 1505

空空如也

空空如也

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

TA关注的人

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