自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 读写锁

读锁:​ tryAcquire中线程获取写锁的条件:读锁没有线程获取,写锁被获取并且被获取的线程是自己,那么该线程可以重入的获取锁。对于读写锁而言,需要保证写锁的更新结果操作对读操作是可见的,这样的话写锁的获取就需要保证其他的读线程没有获取到读锁。写锁的释放和ReentrantLock的锁释放思路基本相同,每次释放都是减少写状态,直到写状态值为0的时候释放写锁,后续阻塞等待的读写线程可以继续竞争锁。写锁:​ 读锁是支持重入的,能够被多个线程获取。在同一时刻的竞争队列中,如果没有写线程想要获取读写锁,

2021-02-21 21:07:41 99

原创 ThreadPoolExecutor参数及执行流程

任务提交给线程池如果线程池中线程数小于核心线程数,则创建一个新的线程来执行该任务。否则进入步骤3提交任务时,线程池中的空闲的线程数为0并且线程数等于核心线程数,则观察线程池中的任务队列是否已满,如果未满则将任务添加到任务队列,否则进入步骤4如果最大线程数大于核心线程数,并且总线程数小于最大线程数,则创建一个新的线程来执行该任务。否则进入步骤5当任务队列已满时,就执行拒绝策略(后续详解拒绝策略ThreadPoolExecutor public ThreadPoolExecutor(in..

2021-02-06 15:21:22 193

原创 JMM

Java内存模型Java内存模型是通过各种操作来定义的,包括对变量的读写操作,监视器的加锁和释放操作,以及线程的启动和合并操作。1、工作内存和主内存的交互规则(1)lock: 作用于主内存的变量,一个变量在同一时间只能一个线程锁定,该操作表示这条线成独占这个变量(2)unlock: 作用于主内存的变量,表示这个变量的状态由处于锁定状态被释放,这样其他线程才能对该变量进行锁定(3)read: 作用于主内存变量,表示把一个主内存变量的值传输到线程的工作内存,以便随后的load操作使用(4)load:

2021-01-31 19:51:05 153 1

原创 Java方法调用-静态分派&动态分派

1. 变量的静态类型 & 动态类型public class Test { static abstract class Human { } static class Man extends Human { } static class Woman extends Human { } // 执行代码public static void main(String[] args) { Human man = new Man(); //

2021-01-24 15:09:46 106

原创 Kubenetes集群部署及Istio示例项目部署

主机名IP地址角色k8s-master192.168.16.134主节点node1192.168.16.141工作节点1node2192.168.16.140工作结点2一、kubenetes集群部署1、关闭防火墙、selinux和交换分区[root@k8s-master ~]# systemctl stop firewalld[root@k8s-master ~]# setenforce 0[root@k8s-master ~]# sed -i '...

2021-01-14 19:33:17 409

原创 Hystrix学习

熔断、降级、熔断器服务降级指当某些功能出现异常、响应慢的情况,在其内部暂时舍弃对一些非核心的接口和数据的请求,而直接返回一个提前准备好的fallback(兜底方法)错误处理信息,保证核心业务的运行和用户油耗响应。服务熔断类似于保险丝,当某服务出现不可用或响应超时的情况时,为了防止整个系统出现雪崩,暂停对该服务的调用。一般熔断后都会对服务进行降级,调用轻量级的服务逻辑。Hystrix在运行过程中会向每个commandKey对应的熔断器报告成功、失败、超时和拒绝的状态,熔断器维护并统计这些数据,并根据这些

2021-01-08 17:33:12 166

原创 Eureka理论与REST API

CAP理论参考:https://blog.csdn.net/w372426096/article/details/80437198概述CAP理论作为分布式系统的基础理论,描述的是分布式系统的以下三个特性:(1)一致性(2)可用性(3)分区容错性最多满足其中两个特性,CA、CP、AP,无法同时满足CAP。**分区容错性:**指的分布式系统中的某个节点或者网络分区出现了故障的时候,整个系统仍然能对外提供满足一致性和可用性的服务。也就是说部分故障不影响整体使用。事实上我们在设计分布式系统是都会考虑

2020-12-30 19:05:56 101

原创 Ribbon执行流程

@LoadBalanced@Target({ElementType.FIELD, ElementType.PARAMETER, ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)@Documented@Inherited@Qualifierpublic @interface LoadBalanced {}是一个标志注解,标记RestTemplate后@LoadBalancedpublic RestTemplate restTe

2020-12-25 10:24:21 555

原创 SpringCloud Gateway

Gateway网关Gateway是在Spring生态系统之上构建的API网关服务,基于Spring 5,Spring Boot 2和 Project Reactor等技术。Gateway旨在提供一种简单而有效的方式来对API进行路由,以及提供一些强大的过滤器功能, 例如:熔断、限流、重试等。1.Spring Cloud Gateway 具有如下特性:基于Spring Framework 5, Project Reactor 和 Spring Boot 2.0 进行构建;动态路由:能够匹配任何请

2020-12-18 15:31:29 169 1

原创 docker基础

docker安装手动安装安装依赖包sudo yum install -y yum-utils device-mapper-persistent-data lvm2添加国内yum软件源yum-config-manager --add-repo https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.reposudo sed -i 's/download.docker.com/mirrors.ustc.edu.cn\/docker

2020-12-13 18:41:26 85

原创 Jwt与网关鉴权

使用GateWay+JWT实现网关鉴权JWT​ JWT(JSON Web Token), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准,该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密。JWT的组成Header:base64编码的Json字符串Paylo

2020-12-05 14:02:16 817

原创 SpringCloud学习(一)

Eureka组件Eureka包含两个组件:Eureka Server和Eureka ClientEureka Server​ Eureka Server提供服务注册服务,各个节点启动后,会在Eureka Server中进行注册,这样Eureka Server中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到。Eureka Server本身也是一个服务,默认情况下会自动注册到Eureka注册中心。​ 如果搭建单机版的Eureka Server注册中心,则需要配置取

2020-11-26 22:00:05 141

原创 Vue路由

嵌套路由是用来渲染通过路由映射过来的组件,当路径更改时,中的内容也会发生更改// 一级路由const Foo = { template: ‘foo’ }const Bar = { template: ‘bar’ }const routes = [{ path: ‘/foo’, component: Foo },{ path: ‘/bar’, component: Bar },{ path: ‘*’, redirect: “/foo”},]// 嵌套路由 index

2020-11-21 23:02:09 87

原创 蜗牛学院SpringBoot第一周总结

常用配置项配置项默认值说明debugfalse开启调试server.port8080配置端口号server.servlet.context-path/上下文路径spring.mvc.date-format输入参数的日期格式spring.jackson.date-formatJSON响应的日期格式spring.jackson.time-zone响应JSON日期的时区spring.thymeleaf.cachetruethy

2020-11-14 10:44:12 203

原创 蜗牛学院Vue学习总结

v-on绑定事件,语法:v-on:click="say" or v-on:click="say('参数', $event)"简写:@click="say",说明:绑定的事件从methods中获取如下,使用逗号分割可以绑定多个事件<div v-on="click:onClick, keyup:onKeyup, keydown:onKeydown"></div>事件修饰符.stop 阻止冒泡,调用 event.stopPropagation(), 比如说一个div下有一个弹

2020-11-06 09:03:23 187 1

原创 Java并发中的线程安全性

1、线程安全性:对象的不变性条件不会在并发访问的条件下被破坏。2、类中有复合操作(一个方法内操作两个相关联的受不变性条件约束的状态变量),不能仅靠委托实现线程安全性,需要提供加锁机制。3、迭代器快速失败:单线程中对象如果不是调用iterator.remove()方法删除元素而是直接删除就会导致异常,实际上该异常只是对问题的预警指示器,并不解决并发问题。4、unmodifyList/Map原理:将参数list/map传给父类的final引用,返回一个不可修改的List/Map视图。public sta

2020-11-01 21:26:03 212

原创 Java垃圾收集器

一、Serial收集器Serial收集器是最基本、发展历史最悠久的收集器,曾经(在JDK 1.3.1之前)是虚拟机新生代收集的唯一选择。特性:这个收集器是一个单线程的收集器,但它的“单线程”的意义并不仅仅说明它只会使用一个CPU或一条收集线程去完成垃圾收集工作,更重要的是在它进行垃圾收集时,必须暂停其他所有的工作线程,直到它收集结束。Stop The World应用场景:Serial收集器是虚拟机运行在Client模式下的默认新生代收集器。优势:简单而高效(与其他收集器的单线程比),对于限定单

2020-10-23 22:34:12 138

原创 Mybatis逆向工程

所需依赖和插件<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>2.1.6.RELEASE</version> </dependency>

2020-10-15 11:09:09 75

原创 深入理解Java虚拟机第二章

1、Jvm内存布局(1)程序计数器:线程私有,可以看作是当前线程所执行的字节码的行号指示器。 分支、 循环、 跳转、 异常处理、 线程恢复等基础功能都需要依赖这个计数器来完成。(2)虚拟机栈:线程私有,每个方法被执行的时候, Java虚拟机都会同步创建一个栈帧用于存储局部变量表、操作数栈、动态连接、方法出口等信息。每一个方法被调用直至执行完毕的过程,就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。(3)本地方法栈:线程私有, 与虚拟机栈所发挥的作用是非常相似的, 其区别只是虚拟机栈为虚拟机执行Java

2020-10-10 21:12:45 147

原创 自定义同步工具&JMM

自定义同步工具​ 条件等待:在条件等待中存在一种重要的三元关系,加锁、wait方法和一个条件谓词,在条件谓词中包含多个状态变量,状态变量由一个锁来保护,在测试条件谓词之前必须先持有这个锁。每当等待一个条件时,一定要确保条件谓词变为真时通过某种方式发出通知。// 状态依赖的标准形式void stateDependentMethod() throws InterruptedException{ // 使用一个锁来保护条件谓词 synchronized(lock) { wh

2020-09-25 11:43:27 110

原创 减少锁竞争与显式锁

减少锁竞争的方式1、减少锁的持有时间,范围​ 减少同步代码块中的代码量2、对锁进行分解,缩小粒度​ 由获取方法所在类的对象锁改为获取成员属性对象锁3、锁分段​ 为每个数组中元素对象分配不同的锁public void method() { for (int i = 0; i < nodes.length; i++) { // 为不同的节点分配不同的锁 synchronized (locks[i % N_LOCKS]) { Node node = nodes[i];

2020-09-18 16:20:54 163

原创 Java线程池原理

线程池种类(1)newFixedThreadPool:固定线程数量的线程池​ 可控制线程最大并发数(同时执行的线程数);超出的线程会在队列中等待。(2)newCachedThreadPool:支持最大为Integer.MAX_VALUE的线程数量​ 线程数无限制;有空闲线程则复用空闲线程,若无空闲线程则新建线程;一定程序减少频繁创建/销毁线程,减少系统开销。(3)newSingleThreadExecutor:线程数量为1的FixedThreadPool​ 有且仅有一个工作线程执行任务;所有任务

2020-09-12 16:05:48 77

原创 Java虚拟机基础

1.什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”?Java虚拟机是一个可以执行Java字节码的虚拟机进程。Java源文件被编译成能被Java虚拟机执行的字节码文件。 Java被设计成允许应用程序可以运行在任意的平台,而不需要程序员为每一个平台单独重写或者是重新编译。Java虚拟机让这个变为可能,因为它知道底层硬件平台的指令长度和其他特性。2.Java内存结构?《24个Jvm面试题总结及答案》方法区和对是所有线程共享的内存区域;而java栈、本地方法栈和程序员计数器是运行是线程私

2020-09-04 20:17:40 113

原创 Java虚拟机初学习(五)

1 内联概念:把函数调用的方法直接内嵌到方法内部,减少函数调用的次数2 函数的调用过程: 调用某个函数实际上将程序执行顺序转移到该函数所存放在内存中某个地址,将函数的程序内容执行完后,再返回到 转去执行该函数前的地方。这种转移操作要求在转去前要保护现场并记忆执行的地址,转回后先要恢复 现场,并按原来保存地址继续执行。也就是我们常说的压栈和出栈。3 应用场景:当我们在调用频率很高的地方经常调用一个其他函数,但是函数体很小,函数频繁的函数跳转影响性能。这时候jvm能够自动识别热点函数,到达阀值触发jit优化

2020-08-29 20:51:03 304

原创 Java虚拟机初学习(四)

及时编译通常情况下,Java程序最初都是被编译为字节码,通过解释器进行解释执行,解释执行能够获得更好的启动时间。某些被频繁执行的方法或者代码块,会被JVM认定为“热点代码”。在运行时JVM会把这些热点代码编译成与本地平台相关的机器码,并且进行各种层次的优化,以提高执行效率。完成这个任务的编译器称为即时编译器(JIT编译器)。Java 虚拟机是根据方法的调用次数以及循环回边的执行次数来触发即时编译的。热点代码:运行过程中会被即时编译器编译的“热点代码”有两类:1、被多次调用的方法。2、被多次执行的

2020-08-22 10:15:57 85

原创 Java虚拟机初学习(三)

一、Java内存模型线程间的 happens-before 关系。解锁操作 happens-before 之后(这里指时钟顺序先后)对同一把锁的加锁操作。volatile 字段的写操作 happens-before 之后(这里指时钟顺序先后)对同一字段的读操作。线程的启动操作(即 Thread.starts()) happens-before 该线程的第一个操作。线程的最后一个操作 happens-before 它的终止事件(即其他线程通过 Thread.isAlive() 或 Thread.join()

2020-08-14 22:31:27 92

原创 Java虚拟机初学习(二)

Java对象的内存布局对象头每个对象都有一个对象头,对象头包括两部分,标记信息和类型指针。标记信息包括哈希值,锁信息,GC信息。类型指针指向这个对象的class。两个信息分别占用8个字节,所以每个对象的额外内存为16个字节。很消耗内存。压缩指针为了减少类型指针的内存占用,将64位指针压缩至32位,进而节约内存。之前64位寻址,寻的是字节。现在32位寻址,寻的是变量。再加上内存对齐(补齐为8的倍数),可以每次寻变量都以一定的规则寻找,并且一定可以找得到。内存对齐内存对齐的另一个好处是,使得CP

2020-08-08 23:14:25 266

原创 Java虚拟机初学习(一)

一、基本数据类型 在 Java 虚拟机规范中,局部变量区等价于一个数组,并且可以用正整数来索引。除了 long、double 值需要用两个数组单元来存储之外,其他基本类型以及引用类型的值均占用一个数组单元。也就是说,boolean、byte、char、short 这四种类型,在栈上占用的空间和 int 是一样的,和引用类型也是一样的。因此,在 32 位的 HotSpot 中,这些类型在栈上将占用 4 个字节;而在 64 位的 HotSpot 中,他们将占 8 个字节。如果是64位Hotsp...

2020-07-31 17:57:01 152

转载 jar包和war包的区别

转自:https://www.cnblogs.com/banml/p/11767305.html一、概念jar包:JAR包是类的归档文件,JAR 文件格式以流行的 ZIP 文件格式为基础。与 ZIP 文件不同的是,JAR 文件不仅用于压缩和发布,而且还用于部署和封装库、组件和插件程序,并可被像编译器和 JVM 这样的工具直接使用。war包:war包是JavaWeb程序打的包,war包里面包括写的代码编译成的class文件,依赖的包,配置文件,所有的网站页面,包括html,jsp等等。一个war包可以理

2020-05-19 10:37:03 230

原创 百度网盘客户端二维码无法显示及第三方无法登录问题的解决方法

1、win + r组合键打开,输入inetcpl.cpl,点回车2、点击“安全”,点击“自定义级别”3、找到“脚本”选项,将“Java小程序脚本”和“活动脚本”由“禁用”改为“启用”

2020-05-19 09:15:20 21791 9

转载 作为程序员最好掌握的英语词汇

转自:https://blog.csdn.net/qq_26676207/article/details/81535153Aabstract 抽象的abstract base class (ABC)抽象基类abstract class 抽象类abstraction 抽象、抽象物、抽象性access 存取、访问access function 访问函数access level访问级别...

2020-04-12 18:15:44 272

原创 静态内部类的初始化问题

单例模式的静态内部类方法的安全性是因为在类加载的时候静态属性初始化仅一次,之后便不会再进行初始化,达到只有一个实例对象的目的,且静态内部类里面的静态属性或静态代码块不会在外部类加载的时候进行初始化,只在内部类加载的时候加载。public class StaticInnerClass { static { System.out.println("OuterClass"); } priva...

2020-03-19 15:07:00 1009

转载 为什么大公司愿意招聘实习生

我个人,因为思维水平较低,想不出来为什么一些公司在很多职位转正率很低的情况下还是愿意招聘实习生。参考下面文章。转自:51金融圈 在毕业之际,大家会发现很多公司会和学校合作,为实习生们提供实习的机会,而且这些公司很多都是知名的大企业,对于实习生一没工作经验二没社会阅历,为何还有很多大公司愿意给他们机会,愿意去培养他们呢? 首先最简单的一个原因就是实习生的薪资低,有很多很基础的工作并不需要招社会...

2020-03-17 14:48:38 1148

原创 Java程序连接Redis

通过Maven依赖引入jar包<dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> <version>2.8.0</version></dependency>通过一个...

2020-03-16 22:28:30 131

原创 返回一个整型数组中最长的升序序列

大致思路是动态地维护一个升序数组,如果新加入的数比该数组中最大的数还大,就加入该数组,如果比该数组中最大的数小,那么就用它替换掉该数组中第一个比它大的数。我写的这个时间效率上还行,内存占用的大,仅提供思路。class Solution { public int lengthOfLIS(int[] nums) { if(nums.length == 0) { return 0; ...

2020-03-16 11:47:24 190

原创 单链表逆置

public Node reverseLink(Node head) { if (null == head) { return head; } Node next = null; Node pre = null; while(head != null) { next = head.next; head.next = pre; pre = head;...

2020-03-16 11:25:32 204

原创 自定义链表实现简单的队列poll()、offer()、peek()方法

class Node { int val; Node next; public Node(int val) { this.val = val; this.next = null; }}class FakeQueue { Node head; Node tail; public void offer(int val) { Node node = new Node(val...

2020-03-16 11:18:58 839

原创 手动数据库连接池

idea中添加mysql-connector依赖<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.16</version></dep...

2020-03-16 11:15:13 177

空空如也

空空如也

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

TA关注的人

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