自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Redis的哨兵模式以及工作原理

Redis的哨兵模式以及工作原理哨兵的作用通过发送命令,让Redis服务器返回监控其运行状态,包括主服务器和从服务器。当哨兵监测到master宕机,会自动将slave切换成master,然后通过发布订阅模式通知其他的从服务器,修改配置文件,让它们切换主机。然而一个哨兵进程对Redis服务器进行监控,可能会出现问题,为此,我们可以使用多个哨兵进行监控。各个哨兵之间还会进行监控,这样就形成了多哨兵模式。哨兵之间也会进行通信,相当于属于自己群消息,因为每次哨兵和主节点master和从节点slav

2020-06-20 19:49:49 1423

转载 MyBatis原理分析(通俗易懂)

原文链接

2020-06-14 19:28:19 381

转载 Spring工作原理

Spring工作原理阅读原文

2020-06-14 19:26:09 327

转载 Spring Boot 基本原理

Spring Boot 基本原理原文查看

2020-06-14 19:21:42 159

转载 SpringMVC实现原理及详解

SpringMVC实现原理及详解转载:查看原理

2020-06-14 19:19:34 150

原创 synchronized实现原理(简单易懂)

synchronized实现原理以及锁升级文章目录synchronized实现原理以及锁升级synchronizedsynchronized实现原理synchronizedsynchronized是Java中的关键字,是一种同步锁。它修饰的对象有以下几种:修饰一个代码块,被修饰的代码块称为同步代码块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象;修饰一个方法,被修饰的方法称为同步方法,其作用的范围是整个方法,作用的对象是调用这个方法的对象;修饰一个静态的方法,其作用的

2020-06-12 20:55:24 226

原创 多线程锁(通俗易懂)

多线程锁文章目录多线程锁常见的锁策略乐观锁 vs 悲观锁自旋锁(Spin Lock)可重入锁公平锁与非公平锁读写锁ReentrantReadWriteLock读锁写锁锁降级常见的锁策略乐观锁 vs 悲观锁乐观锁:乐观锁假设认为数据一般情况下不会产生并发冲突,所以在数据进行提交更新的时候,才会正式对数据是否产生并发冲突进行检测,如果发现并发冲突了,则让返回用户错误的信息,让用户决定如何去做。悲观锁:总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这

2020-06-12 20:33:47 1603

原创 AbstractQueuedSynchronizer(AQS)(详细说明)

AQS 概述同步器是用来构建锁和其他同步组件的基础框架,它的实现主要依赖一个int成员变量来表示同步状态以及通过一个FIFO队列构成等待队列。它的子类必须重写AQS的几个protected修饰的用来改变同步状态的方法,其他方法主要是实现了排队和阻塞机制。状态的更新使用getState,setState 以及compareAndSetState 这三个方法。子类被推荐定义为自定义同步组件的静态内部类,同步器自身没有实现任何同步接口,它仅仅是定义了若干同步状态的获取和释放方法来供自定义同步组件的使用,同步器

2020-06-12 19:49:07 198

原创 CAS概述(简单易懂)

CAS文章目录CAS概述CAS 是怎么实现的CAS的缺点概述CAS(Compare-and-Swap),即比较并替换,是一种实现并发算法时常用到的技术,Java并发包中的很多类都使用了CAS技术。一个 CAS 涉及到以下操作:我们假设内存中的原数据V,旧的预期值A,需要修改的新值B。 1. 比较 A 与 V 是否相等。(比较) 2. 如果比较相等,将 B 写入 V。(交换) 3. 返回操作是否成功。当多个线程同时对某个资源进行CAS操作,只能有一个线程操作成功,但是并不会阻塞其他线程,其他线程

2020-06-12 19:33:49 311

原创 Linux 权限

Linux 权限认识 Linux 用户Linux下有两种用户:超级用户(root)、普通用户。超级用户:可以再linux系统下做任何事情,不受限制普通用户:在linux下做有限的事情。超级用户的命令提示符是“#”,普通用户的命令提示符是“$”。1、 创建用户命令 useradd [用户名]功能 创建新的用户示例useradd test2、 配置密码命令 passwd [用户名]功能 设置或修改用户密码示例passwd test注意, 输入密码的时候, 在控制台中不会有提示.

2020-06-12 19:15:41 205

原创 Linux 基本指令

Linux 基本指令1. 文件/目录基本操作1.1 ls 指令语法: ls [选项] [目录或文件]功能:对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其他信息。常用选项:-a 列出目录下的所有文件,包括以 . 开头的隐含文件。-d 将目录象文件一样显示,而不是显示其下的文件。 如:ls –d 指定目录-k 以 k 字节的形式表示文件的大小。ls –alk 指定文件-l 列出文件的详细信息。-r 对目录反向排序。-t 以时间排序。-R 列出所有子目录下的文

2020-06-12 19:09:20 116

转载 垃圾收集器--G1垃圾收集器(全区域的垃圾收集器)

垃圾收集器–G1垃圾收集器(全区域的垃圾收集器)文章目录垃圾收集器--G1垃圾收集器(全区域的垃圾收集器)概述G1垃圾收集器年轻代垃圾收集老年代垃圾收集巨型对象跨代引用问题概述G1(Garbage First)垃圾收集器是当今垃圾回收技术最前沿的成果之一。早在JDK7就已加入JVM的收集器大家庭中,成为HotSpot重点发展的垃圾回收技术。同优秀的CMS垃圾回收器一样,G1也是关注最小时延的垃圾回收器,也同样适合大尺寸堆内存的垃圾收集,官方也推荐使用G1来代替选择CMS。G1最大的特点是引入分区的思路

2020-05-23 17:40:41 333

原创 垃圾收集器--CMS垃圾收集器(响应时间优先)

垃圾收集器–CMS垃圾收集器(老年代)CMS是针对于响应时间优先的垃圾收集器老年代的CMS一般搭配两个另外两个垃圾收集器:1、ParNewGC (新生代)2、SerialOld(老年代出现异常时,CMS退化为SerialOld)一、ParNewGC (新生代垃圾收集器,并行GC)ParNew收集器其实就是Serial收集器的多线程版本,除了了使用多条线程进行垃圾收集之外,其余行为包括Serial收集器可用的所有控制参数、收集算法、Stop The World、对象分配规则、回收策略等都与 Ser

2020-05-23 16:04:53 802 1

原创 类加载机制--双亲委派机制

类加载机制–双亲委派机制文章目录类加载机制--双亲委派机制类加载器双亲委派机制说双亲委派机制之前,先来谈谈类加载器类加载器看上述图之后,就知道类加载器有四类:1、启动类加载器(Bootstrap ClassLoader)这个类将器负责将存放在<JAVA_HOME>\lib目录中的,并且是虚拟机识别的(仅按照文件名识别,如rt.jar,名字不符合的类库即使放在lib目录中也不会被加载)类库加载到虚拟机内存中。启动类加载器无法被Java程序直接引用,用户在编写自定义类加载器时,如果需要把加载请求委

2020-05-23 11:29:20 286

原创 JVM垃圾收集器(串行,吞吐量优先)

JVM垃圾收集器(串行,吞吐量优先)文章目录JVM垃圾收集器(串行,吞吐量优先)一、串行的垃圾收集器二、吞吐量优先的垃圾收集器垃圾收集器就是内存回收的具体实现一、串行的垃圾收集器1、Serial收集器器(新生代收集器,串行GC)(复制)特性:Serial收集器是最基本新生代收集器,这个收集器是一个单线程的收集器,但它的“单线程”的意义并不仅仅说明它只会使用一个CPU或一条收集线程去完成垃圾收集工作,更重要的是在它进行垃圾收集时,必须暂停其他所有的工作线程,直到它收集结束(Stop The Wo

2020-05-22 17:42:38 1343

原创 JVM的四种垃圾回收算法(标记清除,标记整理,复制,分代回收)

Java中的四种垃圾回收算法垃圾回收算法只有四种:1、标记清除算法2、标记整理算法3、复制算法4、分代回收算法注意:这四种都是基于可达性分析算法来判断是否为垃圾的。第一、标记清除算法步骤:1、先找到GC roots根来遍历将非垃圾对象进行标记。2、他会将垃圾进行清除,就是图中的情况。注意:jvm并不是真正的把垃圾对象进行了遍历,把内部的数据都删除了,不是这样的,而是把垃圾对象的首地址和尾地址进行了保存,等到再次分配内存时,直接去地址列表中分配,所以清除的效率高。优点:清除速度快,效

2020-05-22 14:39:05 2722

原创 在Java中怎么可以看一个对象是不是垃圾对象

在Java中怎么可以看一个对象是不是垃圾对象文章目录在Java中怎么可以看一个对象是不是垃圾对象第一、引用计数法第二、可达性分析算法第三、四种引用1、强引用2、软引用3、弱引用4,虚引用还有一种就是重写Object类的finallized()方法(终结器引用)如何判断一个对象是不是垃圾对象第一、引用计数法引用计数描述的算法为:|给每一个对象增加一个引用计数器,每当有一个地方引用它时,计数器就+1;当引用失效时,计数器就-1;任何时刻计数器为0的对象就是不能再被使用的,即对象已"死"。引用计数法

2020-05-22 11:30:04 493

原创 Java类的生命周期(类加载)

Java类的生命周期文章目录Java类的生命周期类加载的时机类的生命周期的七个步骤第一、加载第二、验证第三、准备第四、解析第五、初始化类加载的时机在Java中有且仅有5种情况必须立即对类进行“初始化”:1、创建类的实例(new 的方式)。访问某个类或接口的静态变量,或者对该静态变量赋值,调用类的静态方法(类.xxx调用)2、反射的方式3、初始化某个类的子类,则其父类也会被初始化4、Java虚拟机启动时被标明为启动类的类,直接使用java.exe命令来运行某个主类(包含main方法的那个类)5

2020-05-22 10:02:36 236

原创 事务隔离级别底层的锁以及InnoDB的事务隔离级别实现

文章目录事务隔离级别底层的锁以及InnoDB的事务隔离级别实现事务隔离级别底层的锁先来说一下MVCCInnoDB事务隔离级别的实现记录锁(普通的行锁)间隙锁临键锁为什么可重复读和已提交读都使用了MVCC,但是可重复读解决了幻读,但是已提交读并没有解决幻读?事务隔离级别底层的锁以及InnoDB的事务隔离级别实现事务隔离级别底层的锁未提交读:不加锁,因为隔离级别太低,几乎不用。串行化:把所有的查询语句默认加共享锁,会个更新锁和排它锁进行互斥,从而使得事务有序进行。先来说一下MVCC多版本并发控制,

2020-05-21 18:45:34 234

原创 MySQL数据库事务以及事务隔离级别

文章目录数据库事务以及事务隔离级别MySQL数据库事务事务的特性事务的隔离级别数据库事务以及事务隔离级别MySQL数据库事务数据库事务( transaction)是访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。事务由事务开始与事务结束之间执行的全部数据库操作组成。事务的特性事务特性有四个:原子性:就是说一个事务要么执行成功,要么执行失败。一致性:事务中的数据要保持一致,要从一个状态转变为另一个状态。隔离性:事物之间相互独立,互不

2020-05-21 17:17:33 191

原创 数据库索引(Hash和B+)

数据库索引(Hash和B+)我们知道数据库索引有两种方式第一:Hash表第二:B+树Hash表哈希索引(hash index)基于哈希表实现,只有精确匹配索引所有列的查询才有效。对于每一行数据,存储引擎都会对所有的索引列计算一个哈希码(hash code),哈希码是一个较小的值,并且不同键值的行计算出来的哈希码也不一样。哈希索引将所有的哈希码存储在索引中,同时在哈希表中保存指向每个数据行的指针。对于hash相同的,采用链表的方式解决冲突。类似于hashmap。因为索引的结构是十分紧凑的,所以has

2020-05-21 15:50:43 442

原创 深入了解数据库存储引擎

深入了解数据库存储引擎数据库存储引擎MySQL中索引属于存储引擎级别的概念,不同存储引擎对索引的实现方式是不同的。一、MyISAMMyISAM引擎是MySQL5.5.8版本之前默认的存储引擎,不支持事物,支持全文检索,使用B+Tree作为索引结构,叶节点的data域存放的是数据记录的地址,其结构如下:上图是以以Col1为主键,MyISAM的示意图,可以看出MyISAM的索引文件仅仅保存数据记录的地址。在MyISAM中,主索引和辅助索引(Secondary key)在结构上没有任何区别,只是主索引

2020-05-21 15:13:46 247

原创 数据库索引的创建和使用

文章目录数据库索引创建索引使用场景数据库索引数据库的索引可以加快查询速度,原因是索引使用特定的数据结构(B-Tree)对特定的列额外组织存放,加快存储引擎(索引是存储引擎实现)查找记录的速度。索引优化是数据库优化的最重要手段。如果查询语句使用索引(通常是where条件匹配索引)就会利用树的结构加快查找,索引会按值查找到要查找的行在表中位置,不需回表查询数据的就是聚簇索引(索引和数据存放在一起)。通常是需要回表再查数据,需要消耗额外的磁盘IO。所以有些时候(如按顺序读取数据)全表扫描会比使用索引快的原

2020-05-20 17:17:26 3215

原创 MySQL数据库锁的机制

文章目录MySQL数据库锁的机制乐观锁和悲观锁共享锁:排它锁:数据库锁的本质MySQL数据库锁的机制数据库的锁按照不同的方式进行分类是不同的。乐观锁和悲观锁乐观锁:概念:数据库总是认为多个数据库并发操作不会发生冲突,所以总是不加锁操作。所以在数据进行提交更新的时候,才会正式对数据的冲突与否进行检测,如果发现冲突了,则让返回用户错误的信息,让用户决定如何去做。乐观锁的实现方式一般包括使用版本号和时间戳。悲观锁:概念:数据库总是认为多个数据库并发操作会发生冲突,所以总是要求加锁操作。悲观锁主要表

2020-05-20 15:36:55 163

原创 链表转红黑树是链表长度达到阈值,为什么阈值为8?不是其他数字

链表转红黑树是链表长度达到阈值,为什么阈值为8?不是其他数字链表转红黑树是链表长度达到阈值是8,红黑树转链表阈值为6。因为经过计算,在hash函数设计合理的情况下,发生hash碰撞8次的几率为百万分之6,用概率证明。因为8够用了,至于为什么转回来是6,因为如果hash碰撞次数在8附近徘徊,会一直发生链表和红黑树的互相转化,为了预防这种情况的发生,设置为6...

2020-05-12 17:03:26 1246

转载 什么是OOM,为什么会OOM及一些解决方法

什么是OOM,为什么会OOM及一些解决方法1)什么是OOM?OOM,全称“Out Of Memory”,翻译成中文就是“内存用完了”,来源于java.lang.OutOfMemoryError。看下关于的官方说明: Thrown when the Java Virtual Machine cannot allocate an object because it is out of memory, and no more memory could be made available by the garb

2020-05-12 16:57:54 527

原创 深入了解Java虚拟机(内存管理)

深入了解Java虚拟机(内存管理)文章目录深入了解Java虚拟机(内存管理)JDK、JRE与JVM之间的关系:JVM的内存管理程序计数器虚拟机栈(线程栈)本地方法栈方法区堆对象头JDK、JRE与JVM之间的关系:JDK全称为Java SE Development Kit(Java开发工具),提供了编译和运行Java程序所需的各种资源和工具,包括:JRE+java开发工具。JRE全称为Java runtime environment(Java运行环境),包括:虚拟机+java的核心类库。JVM是运行

2020-05-12 16:49:33 241

原创 B+树和B*树的底层实现原理以及与b-树的区别

B+树和B*树的底层实现原理以及与b-树的区别B+树B+树是B-树的变形,也是一种多路搜索平衡树:其定义基本与B-树相同,除了:非叶子节点的子树指针与关键字个数相同非叶子节点的子树指针p[i],指向关键字值属于(k[i],k[i+1])的子树为所有叶子节点增加一个链指针所有关键字都在叶子节点出现B+树的特性:所有关键字都出现在叶子节点的链表中,且链表中的节点都是有序的。...

2020-05-08 10:35:04 739

原创 B-Tree(B树)插入实现以及B树性能

B-Tree(B树)插入实现以及B树性能插入过程:如果树为空,直接插入新节点中,该节点为树的根节点树非空,找待插入元素在树中的插入位置(注意:找到的插入节点位置一定在叶子节点中)检测是否找到插入位置(假设树中的key唯一,即该元素已经存在时则不插入)按照插入排序的思想将该元素插入到找到的节点中检测该节点是否满足B-树的性质:即该节点中的元素个数是否等于M,如果小于则满足如果插入后节...

2020-05-08 09:45:45 841

原创 B-Tree(B-树)底层原理

B-Tree(B-树)基本搜索结构以上结构适合用于数据量不是很大的情况,如果数据量非常大,一次性无法加载到内存中,使用上述结构就不是很方便B-树概念一种适合外查找的树,它是一种平衡的多叉树,称为B树(B-树")。一棵M阶(M>2)的B树,是一棵平衡的M路平衡搜索树,可以是空树或者满足一下性质:根节点至少有两个孩子每个非根节点至少有M/2(上取整)个孩子,至多有M个孩子每个非...

2020-05-08 09:36:18 488

原创 红黑树底层原理以及实现

红黑树文章目录红黑树红黑树概念红黑树的性质红黑树节点的定义红黑树的插入(重点)AVL树和红黑树的比较红黑树应用红黑树概念红黑树,是一种二叉搜索树,但在每个结点上增加一个存储位表示结点的颜色,可以是Red或Black。 通过对任何一条从根到叶子的路径上各个结点着色方式的限制,红黑树确保没有一条路径会比其他路径长出俩倍,因而是接近平衡的。红黑树的性质每个结点不是红色就是黑色根节点是黑色...

2020-05-08 09:17:01 811

原创 Session对象

文章目录Servlet Session代码示例session持久化Servlet Sessionsession概念定义: session 是存储在服务器上的文本文件,并保留了用户的各种跟踪信息作用: 会话保持,如完成用户的登录与状态保持,因为在服务器端,所以相对安全一些Servlet 操作session方法HttpSession 对象Servlet 还提供了 HttpSession ...

2020-05-05 11:42:53 246

原创 Cookie对象

文章目录CookieCookiecookie概念定义: Cookies 是存储在客户端计算机上的文本文件,并保留了用户的各种跟踪信息作用: 会话保持,如完成用户的登录与状态保持cookie工作原理客户端向服务区发起登录请求服务器脚本向浏览器发送一组 Cookies。例如:姓名、年龄或识别号码等。浏览器将这些信息存储在本地计算机上,以备将来使用。当下一次浏览器向 Web 服务器发...

2020-05-05 11:37:09 338

原创 jsp和servlet的区别

jsp和servlet的区别JSP(全称JavaServer Pages)是由Sun Microsystems公司主导创建的一种动态网页技术标准。JSP部署于网络服务器上,可以响应客户端发送的请求,并根据请求内容动态地生成HTML、XML或其他格式文档的Web网页,然后返回给请求者。JSP技术以Java语言作为脚本语言,为用户的HTTP请求提供服务,并能与服务器上的其它Java程序共同处理复杂的...

2020-05-05 10:48:51 8679

原创 MVC开发模式

MVC框架先来看张MVC框架图MVC是Model View Controller,是模型(model)-视图(view)-**控制器(controller)**的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻...

2020-05-05 10:44:16 771 1

原创 Servlet的生命周期

Servlet_生命周期首先加载servlet的class,实例化servlet,然后初始化servlet调用init()的方法,接着调用服务的service的方法处理doGet和doPost方法,最后是我的还有容器关闭时候调用destroy 销毁方法。1.被创建:执行init方法,只执行一次1.Servlet什么时候被创建?–默认情况下,第一次被访问时,Servlet被创建,然后执行i...

2020-05-05 10:36:19 169

原创 HashMap、Hashtable、ConcurrentHashMap的原理与区别

文章目录HashMap、Hashtable、ConcurrentHashMap的原理与区别HashTableHashMapConcurrentHashMapHashMap、Hashtable、ConcurrentHashMap的原理与区别HashTable底层数组+链表实现,无论key还是value都不能为null,线程安全,实现线程安全的方式是在修改数据时锁住整个HashTable,效率低...

2020-05-05 10:32:55 154

原创 HashMap底层的扩容机制(以及2倍扩容的原因)

文章目录HashMap底层的扩容机制resize扩容resize源码源码文字说明HashMap底层为什么是2倍扩容?HashMap底层的扩容机制resize扩容HashMap会在两个地方进行resize(扩容):1 ,HashMap实行了懒加载, 新建HashMap时不会对table进行赋值, 而是到第一次插入时, 进行resize时构建table;2, 当HashMap.size 大...

2020-04-29 17:38:01 11023

原创 HashMap底层实现原理(增删查改)

文章目录HashMap底层实现原理(增删查改)HashMap的构造方法put方法根据key获取value删除keyHashMap底层实现原理(增删查改)HashMap的构造方法注意:不同于Java7中的构造方法,Java8对于数组table的初始化,并没有直接放在构造器中完成,而是将table数组的构造延迟到了resize中完成// 构造方法一:带有初始容量的构造,负载因子使用默认值0....

2020-04-29 16:35:01 753

原创 HashMap底层实现原理

文章目录HashMap实现原理为什么重写equals()和hashCode()方法?equals()和hashCode()的区别和联系HashMap的哈希函数扩容机制HashMap实现原理1,HashMap实现了Map接口.2,HashMap的默认初始容量是163. HashMap的最大容量为2的30次方4.HashMap的默认负载因子是0.755. 何时链表和红黑树相互转化...

2020-04-29 15:20:55 683

空空如也

空空如也

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

TA关注的人

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