自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(79)
  • 资源 (2)
  • 收藏
  • 关注

原创 1024节日快乐

1024节日快乐

2022-10-24 15:21:01 171 1

原创 1024节日快乐

1024 节日快乐又是一年1024,㊗️所有的程序员节日快乐????

2021-10-24 13:51:51 202

原创 docker 中tomcat日志与容器时间差八个时区解决方案

docker 中tomcat时间差八个时区背景在docker中运行tomcat容器,发现tomcat日志时间与宿主机时间差了8个时区,同时也 查看了容器时间也·是相差八个时区:`宿主时间`[root@henry]# dateMon Jan 18 15:52:08 CST 2021`容器时间`[root@henry ~]# docker exec -it mytomcat bashroot@84b6a286e75d:/usr/local/tomcat# dateMon Jan 18 15:5

2021-01-18 16:07:36 674

原创 docker宿主机时间与容器时间差八时区解决方案

docker宿主机的时间和容器差八个时区有以下两种解决方案:1、把本机时区复制到宿主机即可:docker cp /etc/localtime 容器名:/etc/localtime2、在运行容器的时候进行挂载:sudo docker run -d -p 38080:8080 --name mytomcat -v /etc/localtime:/etc/localtime:ro --restart=always tomcat:8.5.56...

2021-01-18 15:49:49 410

原创 Mysql 忘记root密码的解决方案

1、修改my.cnf在my.cnf中添加skip-grant-tables;[root@VM_0_9_centos ~]# vim /etc/my.cnf[mysqld]bind-address=0.0.0.0port=3306user=mysqlbasedir=/usr/local/mysqldatadir=/usr/local/mysql/datasocket=/tmp/mysql.sock#添加此句话skip-grant-tables pid-file=/tmp/mys

2021-01-14 16:15:52 166

原创 查找Linux下Redis安装目录

1、使用whereis和which都没有找到[root@Henry ~]# whereis redisredis:[root@Henry ~]# which redis/usr/bin/which: no redis in (/usr/java/jdk1.8.0/bin:/usr/java/jdk1.8.0/jre/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)2、使用ps -ef|grep redis先查到进

2021-01-14 09:50:25 2172

原创 实战使用-JVM命令

1、jps查看java进程2、jinfo实时查看和调整JVM配置参数查看某个java进程的name属性的值jinfo -flag name PID jinfo -flag MaxHeapSize PIDjinfo -flag UseG1GC PID查看曾经赋过值的一些参数jinfo -flags PID3、 jstat查看虚拟机性能统计信息查看类装载信息jstat -class PID 1000 10 查看某个java进程的类装载信息,每1000毫秒输出一次,

2020-10-24 15:23:29 214

原创 1024 我来了

终于到节日了,无比开心

2020-10-24 15:15:23 179

原创 Ajax跨域Options请求携带自定义header后台接收不到

Ajax跨域Options请求携带自定义header后台接收不到背景因为需要跨项目调用,为了简便起见,没有使用Fegin来调用,如果使用Feign还需要再重新实现一套逻辑,所有就直接从A项目使用Ajax调用B项目中已实现的接口。项目A中使用了单点登录,所有请求都会做一次拦截,所以在B中调用的时候加入了一个自定义的header,以此来校验是来自于B项目中的调用请求;A项目中的前端调用: $.ajax({ url: 'http://ip:port/a/b', //请求地址 type

2020-09-17 15:01:04 2498

原创 Redis+Lua脚本实现分布式服务的限流

背景​ 限流的目的是通过对并发访问/请求进行限速或者一个时间窗口内的的请求进行限速来保护系统,一旦达到限制速率则可以拒绝服务。​ 开始打算使用Guava RateLimiter来实现限流,但RateLimiter是局限于单机中使用,然后打算使用Redis+Lua脚本实现限流。1 提供调用的接口@Slf4j@RestController@RequestMapping("/rateLimter")public class RateLimterController { @Po

2020-08-25 16:58:00 462

原创 Docker下Nginx+Tomcat部署项目+Mount目录挂载

参考内容:从零搭建K8S集群(无需科学上网)(一)实现Nginx+Tomcat负载均衡1、安装docker1.1 安装必要的依赖sudo yum install -y yum-utils device-mapper-persistent-data lvm21.2 设置docker仓库sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo`【.

2020-08-25 16:03:11 581

转载 SpringCloud Feign源码深度解析

概述springCloud feign主要对netflix feign进行了增强和包装,本篇从源码角度带你过一遍装配流程,揭开feign底层的神秘面纱。主要包括feign整合ribbon,hystrix,sleuth,以及生成的代理类最终注入到spring容器的过程。篇幅略长,耐心读完,相信你会有所收获。Feign架构图一些核心类及大致流程:大体步骤:一、注册FeignClient配置类和FeignClient BeanDefinition二、实例化Feign上下...

2020-07-12 11:26:36 336 1

原创 彻底弄懂Tomcat默认请求数到底是多少!!!

1 背景Tomcat默认请求数到底是多少!!!(本篇是以Tomcat8.5作为参考)有人认为是150,也有人认为是200,那么到底是多少呢,说这两种情况的人有没有什么依据呢,下面我们就来一探究竟。探究一门技术,官网是最具有说服力的,那我们就先到官网看一下。2 官网2.1 Executorhttps://tomcat.apache.org/tomcat-8.5-doc/config/executor.html在官网中有这么一段话:-maxThreads :(int) The max numb

2020-07-10 11:30:43 1957 1

原创 junit测试遇到的问题:java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing

问题今天在测试代码的时候报如下错误:java.lang.NoClassDefFoundError: org/hamcrest/SelfDescribing at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:763) at java.security.SecureClassLoader.defineClass(SecureClassLo

2020-07-08 14:19:21 281

原创 线上踩坑:Redis集群调用Lua脚本-ERR bad lua script for redis cluster, all the keys that the script uses should

问题-ERR bad lua script for redis cluster, all the keys that the script uses should be passed using the KEYS arrayrn上线遇到一个阿里云Redis集群的坑,特地写出来,供各位遇到此问题的道友参考,这是因为阿里云的Redis集群对Lua脚本调用的时候做了限制:#Lua使用限制为了保证脚本里面的所有操作都在相同slot进行,云数据库Redis集群版本会对Lua脚本做如下限制:`所有key都

2020-07-08 14:01:36 10312 2

转载 Springboot中的SPI 机制

一、从java类加载机制说起java中的类加载器负载加载来自文件系统、网络或者其他来源的类文件。jvm的类加载器默认使用的是双亲委派模式。三种默认的类加载器Bootstrap ClassLoader、Extension ClassLoader和System ClassLoader(Application ClassLoader)每一个中类加载器都确定了从哪一些位置加载文件。于此同时我们也可以通过继承java.lang.classloader实现自己的类加载器。Bootstrap ClassLoad

2020-06-27 14:40:42 562

原创 MySQL的InnoDB存储引擎中,缓冲池中的Changer Buffer与系统表空间中的Changer Buffer的关系

MySQL的InnoDB存储引擎中,缓冲池中和系统表空间中都存在Changer Buffer,那它们之间的关系是怎样的呢?先来一张InnoDB存储引擎的架构图:翻阅了MySQL官网发现如下:1、https://dev.mysql.com/doc/refman/5.7/en/innodb-change-buffer.html这里面有一句话: In memory, the change buffer occupies part of the buffer pool. On disk, the chan

2020-06-26 14:07:16 353 1

转载 Maven optional关键字透彻图解

写在前面本来想写一篇「如何自定义Spring Boot Starter」,但是为了更好理解 Starter 的一些设计理念和其中的关键点,所以提前将一些细节内容单独提取出来讲解说明在 Maven pom.xml 中,你经常会看到依赖项中有类似下面的代码:<dependency> <groupId>sample.ProjectA</groupId> <artifactId>Project-A</artifactId> &l...

2020-06-26 13:04:09 138

转载 Spring的@bean注解

1、Spring注解分类从广义上Spring注解可以分为两类:一类注解是用于注册Bean假如IOC容器就是一间空屋子,首先这间空屋子啥都没有,我们要吃大餐,我们就要从外部搬运食材和餐具进来。这里把某一样食材或者某一样餐具搬进空屋子的操作就相当于每个注册Bean的注解作用类似。注册Bean的注解作用就是往IOC容器中放(注册)东西!用于注册Bean的注解: 比如@Component , @Repository , @ Controller , @Service , @Configration这些注解就

2020-06-26 12:58:51 159

转载 maven多模块项目管理及parent标签

1、题记最近刚完成一个用Maven构建的Web项目,看了一些Maven方面的书,比如《maven实战》,但还是对Maven多模块项目理解得不清晰,所以花了一点时间好好研究了下,现分享如下。2、问题下面是一个简略的项目结构图:--Parent ---- childA(BusinessLayer) `--- pom.xml` ---- childB(WebLayer) `--- pom.xml------ pom.xml2.1、Parent怎么能找

2020-06-26 12:55:58 1940

原创 偏向锁、轻量级锁、重量级锁升级过程中的疑问解答

1 背景在https://blog.csdn.net/qq_33996921/article/details/106629770这篇文章《Synchronized关键字和锁升级(偏向锁、轻量级锁、重量级锁)》中讲解了Synchronized使用原理,及锁的升级,在翻阅资料以及看别的博客中一些读者遇到的疑问,本文主要针对在锁升级中的一些问题进行解释。2 锁升级的流程图先从《并发编程的艺术》这本书中摘抄了两个锁升级的图:1、偏向锁的获得和撤销流程2、轻量级锁及膨胀流程以上锁的过程不做详细的赘述,

2020-06-13 22:55:52 338 2

原创 终于搞懂线程的启动流程了

背景知识文中参考文章链接:1、线程创建方式-继承 Thread 类、实现 Runnable 接口、Callable接口2、openJDK_HotSpot源码下载前言在 Java 中,有一句比较流行的话就是万物皆对象,同样的在多线程中,我觉得有一句话也必将贴切, 那就是线程皆Thread。Thread是多线程的根本,在java中,不管是什么方式创建的线程(在上一篇介绍的三种线程创建方式),它的开启都是都是始于Thread的start()方法。​ 调用start()方法去启动一个线程,当 run 方

2020-06-13 21:50:59 1499 1

原创 线程创建方式-继承 Thread 类、实现 Runnable 接口、Callable接口

在 Java 中,有多种方式来实现多线程。下面通过实例来分别介绍继承 Thread 类、实现 Runnable 接口、Callable接口来创建线程。1、继承 Thread 类1.1类图先来看下Thread的类图:​ 从类图中可以看出,Runnable接口是一个函数式接口,里面只有一个抽象的run()方法,Thread 类本质上就是实现了 Runnable 接口的一个实例。​ 启动线程的唯一方法就是通过 调用Thread类的 start()方法。start()方法是一个 native 方法,它会

2020-06-13 21:42:54 1107 2

转载 深入理解ReentrantLock原理&&Condition原理

ReentrantLock 介绍一个可重入的互斥锁,它具有与使用{synchronized}方法和语句访问的隐式监视器锁相同的基本行为和语义,但它具有可扩展的能力。一个ReentrantLock会被最后一次成功锁定(lock)的线程拥有,在还没解锁(unlock)之前。当锁没有被其他线程拥有的话,一个线程执行『lock』方法将会返回,获取锁成功。一个方法将会立即的返回,如果当前线程已经拥有了这个锁。可以使用『isHeldByCurrentThread』和『getHoldCount』来检查当前线程是...

2020-06-09 16:22:33 475

转载 深入理解CountDownLatch原理

CountDownLatch 介绍CountDownLatch是一个同步协助类,允许一个或多个线程等待,直到其他线程完成操作集。CountDownLatch使用给定的计数值(count)初始化。await方法会阻塞直到当前的计数值(count)由于countDown方法的调用达到0,在这之后(即,count为0之后)所有等待的线程都会被释放,并且随后对await方法的调用都会立即返回。这是一个一次性现象 ———— count不会被重置。如果你需要一个重置count的版本,那么请考虑使用CyclicBa.

2020-06-09 15:58:40 1316

转载 深入理解ThreadLocal底层原理

ThreadLocal简介变量值的共享可以使用public static的形式,所有线程都使用同一个变量,如果想实现每一个线程都有自己的共享变量该如何实现呢?JDK中的ThreadLocal类正是为了解决这样的问题。ThreadLocal类并不是用来解决多线程环境下的...

2020-06-08 23:35:41 392

转载 深入理解Condition实现原理

在AQS中存在两个FIFO队列:同步队列 和 等待队列。本篇文章主要是讲condition实现原理(即等待队里),同步队列实现原理看这篇文章:深入理解AQS实现原理和源码分析。等待队列是由Condition内部实现的,是一个虚拟的FIFO单向队列,在AQS中同步队列、...

2020-06-08 23:15:03 4729 2

转载 AQS实现原理和源码分析

AQS底层实现原理用一句话总结就是:volatile + CAS + 一个虚拟的FIFO双向队列(CLH队列)。所以在了解AQS底层实现时,需要先深入了解一下CAS实现原理。#名词解释(1)CAS:无锁的策略使用一种比较交换的技术(Compare And Swap)...

2020-06-08 22:43:51 804

转载 Synchronized关键字和锁升级(偏向锁、轻量级锁、重量级锁)

目录一、Synchronized使用场景二、Synchronized实现原理三、锁的优化1、锁升级2、锁粗化3、锁消除一、Synchronized使用场景Synchronized是一个同步关键字,在某些多线程场景下,如果不进行同步会导致数据不安全,而S...

2020-06-08 22:18:42 180

原创 一文搞懂线程世界级难题——线程状态到底是6种还是5种!!!

背景先来解答一个世界级难题:java线程有多少种状态?答案是6种!!!那为什么有的地方说是5种呢,那这一定是将操作系统层面的线程状态搞混了。下面我们就分别介绍一下java线程的6种状态以及操作系统层面的5种状态:1、java线程状态java线程有6种状态,我们先来一个官方的依据public class Thread implements Runnable { public enum State { /** * Thread state for a thr

2020-05-26 15:46:13 5162 9

原创 openJDK_HotSpot源码下载

​ 最近在研究多线程的内容,在看Java源码的时候有很多是调用native的本地方法,就想着下载一下Hotspot源码从而能更深入的了解一下底层原理。好了废话不多说,下面介绍一下Hotspot源码下载方法。1、登录打开openjdk官网:http://hg.openjdk.java.net,选择要下载的版本,本文以jdk8为例。2、选择jdk版本从上图中选择jdk8,点击进去openjdk—— corba:不流行的多语言、分布式通讯接口—— hotspot:Java 虚拟机—— jax

2020-05-25 15:41:39 1933 1

原创 Spring+MyBatis源码解析之SqlSessionTemplate

1、产生的背景使用`MyBatis`就要保证`SqlSession`实例的线程安全,就必须要为每一次的请求单独创建一个`SqlSession`。但如果每一次请求都要用`openSession()`自己去创建,就比较麻烦了。​ 所以在spring中,我们使用的mybatis-spring包中提供了一个线程安全的SqlSession的包装类sqlSessionTemplate,用它来替代SqlSession.因为他是线程安全的,所以可以在所有的Service层来共享一个实例(默认为单例)。​ 这个跟Sp

2020-05-23 16:15:12 963

原创 透过源码看本质——Spring AOP 在IoC之后,在DI之前

spring的IoC的流程可以分为定位、加载、注册三个步骤,在IoC容器中注册的是BeanDefinition,BeanDefinition就是解析出来的存储bean对象的。​ 接着,进行DI操作,需要对BeanDefinition进行初始化,变成一个实例化的对象,最开始是调用的DefaultListableBeanFactory类的getBean()方法,此处不在详细描述,可以参考我另外一篇文章的Spring IoC的流程图,最终调用的是AbstractAutowireCapableBeanFa

2020-05-14 11:12:44 641

原创 Spring源码-依赖注入DI时序图

Spring-DI时序图

2020-05-14 11:04:25 370

原创 Spring Ioc时序图

**Spring Ioc时序图**

2020-05-14 11:00:58 326

原创 解决方案:SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".

在maven打包的时候有如下错误:init......SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".SLF4J: Defaulting to no-operation (NOP) logger implementationSLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.Logging initializ

2020-05-11 14:31:01 1385 2

原创 Redis之Cluster应用及源码分析

Jedis 有4 种工作模式:单节点、分片(Sharded)、哨兵(Sentinel)、集群(Cluster)。前面两篇我们分别对Sharded、Sentinel通过实际应用的例子进行了源码剖析,本文将通过实际的例子对Redis的Cluster进行源码剖析。前两篇请参考:Redis之Sharded应用及源码分析Redis之Sentinel应用及源码分析1、环境:对于Redis Clust...

2020-04-19 18:35:00 576 1

原创 Redis之Sentinel应用及源码分析

Jedis 有4 种工作模式:单节点、分片(Sharded)、哨兵(Sentinel)、集群(Cluster)。上一篇我们通过实际应用的例子进行了源码剖析,请点击Redis之Sharded应用及源码分析,本文将通过实际的例子对Redis的Sentinel进行源码剖析。1、环境:对于Redis Sentinel的搭建请参考https://blog.csdn.net/qq_33996921/art...

2020-04-18 23:03:10 528

原创 Redis之Sharded应用及源码分析

Jedis 有4 种工作模式:单节点、分片(Sharded)、哨兵(Sentinel)、集群(Cluster)。单节点比较简单,本章我们先从分片开始讲解,后续将继续对哨兵(Sentinel)、集群(Cluster)进行源码分析。1、环境:1、操作系统:Centos7.72、服务器配置如下:(本文采用了在单台机子上部署多个实例来模拟多机部署)主机ip角色和端口node1...

2020-04-18 17:55:28 770

原创 史上最详细的Redis Cluster 集群搭建

1、引言在上一篇(一篇学会Redis Sentinel的集群搭建),进行了Redis Sentinel的搭建,Sentinel有其自身的优点,也有一些不足之处,如下:1、主从切换的过程中会丢失数据,因为只有一个 master。2、只能单点写,没有解决水平扩容的问题。2、Redis Cluster介绍2.1概念Redis 集群是一个提供在多个Redis间节点间共享数据的程序集。Redi...

2020-04-11 23:55:59 845

Spring-DI时序图.png

Spring Ioc DI 时序图分享给大家,希望对大家看源码有所帮助,不足之处欢迎批评指正,可以在下方留言

2020-05-14

Spring-Ioc时序图.png

Spring Ioc DI 时序图分享给大家,希望对大家看源码有所帮助,不足之处欢迎批评指正,可以在下方留言

2020-05-14

空空如也

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

TA关注的人

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