自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(70)
  • 资源 (1)
  • 收藏
  • 关注

原创 mysql双主热备集群搭建

安装前清理由于centos7中使用mariadb代替了MySQL,所以需要先清理mariadbrpm -qa|grep mariadbrpm -e mariadb-libs-5.5.68-1.el7.x86_64 --nodeps下载并安装mysql下载并安装MySQL官方的 Yum Repositorywget -i -c https://repo.mysql.com//mysql80-community-release-el7-1.noarch.rpmyum -y insta..

2021-07-01 13:47:52 291 1

原创 MYSQL集群方案

主从复制mysql复制是mysql自带的功能**原理简介:**主从复制是通过重放binlog实现主库数据的异步复制,即当主库执行了一条sql命令,那么再从库同样的执行一遍,从而达到主从复制的效果.再这个过程中,master对数据库的写操作计入二进制日志文件中(binlog),生成一个log dump线程,用来给从库的i/o线程传递binlog.而从库的i/o线程去请求主库的binlog,将得到的binlog日志写到中继日志(relaylog)中,从库的sql线程,会读取relaylog文件中的日志,..

2021-07-01 13:39:08 323 1

原创 回环栅栏CyclicBarrier

回环栅栏-等待至barrier状态再全部同时执行通过CyclicBarrier可以实现让一组线程等待至某个状态之后再全部同时执行.叫做回环栅栏是因为当所有等待线程都被释放以后,CyclicBarrier可以被宠用.我们暂且把这个状态较作barrier,当调用await方法后,线程就处于barrier状态了public CyclicBarrier(int parties)public CyclicBarrier(int parties, Runnable barrierAction)p.

2021-06-21 14:50:39 199

原创 计数器CountDownLatch

countDownLatch类位于java.util.concurrent包下,利用它可以实现累次计数器的功能,比如有一个任务A,它要等待其它4个任务执行完毕之后才能执行@Slf4jpublic class CountDownLatchDemo { public static void main(String[] args) throws InterruptedException { final CountDownLatch latch =new CountDownLatc

2021-06-21 14:24:47 131

原创 信号量semaphore

Semaphore 是一种基于计数的信号量。它可以设定一个阈值,基于此,多个线程竞争获取许可信号,做完自己的申请后归还,超过阈值后,线程申请许可信号将会被阻塞。Semaphore 可以用来构建一些对象池,资源池之类的,比如数据库连接池实现互斥锁(计数器为 1)我们也可以创建计数为 1 的 Semaphore,将其作为一种类似互斥锁的机制,这也叫二元信号量,表示两种互斥状态。@Slf4jpublic class SemapOhoreDemo { public static void m

2021-06-21 13:17:44 196

转载 HTTPS的SSL单向验证和双向验证

HTTPS的SSL单向验证和双向验证​ HTTPs利用SSL/TLS建立安全信道,加密数据包,主要目的是提供对网站服务器的身份认证,同时保护交换数据的安全性与完整性SSL/TLS​ TLS在传输层对网络连接进行加密,前身是SSL协议,由网景公司1995年发布,用以保障数据在Internet上安全地进行传输,利用数据加密技术,确保数据在网络传输过程中不会被截取或窃听.​ 数据加密用到了非对称加密和对称加密.TCP协议建立传输连接时,SSL首先对对称加密地密钥使用非对称加密地公钥进行非对称加密,连接

2021-06-17 13:37:49 1518

原创 线程间通信

要想实现多个线程之间的协同,如:线程执行先后顺序,获取某个线程执行的将结果等等,涉及到线程之间的通信,线程通信主要分为两种方式共享内存(包括文件共享,网络共享,变量共享):线程之间共享程序的公共状态,线程之间通过写-读内存中的公共状态来隐式进行通信。JAVA实现为:volatile消息传递:线程之间没有公共状态,线程之间通过发送消息来显式进行通信。例:wait()和notify()。park() 和unpark().方法作用备注wait()线程调用共享对象的wait()

2021-05-27 16:17:14 68

原创 全局结果/异常返回统一处理

package com.aoyang.shop.config;import com.aoyang.common.result.Result;import com.aoyang.shop.common.GlobalException;import com.aoyang.shop.common.GlobalExceptionCode;import lombok.extern.slf4j.Slf4j;import org.apache.commons.lang3.StringUtils;import

2021-04-15 09:52:14 223

转载 七种方式,教你在SpringBoot初始化时搞点事情!

七种方式,教你在SpringBoot初始化时搞点事情!1、监听容器刷新完成扩展点ApplicationListener基本用法熟悉Spring的同学一定知道,容器刷新成功意味着所有的Bean初始化已经完成,当容器刷新之后Spring将会调用容器内所有实现了ApplicationListener的Bean的onApplicationEvent方法,应用程序可以以此达到监听容器初始化完成事件的目的。@Componentpublic class StartupApplicationListenerExa

2021-04-01 10:21:22 102

原创 nginx入门

部署静态文件#可以配置多个serverserver { #默认端口号 即nginx的端口号 listen 80; #域名或者ip server_name mshare-manage.mingbyte.com; #charset koi8-r; access_log /var/log/nginx/host.access.log main; error_log /var/log/nginx/error.log error; location / { ...

2021-01-18 10:31:25 124

原创 初学Spring源码3.12:finishRefresh()

finishRefresh()/** * 完成上下文的刷新操作,执行LifecycleProcessor的onRefresh()方法并发布一个ContextRefreshedEvent事件 * Finish the refresh of this context, invoking the LifecycleProcessor's * onRefresh() method and publishing the * {@link org.springframework.context.event.C

2020-11-13 15:12:50 119

原创 初学Spring源码3.11:finishBeanFactoryInitialization(beanFactory)

finishBeanFactoryInitialization(beanFactory)finishBeanFactoryInitialization方法做了两件事:beanFactory对象的初始化实例化bean配置文件中配置的单例bean/** * 完成上下文的bean Factory的初始化,初始化所有的剩余的单例bean * Finish the initialization of this context's bean factory, * initializing all ..

2020-11-13 15:08:37 213

原创 初学Spring源码3.10:registerListeners()

registerListeners()/** * 添加实现了ApplicationListener的bean作为监听器 * 这些监听器可以以一个不是bean对象的形式被添加而不会影响其它的监听器 * Add beans that implement ApplicationListener as listeners. * Doesn't affect other listeners, which can be added without being beans. */protected void

2020-11-13 11:02:21 490

原创 初学Spring源码3.9:onRefresh()

onRefresh()/** * 可以被重写添加特殊上下文刷新工作的模板代码 * 在实例化单例对象之前,特殊bean初始化时被调用 * Template method which can be overridden to add context-specific refresh work. * Called on initialization of special beans, before instantiation of singletons. * <p>This impleme

2020-11-13 10:53:57 277

原创 初学Spring源码3.8:initApplicationEventMulticaster()

initApplicationEventMulticaster()/** * 初始化应用事件广播组,如果没有默认定义则使用SimpleApplicationEventMulticaster * Initialize the ApplicationEventMulticaster. * Uses SimpleApplicationEventMulticaster if none defined in the context. * @see org.springframework.context.ev

2020-11-13 10:50:47 244

原创 初学Spring源码3.7:initMessageSource()

initMessageSource()/** * 初始化消息源,如果没有默认定义则使用父类的消息源 * Initialize the MessageSource. * Use parent's if none defined in this context. */protected void initMessageSource() { ConfigurableListableBeanFactory beanFactory = getBeanFactory(); // 如果BeanFa

2020-11-13 10:34:24 405

原创 初学Spring源码3.6:registerBeanPostProcessors(beanFactory)

registerBeanPostProcessors(beanFactory)/** * 实例化并注册bean中所有BeanPostProcessor * Instantiate and register all BeanPostProcessor beans, * respecting explicit order if given. * <p>Must be called before any instantiation of application beans. */prot

2020-11-13 10:24:29 197

原创 初学Spring源码3.5:invokeBeanFactoryPostProcessors(beanFactory)

invokeBeanFactoryPostProcessors(beanFactory)/** * 实例化并执行所有bean中注册的BeanFactoryPostProcessor * * Instantiate and invoke all registered BeanFactoryPostProcessor beans, * respecting explicit order if given. * <p>Must be called before singleton ins

2020-11-13 10:15:30 88

原创 初学Spring源码3.4:postProcessBeanFactory(beanFactory)

postProcessBeanFactory(beanFactory)/** * 在应用上下文的内部BeanFactory标准初始化完成后进行修改,所有的bean定义信息将会被加载,但是还没有bean被实例化 * 这允许注册一些特殊的BeanPostProcessors在某些应用上下文的实现类中 * Modify the application context's internal bean factory after its standard * initialization. All bean

2020-11-13 09:35:00 511

原创 初学Spring源码3.3:prepareBeanFactory(beanFactory)

prepareBeanFactory(beanFactory);/** * 配置工厂的标准上下文参数,比如上下文类加载器和后处理器等 * Configure the factory's standard context characteristics, * such as the context's ClassLoader and post-processors. * @param beanFactory the BeanFactory to configure */protected voi

2020-11-13 09:31:22 155

原创 初学Spring源码3.2:obtainFreshBeanFactory()

ConfigurableListableBeanFactory beanFactory = obtainFreshBeanFactory()这个方法一共做了两件事:创建一个BeanFactory(DefaultListableBeanFactory类型),并将其设置为当前应用上下文的实例变量创建了一个或多个BeanDefinitionReader(设置了Environment和ResourceLoader等参数),将在BeanDefinition信息到BeanFactory中/** * Tel

2020-11-12 17:52:34 221 3

原创 初学Spring源码3:refresh()

上一个方法setConfigLocations(configLocations)链接下面我们根据代码debug看一下代码执行流程@Testpublic void test(){ ApplicationContext context =new ClassPathXmlApplicationContext("jdbcTemplate.xml");}/** * 创建一个新的ClassPathXmlApplicationContext,从给定的XML文件路径加载信息并且自动刷新上下文

2020-11-12 16:46:20 93

原创 初学Spring源码3.1:prepareRefresh()

/** * Prepare this context for refreshing, setting its startup date and * active flag as well as performing any initialization of property sources. */protected void prepareRefresh() { // Switch to active. //记录初始化时间 this.startupDate = System.cu

2020-11-12 16:40:40 151

原创 初学Spring源码2:setConfigLocations(configLocations)

上一个方法super()parent链接下面我们根据代码debug看一下代码执行流程@Testpublic void test(){ ApplicationContext context =new ClassPathXmlApplicationContext("jdbcTemplate.xml");}/** * 创建一个新的ClassPathXmlApplicationContext,从给定的XML文件路径加载信息并且自动刷新上下文 * Create a new ClassPat

2020-11-12 16:33:33 512

原创 初学Spring源码1:super(parent)

下面我们根据代码debug看一下代码执行流程@Testpublic void test(){ ApplicationContext context =new ClassPathXmlApplicationContext("jdbcTemplate.xml");}/** * 创建一个新的ClassPathXmlApplicationContext,从给定的XML文件路径加载信息并且自动刷新上下文 * Create a new ClassPathXmlApplicationConte..

2020-11-12 16:22:26 933 2

原创 ThreadLocal源码解读及内存泄漏

ThreadLocalThreadLocal是什么?从名字可以看出ThreadLocal叫做线程本地,即ThreadLocal中填充的变量是属于当前线程的,该变量对其它线程而言是隔离的源码分析一下ThreadLocal的作用ThreadLocal<M> tl = new ThreadLocal<>();tl.set(new M());tl.remove();点进去set()方法看一下:public void set(T value) { Thread t =

2020-10-16 14:15:05 113

原创 java中的四种引用:强软弱虚

java中的四种引用:强软弱虚强引用:M m =new M(); 只有当没有任何引用指向M对象时,才会被回收public class T01_NormalReference { public static void main(String[] args) { M m = new M(); m = null; System.gc(); }}软引用:SoftReference<byte[]> m = new S..

2020-10-16 14:13:45 85

原创 Object o = new Object()在内存中占几个字节

**CAS:**Compare and Swap,即比较再交换。jdk5增加了并发包java.util.concurrent.*,其下面的类使用CAS算法实现了区别于synchronouse同步锁的一种乐观锁。JDK 5之前Java语言是靠synchronized关键字保证同步的,这是一种独占锁,也是是悲观锁。CAS算法理解对CAS的理解,CAS是一种无锁算法,CAS有3个操作数,内存值V,旧的预期值A,要修改的新值B。当且仅当预期值A和内存值V相同时,将内存值V修改为B,否则什么都不做.查看对象

2020-10-16 09:40:17 361

原创 设计模式(二):策略模式

Comparator使用了策略模式,排序时可以根据传入的不同Comparator对象动态的执行比较策略,本质上是为了解决 if…else 所带来的复杂和难以维护。public class Cat{ int weight, height; public Cat(int weight, int height) { this.weight = weight; this.height = height; } @Override pub..

2020-10-14 15:29:54 51

原创 设计模式(一):单例模式

Singleton(单例模式)单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。注意:1、单例类只能有一个实例。2、单例类必须自己创建自己的唯一实例。3、单例类必须给所有其他对象提供这一实例。模式一:简单实用,但是在Test1被初始化时..

2020-10-14 13:31:45 110 1

原创 @Autowire装配原理

下面展示一些 内联代码片。public class UserController { private UserService userService; public UserService getUserService() { return userService; } public void setUserService(UserService userService) { this.userService = userService

2020-10-13 14:53:27 110

原创 JVM深入理解(九):垃圾收集器

对象存活判断打印GC数据: -XX:+PrintGCDetails​ 1.引用计数法​ 2.可达性分析GCroot对象:虚拟机栈(栈帧中的本地变量表)中引用的对象方法区中类静态属性引用的对象方法区中常量引用的对象本地方法栈中JNI(即一般说的Native方法)引用的对象垃圾回收算法标记-清除复制:将内存切割成两份 —>新生代标记-整理 —>老年代分代收集​ 新生代:1个Eden spa..

2020-10-13 14:05:30 89

原创 深入理解JVM(八):内存管理

运行时数据区1.程序计数器​ 记录当前线程的执行行数2.虚拟机栈(stack)栈:单向队列,后进先出​ 线程私有,生命周期与线程一致,描述的是java方法执行的内存模型,每个方法在执行时都会创建一个栈帧,用于存储局部变量表,操作数栈,动态连接,方法出口等信息,每一个方法从调用到执行结束,就对应这一个栈帧从虚拟机栈中入栈 到出栈的过程​ 在编译程序代码时,栈帧需要多大的局部变量表,多深的操作数栈都已经完全确定,因此一个栈帧需要分配多少内存,不会受程序运行时期变量数据的影响.​ 一个线程

2020-10-13 11:13:27 105

原创 深入理解JVM(七):线程上下文类加载器

每个类都会使用自己的类加载器(即加载自身的类加载)来去加载其它类(指的是所依赖的类)如果ClassX引用了ClassY,那么ClassX的类加载器就回去加载ClassY(前提是Class尚未被加载)线程上下文类加载(Context ClassLoader)线程上下文类加载器是从JDK1.2开始引用的,getContextClassLoader()与setContextClassLoader(ClassLoader cl)用来分别获取和设置上下文类加载器如果没有通过setContextClassLo

2020-10-12 13:58:22 564 1

原创 深入理解JVM(六):扩展类加载器

在运行期,一个java类是由该类的全限定名和用于加载该类的定义类加载器(defining loader 实际加载该类的类加载器)所共同决定的.* 如果完全像定名相同的类由不同的两个类加载器所加载,那么这些类就是不同的,即时.class字节码文件完全一样,并且从相同的位置加载亦是如此.* 在Oracle的HotSpot视线中,系统属性sun.boot.class.path如果修改错了,则运行出错,会出现如下错误* Error occurred during initialization of VM*.

2020-10-10 13:41:01 677

原创 深入理解JVM(五):类加载器的命名空间

github地址:https://github.com/lishanglei/jvm_study.git类加载器的命名空间:每个类加载器都有自己的命名空间,命名空间由该类加载器及所有父类加载器所加载的类组成在同一个命名空间中,不会出现类的全限定名完全相同的两个类在不同的命名空间中,有可能会出现类的全限定名完全相同的两个类关于命名空间的重要说明:子加载器所加载的类能够访问到父加载器所加载的类父加载器所加载的类无法访问子加载器所加载的类public class MyCat { p

2020-10-09 15:30:18 439 1

原创 深入理解JVM(四):类的卸载

github地址:https://github.com/lishanglei/jvm_study.git当一个类被加载、验证、准备、解析、初始化后,它的声明周期就开始了。当该类的Class对象不再被引用,即不可触及时,Class对象就会结束生命周期,该类再方法去的数据也会被卸载,从而结束该类的生命周期。一个类合适结束生命周期,取决于代表它的Class对象何时结束生命周期由java虚拟机自带的类加载器(跟加载器bootstrap、扩展类加载器extension、系统加载器system)所加载的类,在虚

2020-10-09 14:09:13 628

原创 深入理解JVM(三):类加载器

类加载器jvm自带的加载器根类加载器(BootStrap)该加载器没有父加载器,它负责加载虚拟机的核心类库,如java.lang.*等.跟类加载器从系统属性sun.boot.class.path所指定的目录中加载类库.根类加载器的实现依赖于底层操作系统,属于虚拟机的实现部分,由C++实现,并没有继承java.lang.ClassLoader扩展类加载器(Extension)它的父加载器为根类加载器,它从java.ex.dirs系统属性所指定的目录中加载类库,或者从JDK安装目录的jre

2020-09-29 15:42:39 114

原创 深入理解JVM(二):类的初始化

**github地址:https://github.com/lishanglei/jvm_study.git**java程序对类的使用方式可以分为两种:主动使用被动使用所有的java虚拟机实现必须在每个类或接口被java程序首次主动使用时才初始化它们主动使用(七种):创建类的实例访问某个类或接口的静态变量,或者对该静态变量赋值调用类的静态方法反射(如Class.forName(“com.test.Test”))初始化一个类,会先初始化这个类的父类java虚拟机启动时被表明为

2020-09-28 17:03:16 157

原创 深入理解JVM(一):类的生命周期

类加载在java代码中,类的加载,连接,初始化过程都是在程序运行期间完成的在如下几种情况,java虚拟机将会结束自己的生命周期执行System.exit()方法程序正常执行结束程序在执行过程中遇到了异常或错误而导致异常终止由于操作系统出现错误而导致虚拟机进程终止加载:通过一个类的全限定名来获取此类的二进制字节流将这个字节流所代表的静态存储接口转化为方法区的运行时数据结构在内存中生成一个代表这个类的java.lang.Class对象,作为存放这个类的各种数据访问的入口(规范并未

2020-09-28 16:46:39 140

270201E_Eureka服务发现框架(Eureka安全配置).mp4

eureka服务发现功能简介

2020-08-24

空空如也

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

TA关注的人

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