- 博客(60)
- 资源 (3)
- 收藏
- 关注
原创 jvm双亲委派模型, 你学废了吗?
前言在说双亲委派模型之前, 我们必须要知道三层类加载器: 启动类加载器, 扩展类加载器, 应用程序类加载器(下面说的仅限于jdk8以及之前版本, 1.9JDK在扩展类加载器这里有些变化)启动类加载器这个类加载器主要加载你JDK安装路径下lib文件夹中的jar包, 当然也不是只要把jar包放到这个目录下就会被启动类加载器所加载, jvm只加载它都能识别的类库, 启动类加载器是由C++实现的扩展类加载器这个类加载器主要加载你JDK安装路径下lib\ext文件夹中的jar包, 扩折类加载器是有java
2020-07-20 10:56:44 291 3
原创 jvm 类加载的过程, 你学废了吗?
前言我们在编写完成java代码时, 会把java文件编译成class文件, 然后jvm才能执行, 可是jvm是怎么执行这个过程的呢, 如果你还不清楚是怎样的一个加载过程, 相信你看完这篇博客就学废了。类加载过程类加载过程大概分为5个阶段: 加载, 验证, 准备, 解析, 初始化加载阶段这个加载完成了三件事通过类的全限定类名获取类的二进制流将字节流中的静态存储结构转化为方法区的运行时数据结构, 就是把一个静态的变量、类信息等存储起来生成一个java.lang.Class对象, 作为这个类
2020-07-13 12:02:30 256 2
原创 jvm垃圾收集器你学废了吗(四)
前言前面三篇文章讲了8种垃圾收集器分别是Serial、ParNew、Parallel Scavenge、Serial Old、Parallel Old、CMS、G1、Shenandoah,今天我们来说一下ZGC收集器,ZGC也是一款低延迟收集器,这款收集器也是非常的豪横,下面我们看一下它有什么可豪横的!...
2020-07-06 08:21:06 270 1
原创 jvm垃圾收集器你学废了吗(三)
前言第一篇文章说了Serial、ParNew、Parallel Scavenge、Serial Old、Parallel Old、CMS(传送门)这六种收集器,第二篇文章说了经典的G1收集器(传送门),今天我们还要单独的说一下低延迟收集器Shenandoah,Shenandoah收集器是一款只有OpenJDk才会包含的,这时候问题来了 什么是OpenJDK和OracleJDk呢?OpenJDK是JDK的开放源码版本,在JDK11之后两者几乎一致,这篇文章写得比较清楚OpenJDK和OracleJDK的区
2020-07-04 09:07:09 229 2
原创 jvm垃圾收集器你学废了吗(二)
前言前面一篇文章讲了6种垃圾收集器分别是Serial、ParNew、Parallel Scavenge、Serial Old、Parallel Old、CMS(传送门)今天我们来说一下G1(Garbage First)收集器,为什么把G1收集器单独拿出来说呢?它是垃圾收集器技术发展历史上的里程碑式的成果,下面我们细细道来G1收集器G1收集器开创了收集器面向局部手机的设计思路和基于Region的内存布局形式,G1也是遵循分代收集理论的,但是它的内存布局有以下几点变化G1不再使用固定大小以及固定数
2020-07-02 10:20:01 347 4
原创 jvm垃圾收集器你学废了吗(一)
前言前面一篇文章讲了垃圾回收的算法(传送门),今天来说一下从古到今一些经典的垃圾收集器,直接进入正题!Serial 收集器Serial 收集器也算上是一个老古董了,看到这个名字,我们就可以猜到这是一个单线程工作的收集器,采用的是标记-复制算法,这里的单线程不仅说它使用一个处理器或者一条线程,而是它必须暂停其他所有工作的线程,Stop The World 这个世界都暂停了,可想而知,你的电脑说不定在某个时刻就要暂停下来等待垃圾回收,这是多么糟糕的一件事情!但是它依然是HotSpot虚拟机运行在客户
2020-07-01 21:43:09 1010 1
原创 RabbitMQ毁三观的可靠性投递
消息可靠性投递RabbitMQ发送消息的几个环节生产者发送到Broker(MQ服务器), 如何保证Broker成功接收 Exchage路由到Queue, 如何保证路由到正确的队列 消息存在Queue中, 如果没有消费者来消费, 那么如何保证消息稳定的存储 一条消息成功的被消费者接收, Broker是怎么知道消费者接收到了消息消息发送到RabbitMQ服务器RabbitMQ提供了两种服务端确认机制, 一种是Transaction事务模式, 一种是Confirm确认模式
2021-08-06 17:37:51 264 2
原创 MySQL-毁三观的锁
行锁和表锁的区别锁定粒度 表锁 >行锁 加锁效率 表锁 >行锁 冲突概率 表锁> 行锁 并发性能 表锁< 行锁共享锁与排它锁共享锁(读锁) 读锁和读锁之间可以共享 读锁和写锁之间不可以共享 手动加读锁 SELECT * FROM sys_user WHERE id=1 LOCK IN SHARE MODE;排它锁(写锁) 只要加了排它锁, 就不能任何锁了 insert update delete 都是自动加上排它锁 也可以通过手动
2021-07-25 09:58:58 216 1
原创 MySQL-Explain详解
explain两个变种explainextended:会在explain的基础上额外提供一些查询优化的信息。紧随其后通过showwarnings命令可以得到优化后的查询语句,从而看出优化器优化了什么。额外还有filtered列,是一个半分比的值,rows*filtered/100可以估算出将要和explain中前一个表进行连接的行数(前一个表指explain中的id值比当前表id值小的表)。 explainpartitions:相比explain多了个parti...
2021-07-25 09:54:42 302 1
原创 Redis 的特殊数据结构
HyperLogLog是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定 的、并且是很小的。127.0.0.1:6379> pfadd mykey "123" (integer) 1 127.0.0.1:6379> pfadd mykey "456" (integer) 1 127.0.0.1:6379> pfcount mykey (integer) 2Geo可以将用户给定的地理位置信息储存起来.
2021-05-30 21:04:10 173 2
原创 Redis ZSet 底层skiplist是如何设计与实现的
跳表是空间换时间, 这是毋庸置疑的skiplist 每个节点包含两个指针,一个指向同一链表中的下一个元素,一个指向下面一层的元素。为什么说 skiplist 是二分查找的链表首先看一下链表的结构链表一般和数组作比较, 链表插入和删除的时间复杂度是O(1), 为什么说是O(1)呢, 因为链表在内存中是不连续的, 插入只对两个元素又影响, 但是链表也有痛处, 就是链表不能随机访问, 因为他的内存不连续(没有扩容的问题)所以必须有向前后元素位置的指针, 会消耗更多的内存. 数据出入和删除..
2021-05-30 21:00:36 194 2
原创 Redis五种基础类型的底层实现
String使用SDS(动态字符串)进行存储struct key{ //int 记录buf数组中未使用字节的数量 如上图free为0代表未使用字节的数量为0 int free; //int 记录buf数组中已使用字节的数量即sds的长度 如上图len为5代表未使用字节的数量为5 int len; //字节数组用于保存字符串 sds遵循了c字符串以空字符结尾的惯例目的是为了重用c字符串函数库里的函数 char buf[];}redis是用C语言写的
2021-05-30 20:55:25 121 1
原创 Redis是单线为什么速度还非常快?
redis是单线程的,省去了很多上下文切换线程的时间上下文切换是指 一个线程使用CPU持有权, 另一个线程获取CPU持有权, 操作系统需要保存和恢复相应的进度信息, 这个进度信息就是 上下文与多线程相比, 没有锁的概念, 不存在加锁释放锁的开销redis使用多路复用技术多路-指的是多个socket连接,复用-指的是复用一个线程。非阻塞IO内部实现采用epoll非阻塞io, 不会一直等待socket, 这也是Redis 使用单线程的重要原因你不会以为redis6.0之前真正是单线程的
2021-05-30 20:47:05 159 1
原创 JVM垃圾回收的常见算法你学废了吗?(引用计数算法 标记清除算法 标记压缩算法 复制算法 分代算法)
JVM ----垃圾回收的常见算法以及各自的优缺点 引用计数算法 标记清除算法 标记压缩算法 复制算法 分代算法
2020-04-13 08:09:35 614 8
原创 JVM运行参数 系统参数 -xx参数 -x参数 你学废了吗?
前言首先聊一下什么是JVM, 我们为什么要去学习JVMJVM Java虚拟机它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的,引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运...
2020-04-08 08:40:55 510 7
原创 疫情过后,我们该如何学习
这场疫情使我们深深地知道:为国贡献的科学家、戍守边疆的军人官兵、拿命救民的白衣战士、爱岗敬业的劳动模范、感动社会的道德楷模……只有他们,才能兴国救国,才能推动社会健康发展,娱乐不能兴国, 明星更不能救国!如何进入状态身心都处于极度放松的状态。从慢节奏的休假状态,开始切换为高强度、快节奏的工作学习状态,这并不是一件容易的事情。我们可以通过以下几点来调整调整作息均衡膳食控制用眼时间收拾...
2020-04-05 16:22:29 1279 3
原创 git + tomcat + maven + jenkins 实现自动化部署jar包和war包详细教程 ---亲测
前言首先什么是自动化部署呢, 先来一张图之前我们可能要在本地用maven命令等打成jar包或者是war包 , 然后将打包好的包放到服务器的tomcat上, 这些过程都是手动的, 如果一个项目需要频繁的修改测试部署, 这时候来一个自动化部署多么的炫酷, jenkins就帮我们做了这事 , 下面说一下核心的配置和步骤环境准备Jenkins 2.228Git 1.8.3.1Mave...
2020-04-05 14:51:39 3716 5
原创 详解代理模式--静态代理、动态代理(jdk代理、接口代理)、Cglib代理 各自的优缺点
前言说到代理模式, 定义是这样的: 是为某个对象提供一个代理对象,并且由代理对象控制对原对象的访问。代理模式分为: 代理模式可分为三种 静态代理、动态代理(jdk代理、接口代理)、cglib代理。之前只停留在概念上, 今天要深入的说一下代理模式, 下面分析一下三种类型的实现方式以及优缺点静态代理静态代理是最简单的代理方式, 分为4步走定义抽象类, 也可以是接口, 主要是定义一些普通的业...
2020-01-16 21:08:54 584 11
原创 详解适配器模式--类适配器、对象适配器、接口适配器
前言前面两篇博客写了详解单例模式六种写法的优缺点和详解原型模式的浅复制(浅拷贝)和深复制(深拷贝), 感觉效果还不错。下面来说一下适配器模式, 说起适配器模式不妨举个例子 手机充电器, 我们手机充电的时候会把220V的电压转为5V(现在手机基本上都是5V), 这就和我们要说的适配器模式很像, 下面围绕着这个例子来写一下代码类适配器首先我们先写一个插孔(提供220V的电压)publi...
2020-01-14 19:17:41 1203 8
原创 详解原型模式的浅复制(浅拷贝)和深复制(深拷贝)
前言说起原型模式的浅复制和深复制, 我们都知道浅复制是对值类型的成员变量进行复制, 对引用类型的变量只是对引用进行复制, 实际上两个对象还是指向的同一实例。而深复制不仅值类型的成员变量进行复制, 还对引用类型的成员变量申请存储空间, 让他成为一个新对象。说的都没有错, 而远远知道这些还是不够的, 我们要明白其原理要去证明这两句话, 下面来说一下他们的实现过程!浅复制浅复制分为两步: 1...
2020-01-13 21:09:19 1820 6
原创 详解单例模式六种写法的优缺点
前言单例模式:保证一个类有且仅有一个实例. 通过定义我们可知它是创建型的一种, 也是比较简单的一种单例模式的使用场景: 频繁的进行创建和销毁的对象、创建对象时消耗过多或者消费资源过多,但又经常用到的对象、工具类对象、频繁访问数据库或文件的对象.下面主要分析一下单例模式的六种写法, 以及优缺点!饿汉式(静态常量)懒汉式(线程不安全)懒汉式(线程安全)双重检查静态内部类枚举饿汉...
2020-01-12 14:06:42 6945 7
原创 如何培养自主学习的能力
前言首先说起自主学习,想必在很多优秀大佬身上都有体现,古代有头悬梁的故事,如今马云也说过一句话:未来不是知识的竞争,而是创造力和想象力的竞争,是学习能力的竞争,是独立思考的竞争!罗振宇也在他的演讲中说过如何去培养自主学习的能力。还有很多大佬在分享他们的经验,从此看来掌握自主学习乃是一门神功! 那我们应该怎么样修炼这门神功呢高效能人士的七个习惯积极主动积极主动即采取主动,为自己过去、现在...
2020-01-05 14:51:29 1226 7
原创 京东炸年兽脚本--亲测有效
脚本eval(function(p,a,c,k,e,d){e=function(c){return(c<a?"":e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[fun...
2020-01-04 17:37:09 20015 38
原创 ActiveMQ搭建以及实例
前言首先先了解一下什么是AcitveMQActiveMQ 是Apache出品消息中间件,来帮助实现高可用、高性能、可伸缩、易用和安全的企业级面向消息服务的系统。ActiveMq的特点,多协议:TCP、SSL、NIO、UDP等、可插拔的体系结构,可以灵活定制、保证高性能的集群、支持消息持久化等。ActiveMQ安装和启动安装仅需三步,下载linux的压缩包 ,传送门:ActiveMQ下...
2019-12-28 11:25:19 944 12
原创 Rabbit Mq 五种工作模式及实例
前言在说Rabbit Mq 之前先说一下什么是MQ, MQ为Message Queue 消息队列是应用程序和应用程序之间的通信方法Rabbit Mq是一个开源的,在AMQP(高级消息队列协议)基础上 完整的、可复用的企业消息系统Rabbit Mq 有五种工作模式(也有人说6种),下面主要对这五种工作模式做分析以及实例简单模式简单模式顾名思义,就是很简单,生产者生产,消费者消费,生产者和消...
2019-12-10 11:38:02 1168 9
原创 如何将Spring Cloud项目(微服务)自动化部署到Docker容器上(图文详解)
前言我们传统的部署方法是把源码打成jar包,然后上传至虚拟机并拷贝至JDK容器,对于数量众多的微服务,这样的部署方式显然是不可取的,所以我们必须要掌握Maven插件自动部署,下面说一下具体的部署步骤部署步骤配置maven环境变量新建系统变量在Path中追加 %MAVEN_HOME%\bin配置成功,在cmd 命令窗口输入 mvn -version 即可出现如下图修...
2019-12-09 11:22:09 1547 7
原创 Docker 入门以及简单的操作
Docker是什么官话:Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。个人理解:docker容器就是一个可以存放东西的地方,就像书包可以装各种文具、衣柜可以放各种衣服、鞋架可以放各种鞋子一样。我们现在所说的容器存放的东西...
2019-12-05 11:35:52 370 4
原创 Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.7.0:compile --解决办法
前言在部署微服务时出现这样一个错误(如下图)这个问题困惑了我一天,在网上阅读了无数遍博客,网上有很多说法,但是都没有解决了我的问题,大概报这个错有几种情况,下面说一下解决办法!解决办法java 环境版本不对应,检查java环境变量给大家准备两篇博客,按照这两篇博客配置一下就可以解决问题了博客1博客2检测pom文件,如果不是上面的问题 ,那就是你pom文件的问题,检查你pom文件...
2019-12-04 15:32:01 623 3
原创 RabbitMQ 报错:** (ArgumentError) argument error (stdlib) io_lib.erl:185: :io_lib.format(' * e 解决办法
前言这几天在windows上装了一个Rabbit MQ 报错一个如下图的错误,解决了满满一天,翻遍了网上所有的资源,什么说法都有,最后问题还是解决了,这次记录一下解决问题的方法解决办法首先强调两点:Rabbit MQ 安装路径不可以有中文Rabbit MQ 安装路径不可以有空格我的问题是无法访问 http://localhost:15672/ 管理界面一般出现这个问题有两种情况...
2019-11-27 21:33:40 5041 22
原创 分布式配置中心:Spring Cloud Config的使用
前言是什么Spring Cloud Config 为微服务架构中的微服务提供 集中式的外部配置支持, 配置服务器为各个不同微服务应用的所有环境提供了一个中心化的外部配置解决了什么问题集中管理配置文件不同环境不同配置,动态化的配置更新,根据不同环境部署,如 dev/test/prod运行期间动态调整配置,不再需要在每个服务部署的机器上编写配置,服务会向配置中心统一拉取自已的配置信息当...
2019-11-27 15:22:32 357 9
原创 Hystrix Dashboard监控平台搭建
前言还是先说一下Hystrix Dashboard是什么?Hystrix Dashboard主要用来实时监控Hystrix的各项指标信息。通过Hystrix Dashboard反馈的实时信息,可以帮助我们快速发现系统中存在的问题。之前两篇博客说过搭建负载均衡的Eureka服务注册中心集群,还有服务提供者和消费者,这篇博客主要说一下Hystrix Dashboard的搭建过程.如果对Eureka...
2019-11-25 21:34:50 408 14
原创 搭建负载均衡的Eureka Server集群
前言为什么要搭建集群呢?为了避免 Eureka Server的失效,Eureka Server 高可用环境需要部署两个及以上Eureka Server,它们互相向对方注册。
2019-11-23 11:25:53 561 9
原创 搭建 Eureka Server 服务注册中心
前言先介绍一下Eureka 是什么? Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。Eureka Server提供服务注册服务,各个节点启动后,会在Eureka Server中进行注册,这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在...
2019-11-18 16:27:40 363 9
原创 Linux上搭建基于SpringBoot利用MyCat实现对MySQL的读写分离
前言首先为什么要做读写分离呢,大多数项目都是读的操作的次数远远要比写操作的次数多,所以让MySQL的主服务器做写操作,从服务器做读操作,下面详细的说一下如何利用MyCat做读写分离,至于MySQL的安装和搭建MySQL的主从复制请看我另一篇博客 Linux上MySQL安装和搭建MySQL的主从复制和读写分离MyCat的安装及启动环境装备虚拟机:192.168.50.152(MyCat)虚...
2019-11-04 08:33:18 369 9
原创 Linux上MySQL安装和搭建MySQL的主从复制和读写分离
前言数据库,数据存储的仓库,项目中的数据流动都要存在数据库中,数据库是项目中不可缺失的一部分,数据的访问速度直接影响项目的性能,那怎么让数据库的读写更快一点呢? 主从复制+读写分离可以让读操作和写操作的压力分布在两个数据库中,下面就说一下在linux上搭建的全过程!MySQL的安装下载mysql的repo源wget http://repo.mysql.com/mysql-communi...
2019-11-02 15:29:10 388 9
原创 注解ConditionalOnExpression、ConditionalOnMissingBean、ConditionalOnPropert、ConfigurationProperties 使用方法
前言最近在做项目的时候遇到这样一个需求,一个配置文件需要的时候把它加入spring容器,不需要的时候就不要加入spring容器,以免影响性能,我们要的时候SpringBoot框架,这就必须要了解注解,下面这个注解@ConditionalOnExpression帮我解决了问题,然后顺便说一下其他关于配置文件的注解:@ConditionalOnMissingBean、@ConditionalOnPr...
2019-10-27 15:04:32 2782 5
原创 利用Java8新特性 Stream来处理你的代码
前言Java8的API中添加了一个新的特性: 流,即stream。stream是将数组或者集合的元素视为流,流在管道中流动过程中,对数据进行筛选、排序和其他操作。因为流申明式处理数据集合的特点,可以让代码变得简洁易读filter过滤出list中不是空的 List<String> strings = Arrays.asList("abc", "", "bc", "efg...
2019-09-29 16:28:02 343 8
原创 Redis常用类型及使用技巧
前言最近对Redis的使用较多,然后自己也对Redis有了一定的了解,什么时候改用什么数据类型是使用Redis的关键,什么是Redis我就不阐述了可以开这篇文章Redis入门,下面我说一下Redis常用的三种类型的实战使用方法.String我们要知道Redis为什么快,我说两点完全基于内存,绝大部分请求是纯粹的内存操作,非常快速。数据存在内存中,类似于HashMap,HashMap的优势...
2019-09-29 15:43:55 310 9
原创 XXL_JOB 搭建和使用
xxl-job将调度行为抽象形成"调度中心"公共平台,而平台自身并不承担业务逻辑,"调度中心"负责发起调度请求。将任务抽象成分散的JobHandler,交由"执行器"统一管理,"执行器"负责接收调度请求并执行对应的JobHandler中业务逻辑。因此,"调度"和"任务"两部分可以相互解耦,提高系统整体稳定性和扩展性。
2019-09-01 21:51:50 471 5
jenkins.war
2020-04-09
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人