自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 JAVA实现约瑟夫环(环形单链表)

在面试的时候遇到了这个问题,总结一下:首先介绍一个约瑟夫环:约瑟夫环问题的起源来自犹太历史学家约瑟夫和他的朋友以及39其余的犹太人,总共41人为了躲避敌人,藏在一个山洞中,39个犹太人决定宁愿死也不被敌人抓到,于是决定自杀,所有人排成一个圈,由第一个人开始报数,每当数到3,就自杀。 这个游戏接着从自杀的位置开始,还是从1数到3。依次类推,约瑟夫将朋友和自己安排在了16和31的位置,最后顺利逃过了自杀这一劫,因为最后就剩下他和朋友1.使用arrayListimport java.util.Arr

2021-04-10 17:40:45 3347 1

原创 JAVA使用 Atomic,Unsafe实现自旋锁(可重入锁)

JAVA使用 Atomic,Unsafe实现自旋锁(可重入)自旋锁(spinlock,忙等锁):是指当一个线程在获取锁的时候,如果锁已经被其它线程获取,那么该线程将循环等待,然后不断的判断锁是否能够被成功获取,直到获取到锁才会退出循环,在多线程情况下可能引起CPU升高,甚至导致系统死锁1.Atomic实现(可重入)import lombok.extern.slf4j.Slf4j;import java.util.concurrent.Executors;import java.util.con

2021-03-01 14:13:42 527

原创 java实现消息队列以及延迟消息(队列DelayQueue)

1.java实现延迟消息(队列DelayQueue)DelayQueue是一个支持延时获取元素的无界阻塞队列。队列使用PriorityQueue来实现。队列中的元素必须实现Delayed接口,在创建元素时可以指定多久才能从队列中获取当前元素。只有在延迟期满时才能从队列中提取元素。缓存系统的设计:这里使用DelayQueue保存缓存元素的有效期,一个线程(生产者)设置失效实现循环添加消息,使用一个线程(消费者)循环查询DelayQueue,一旦能从DelayQueue中获取元素时,表示缓存有效期到了

2021-02-26 10:11:22 2138 5

原创 ouath2+mybatis plus认证搭建认证服务器(代码持续更新)

1.ouath2+jwt+jdbc(spring data jpa)搭建和使用一、简单的介绍一下OAuth2是开放授权的一个标准,允许用户授权B应用不提供帐号密码的方式去访问该用户在A应用服务器上的某些特定资源。说人话就是通过登录微信扫码方式来,登录到csdn而不想注册账号这里使用我先前搭建好的项目环境(如果使用该代码记得改一下数据名和密码)2.1OAuth2四种授权模式(认证服务器)授权码模式(启动码云上面的ouath项目,端口为1200)​ 授权码模式(authorization

2021-02-24 19:23:29 549

原创 HAproxy + keepalive + Kubeadm部署kubernetes(k8s)HD高可用集群(1.7)

HAproxy + keepalive + Kubeadm部署kubernetes(k8s)HD高可用集群(1.7)简单描述一下HAproxy + keepalive的作用keepalive的作用是虚拟IP,让多个master节点公用一个虚拟IP,当主节点挂掉之后,虚拟IP通过选举飘逸到剩下二个节点其中一个Kubeadm的init操作就会init这个IP节点,当IP节点可以多用时,自然实现了高可用HAproxy 的作用在于实现apiserve的负载均衡 权重配置,也可以用nginx1.mas

2021-02-04 15:51:29 923

原创 使用kubeadm快速部署一个kubernetes集群(k8s)

1.使用kubeadm快速部署一个K8s集群1. 安装要求在开始之前,部署Kubernetes集群机器需要满足以下几个条件:一台或多台机器,操作系统 CentOS7.x-86_x64硬件配置:2GB或更多RAM,2个CPU或更多CPU,硬盘30GB或更多集群中所有机器之间网络互通可以访问外网,需要拉取镜像禁止swap分区2.虚拟机设置master和node节点角色ip组件安装master192.168.100.99kube-apiserver、kube-con

2021-01-18 17:14:30 410

原创 kubectl ,docker常用命令和pod测试(实时更新)

kubectl ,docker常用命令和pod测试(实时更新)1.创建nginx的pod测试#创建vi nginx-rc.yamlapiVersion: v1kind: ReplicationControllermetadata: name: nginxspec: replicas: 3 selector: app: nginx template: metadata: labels: app: nginx spec:

2021-01-13 15:38:45 897

原创 分布式事务解决方案之seata集成nacos测试(AT模式)

1.分布式事务解决方案之seata集成nacos测试(AT模式)1.简单介绍一下seata的AT模式(数据库隔离级别为: 读未提交)AT模式:一阶段:2个微服务的数据库(Resource Manager 资源管理器,下面2个服务的事务简称为tx1 和tx2),会向seata服务器(Transaction Coordinator,事务协调器)注册一个分支事务会生成一个全局锁以Xid为识别,当双方代码执行完,无异常后,开始申请第二阶段的资源提交二阶段:此时tx1会优先尝试获取全局锁(拿不到 全局

2020-09-25 16:08:29 824

原创 Windows和服务器Docker搭建Seata1.3(整合nacos当注册中心和配置中心)

Seata环境搭建​ 中文官方文档搭建以及官方解读可以看这里版本信息: nacos 1.30 seata:1.3.01.简单介绍一下seata的AT模式(数据库隔离级别为: 读未提交)AT模式:一阶段:2个微服务的数据库(Resource Manager 资源管理器,下面2个服务的事务简称为tx1 和tx2),会向seata服务器(Transaction Coordinator,事务协调器)注册一个分支事务会生成一个全局锁以Xid为识别,当双方代码执行完,无异常后,开始申请第二阶段的资

2020-09-25 14:51:45 639

原创 Redis分布式锁之redisson

Redis分布式锁之redisson常用的redis解决方案:redisson官网,官方讲解可以点击这里redisson实现分布式锁原理:线程首先会尝试获取锁,如果获取锁成功,会执行加锁操作并执行业务代码,如果没有成功会使用自旋锁方式不断尝试获取锁redisson为防止死锁方式默认加锁时间为30s,看门狗过30秒查看是否依然持有锁,如果持有会延长时间,当业务执行完毕释放锁1.maven依赖 <dependency> <groupId>or

2020-09-25 10:22:45 384

原创 docker部署springboot

docker环境部署spring boot项目(环境准备:VMware 14,Centos7,Xshell5)docker部署 spring boot项目大致结构, 在虚拟机上面使用docker创建一个沙箱里面相当于一个小系统,然后把java项目发布在这个沙箱里面,将沙箱端口映射到服务器对应端口,外部通过访问服务器该端口来访问沙箱里面的项目​ docker官网1.docker环境安装1.1docer安装(执行)# 安装Docker( 参数-y 默认安装时 自动选择Y)yum -y inst

2020-09-03 15:14:27 380

原创 1.单例模式常用方法及反射序列化测试

1.单例模式​ 单例模式,顾名思义就是只有一个实例,并且她自己负责创建自己的对象,这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。下面我们来看下有哪几种实现方式吧。1.1懒汉模式​ 实例在用到的时候才去创建,“比较懒”,用的时候才去检查有没有实例,如果有则返回,没有则新建。​ 缺点 : 多线程访问时,会出现2个对象(线程不安全)/** * TODO(描述) * 懒汉模式 * @author vioelt * @Title LazySingleton

2020-06-28 10:53:51 189

原创 HashMap学习篇put()与resize()的扩容机制(JDk1.8)

HashMap学习篇resize()的扩容机制(JDk1.8)先提一下HashMap的底层数据结构为数组+链表+红黑树。1.数据初始化 //将之前的数组的数据保存出来 Node<K,V>[] oldTab = table; //获取之前保存数据的长度,防止未初始化报错 int oldCap = (oldTab == null) ? 0 : oldTab.length; //获取之前扩容临界值(capacity*l

2020-05-28 17:23:08 516

原创 JVM的垃圾收集器,GC日志分析(HotSpot,JDK1.8附上GC思维导图)

JVM的垃圾收集器,GC日志分析(HotSpot)-server与-client参数Server jvm的初始空间会大一些,默认使用的是并行垃圾回收器,启动慢,运行快Client jvm相对保守一些,初始空间会小一些,使用串行垃圾回收器,他的目标是为了让JVM的启动速度更快,但是运行速度会比Server jvm慢一些JVM在启动的时候,会根据硬件和操作系统自动选择使用Server还是Client类型的JVMJVM选择模式:32位操作系统:如果操作系统为windows系统,不论硬件配置如何

2020-05-12 14:08:20 885

原创 G1垃圾收集器(jdk9中将G1变成默认的垃圾收集器)

G1垃圾收集器(jdk9中将G1变成默认的垃圾收集器)G1垃圾收集器是在jdk1.7中正式使用的全新的垃圾收集器以替代CMS。G1的设计原则就是简化JVM性能调优,开发人员只需要简单的三步即可完成调优:第一步,开启G1垃圾收集器第二步,设置堆的最大内存第三步,设置最大的停顿时间G1中提供了三种模式垃圾回收模式,Young GC、Mixed GC 和 Full GC,在不同的条件下被触发。原理:G1垃圾收集器相对比其他收集器而言,最大的区别在于它取消了年轻代、老年代的物理划分,取而代之的是

2020-05-12 13:57:58 2029

原创 EasyExcel(根据条件动态合并单元格的重复数据))

注:本文判断单元格数据重复是通过当前单元格和上一行同列的单元格数据是否相同(官方地址: https://alibaba-easyexcel.github.io/index.html)1.第一列单元格如果数据相同,并且当前单元格与上一行同列的单元格数据相同时,合并当前单元格和上一行同列的单元格项目结构 <dependency> <groupId&g...

2020-04-24 10:51:48 11007 31

原创 解决:com.netflix.client.ClientException: Load balancer does not have available server for client:xxx

我的解决方法是将feign服务的erukea的fetchRegistry改为trueeureka: # instance: # hostname: localhost instance: preferIpAddress: true instance-id: ${spring.application.name}:${server.port} client:...

2020-03-05 16:26:59 2332

原创 Feign远程调用

Feign远程调用本文本人亲测,未重写feign的接口,启动三个服务1.eruke-service(作为注册中心)配置文件server: port: 1999spring: application: name: eruke-serviceeureka: instance: hostname: localhost client: registerW...

2020-03-05 16:23:41 929 1

原创 Jvm指令全集手册

栈和局部变量操作将常量压入栈的指令aconst_null 将null对象引用压入栈iconst_m1 将int类型常量-1压入栈iconst_0 将int类型常量0压入栈iconst_1 将int类型常量1压入栈iconst_2 将int类型常量2压入栈iconst_3 将int类型常量3压入栈iconst_4&nbsp...

2020-03-02 19:29:37 537

原创 apollo集成consul和动态刷新数据源

1.apollo集成consulApollo 本地安装所需要的环境​ Java版本要求 1.8+ ;​ Mysql版本要求 5.6.5+​ consul注册中心代码拉取​ 这里借用一下大佬的阿云仓库,已经将配置中心修改成了consulhttps://gitee.com/pcloud-lucas/apollo-consul集群环境Apollo目前支持以下环境:DEV &gt...

2020-01-06 16:45:26 2553 2

原创 JVM的内存结构(堆,栈,方法区)与编译过程

JVM的结构(堆,栈,方法区)与编译过程编译过程java文件通过javac的编译成class文件,由于不同的操作系统识别的机器码不同(机器码为0,1组成。汇编语言在不同的系统上面运行需用编写不同的代码来支持汇编语言的运行),在这个方面java使用了jvm虚拟机来实现一处编译四处运行,是通过对应系统的jvm来编译class文件来让不同的操作系统进行识别。jvm的结构程序在执行之前先要把j...

2019-10-10 18:00:22 754 1

原创 springCloud五大神兽(思维导图)

SpringCloud的五大件服务发现——Netflix Eureka客服端负载均衡——Netflix Ribbon断路器——Netflix Hystrix服务网关——Netflix Zuul分布式配置——Spring Cloud Config1 基于Eureka(服务注册中心)的服务治理Eureka它主要包括两个组件:Eureka Server 和 Eureka Client...

2019-09-05 00:05:17 978

原创 Spring框架Bean与controller安全问题与其作用域

1.Spring框架Bean与controller安全问题​ Spring作为一个IOC/DI容器,帮助我们管理了许许多多的“bean”。但是Spring框架创建bean对象,在默认情况却并没有保证这些对象的线程安全,需要由开发者自己编写解决线程安全问题的代码。​ Spring框架默认使用单例模式,只有一个共享实例存在,每次对这个bean的请求都会返回这个唯一的实例,并且交给IOC容器帮助我们...

2019-09-01 19:00:16 926

原创 spring的IOC、DI、容器和AOP思想

1 spring的IOC、DI、容器和AOP思想Spring是分层的 Java SE/EE应用 full-stack 轻量级开源框架,以 IoC(Inverse Of Control:反转控制)和 AOP(Aspect Oriented Programming:面向切面编程)为内核 。 DI为依赖注入1.2 spring的ioc(控制反转)与Di(依赖注入)控制反转的简单理解就是将创建对象的...

2019-08-30 16:44:18 286

原创 springmvc的执行流程

1.1SpringMvc的执行流程①用户通过发送请求到前段控制器(DispatcherServlet )②DispatcherServlet收到请求调用HandlerMapping处理器映射器。③处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找,简单理解就是找到能够执行的controller ),生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherSer...

2019-08-30 11:10:08 247

原创 Redis有哪几种持久化方式?优缺点是什么

1.1 Redis有哪几种持久化方式?优缺点是什么1.1.2为什么有持久化由于Redis的数据都存放在内存中,如果没有配置持久化,redis重启后数据就全丢失了,于是需要开启redis的持久化功能,将数据保存到磁盘上,当redis重启后,可以从磁盘中恢复数据。Redis提供两种持久化方式,RDB和AOF;与RDB不同,AOF可以完整的记录整个数据库,而不像RDB只是数据库某一时刻的快照;...

2019-08-29 19:37:26 5999

原创 什么是面向对象,以及什么是类和对象

什么是面向对象,以及什么是类和对象​1.1面向过程与面向对象的区别​ 面向对象是一种现在最为流行的程序设计方法 。将面向过程与面向对象进行比较。​ 首先这两个种都是一种编程思维, 在一些简单的动作看来面向过程可能更加容易实现,它不用创建对象来进行实现,执行几步或一步完成。但是面对复杂动作面向对象来实现可能更加简单。二者之间做项目谁最简单不是绝对的​ 面向过程(pop):以需要做的事为目标...

2019-08-11 19:04:04 5155

EasyExcel.zip

EasyExcel合并数据合并重复数据,判断单元格数据重复是通过当前单元格和上一行同列的单元格数据是否相同

2020-04-24

空空如也

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

TA关注的人

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