- 博客(54)
- 资源 (3)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 【专栏锁】ReentrantLock和Synchronized以及锁升级
相同点都是加锁方式同步;都是重入锁;都是阻塞式的同步;不同点 比较方面SynChronizedReentrantLock(实现了 Lock接口)原始构成它是java语言的关键字,是原生语法层面的互斥,需要jvm实现它是JDK 1.5之后提供的API层面的互斥锁类实现通过JVM加锁解锁api层面的加锁解锁,需要手动释放锁。代码编写采用synchronized不需要用户去手动释放锁,当synchronized方法或者synchronized代码块执行完之后,系统会自动让线程释放对锁的占用,更安全.
2022-03-06 22:38:22
724
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 【专栏集合】ConcurrentHashMap
jdk 1.8之前锁使用Segment(分段锁,它继承了ReentrantLock ReentrantLock 是AQS(抽象队列同步框架) 的独占锁模式)ReentrantLock实现模式一个数组分为多个段落,然后每个段落对应一个资源state(int类型 初始为0加锁 +1 释放锁-1 等于0则代表没有被占用),线程并发的时候每个线程会封装成一个node节点进入aqs阻塞队列 队列首节点判断state是否为0 ,为0则+1执行难此资源,如果是独占模式则是等首节点执行完后唤醒后续节点进行获取资源
2022-03-06 20:30:25
552
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 已经是maven项目但是pom文件还是黄色,java文件是蓝色的J
先说下原因吧,很可能是你使用了360或者电脑管家之类的提升了性能优化,然后启动了idea的省电模式,enmmm,,ok接下来解决把这个去掉,问题解决
2021-03-23 14:52:00
1183
4
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 idea整合easyCode自定义模板
easycode自定义模板,目录结构service##导入宏定义$!define##设置表后缀(宏定义)#setTableSuffix("Service")##保存文件(宏定义)#save("/service", "Service.java")##包路径(宏定义)#setPackageSuffix("service")import com.baomidou.mybatisplus.extension.service.IService;import $!{tableInfo.
2021-03-20 19:58:24
1025
2
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 Java 内存模型和并发
本文的主要目的是让大家对于并发程序中的重排序、内存可见性以及原子性有一定的了解,同时要能准确理解 synchronized、volatile、final 几个关键字的作用。另外,本文还对双重检查形式的单例模式为什么需要使用 volatile 做了深入的解释。并发三问题这节将介绍重排序、内存可见性以及原子性相关的知识,这些也是并发程序为什么难写的原因。1. 重排序请读者先在自己的电脑上运行一下以下程序:public class Test { private static int
2020-10-12 17:15:50
1415
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 线程池源码解读(保证让你受益匪浅系列)
name: java-thread-pooltitle: 深度解读 java 线程池设计思想及源码实现date: 2020-09-25 14:22:29tags:categories: concurrency我相信大家都看过很多的关于线程池的文章,基本上也是面试的时候必问的,如果你在看过很多文章以后,还是一知半解的,那希望这篇文章能让你真正的掌握好 Java 线程池。本文一大重点是源码解析,同时会有少量篇幅介绍线程池设计思想以及作者 Doug Lea 实现过程中的一些巧妙用法。本文还是会一行.
2020-09-29 14:25:57
1091
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 Spring IOC 容器源码解读
name: spring-ioctitle: Spring IOC 容器源码分析date: 2020-05-22 16:25:30tags:categories: open-sourceSpring 最重要的概念是 IOC 和 AOP,本篇文章其实就是要带领大家来分析下 Spring 的 IOC 容器。既然大家平时都要用到 Spring,怎么可以不好好了解 Spring 呢?阅读本文并不能让你成为 Spring 专家,不过一定有助于大家理解 Spring 的很多概念,帮助大家排查应用中和 Sp.
2020-09-27 15:42:00
1134
10
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 最通俗易懂的设计模式解读(保证看这一篇就够了)
spring有多种依赖注入的形式,下面介绍spring进行DI的方式:一.目前使用最广泛的 @Autowired:自动装配自动装配,用于替代基于XML配置的自动装配,详见【3.3.3 自动装配】。基于@Autowired的自动装配,默认是根据类型注入,可以用于构造器、字段、方法注入,使用方式如下:java代码:@Autowired(required=true)构造器、字段、方法@A...
2020-02-27 10:50:37
1345
1
原创 线上cpu爆满dump文件分析 精确查到根本产生原因
建议使用如下工具:JProfiler然后安装并打开,将dump文件放入其中然后选中点击然后你会看到此次cpu爆满根本的原因
2022-02-19 15:02:24
1470
原创 com.alibaba.druid.poc ol.DatasourceclosedExcept on:datasource already closed
你可能使用了异步线程去访问数据库,异步线程是不由spring管理也就是说 spring可以在异步线程未执行完就会进行容器关闭 当异步线程执行到获取数据库的时候就会报错**你是否跑单测?**如果是那就是单测的时候你使用的异步线程 里面在进行数据库访问...
2021-12-23 10:09:48
3146
2
原创 Error launching IDEA-If you already have a 64-bit JDK installed, define a JAVA_HOME(无须重装)
看完无须重新安装就可解决为什么会出现问题:你肯定改了解决方案:修改idea安装目录修改为原来的仍然不行那么继续修改C盘里的这个里面的 idea64.exe.vmoptions 为原来的值原来的值:-Xms128m -Xmx750m -XX:ReservedCodeCacheSize=512m -XX:+UseConcMarkSweepGC -XX:SoftRefLRUPolicyMSPerMB=50 -XX:CICompilerCount=2 -XX:+HeapDumpOnOutOf
2021-12-15 17:05:35
2270
5
原创 windows下gitbook导出pdf(亲测可用)
0. 前言 第一次在windows上使用gitbook制作电子书,在网上搜了好多资料,自己亲手试了下并整理如下。 1. 准备工具 Step1: 下载nodejs(nodejs中文官方): http://nodejs.cn/download/, 点击图片位置: 2. 安装工具 ...
2021-07-13 17:44:33
3775
1
原创 dubbo详解-实操-待完成
dubbo深入学习RPC简介影响性能的主要俩点: 通信和序列化反序列化DUBBO概念面向接口代理的高性能的RPC调用:像调用本地方法一样调用远程服务智能负载均衡:实现流量均衡服务注册与发现:一般配合zk,比如dubbo怎么知道所调用的服务在哪台服务器上,所有的服务都注册到zk上dubbo会询问zk我要调用的这个服务在哪个节点上然后zk返回在哪几个服务器,然后dubbo进行调用目标服务高度可扩展能力:dubbo是基于微内核和插件的设计原则运行期间流量调度:给指定ip给予少量流量可实现灰度
2021-05-14 16:52:03
224
2
原创 voliate为什么不能修饰递增的变量
voliate为什么不能修饰有递增的变量呢首先voliate只能保证可见性:线程每次读取的值都是最新的;不能保证原子性。java中只对基本的类型保证了原子性,比如i++这些分为三步:读取,修改,写入,每一步都是一个原子,总体不是一个原子,所以就算每一次都读取到最新的值那么也有问题...
2021-03-24 09:17:13
164
原创 springboot结合mybatis的AutoGenerator实现代码自动生成
pom文件引入以下 <!-- MyBatis-Plus代码生成器--> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> <version>3.4.1</version>
2021-03-19 15:05:45
240
原创 JAVA线程池执行逻辑详解
问题:为什么要使用线程池线程在使用过程中遇到的问题:1、线程在Java中是一个对象,也是操作系统的重要资源,线程的创建、销毁需要时间,如果创建时间+销毁时间>执行 任务的时间那就很不合算了2、Java对象占用堆内存,操作系统线程占用系统内存年,根据JVM规范,一个线程默认最大栈大小1M,这个栈空间是 需要从
2020-11-06 08:53:19
1065
原创 分布式系统中的CAP详解
Eureka服务治理机制与Dubbo服务治理机制的比较 FeatureEurekaZookeeper服务健康检查可配支持(弱)长连接,keepaliveCAPAPCPwatch支持(客户端观察到服务提供者变化)支持 long polling/大部分增量支持自我保护支持-客户端缓存支持-自身集群的监控metrics- Eureka支持健康检查,自我保护等 Zookeeper为CP设计,Eureka为AP设计。作为服务发现产品,可用性优先级较高,一致性的特点并不重要,宁可返回错误的数据,也比不反...
2020-11-05 20:51:48
1338
原创 双亲委派(三种类加载器)
java中的类加载器类型以及工作原理。 java中默认的有三种类型加载器。分别是:系统类加载器(应用类加载器)、扩展类加载器、引导类加载器。 上篇博客的例子已经测试了加载器类型是: sun.misc.Launcher$AppClassLoader@f4f44a,这个是系统类加载器。来看一下父类的加载器类型: //测试类加载器 System.out.println("forName形式的加载器--"+testTypeForName.getCl...
2020-11-03 23:33:39
256
1
原创 SpringBoot核心注解解析
1.@SpringBootApplication* 用于Spring主类上最最最核心的注解,自动化配置文件,表示这是一个SpringBoot项目,用于开启SpringBoot的各项能力。 相当于@SpringBootConfigryation、@EnableAutoConfiguration、@ComponentScan三个注解的组合。 2.@EnableAutoConfiguration 允许SpringBoot自动配置注解,开启这个注解之后,Spring...
2020-11-03 22:17:29
228
原创 MYSQL的MVCC弥补事务隔离级别带来的并发性能问题
MVCC(Mutil-Version Concurrency Control),就是多版本并发控制。MVCC 是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问。在Mysql的InnoDB引擎中就是指在已提交读(READ COMMITTD)和可重复读(REPEATABLE READ)这两种隔离级别下的事务对于SELECT操作会访问版本链中的记录的过程。这就使得别的事务可以修改这条记录,反正每次修改都会在版本链中记录。SELECT可以去版本链中拿记录,这就实现了读-写,写-读的并发执行,
2020-11-03 00:14:12
90
原创 newSql(最先进的sql可同时满足cap)
1、CAP:CAP原理:• Consistency(一致性): 数据一致更新,所有数据变动都是同步的• Availability(可用性): 好的响应性能• Partition tolerance(分区耐受性): 可靠性上面的解释可能显得太过抽象,举例来说在高可用的网站架构中,对于数据基础提出了以下的要求:• 分区耐受性 保证数据可持久存储,在各种情况下都不会出现数据丢失的问题。为了实现数据的持久性,不但需要在写入的时候保证数据能够持久存储,还需要能够将数据备份一个或多个副本,存放在不同的物...
2020-11-03 00:06:06
402
原创 SpringBoot启动原理(超详细)
写在前面: 由于该系统是底层系统,以微服务形式对外暴露dubbo服务,所以本流程中SpringBoot不基于jetty或者tomcat等容器启动方式发布服务,而是以执行程序方式启动来发布(参考下图keepRunning方法)。 本文以调试一个实际的SpringBoot启动程序为例,参考流程中主要类类图,来分析其启动逻辑和自动化配置原理。总览: 上图为[SpringBoot启动结构图](https://www.processon.com/view/link/59812124e4b0
2020-11-01 20:33:19
2042
原创 分布式事务发展和阿里的GTS分布式事务框架
通过GTS,可以在公网环境轻松保证分布式系统下的数据一致性。 1 微服务的发展微服务倡导将复杂的单体应用拆分为若干个功能简单、松耦合的服务,这样可以降低开发难度、增强扩展性、便于敏捷开发。当前被越来越多的开发者推崇,很多互联网行业巨头、开源社区等都开始了微服务的讨论和实践。Hailo有160个不同服务构成,NetFlix有大约600个服务。国内方面,阿里巴巴、腾讯、360、京东、58同城等很多互联网公司都进行了微服务化实践。当前微服务的开发框架也非常多,比较著名的有Dubbo、Spri...
2020-11-01 19:25:47
431
2
原创 JVM内存模型(通俗易懂)
1.什么是jvm?(1)jvm是一种用于计算设备的规范,它是一个虚构出来的机器,是通过在实际的计算机上仿真模拟各种功能实现的。(2)jvm包含一套字节码指令集,一组寄存器,一个栈,一个垃圾回收堆和一个存储方法域。(3)JVM屏蔽了与具体操作系统平台相关的信息,使Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。JVM在执行字节码时,实际上最终还是把字节码解释成具体平台上的机器指令执行。2.jdk、jre、jvm是什么关系?(1)JRE(Java R
2020-10-30 18:14:32
228965
25
原创 Java多线程及线程状态转换(通俗易懂)
线程:是指进程中的一个执行流程。 线程与进程的区别:每个进程都需要操作系统为其分配独立的内存地址空间,而同一进程中的所有线程在同一块地址空间中工作,这些线程可以共享同一块内存和系统资源。Java实现多线程的方法有两种,一是继承Thread类、二是实现Runnable接口。一、继承Thread类public class ThreadTest extends Thread { @Override public void run() { System.out.println
2020-10-29 23:15:40
345
1
原创 JAVA中锁的详细介绍(少量源码)
Java提供了种类丰富的锁,每种锁因其特性的不同,在适当的场景下能够展现出非常高的效率。本文旨在对锁相关源码(本文中的源码来自JDK 8)、使用场景进行举例,为读者介绍主流锁的知识点,以及不同的锁的适用场景。Java中往往是按照是否含有某一特性来定义锁,我们通过特性将锁进行分组归类,再使用对比的方式进行介绍,帮助大家更快捷的理解相关知识。下面给出本文内容的总体分类目录: 1. 乐观锁 VS 悲观锁#乐观锁与悲观锁是一种广义上的概念,体现了看待线程同步的不同角度。在Java和数据库中都有此
2020-10-28 21:20:20
338
原创 hash冲突的通用解决办法
Hash算法解决冲突的方法一般有以下几种常用的解决方法 1, 开放定址法: 所谓的开放定址法就是一旦发生了冲突,就去寻找下一个空的散列地址,只要散列表足够大,空的散列地址总能找到,并将记录存入 公式为:fi(key) = (f(key)+di) MOD m (di=1,2,3,……,m-1) ※ 用开放定址法解决冲突的做法是:当冲突发生时,使用某种探测技术在散列表中形成一个探测序列。沿此序列逐个单元地查找,直到找到给定的关键字,或者 碰到一个开放的...
2020-10-28 21:11:10
294
原创 java各集合的时间复杂度
文章目录 前言数组 Array数组列表 ArrayList链接列表 LinkedList双链接列表 Doubly-Linked List栈 Stack队列 Queue/Deque/Circular Queue二叉搜索树 Binary Search Tree红黑树 Red-Black Tree堆 Heap/PriorityQue...
2020-10-20 23:40:52
2856
4
原创 kafka为什么会出现消息丢失以及解决方案
1.为什么会发生消息丢失和消息重复? 消息发送 Kafka消息发送有两种方式:同步(sync)和异步(async),默认是同步方式,可通过producer.type属性进行配置。Kafka通过配置request.required.acks属性来确认消息的生产: 0—表示不进行消息接收是否成功的确认;1—表示当Leader接收成功...
2020-10-20 21:15:48
3158
原创 Kafka为什么快,吞吐量大
学无止境,加油!Kafka是大数据领域无处不在的消息中间件,目前广泛使用在企业内部的实时数据管道,并帮助企业构建自己的流计算应用程序。Kafka虽然是基于磁盘做的数据存储,但却具有高性能、高吞吐、低延时的特点,其吞吐量动辄几万、几十上百万。但是很多使用过Kafka的人,经常会被问到这样一个问题,Kafka为什么速度快,吞吐量大;大部分被问的人都是一下子就懵了,或者是只知道一些简单的点,本文就简单的介绍一下Kafka为什么吞吐量大,速度快。一、顺序读写众所周知Kafka是将消息记录持久化到本地磁盘中
2020-10-19 00:32:29
955
原创 mysql为什么不推荐使用uuid作为主键
前言:在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究竟有什么坏处?本篇博客我们就来分析这个问题,探讨一下内部的原因。本篇博客的目录一:mysql程序实例二:使用uuid和自增id的索引结构对比三:总结一:mysql和程序实例1.1:要说明这个问题,我们首先来建立三张表,分别是user_auto_key,user_uuid
2020-10-17 17:25:46
2166
2
原创 Dubbo框架原理剖析(通俗易懂)
Java NIO:Buffer、Channel 和 Selector详解(通俗易懂) Dubbo框架原理剖析 文章目录 背景简单介绍核心功能 架构原理节点角色说明调用关系说明 服务发布与引用spring配置声明服务spring解析配置如何暴露服务服务引
2020-10-17 13:17:27
2274
1
原创 JVM 内存管理(垃圾收集)
关于 JVM 内存管理或者说垃圾收集,大家可能看过很多的文章了,笔者准备给大家总结下。这算是系列的第一篇,接下来一段时间会持续更新。本文主要是翻译《Memory Management in the Java HotSpot Virtual Machine》白皮书的前四章内容,这是 2006 的老文章了,当年发布这篇文章的还是 Sun Microsystems,以后应该会越来越少人记得这家曾经无比伟大的公司了。虽然这个白皮书有点老了,不过那个时候 Sun 在 J2SE 5.0 版本的 HotSpot 虚拟
2020-10-12 17:18:41
890
原创 Java 非阻塞 IO 和异步 IO区别(详解)
上一篇文章介绍了 Java NIO 中 Buffer、Channel 和 Selector 的基本操作,主要是一些接口操作,比较简单。本文将介绍非阻塞 IO 和异步 IO,也就是大家耳熟能详的 NIO 和 AIO。很多初学者可能分不清楚异步和非阻塞的区别,只是在各种场合能听到异步非阻塞这个词。本文会先介绍并演示阻塞模式,然后引入非阻塞模式来对阻塞模式进行优化,最后再介绍 JDK7 引入的异步 IO,由于网上关于异步 IO 的介绍相对较少,所以这部分内容我会介绍得具体一些。希望看完本文,读者可以对非阻塞
2020-10-11 17:13:29
2359
原创 Java NIO:Buffer、Channel 和 Selector详解(通俗易懂)
文章目录Bufferposition、limit、capacity初始化 Buffer填充 Buffer提取 Buffer 中的值mark() & reset()rewind() & clear() & compact()ChannelFileChannelSocketChannelServerSocketChannelDatagramChannelSelector小结本文将介绍 Java NIO 中三大组件 Buffer、Channel、Selector 的使用。本来要一起介绍
2020-10-11 17:11:02
2132
5
原创 JAVA+字符串常量池介绍
本文将介绍 HotSpot 中的 String Pool,字符串常量池。相对是一篇比较简单的文章,大家花几分钟就看完了。在 Java 世界中,构造一个 Java 对象是一个相对比较重的活,而且还需要垃圾回收,而缓存池就是为了缓解这个问题的。我们来看下基础类型的包装类的缓存,Integer 默认缓存 -128 ~ 127 区间的值,Long 和 Short 也是缓存了这个区间的值,Byte 只能表示 -127 ~ 128 范围的值,全部缓存了,Character 缓存了 0 ~ 127 的值。Float
2020-10-09 09:06:52
1479
7
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人