自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Spring Boot Admin监控搭建-nacos版本

Spring Boot Admin监控搭建-nacos版本Spring Boot Admin介绍Spring Boot Admin 是github上一款用于Spring Boot 的监控管理的开源项目,通过http直接注册或者通过注册中心注册的方式,实现了Spring Boot应用上的一些常见监控项,具体功能点如下:显示应用程序的监控状态应用程序上下线监控查看 JVM,线程信息可视化的查看日志以及下载日志文件动态切换日志级别Http 请求信息跟踪其他监控点详细监控项可到githup上

2022-04-25 21:04:22 3434 6

原创 深入jvm之对象如何进入老年代

简介我们知道,整个jvm堆分为新生代和老年代,新生代的对象在进行垃圾回收的时候,可能会进入到老年代,那么我们知道年轻代的对象是如何进入到老年代的吗?年轻代空间分配新生代分成Eden,Survivor To,Survivor From三个区域,默认空间比例为8:1:1,可以通过-XX:SurvivorRadio参数配置,来修改比例大小,比如 -XX:SurvivorRadio配置成2,则表示年轻代空间比例为 2:1:1。下面以1GB的年轻代空间为例,如图所示:当有新的对象分配的时候,首先分配到Ede

2021-09-13 19:53:36 6443

原创 深入elasticsearch(三):elasticsearch选主流程详解

es选主流程源码解析es采用类Bully算法来做主节点选举,Bully算法:Leader选举的基本算法之一。它假定所有节点都有一个唯一的ID,使用该ID对节点进行排序。任何时候,当前的Leader都是节点中ID最高的那个。该算法实现简单,但当Leader节点网络故障或者不稳定时会有问题。比如,Master负载过重假死,集群选举第二大的ID为Leader,这时原来的Master恢复,再次被选为新主,然后再循环。。。ES通过推迟选举,直到当前的Master失效后才重新选举,当前Master不失效,就不

2021-08-30 20:12:19 1574

原创 spring实现定制化网关,动态修改url

文章目录前言源码分析找到入口代码实践总结前言在项目中,我们常常使用api网关来统一对接前端的请求,在api网关中,通过Rpc调用后端服务,理论上每一个rpc服务都要有一个固定url与之匹配,按照正常的开发流程, @RequestMapping("/test.do") @ResponseBody public String test(){ return xxService.xxx(); } 我们会写出如上的代码,每次都是固定的代码格式,url一开始就

2021-05-27 17:41:46 1849 2

原创 聊一聊synchronized锁的状态与升级

文章目录一、简介二、对象头三、锁的状态一、简介java在1.6之后为了减少获得锁和释放锁带来的性能消耗,引入了偏向锁和轻量级锁的概念,在jdk 1.6中,锁分为四种状态,从低到高为:无锁,偏向锁,轻量级锁,重量级锁。这几个状态会随着线程竞争不断升级,但是升级后的状态不会再降级。二、对象头在介绍锁的状态升级之前,我们先了解一下,java对象头的基本概念。java对象头分为三个部分:Mark Word对象数据的指针数组对象的长度(如果是数组的话)synchronized用的锁是存在Ja.

2021-01-04 19:09:29 795 1

原创 如何用redis实现延时队列

在日常开发中,有许许多多的延时处理场景,比如订单超时支付,准点推送抢购通知等等。那么如何实现这种场景呢?常见的几种方案有:1.quartz定时器方案,2.应用内部延时队列3.Rabbitmq或kafka的延时队列这几种方案都有对应的优缺点,比如定时器无法精准扫描,内部延时队列在应用宕机时会丢失,RabbitMq难以支持任意时间段的延时处理等等,本文主要是为了探讨一种新的方案,重点就不放在...

2019-12-25 22:37:23 2758 2

原创 记一次poi导入excel引起cpu跑满的问题

记一次poi导入引起生产cpu跑满的问题生产应用机器配置:8C 16G周日突然收到告警,cpu持续15分钟空闲时间小于10%,赶紧联系运维要日志,通过分析dump_high_cpu PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 28830 jbossuse 20 0 12....

2019-04-07 10:58:36 8508 3

原创 深入elasticsearch(二):springboot通过jestClient操作es

SpringBoot版本:2.2.1.RELEASEelasticsearch:5.4.2jest:5.3.4除springboot外相关的pom文件如下<dependency> <groupId>io.searchbox</groupId> <artifactId>jest</artifactId> <version>5.3.4</version></dependency>

2021-06-10 22:41:15 646

原创 一文读懂Spring循环依赖

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录什么是循环依赖如何解决官方的几点建议属性注入如何解决循环依赖关键词介绍为什么要用三级缓存推断分析代码举证原因分析结论什么是循环依赖循环依赖主要是 A服务依赖B服务,B服务又依赖A服务,两者之间的调用关系形成了一个环,也就是环形调用,这种一般是由于不规范的的编码行为导致。如何解决在Spring 中,依赖注入有两种方式,以xml配置为例,属性注入 2. 构造器注入 官

2021-06-04 15:22:44 493 1

原创 深入探讨synchronized和ReentrantLock

synchronized 和reentrantlock 在java俗称隐式锁和显示锁,其中reentrantlock 包含两种实现ReentrantLock 和 ReentrantReadWriteLock悲观锁和乐观锁悲观锁又名独占锁,代表是synchronized,它的设计思路是假设一定会发生冲突,所以在获取到锁的时候会阻塞其他线程,这样实现的好处是简单安全,但是代表是synchronized属于重量级锁,在挂起线程和恢复线程的时候,需要从用户态切换到内核态,会带来很大的性能开销.乐观锁的代表是C

2020-12-23 19:18:50 982

原创 深入elasticsearch(一):搭建elasticsearch环境及安装elasticsearch_head插件

安装elasticsearch下载及安装,以windows为示例https://www.elastic.co/cn/elasticsearch/下载完成后解压安装,一直下一步,安装完成后。在安装的文件夹\bin目录里,运行elasticsearch.bat文件。运行elasticsearch,一定要jdk1.8以上。看到如图所示,表示启动成功,也可以登录http://localhost:9200/看是否登录成功。elasticsearch 启动成功后,并没有图形化界面,我们在安装elast

2020-11-24 19:30:30 222

原创 哲学家就餐问题之java解决

文章目录前言如何解决这个问题呢1.线程粗化2.奇偶互反3.最少保证前言哲学家就餐问题是在计算机科学中的一个经典问题,用来演示在并行计算中多线程同步(Synchronization)时产生的问题。有五个哲学家,他们共用一张圆桌,分别坐在五张椅子上。在圆桌上有五个碗和五支筷子,平时一个哲学家进行思考,饥饿时便试图取用其左、右最靠近他的筷子,只有在他拿到两支筷子时才能进餐。进餐完毕,放下筷子又继续思考。代码描述:public class PhilosopherThread extends Thread

2020-11-11 19:34:08 6177 7

原创 HashMap不得不说的故事

概要Map属于Java常用的数据结构,其中HashMap和ConcurrentHashMap是使用非常高频的两个类HashMapHashMap根据键的HashCode值存储数据,大多数情况下可以通过hash直接定位到它的值,因而具有很快的访问速度,但遍历顺序却是不确定的。HashMap最多只允许一条记录的键为null,允许多个值为null。HashMap不是线程安全的类,如果在多线程环境下进行写入操作,可能会导致内部链表变成成环形链表,形成死循环(JDK1.7实现)。...

2020-08-04 22:45:59 172

原创 深度剖析ArrayList与LinkedList的区别

ArrayList内部使用了数组实现,提到ArrayList就不得不提到他的兄弟Vector,这两者之间的实现基本类似,唯一的区别是前者线程不安全,后者线程安全。至于ArrayList为什么线程不安全,参见下一篇文章LinedList内部使用了双向链表。这两种数据结构的内部不同实现就决定了它们在应用场景上侧重不同。 private static class Node<E>...

2019-04-17 00:18:59 1575

原创 redis基本知识介绍

redis基本知识介绍基本数据类型:redis相对memcache来说,支持了更多的数据类型,在使用场景上面无疑是更加的便捷String: 可以存储任何形式的字符串,内部实现结构有int,sds(simple dynamisc string),当值为整型时,使用int结构存放,非整型时使用sds存储List: 当list的节点小于配置: hash-max-ziplist-entrie...

2019-01-22 23:24:17 1556 1

原创 TheadLocal源码解析

TheadLocal详解概述这是JDK提供的api类,该类提供了线程局部变量,它独立于变量的初始化副本,为每个通过get/set方法访问某个变量提供基于自己线程的独立变量。源码解析整体上ThreadLocal的使用就是通过get/set方法来使用:get:获取当前线程获取当前线程ThreadLocalMap如果不为空,获取当前map的值如果为空,初始化新...

2018-08-14 19:32:03 5245 1

空空如也

空空如也

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

TA关注的人

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