自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 DNS中的TCP与UDP

参考博客DNS占用53号端口,同时使用TCP和UDP协议:DNS在区域传输的时候使用TCP协议域名解析时使用UDP协议区域传输DNS的规范规定了2种类型的DNS服务器:主DNS服务器辅助DNS服务器在一个区中,主DNS服务器从自己本机的数据文件中读取该区的DNS数据信息,而辅助DNS服务器则从区的主DNS服务器中读取该区的DNS数据信息。当一个辅助DNS服务器启动时,它需要与主DNS服务器通信,并加载数据信息,这就叫做区传送(zone transfer)辅域名服务器会定时(一般时3

2020-08-28 10:40:52 611

原创 浅析ReentrantLock

重入锁(ReentrantLock)重入锁(ReentrantLock),就是支持重进入的锁,它表示该锁能够支持一个线程对资源的重复加锁。除此之外,该锁还支持获取锁时的公平性和非公平性选择(默认是非公平)。它是一种独占锁。ReentrantLock与synchronized对比(1)都是独占锁,synchronized加锁和解锁的过程自动进行。ReentrantLock加锁和解锁的过程需要手动进行(2)都可重入,synchronized因为加锁和解锁自动进行,不必担心最后是否释放锁;Reentran

2020-08-28 10:38:32 683

原创 InnoDB锁实现

一、锁1.基本概念MySQL的锁是为了解决资源竞争的问题,Java 里面的资源是对象,数据库的资源就是数据表或者数据行。所以锁是用来解决事务对数据的并发访问的问题的。InnoDB锁有两种表锁(意向锁,Intention Locks)意向共享锁(Intention Shared Locks)意向排它锁(Intention Exclusive Locks)行锁共享锁(Shared Locks)排它锁(Exclusive Locks)行锁的算法:记录锁间隙锁临键锁表

2020-08-28 10:32:22 305

原创 MySQL事务及隔离级别的实现

一、MySQL事务1.概念事务是数据库执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成。特点:它是数据库最小的工作单元,是不可以再分的它可能包含了一个或者一系列的 DML 语句,包括 insert delete update2.事务四大特性特性说明原子性(Atomicity)事务是一个最小的工作单元,整个工作单元要么一起提交成功,要么全部失败回滚一致性(Consistency)事务中操作的数据及状态改变是一致的,即写入资料的结果必须完全符合预设的规则,

2020-08-28 10:29:40 223

原创 了解双写一致性方案

解决方案读请求写请求串行化执行先更新数据库,再更新缓存先删除缓存,再更新数据库Cache Aside Pattern一、读写请求串行化串行化执行,保证数据一致性,但是会大幅降低系统吞吐量,不采用二、先更新数据库,再更新缓存当数据库数据更新时,先更新数据库中数据,再更新对应的缓存数据。这个方案主要有两个问题。1.问题1如果同时有A、B两个请求进行更新操作,那么该方案可能会有以下情况:A请求更新数据库B请求更新数据库B请求更新缓存A请求更新缓存本来B请求更新后的数据时最新数

2020-08-28 10:26:18 1741

原创 Class.forName和ClassLoader.loadClass区别

Java加载class文件的过程装载:通过累的全限定名获取二进制字节流,将二进制字节流转换成方法区中的运行时数据结构,在内存中生成Java.lang.class对象;连接:执行校验、准备和解析步骤校验:检查导入类或接口的二进制数据的正确性;(文件格式验证,元数据验证,字节码验证,符号引用验证)准备:给类的静态变量分配并初始化存储空间解析:将常量池中的符号引用转成直接引用初始化:激活类的静态变量的初始化Java代码和静态Java代码块,并初始化程序员设置的变量值加载class到J

2020-08-28 10:23:29 374

原创 HotSpot关于GC的部分算法实现

记忆集参考博客三色标记算法参考博客获取GC Roots1.枚举根节点(保守式GC)通过遍历方法区和栈找到GC Roots,这个方法有两个弊端:耗时,现在很多应用仅仅方法区就有上百MB,如果逐个检查的话,效率就会变得不可接受需要STW(Stop The World),遍历时必须停止用户线程,不然用户线程一直运行,可能会导致GC Roots不断增加,永远也遍历不完2.OopMap(准确式GC)HotSpot使用OopMap数据结构来记录程序中对象的引用位置,每次需要GC时只需要扫描OopMa

2020-08-28 10:22:09 208

原创 深入了解ArrayList

ListArrayList:基于动态数组实现,支持随机访问。Vector:和 ArrayList 类似,但它是线程安全的。LinkedList:基于双向链表实现,只能顺序访问,但是可以快速地在链表中间插入和删除元素。不仅如此,LinkedList 还可以用作栈、队列和双向队列。为什么要先继承AbstractList?这里是有一个思想,接口中全都是抽象的方法,而抽象类中可以有抽象方法,...

2020-03-04 08:35:11 132

转载 转载:关于ConcurrentHashMap和HashMap的分析对比

原文作者分别对JDK1.7及1.8下ConcurrentHashMap和HashMap的实现进行了详细的源码分析与对比:原文地址

2020-02-27 20:36:22 137

原创 读写锁(ReentrantReadWriteLock)的实现

读写锁读写锁在同一时刻允许多个读线程访问,其他写线程阻塞;在写线程访问时,所有的读线程和其他写线程都被阻塞。读写锁维护了一对锁,一个读锁,一个写锁,通过分离读锁和写锁,使得并发性比一般的排它锁(独占锁)有了很大提升。Java提供的读写锁是ReentrantReadWriteLock。ReentrantReadWriteLock的特性特性说明公平性选择支持非公平(默认)...

2020-02-27 13:24:45 521

原创 重入锁(ReentrantLock)的实现

重入锁(ReentrantLock)重入锁(ReentrantLock),就是支持重进入的锁,它表示该锁能够支持一个线程对资源的重复加锁。除此之外,该锁还支持获取锁时的公平性和非公平性选择(默认是非公平)。它是一种独占锁。ReentrantLock常常与synchronized对比分析:(1)synchronized是独占锁,加锁和解锁的过程自动进行,易于操作,但不够灵活。Reentrant...

2020-02-27 10:47:30 347

原创 synchronized的实现原理(锁升级过程)

1.1 实现基础 synchronized实现同步的基础:java中的每一个对象都可以作为锁(表现为3种形式)。对于普通同步方法,锁是当前实例对象(this指针)对于静态同步方法,锁是当前类的Class对象(xxx.class)对于同步方法块,锁是synchronized括号里指定的对象(synchronized(obj){})1.2 对象头 synchronized使用的锁对象是...

2020-02-25 22:26:28 2944

原创 为什么DCL单例需要volatile

单例设计模式单例模式属于创建型设计模式,单例模式保证一个类仅有一个实例,并提供一个访问它的全局访问点单例特性:单例类只能有一个实例。单例类必须自己创建自己的唯一实例。单例类必须给所有其他对象提供这一实例。常见实现方式饿汉式不管是否使用,都直接创建对象。public class Single01 { private static Single01 INSTANCE...

2020-02-25 22:01:16 245

原创 JVM学习笔记---Java内存模型

12.1 Java内存模型 Java内存模型(Java Memory Model)是Java虚拟机规范中定义的,用来屏蔽掉java程序在各种不同的硬件和操作系统对内存的访问的差异,以实现让Java程序在各种平台下都能达到一致的内存访问效果12.1.1 主内存与工作内存JMM的主要目标是定义程序中各种变量的访问规则JMM规定所有的变量都存放在主内存中(虚拟机内存的一部分)每条线程有自己的...

2020-02-24 18:07:49 155

原创 JVM学习笔记---运行时数据区

文章目录2.1 JVM架构图2.2 运行时数据区和线程2.2.1 JVM系统线程2.2.2 运行时数据区2.2.3 程序计数寄存器1.概述2.作用2.2.4 虚拟机栈(栈)1.概述2.作用3.栈帧3.1 局部变量表3.2 操作数栈3.3 动态链接3.4 方法返回地址3.5 一些附加信息2.2.5 本地方法栈2.1 JVM架构图 JVM主要分为五大模块:类加载器子系统、运行时数据区、执行引擎、本...

2020-02-24 18:05:59 235

原创 JVM学习笔记---类加载器

文章目录7.1 什么是类加载机制7.2 类加载的时机7.3 类加载的过程7.3.1 加载7.3.2 验证7.3.3 准备7.3.4 解析7.3.5 初始化7.4 类加载器7.4.1 类与类加载器7.4.2 双亲委派模型7.4.3 双亲委派机制工作流程7.4.4 双亲委派机制的优势7.4.5 沙箱安全机制7.4.6 线程上下文加载器(破坏双亲委派机制)7.4.7 对于类加载器的引用7.1 什么是类...

2020-02-24 17:54:44 146

原创 JVM学习笔记---垃圾收集

文章目录3.1 垃圾收集(Garbage Collection)关注的问题3.2 对象存活判断算法3.2.1 引用计数算法3.2.2 可达性算法分析(Rechbility Analysis)3.2.3 再谈引用3.2.4 生存还是死亡3.2.5 回收方法区3.3 垃圾收集算法3.3.1 标记-清除算法(Mark-Sweep)3.3.2 标记-整理算法(Mark-Compact)3.3.3复制算法3...

2020-02-24 17:46:28 137

原创 关于HashMap扩容造成死循环的介绍

一、造成死循环的原因HashMap扩容导致死循环的主要原因在于扩容后链表中的节点在新的hash桶使用头插法插入。新的hash桶会倒置原hash桶中的单链表,那么在多个线程同时扩容的情况下就可能导致产生一个存在闭环的单链表,从而导致死循环。在JDK1.8中,HashMap是不会造成死循环的,因为在JDK1.8中,采用的是尾插法,保证了链表的顺序与之前一致。而且在1.8中链表过长时会转换为红黑树,...

2019-05-26 15:40:58 4405 3

空空如也

空空如也

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

TA关注的人

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