自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(47)
  • 收藏
  • 关注

原创 SpringBoot自动装配原理

开头不知道怎么写,每次都卡一下,真的很尴尬,SpringBoot自动装配,这肯定是SpringBoot的核心了,甚至@DubboComponentScan即Dubbo的服务发布我个人觉得也是基于自动装配开始的,这里记录一下他的大体流程吧,梳理下自己的思路。SpringBoot自动装配的原理是通过注解@EnableAutoConfiguration来开启的,他存在于@SpringBootConfiguration注解的内部,1.先看一下@SpringBootConfiguration注解的定义吧,有个基本

2021-05-28 17:58:18 339

原创 EurekaServer端--集群同步

在写@EurekaServer注解的博客时,有写道org.springframework.cloud.netflix.eureka.server是SpringCloud和Eureka整合的源码包,Eureka的初始化工作也在这个里面完成,当然也包括集群同步!!!这是我当时没看之前的疑惑之处!!!问题1:集群同步时,会不会出现比如server1将请求发给server2,server2将请求发给serve3,server1也将请求发给server3,这种互相同步的情况?解决办法?问题2:前面博客有写道is

2020-11-13 16:19:01 516

原创 eureka-server端的服务续约(心跳检测)

今天主要记录服务端心跳续约原理!!!刚开始学的时候还是有很多疑惑的,下面将我的疑惑记录在这里!!问题1:服务续约他所做的到底是什么事情?当客户端注册服务完成后,他会通过定时任务(默认30秒)定时向服务端发送Rest请求,告知服务端自身的状态,避免被服务剔除,说白了,就是检测当前客户端是否可用。问题2:服务端接受到客户端的服务续约请求后,他怎么进行的服务续约,也就是说,我收到了你的请求,那么服务续约究竟是通过一个状态值来记录的,还是通过其他存储来记录的呢???Eureka的服务续约功能是在eure

2020-11-12 11:16:45 540

原创 eureka---服务注册功能

org.springframework.cloud.netflix.eureka.server是SpringCloud和Eureka整合的源码包com.netflix.eureka:eureka-core就是eureka的核心源码包(功能实现)在resours目录下的ApplicationResource就是服务注册功能(对应某一个微服务实例)类ApplicationResource下的addInstance就是服务注册功能的入口:@POST @Consumes({"application/

2020-11-10 10:24:35 360

原创 @EnableEurekaServer的作用

作为一个小白,最近在学习Eureka的源码,没想到开头就遇到了迷惑的地方,下面是我迷惑的地方,特此记录。问题1:为什么只需要引入依赖以及在application.yml中做好配置,然后在启动类中加入@EnableEurekaServer注解,eureka服务端就可以工作了呢,配置清晰可见,那么问题就出在注解上,这个注解他究竟做了什么事情,可以将eureka与cloud整合呢???好吧,我费了九牛二虎之力,一点一点的去探究,感觉是我所认为的这样,下面进行讲解,如果有不对的地方,请指正出来,不要让我在错误的

2020-11-09 15:58:35 4971 3

原创 Semaphore---信号量常用方法总结(8)--Semapore类实现多进路-单处理-多出路实验

package com.example.demo.ThreadTest.Semaphore;import java.util.concurrent.*;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;/** * @author muyou * @date 2020/10/14 14:52 * 多进路-单处理-多出路 * 目标是允许多个线程同时处理任务,但执行任务顺

2020-10-14 17:44:29 179

原创 Semaphore---信号量常用方法总结(7)--Semapore类实现多进路-多处理-多出路实验

package com.example.demo.ThreadTest.Semaphore;import java.util.concurrent.*;/** * @author muyou * @date 2020/10/14 14:36 * 多进路-多处理-多出路: * 目的是允许多个线程同时处理自己的任务 */public class SemaphoreTest6 implements Runnable{ //允许五个线程同一时间执行acquire()和release()之

2020-10-14 17:43:05 147

原创 Semaphore---信号量常用方法总结(6)--Semapore类中其他方法

package com.example.demo.ThreadTest.Semaphore;import java.util.concurrent.Semaphore;/** * @author muyou * @date 2020/10/14 11:38 * 方法availablePermits()是返回当前可用的许可数量 * 方法drainPermits()是返回立即可用的所有许可数量,并将可用许可数置为0 * 方法getQueueLength()作用是取得等待许可的线程个数 * 方

2020-10-14 17:40:46 329

原创 Semaphore---信号量常用方法总结(5)--Semapore类中acquireUninterruptibly();方法的使用

package com.example.demo.ThreadTest.Semaphore;import java.util.concurrent.*;/** * @author muyou * @date 2020/10/14 10:53 * 方法acquireUninterruptibly();的使用 * acquireUninterruptibly();方法的作用是:使等待进入acquire()方法的线程,不允许被中断 * */public class SemaphoreTest

2020-10-14 17:39:19 325

原创 Semaphore---信号量常用方法总结(4)--Semapore类动态添加permits许可数量

package com.example.demo.ThreadTest.Semaphore;import java.util.concurrent.Semaphore;/** * @author muyou * @date 2020/10/14 10:44 * Semapore类中的acquire(int permits)参数作用以及动态添加permits许可数量 */public class SemaphoreTest3 { /** * 有参方法acquire(int

2020-10-14 17:37:41 444

原创 Semaphore---信号量常用方法总结(2)--当permits不为1时可能造成脏数据产生

当当permits不为1时,该类并不能保证线程安全性,因为还是会有可能出现多个线程共同访问实例变量,出现脏数据的可能性本例中new Semaphore(3);不再为1时,如果i不被volatile修饰时,此时会出现脏数据的情况package com.example.demo.ThreadTest.Semaphore;import java.util.concurrent.*;/** * @author muyou * @date 2020/10/14 10:17 * 类Semaphore构

2020-10-14 17:21:34 211

原创 Semaphore---信号量常用方法总结(1)--Semapore类常用方法--acquire()和acquire(int permits)

Semaphore此类的主要作用是限制线程的并发数量Semaphore类发放许可的计算方式是“减法”操作acquire(int permits)作用是每调用一次就使用permits个许可acquire()作用是每调用一次就使用1个许可package com.example.demo.ThreadTest.Semaphore;import java.util.concurrent.*;/** *@Description TODO *@Author muyou *@DATE 2020/10

2020-10-14 17:18:28 2034

原创 Semaphore---信号量常用方法总结(3)--Semapore类实现生产者和消费者

Semaphore目的是为了限制同一时间线程并发数生产者和消费者调用类:package com.example.demo.ThreadTest.Semaphore.productAndConsumer;import java.util.LinkedList;import java.util.concurrent.ArrayBlockingQueue;import java.util.concurrent.ExecutorService;import java.util.concurrent.T

2020-10-14 17:14:20 213

原创 spring笔记

有不对的地方,各位大佬,千万指正,别让我在错误的道路上,越走越远,拜谢,拜谢!!!spring容器初始化bean的大概过程:总体:1.实例化ApplicationContext—>spring会给容器配置加载器等2.注册配置类–》怎样判断这个类是一个配置类,通过判断启动类的类型去确定一个类是不是启动类(他是固定的类型—》AnnotatedBeanDefinition)3.执行refresh方法—》进行bean实例化refresh方法大体执行流程:1.prepareRefresh()方法

2020-10-13 15:06:35 63

原创 生产者和消费者模式

import java.util.LinkedList;import java.util.concurrent.*;import java.util.concurrent.locks.Condition;import java.util.concurrent.locks.Lock;import java.util.concurrent.locks.ReentrantLock;/** * @author muyou * @date 2020/9/22 17:03 * 生产者和消费者模式

2020-09-23 16:34:22 251 1

原创 双亲委派模型(观书有感)

一个类从加载到虚拟机开始,到卸载出内存为止,整个生命周期包括:加载、验证、准备、解析、初始化、使用、卸载七个阶段。其中类加载器在这个过程中承担着非常重要的角色,而双亲委派模型便是实现类加载器的一种实现方式。启动类加载器(无法被java程序直接引用):这个类加载器负责将存放在<JAVA_HOME>\lib目录中的或者是-XbootClassPath参数所指定的路径中的,并且是虚拟机识别的(按照文件名识别,例如rt.jar,名字不符合的文件,即使存在也不会被加载)类库加载到虚拟机中。扩展类

2020-08-13 16:21:39 67

原创 JVM--运行时数据区域

java虚拟机运行时数据区:程序计数器:线程私有内存,当前线程执行的字节码行号指示器。注:如果正在执行的是java方法,计数器记录的是指令字节码地址JAVA虚拟机栈:线程私有,生命周期与线程相同,描述的是Java方法执行的内存模型,每一个方法的调用至执行完成,代表着一个栈帧在虚拟机栈中入栈到出栈的过程,栈帧用于存储局部变量表,操作数栈,动态链接,方法出口等信息,栈帧是方法运行时的基础数据结构。本地方法栈:本地方法栈为虚拟机使用的Native方法服务。Java堆:虚拟机管理内存中最大的一块,线程共

2020-08-12 11:04:03 92

原创 各垃圾收集器的特点(从网络和书籍上进行的总结)

(1)确定对象是否存活?1.引用计数法为对象添加一个计数器,每当有一个地方引用,计数器就加一,引用失效,计数减一,当计数器为0时,该对象就是不可能再被使用的(死亡的)。缺点:对象之间的循环依赖无法解决。例如:对象A 和 B都有字段x,赋值为A x = B;B x = A;2.可达性分析算法通过GC Roots的对象作为起始点,从这些节点开始搜索,当一个对象与GC Roots之间没有引用链相连,则证明是对象为不可达的即判定为可回收对象。可作为GC Roots对象:虚拟机栈(栈帧中的本地变量表

2020-08-10 15:39:20 118

原创 判断链表是否有环、以及环长、入环点---java实现

首先:以下都是借鉴漫画算法-小灰的算法之旅一书的思路实现的哦,如有不对之处还请指正哈,谢谢!!!!(1)判断链表是否有环:解决思路:p1节点和p2节点分别从头节点开始,p1每次前进一个,p2每次前进2个如果p1与p2可以相遇即代表链表有环(2)前提是如果链表存在环,环长确定思路:环长 = 速度差 * 前进次数p1与p2的相遇点开始,p1每次前进一个,p2每次前进2个,前进一次。计数一次,他俩再次相遇,计数器的值即为环长(3)前提如果链表有环:入环点确定思路:p1从头节点开始,p2从相

2020-07-14 11:34:23 191

原创 集合总结

List集合:ArrayList:ArrayList特性:依据上图的源码可以看出,底层使用的是object[]数组,具备数组相对应的特性(1)排列有序,顺序和传入的顺序一致(2)查询,删除速度快,原因是依据下标可以直接定位(3)线程不安全(4)容量不够时,依据扩容因子,扩容原理为当前容量*1.5+1(jdk1.6为1.5+1)(jdk1.7和jdk1.8为1.5)Vector:...

2020-04-08 16:30:50 66

原创 测试ReentrantReadWriteLock的相应特性

ReentrantReadWriteLock所在的包是java.util.concurrent.locks.ReentrantReadWriteLock,读写锁所包含的锁有俩中,一种是与读操作相关的锁也被称为共享锁,一种是与写操作相关的锁也被称为排它锁,在没有写入操作时,读锁之间互不排斥,多个线程都可以获取读锁,当在涉及写入操作时,只有一个线程可以获取写锁进行写入操作,也就是说,当在读取时,多个...

2020-04-01 16:35:21 161

原创 小白的多线程修行之路-多线程的死锁

java死锁是一个经典的问题,因为线程等待根本不可能被释放的锁,导致任务无法完成,在多线程中死锁时必须避免的,这会造成线程的假死。造成死锁的示例:public class ThreadTest { public static void main(String[] args) { try { MyThread myThread = new MyT...

2020-03-31 16:02:31 64

原创 String、StringBuffer、StringBuilder总结

String、StringBuffer、StringBuilder底层源码:String类:public final class Stringimplements java.io.Serializable, Comparable, CharSequenceString类是被final所修饰,证明该类不可被继承,/** The value is used for character st...

2020-03-29 12:34:30 100

原创 小白多线程修行之路1-3(线程的停止)

在Java中停止线程的三种方法(1)正常退出,run方法运行完毕后线程正常终止(2)使用stop方法强行终止,但是该方法同suspend和resume方法一样, 已经过期作废。(3)使用interrupt方法中断线程中断不了的线程-interrupt方法调用interrupt方法只是在当前线程打了一个终止的标记,不是真的停止线程的运行如下例所示:public class ...

2020-03-25 17:05:02 77

原创 springboot自动装配

本人小白一枚,以下是我自己所做的验证,其中如果有错误的地方,还请大神指正,谢谢!!!springboot自动装配的演化进程:第一阶段:初始阶段spring需要配置大量的xml配置文件,例如bean声明的定义,<bead id = ""/>,扫描配置文件的声明<context:component-scan base-package = ""/>等等大量基于xm...

2020-03-25 12:00:53 106

原创 小白多线程修行之路1-2(几个Thread类常见的方法记录)

currentThread():作用:返回代码段正在被那个线程调用的信息。/** * Returns a reference to the currently executing thread object. *返回当前执行线程对象的引用 * * @return the currently executing thread. */public static native ...

2020-03-24 16:21:32 133

原创 小白的多线程修行之路1(共享变量与不共享变量)

本人,小白一枚,以下是我自己学习过程中所做的一些研究,如果有错误之处,还请指出来,我会及时改正,谢谢哈!!!自定义线程类中的变量与其他线程可以有共享与不共享之分:(1)不共享数据的情况如下例所示:通过线程池去创建三个线程,也可采用其他的形式,这里所使用的是线程池去创建线程,每个线程都有自己的count变量,即try块中的count变量,每个线程自己减少自己的count变量,这样情况...

2020-03-24 12:17:57 397

原创 常见的注解总结笔记

@SpringBootApplication@Target注解:元注解之一,描述注解的使用范围。1.CONSTRUCTOR:用于描述构造器2.FIELD:用于描述域3.LOCAL_VARIABLE:用于描述局部变量4.METHOD:用于描述方法5.PACKAGE:用于描述包6.PARAMETER:用于描述参数7.TYPE:用于描述类、接口(包括注解类型) 或enum声...

2020-03-19 11:01:00 108

原创 生成线程的几种方式,以及他们的区别

生成线程的方式分别为:(1)继承Thread类(2)实现Runnable接口(3)实现Callable接口,通过Future得到线程执行信息(4)通过线程池创建线程1)通过继承Thread类实现对象优点:Thread类实现了Runnable接口,编写简单,如果需要访问当前线程,可以通过this获得缺点:java是单继承机制,扩展性降低备注:Synchro...

2020-03-18 12:50:04 474

原创 给定一个字符串String和一个char字符,输出一个数组,返回String中各字符到字符char的最短距离

//解题思路,获取String所有该字符串的下标,然后遍历下标,确定最小值,存入到数组中import java.util.ArrayList;import java.util.Arrays;public class Main { public static void main(String[] args) { String s = "lovewejoydata";...

2019-12-18 11:26:24 392

原创 写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。

public static int Add(int number1,int number2){//sum标识的是位运算结果 int sum = 0;//carry标识的是进位的结果 int carry = 0; while (number2!=0){//异或运算获取每一位的值 sum = number1^number2; System.out.pr...

2019-11-26 13:06:09 59

原创 JVM垃圾收集算法-笔记

垃圾收集器在收集之前所做的第一件事就是判断对象是否存活判断对象存活的方法:1.引用计数法(简单介绍):优点:实现简单,判定效率高缺点:无法解决互相引用的问题(例:对象objA和对象objB都有字段instance,复制objA = new objB和objB = new objA除此之外,这俩个对象再无任何调用,实际上这俩个对象已经不可能再被访问,但是他们因为互相引用对方,导致引用...

2019-11-12 13:04:13 52

原创 Linux部署mongodb

Linux环境部署Mongodb服务参考地址:https://www.jianshu.com/p/348615ebb7b6(1)在/usr/local目录下执行命令(mongoDB默认安装目录是这个):curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.0.6.tgz 下载.tgz压缩包(2...

2019-11-12 11:11:44 107

原创 linux环境部署nginx服务-自身总结

Linux部署nginx服务在/usr/local 目录下安装gcczlibpcreopenssl依赖包cd /usr/localYum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel(2)下载nginx安装包wgethttp://nginx.org/download/nginx-1.13.7...

2019-11-12 11:09:53 120

原创 小程序端调用支付回调接口-注意事项记录

以下为支付结果回调通知接口开发文档地址:https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=9_7&index=8这是接口开发文档中描述的注意信息微信签名验证有其自己的SDK,但坑的时他并没有上传到他的仓库中,所以需要把SDK下载下来打成jar包加载到你的仓库并在pom中配置一下即可使用,这样会减少开发的...

2019-11-12 11:05:57 818

原创 JVM虚拟机各个区域-笔记

JVM运行时内存区域主要为以下五个部分:程序计数器:看以看作是行号指示器,用于指示线程当前运行的节点Java堆:垃圾收集的主要区域,大多数对象分配实例的区域(各个线程共享的区域)Java虚拟机栈:各个线程私有,生命周期与线程相同,主要为Java方法服务本地方法栈:同Java虚拟机作用类似,为Navicat方法服务方法区:各个线程共享的区域用于存放类信息,即时编译后的代码,常量,...

2019-11-12 10:50:44 95

原创 linux环境下部署nginx服务

Linux部署nginx服务(1)在/usr/local 目录下安装gcc zlib pcre openssl依赖包Yum -y install gcc zlib zlib-devel pcre-devel openssl openss...

2019-07-03 09:03:06 134

原创 cookie,session,token

cookie是浏览器中能永久存储的一种数据,cookie有俩种类型:永久cookie:设置过期时间,会将cookie存储在硬盘中,直到到了设置的过期时间,cookie才会消失临时cookie:表示这个cookie生命周期为浏览器会话期间,只要关闭浏览器窗口,cookie就消失了。这种生命周期为浏览会话期的cookie被称为会话cookie。会话cookie一般不保存在硬盘上而是保存在内...

2019-03-25 16:51:19 87

原创 jsp笔记

forward和redirectforward:重定向 response.sendRediret("重定向路径")redirect:转发 request.getRequestDispatcher("转发路径").forward(request,response);forward是把另一个页面加载到本页面不改变浏览器路径redirect是跳转到另一个页面,会改变浏览器路径。jsp...

2019-03-25 16:30:16 82

原创 数据库SQL语句笔记

MYSQL数据库:limit:select * from tablename limit m,n;指从m+1天条数据开始去n条数据查看当前数据库最大连接数1、查看最大连接数show variables like '%max_connections%';2、修改最大连接数set GLOBAL max_connections = 200;ORACLE:1、查看当前的数...

2019-03-25 13:07:20 210 1

空空如也

空空如也

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

TA关注的人

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