自定义博客皮肤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)
  • 收藏
  • 关注

原创 Spring5.2.x源码下载及编译

前言学习Spring源码的重要前提,则是需要去编译源码到本地环境,这样则是方便我们在本地环境添加注释、断点调试、查看类图等,不过相信很多小伙伴在编译Spring源码的过程中相继遇到了很多困难而导致放弃学习,而本文就是来阐述如何正确编译Spring的源码,最好网速一定要好,否则编译源码会让小伙伴们体验极差。Spring源码编译环境环境及版本介绍JDK环境:1.8及以上Spring版本:作者...

2020-12-10 23:27:41 779 4

原创 Spring5.0源码深度解析之Spring IOC加载

前言Spring 最重要的概念是 IOC 和 AOP,本篇文章其实就是要带领大家来分析下 Spring 的 IOC 容器。Demo:配置类/** * @Author: klm * @Date: 2020/11/6 23:46 * @Description: */@Configuration@ComponentScan("com.dream.sunny")public clas...

2020-12-03 18:30:07 301

原创 JVM内存分配机制之栈上分配与TLAB的区别

前言在java开发中,我们普遍认知中,new出的对象是直接分配到堆空间中,而实际情况并非如此,其实大家伙可以思考一下,无论方法的生命周期长与短,只要new的对象就存放在堆中,那么这样只会对jvm的gc产生一个比较大的负担而前几天在看到jvm调优书中有说到,new出来的对象并非所有都存在堆内存中,其实还有其他另外两个地方可以进行存储new出的对象,称之为栈上分配和TLAB栈上分配为什么需要栈...

2020-11-20 00:45:43 511

原创 并发情况下,单例模式之双重检验锁陷阱

在我前面有写过一篇关于单例模式的几种创建的文章,最近在看多线程的时候,发现如果使用双重检验锁则可能会发生问题,接下来看我细细道来单例模式的几种创建方式文章地址:https://www.jianshu.com/p/8ec72e016275首先看一段代码public class SingletonV4 { private static SingletonV4 singletonV4;...

2020-10-09 14:32:03 313

原创 Mysql几种join连接算法

概述相信有开发或DBA小伙伴,对于mysql处理多表关联方式或者说性能方面一直不太满意,对于开发提交的join查询,一般都是比较抗拒的,从而建议将join进行拆分,避免join带来的性能问题,同时也避免了程序与数据库带来网络开销的问题5.5 版本之前,MySQL本身只支持一种表间关联方式,就是嵌套循环(Nested Loop Join)。如果关联表的数据量很大,则join关联的执行时间会非常长...

2020-09-15 18:50:46 707 1

原创 看完这篇文章,99%的人都会使用Mysql Explain工具

Explain工具介绍EXPLAIN是MySQl必不可少的一个分析工具,主要用来测试sql语句的性能及对sql语句的优化,或者说模拟优化器执行SQL语句。注意:本文基于mysql5.7进行操作,各个版本的mysql使用Explan会有微小的差异前期掌握点:什么是mysql的二级索引mysql中每个表都有一个聚簇索引(clustered index ),除此之外的表上的每个非聚簇索引...

2020-09-11 09:07:26 59

原创 一文带你深入理解Mysql索引底层数据结构与算法

理解索引的特性索引是帮助Mysql高效获取数据排好序的数据结构索引是存储在文件里面的索引的各种存储结构及优缺点首先看一下,在数据库没有加索引的情况下,SQL中的where语句是如何查找目标记录的,首先看到下图的Col2字段,如果我们要查找where col2 = 89的记录,我们在没有加索引的情况下,数据库默认会从上往下按顺序查找记录,那么将会查找5次才能查到数据,如果对Col2字段...

2020-09-09 22:29:24 93

原创 SpringBootAdmin2.0实现微服务应用监控

Spring Boot Admin 监控介绍Spring Boot Admin是一个Web应用,用于管理和监视Spring Boot应用程序的运行状态。每个Spring Boot应用程序都被视为客户端并注册到管理服务器。背后的数据采集是由Spring Boot Actuator端点提供。Spring Boot Admin 是由服务端和客户端组成在 Spring Boot 项目中,S...

2020-08-30 13:34:51 278

原创 SpringBoot整合Apollo看这篇文章基本够了

简介Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。Apollo和Spring Cloud Config对比通过对比,可以看出,生产环境中 Apollo 相比 Spring Cloud Config 更具有优势一些。安装 Apol...

2020-08-29 14:51:07 573

原创 CentOS7安装部署Apollo分布式配置管理系统

Apollo简介Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境,不同分配的配置,配置修改后能够实时推送到应用端,并且具有规范的权限,流程治理等特性,适用于微服务配置管理场景。Apollo背景随着程序功能的日益复杂,程序的配置日益增多:各种功能的开关、参数的配置、服务器的地址……对程序配置的期望值也越来越高:配置修改后实时生效,灰度发布,分环境、分...

2020-08-23 13:59:49 501

原创 基于【策略模式】设计多渠道发送消息

前言:设计模式源于生活策略模式的基本概念策略模式将可变的部分从程序中抽象分离成算法接口,在该接口下分别封装一系列算法实现,并使他们可以相互替换,从而导致客户端程序独立于算法的改变。策略模式应用场景1.解决我多重if条件判断2.有共同行为,但是有不同的业务逻辑(例如:支付模式[支持多种支付模式],直播线路模式[支持多种线路切换],消息发送渠道模式[支持多种消息渠道发送])策略模式...

2020-08-15 21:38:22 925

原创 基于责任链模式实现网关权限框架

前言:设计模式源于生活责任链基本概念客户端发出一个请求,链上的对象都有机会来处理这一请求,而客户端不需要知道谁是具体的处理对象。这样就实现了请求者和接受者之间的解耦,并且在客户端可以实现动态的组合职责链。使编程更有灵活性。责任链定义使多个对象都有机会处理请求,从而避免了请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它为止。其过程实际...

2020-08-08 21:29:40 294

原创 由浅入深之层层升级探索单例模式

前言:设计模式源于生活单例的基本概念单例模式确保某各类只有一个实例,而且自行实例化并向整个系统提供这个实例。选择单例模式就是为了避免不一致状态单例模式特点1、单例类只能有一个实例。2、单例类必须自己创建自己唯一的实例。3、单例类必须给所有其它对象提供这一实例。单例模式的优缺点1、单例类只有一个实例2、共享资源,全局使用3、节省创建时间,提高性能单例模式应用场景...

2020-08-05 09:04:28 75

原创 基于【观察者设计模式】设计异步多渠道群发框架

前言:设计模式源于生活观察者基本概念观察者模式,又可以称之为发布-订阅模式,观察者,顾名思义,就是一个监听者,类似监听器的存在,一旦被观察/监听的目标发生的情况,就会被监听者发现,这么想来目标发生情况到观察者知道情况,其实是由目标将情况发送到观察者的白话文:当一个对象发生改变的时候,可以通知其他所有对象概念很清晰,举个栗子来理解一下观察者模式的含义,我们都在抖音关注了某位大咖的时候,每...

2020-07-23 09:35:32 177

原创 Mybatis深入源码分析之基于【装饰设计模式】纯手写实现多级缓存框架

前言:设计模式源于生活什么是装饰模式在不改变原有对象的基础上附加功能,相比生成子类更灵活。装饰者模式应用场景Mybatis缓存,过滤器,网关控制,P2P分控审批装饰者模式定义(1)抽象组件:定义一个抽象接口,来规范准备附加功能的类(2)具体组件:将要被附加功能的类,实现抽象构件角色接口(3)抽象装饰者:持有对具体构件角色的引用并定义与抽象构件角色一致的接口(4)具体装饰...

2020-07-19 15:53:36 124

原创 浅谈Java【代理设计模式】以及原理解刨

前言:设计模式源于生活什么是代理模式为其他对象提供一种代理,控制对这个对象的访问白话文:为某个对象实现动态增强为什么要使用代理模式中介隔离:在某些情况下,一个客户类不想或不能直接引用一个委托对象,而代理类对象可以在客户类与委托类之间起到中介的作用,其特征代理类与委托类实现的是相同接口开闭原则,增加功能:代理类除了是客户类和委托类的中介之外,我们还可以通过给代理类增加额外的功...

2020-07-11 11:00:31 127

原创 es集群+elk搭建+kafka搭建分布式日志收集系统

前提准备:1.ES+kibana+logstash 一台虚拟机配置运行内存3G,由于本人电脑资源有限开了2台2.kafka+zookeeper 一台虚拟机,运行内存1G共7个G原理图:更加详细的原理elk原理可以看我之前的一篇文章,有专门说到,这里就不说了一、安装jdk1.安装之前先检查一下系统有没有自带open-jdk命令:rpm -qa |grep javar...

2020-07-06 23:17:47 1126

原创 基于阿里巴巴Canal框架,kafka监听协议实现Mysql与ES数据同步

准备找到我们所需的安装包文件关于Apache的相关包,都可以在这个网站找到啦http://mirrors.hust.edu.cn/apache/安装JDK此处略过安装zookeeper下载源码包,并解压wget http://mirrors.hust.edu.cn/apache/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar...

2020-07-05 09:35:30 411

原创 ELK日志收集原理+es集群+elk搭建+本地目录文件读取,搭建分布式日志收集系统

ELK分布式日志收集系统介绍1.ElasticSearch是一个基于Lucene的开源分布式搜索服务器。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是第二流行...

2020-07-02 00:15:43 769

原创 基于docker 安装elasticsearch + kibana + ik分词器(6.7.2版本)

本文基于Docker进行安装,如何安装docker本文就不介绍了,可以参考我之前的文章注意要点:es和kabana以及ik分词器建议都要同一个版本的,否则可能会出现兼容性等问题,解决比较麻烦第一步:通过docker下载es和kabana的镜像下载的时长大概15分钟左右,如果配置了阿里云镜像加速的话,大概几分钟就能搞定docker pull elasticsearch:6.7....

2020-06-23 12:48:10 653

原创 JVM调优,程序员必须掌握的知识

调优之前,得知道什么样的对象会进入老年代1.大对象(当survivor区产生了大对象,则会进入老年代)2.长期存活对象(对象一直在被引用着,年龄大于15,则会进入老年代)3.空间担保对象(当瞬间新生代的空间满了,但是对象都被引用着,这个时候就会对象转到老年代中去)4.动态年龄对象(当survivor区,对应的对象年龄如果50%大于survivor区的平均年龄则进入老年代)什么时候会发...

2020-06-19 15:25:00 163

原创 JVM垃圾回收之垃圾回收器,程序员必须掌握的知识

垃圾回收器分为哪几种如果说垃圾回收算法是内存回收的方法论,那么垃圾收集器就是具体实现。jvm会结合针对不同的场景及用户的配置使用不同的收集器。新生代收集器Serial、ParNew、Parallel Scavenge老年代收集器Serial Old、Parallel Old、CMS收集器特殊收集器G1收集器[新型,不在年轻、老年代范畴内新生代收集器Serial收集器...

2020-06-19 15:23:54 133

原创 jvm垃圾回收之引用计数算法和可达性分析算法(判断对象是否存活算法

引用计数算法在java中是通过引用来和对象进行关联的,也就是说如果要操作对象,必须通过引用来进行。那么很显然一个简单的办法就是通过引用计数来判断一个对象是否可以被回收。如果一个对象没有任何引用与之关联,则说明该对象基本不太可能在其他地方被使用到,那么这个对象就成为可被回收的对象了。这种方式成为引用计数法。什么是引用计数算法:给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值加1;...

2020-06-18 15:25:27 255

原创 JVM内存逃逸与栈上分配,程序员必须掌握的知识

逃逸分析内存逃逸主要是对象的动态作用域的改变而引起的,故而内存逃逸的分析就是分析对象的动态作用域。发生逃逸行为的情况分为两种:方法逃逸和线程逃逸方法逃逸当方法创建了一个对象之后,这个对象被外部方法所调用,这个时候方法运行结束要进行GC时,本该方法的对象被回收,却发现该对象还存活着,没法回收,则称为 "方法逃逸"简单来说:就是当前方法创建的对象,本该是当前方法的栈帧所管理,却被调用方所使用...

2020-06-18 15:19:41 106

原创 一文搞懂JVM内存结构,程序员必须掌握的知识

jvm内存结构组成Java内存模型(Java Memory Model ,JMM)就是一种符合内存模型规范的,屏蔽了各种硬件和操作系统的访问差异的,保证了Java程序在各种平台下对内存的访问都能保证效果一致的机制及规范。简要言之,jmm是jvm的一种规范,定义了jvm的内存模型。它屏蔽了各种硬件和操作系统的访问差异,不像c那样直接访问硬件内存,相对安全很多,它的主要目的是解决由于多线程通过共...

2020-06-18 15:09:40 90

原创 Sentinel + SpringBoot 基于本地文件模式实现规则持久化

Sentinel基本概念在此文章就不进行介绍了,没有了解过的,可以参考我的其他文章有介绍Sentinel是解决什么问题的首先去Sentinel官网上,将它的源码进行下载,因为在它源码上进行修改,当然如果觉得源码不方便,也可以直接下载它官网上的jar包Sentinel官方地址https://github.com/alibaba/Sentinel/wiki/%E4%BB%8B%E7%BB%8...

2020-06-18 14:47:43 766

原创 基于Docker部署GitLab环境搭建,以及项目管理

我是在本地虚拟机进行搭建,所以建议虚拟机内存2G以上,且注意一定要配置阿里云加速,否则下载很慢(如何配置本文章就不演示了)一、通过docker下载gitlab镜像文件docker pull beginor/gitlab-ce:11.0.1-ce.0正在下载中界面二、查看docker镜像仓库docker images可以看到,我们已经下载了GitLab到我们镜像仓库了...

2020-06-15 13:37:10 489

原创 基于阿里巴巴Canal框架,kafka监听协议实现Mysql与Redis数据同步

准备找到我们所需的安装包文件关于Apache的相关包,都可以在这个网站找到啦http://mirrors.hust.edu.cn/apache/安装JDK此处略过安装zookeeper下载源码包,并解压wget http://mirrors.hust.edu.cn/apache/zookeeper/zookeeper-3.4.14/zookeeper-3.4.14.tar...

2020-06-15 13:14:07 238 1

原创 基于阿里巴巴Canal框架,TCP协议实现监听Mysql数据变化

在前一篇文章有提到过Canal的原理,所以这里就不做多叙述Canal是伪装成Mysql的从服务,监听Mysql主服务的binlog日志,实现数据同步,所以我们需要配置开启允许binlog日志主从同步编辑mysql的配置文件vim /etc/my.cnf添加我标记的这段配置log-bin=/var/lib/mysql/mysql-bin #日志记录到指定位置binlog-format...

2020-06-15 11:54:06 435

原创 Canal的基本介绍及原理

Canal的介绍Canal是基于Mysql二进制的高性能数据同步系统,Canal在阿里巴巴集团中被广泛使用,以提供可靠的低延迟增量数据管道(白话文:其实就是根据mysql的biglog日志,进行增量同步数据)Canal的背景早期,阿里巴巴B2B公司需要在美国和中国杭州之间同步服务器的数据。先前的数据库同步机制是基于trigger以获得增量更新的。从2010年开始,阿里巴巴集团开始使用数...

2020-06-15 11:51:42 449

原创 基于Linux安装Mysql5.7

一、先检查系统是否装有mysqlrpm -qa | grep mysql如下图,没有显示任何结果,则代表之前系统没有装过mysql二、下载mysql的repo源wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm如果报错: -bash: wget: 未找到命令,则安装插件yum -y insta...

2020-06-11 11:42:19 69

空空如也

空空如也

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

TA关注的人

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