自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 JDK1.8源码解析之ConcurrentHashMap

ConcurrentHashMap源码解析概述目录结构put方法putAlladdCounthelpTransfertryPresizetransfersize如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出...

2019-08-04 01:43:12 523

原创 【JDK7-HashMap-扩容机制形成的链表环过程详解】

jdk7扩容链表环问题

2023-04-20 01:37:21 361 1

原创 【无标题】

例如:java多线程场景,线程与线程之间需要通信协作,可以使用join方式;这也是一道面试题:现在有 T1、T2、T3 三个线程,你怎样保证 T2 在 T1 执行完后执行,T3 在 T2执行完后执行?

2023-04-09 18:39:23 91

原创 Java多线程管道通信

java多线程场景,线程与线程之间需要通信协作,管道就是其中之一;例如场景:按照用户搜索条件查询数据,并将数据下载到用户本地,那系统通常的做法就是按照用户检索条件查询出结果集,将结果集生成excel表,在将excel表上传到ftp或者oss云盘之类的地方,最后将下载连接发送给用户,最后用户点击链接进行下载,那么使用管道就减少了数据生成到本地,在上传到云盘的工作,直接生成到用户下载,提高用户体验和效率。

2023-04-09 18:10:24 271

原创 FutureTask使用方式

Future和FutureTask的区别。

2023-04-08 03:20:40 166

原创 IO通信之NIO实战

NIO实战

2022-05-22 03:16:53 179

原创 Serializable原理

Serializable的作用应用场景互联网中应用的一些场景需要将内存中的java对象持久化到磁盘,这样做的目的,可以将一些暂时不用的对应可以转存到廉价的磁盘中,到需要使用的时候再从磁盘通过反序列成内存中的对象;另外一种目的,在远程调用的场景中,通过网络传输对象的场景,必须微服务的场景中,各各服务之间的参数传递使用序列化后的字节流通过网络传输值对方服务中。使用方法需要支持序列话的对象需要实现Serializable那来验证下,没有实现Seriablizable的对象是不是就不能序列化呢?i

2022-01-17 01:17:38 429

原创 volatile原理探究

volatile提供的能力之可见性(一)前言java并发面临的三大问题,原子性、可见行、有序性;1.原子性是指一块代码要不全部执行,并且在执行过程中不被干扰,要不都不执行。2.可见性是指多线程对共享资源进行操作的时候,共享资源的修改能立刻对其他线程可见。3.有序性是指java程序的顺序有可能不会按照行的顺序执行,编译器会代码的执行顺序优化,优化后的代码可能就不会按照代码顺序执行了,但是这种优化并不是对所有的代码都会生效的,只要遵循happen as if serial语意,就有可能对代码优化;这样

2022-01-16 23:24:47 181

原创 java常量池详解

Java常量池详解什么是常量池什么是常量池java开发中,经常会用到字符串,字符串的创建有两种方式:String str = “abc”;String str = new String(“abc”);这两种方式的创建过程是不同的,java中存量字面量和符号引用的概念,字面量是指由字母、数值组成的字符串或者数值常量。第一种方式的等号右边的"abc"就是一种字面量。符号引用主要包括三类:类和接口的权限定名字段的名称和描述符方法的名称和描述符常量池中的静态数据只有在运行时才会把信息加载到内存

2022-01-11 21:57:06 959

原创 四次挥手详解

四次挥手四次挥手即终止TCP连接,就是指断开一个TCP连接时,需要客户端和服务器端发送4个数据包以确定连接的断开。在socket编程中,有客户端和服务器端任一方执行close触发。由于TCP连接是全双工的,因此,每个方向都必须要单独进行关闭,这一原则是当一方完成数据发送任务后,发送一个FIN来终止这一方向的连接,收到一个FIN只意味着这个方向不在收到数据了,直到这个方向也发送了FIN,首先进行关闭的一方执行主动关闭,而另一方执行被动关闭。第一次辉手:客户端发送FIN=N用来关闭客户端到服务器端的数

2021-10-04 03:02:30 4929

原创 TCP三次握手

TCP三次握手TCP提供面向有连接的通信传输。面向有连接是指在数据通信开始之前先做好两端之间的准备工作。三次握手是指建立一个TCP连接时需要客户端和服务端总共发送3个包以确认连接的建立。在socket编程中,这一过程有客户端执行connect来触发。第一次握手:可数端发送SYN = 1, Seq = x ,x是一个随机数,服务端接收到syn= 1,知道客户端请求建立连接,服务器端将ACK和SYN设置成1,ack = x + 1,并未seq产生一个随机数k,发送个客户端,此时服务端的状态变成syn_

2021-10-04 02:13:50 60

原创 OSI网络7层模型剖析

1.什么是OSI?OSI即open system interconnection reference model,简称OSI模型,他是一个概念模型,由国际化标准化组织提出,旨在试图使各种计算机在全世界内互联为网络的标准框架。2.OSI七层协议物理层主要功能:利用传输介质为数据链路层提供物理连接,实现比特流的透明传输,物理层的作用就是实现相邻的两个计算机节点之间比特流的透明传输,尽可能屏蔽掉具体传输介质和物理设备的差异,透明传输比特流,表示经过实际电路传送后的比特流没有发生变化,对传送的比特流来说电

2021-10-04 01:30:48 142

原创 Java SPI与 Dubbo SPI的不同

Java SPI与 Dubbo SPI(扩展机制)的不同一、什么是SPI扩展机制?故名思意,对程序的扩展,使用SPI不需要任何配置文件,只要按照SPI规范在工程目录的MATE-INF.service下建立以扩展点接口名称作为文件名称,这样的话jar提供的可扩展服务能力就可以在文件中以列表的形式给出,第三方调用jar包扩展点能力的时候就可以根据需要获取实现类。二、JAVA SPI***简述:***java.util包下提供了ServiceLoader,使用load方法就可以拿到扩展点列表,以 my

2021-07-24 18:53:03 345

原创 Mysql异常之Communications link failure

前天线上出现数据数据抖动,收到大量异常告警,都要疯了,数据库出现大量异常,肯定第一件事就是看下数据库监控数据,发现有一个从分片执行时间有一个50多秒的操作,这里肯定有问题了,第一时间找了dba,ji...

2021-06-13 01:54:10 3797 1

原创 MySql数据类型限制详解

smallIntsmallint(M),M只是显示宽度,并不是指定存储值的数值范围,如果数值的宽度没有超过M,那么会在数值左边填充0值(使用zerofill属性可以设置填充0功能,这个需要根据业务需要设置,但是MySQL 8.0.17已废弃),如果数值的宽度超过了M,并且没有超过smallint的值范围(-32768 to 32767,-2的15次方至 2的15次方-1)...

2021-02-28 23:46:32 1065

原创 ThreadPoolExecutor源码解析(jdk1.8)

概述线程池解决两个不同的问题:由于减少了每个任务的调用开销,它们通常在执行大量异步任务时提供了更好的性能,并且提供了在执行任务集合时绑定和管理资源(包括线程)的方法。每个ThreadPoolExecutor还维护一些基本统计信息,比如已完成任务的数量。为了在广泛的上下文中起到作用,该类提供了许多可调参数和可扩展钩子。ThreadPoolExecutor将根据corePoolSize和maximu...

2019-08-12 15:06:48 352

原创 Future和FutureTask的区别

先看下Future、FutureTask相关类的关系Future只是一个接口,FutureTask是实现了RunnableFutureFuture接口可以实现的功能Future呈现的是异步计算的结果。Future中的方法提供了检查计算是否已经完成,并且等待计算的结果,还能够重新获取计算记得结果。当计算已经完成的时候只能使用get()方法获取结果,如果有需要的话,可以一直阻塞等待结果,直到结...

2019-08-08 22:25:39 9818 3

原创 JDK1.8源码解析之ReentrantReadWriteLock

ReentrantReadWriteLock概述它有两种可选择模式的锁,非公平锁和公平锁。类之间的关系1、Sync是一个核心的内部类,继承自AbstractQueueSynchronizer,Sync又分为NonFairSync和FairSync2、ReadLock是读锁,WriteLock是写锁NonFairSync和FairSync的不同在于,readerShouldBlock和w...

2019-08-07 15:26:21 192

原创 JDK1.8源码解析之SynchronousQueue

SynchronousQueue源码解析前言

2019-08-05 01:25:10 164

原创 彻底理解java线程状态的切换

Java进阶之线程状态切换Java语言定义了5种进程状态,在任意一个时间点中,一个进程只能有且只有其中的一种状态。新建(NEW)使用new Thread或者实现了Runnable接口创建thread对象,这个对象的状态是new,也可以说是初始化状态,并没有真正开始执行run方法中的任务。...

2019-07-25 00:31:58 160

原创 阿里面试题:wait为什么一定要写在同步块中?

wait为什么一定要写在同步块中?浏览博客时看到这个阿里的面试题?将被人的想法和自己的想法记录下来第一点:简书博主占小狼,wait 会引起lost wake up问题,就是如果wait 和 notify写在同一个synchronized对象中话,会出现发送notify的之后,另外一个该对象的才刚刚调用wait方法,这就导致调用wait的对象一直无法被显式唤醒。第二点:这个是自己的想法,因为w...

2019-07-25 00:29:55 885

原创 JDK1.8源码解析之ArrayBlockingQueue

ArrayBlockingQueue源码解析前言ArrayBlockingQueue是一个由数组组成的有界阻塞队列,ArrayBlockingQueue创建的时候必须指定容量。这个队列按照先进先出(FIFO)的顺序排列。队列的头(head)是队列中等待时间最长的一个元素。队列的尾(tail)是队列中等待时间最短的元素。新元素被插入在队列的尾部,从队列的head中检索获取元素。这个队列有固定的...

2019-07-12 15:08:47 152

原创 JDK1.8源码解析之ReentrantLock(可重入锁)

ReentrantLock源码解析前言在学习阻塞队源码的时候,比如ArrayBlockingQueue、LinkedBlockingQueue、CyclicBarrier、SynchronousQueue频繁的遇到ReentrantLock,故先把ReentrantLock原理了解,是学习阻塞队列的基础。对Doug Lea大师崇拜。类继承关系有一个特别重要的抽象静态内部类,这个类...

2019-07-12 11:57:29 262

原创 JKD1.8源码解析之LinkedHashMap

java.util.Map创建博客的目的创建博客的目的

2019-07-11 17:10:28 222

空空如也

空空如也

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

TA关注的人

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