自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

littlecolor

写给自己看

  • 博客(196)
  • 收藏
  • 关注

原创 Redis总结

2023-12-21 12:49:32 373

原创 Mysql总结

还不太完整,后续会补充。

2023-12-19 21:31:26 397

原创 JAVA.JUC总结

2023-12-19 21:24:21 408

原创 【JVM】对象的创建过程和对象的内存布局和对象的分配过程

说起对象的创建过程,就必须要先从类的初始化开始,只有先将类加载进内存进行初始化后,才能创建对象。类的初始化过程:1、加载 Loading将类.class文件加载进内存(存放于内存中的class静态常量池中)2、连接 Linkinga、验证 验证.class文件的格式b、准备 给类的**静态变量**赋默认值c、解析 将符号引用转换为直接引用3、初始化先执行静态代码块,再给静态的成员变量赋真实的值...

2020-11-02 10:48:21 187

原创 【操作系统】进程的状态转换及其调度策略

进程和线程的基本概念进程:进程是一个程序运行起来的状态,是资源分配和管理的基本单位线程:线程是进程中不同的执行路径,是执行调度的基本单位区别:不同的进程会拥有自己独立的内存空间,而线程共享进程的内存空间,没有自己独立的内存空间。在linux操作系统中,一个进程只包含一个线程。内核通过一个唯一的进程标识值或PID来标识每个进程。进程的状态切换...

2020-10-20 15:09:46 1058

原创 【JVM】JAVA的运行时数据区

JVM : JAVA VIRTUAL MACHINE ,是一种虚构出来的机器。是虚拟的CPU,其中的很多组建都是模拟了CPU的功能。运行时数据区及其主要功能分布介绍一下不同区域的主要功能。PC: Program Counter 程序计数器。存放指令的位置。在虚拟机运行中,CPU会从PC中获取将要执行的指令的地址,去该地址执行该指令,完成后,PC会继续下移到下一个指令的位置。JVM Stack:线程栈,栈中存放栈帧,每个线程拥有自己的私有的线程栈空间,线程栈由栈帧构成,每个方法会形成一个栈帧

2020-10-12 15:00:27 94

原创 【并发编程】AQS源码分析(四)通过ReentrantReadWriteLock来查看读写锁的源码实现

前几篇文章分别介绍了AQS的基本的加锁解锁流程,Condition,CountDownLatch共享锁等。这篇文章继续介绍关于ReentrantReadWriteLock相关的原理。

2020-09-10 15:39:32 164

原创 【并发编程】AQS源码分析(三) 通过CountDownLatch查看共享锁实现

之前说的ReentrantLock都是从独占锁的角度去探究Lock的具体实现,所以这篇专门来研究一下共享锁与独占锁的区别。要想了解CountDownLatch的具体使用和多线程之间通信的事例,可以先阅读:【多线程】四种种方案实现多线程之间相互协作的通信如果没有AQS基本原理基础可以先看【并发编程】AQS源码分析(一) 从ReentrantLock来看AQS的基本数据结构和主要执行流程【并发编程】AQS源码分析(二)通过生产者和消费者模式理解ReentrantLock的Condition之后再看这

2020-08-13 17:03:33 243 1

原创 【并发编程】AQS源码分析(二)通过生产者和消费者模式理解ReentrantLock的Condition

生产者和消费者模式是并发编程中最常见的需要加锁的场景,既可以通过synchronized + 对象本身的监视器方法wait()、notify()、notifyAll()来实现等待/通知的机制,也可以通过ReentrantLock实现,而ReentrantLock方式可以结合Condition来实现等待/通知的机制。建议:看这篇之前一定要先读懂第一篇,这样理解会容易的多【并发编程】AQS源码分析(一) 从ReentrantLock来看AQS的基本数据结构和主要执行流程下面生产者+消费者代码(Reentr

2020-08-11 14:59:15 282

原创 【并发编程】AQS源码分析(一) 从ReentrantLock来看AQS的基本数据结构和主要执行流程

在并发编程中AQS属于必知必会的内容了。AQS全称 AbstractQueuedSynchronizer抽象队列同步器。"抽象"就可以看出他是一个抽象类,我们在用时需要对他进行重写来自定义我们自己的同步器。基本原理既然是同步器,AQS就是在模拟加锁的过程,主要通过CAS原子的去更新变量的状态来达到加锁的效果。当CAS更新失败时,则会构造一个新的节点加入到一个双向链表中(queue)我们称这个双向链表为阻塞队列,节点加入到阻塞队列的对尾,当符合一定的条件后,再去更新变量的状态去获取锁的过程。AQS数据结

2020-08-07 16:24:28 338

原创 【多线程高并发】线程池初始化过程、线程池中的阻塞队列

多线程高并发一定少不了线程池技术。作用提升性能 线程的创建和销毁都会消耗一定的性能,通过线程池可以减少线程 的创建和销毁带来的性能消耗。便于管理 方便对线程进行统一的维护管理,比如定时开启,周期执行,并发数控制等参数及含义corePoolSize 核心线程数,队列没满时,线程最大的并发数maximumPoolSize 线程池最大线程数,队列满时,线程最大并发数keepAliveTime 空闲线程的最大存活时间,系统默认只回收非核心线程,核心线程可以通

2020-08-04 15:35:49 1162

原创 【算法+数据结构】位运算常识

程序中的所有数在计算机内存中都是以二进制的形式储存的。位运算就是直接对整数在内存中的二进制位进行操作。了解位运算,不仅可以在一些情况下让程序运行效率更高,而且位运算也是学习算法必备的知识之一。位运算都是基于二进制数进行的。逻辑与 &两个位置都为1才为1,否则为0.比如 12的二进制位为 :1100,14 的二进制位为 : 1110,那么与运算的结果为 : 1100.这里不太好记忆,容易与其他位运算混淆,可以想象成java中的逻辑与运算1为true,0为false,只有都为true才

2020-07-15 19:19:42 859

原创 【多线程高并发】volatile关键字作用和实现原理

在java中多线程为了实现共享变量能够被准备的更新除了可以使用加排他锁的方式,还有一种更加简单的方式就是对共享变量进行volatile声明。关键字作用保持内存可见性防止指令重排序JMM模型内存可见性指令重排序volatile实现原理...

2020-06-23 11:02:58 312

原创 【多线程高并发】synchronized锁升级过程及其实现原理

问:为什么会有锁升级的过程呢?答:在java6以前synchronized锁实现都是重量级锁的形式,效率低下,为了提升效率进行了优化,所以出现了锁升级的过程。问:我们通常说synchronized锁是重量级锁,那么为什么叫他重量级锁?答:因为synchronized执行效率太低。在java1.6以前每次调用synchronized加锁时都需要进行系统调用,系统调用会涉及到用户态和内核态的切换,系统调用会经过0x80中断,经过内核调用后再返回用户态。此过程比较复杂时间比较长所以通常叫synchroniz

2020-06-03 15:42:53 4296

原创 【mysql】B+树结构在各个索引类型中的表现形式

B+树索引是目前关系型数据库系统中查找最为常用和最为有效的索引。B+树索引并不能找到一个给定键的具体行,B+树索引能找到的只是被查找数据行所在的页,然后数据库通过把页读入到内存,再在内存中进行查找,最后得到要查找的数据。B+树由二叉树演变而来是B树的变种。在B+树中,所有记录节点都是按键值的大小顺序存放在同一层的叶子节点上,由各叶子节点指针进行连接。不同索引中的B+树结构聚集索引如上图所示的B+树结构,在mysql数据库中,对于聚集索引的B+树结构,在Index page中存放的就是表中的主

2020-05-13 15:01:47 641 1

原创 【mysql】事务的隔离级别有哪些?各个级别造成的问题是什么?Innodb分别是如何解决他们的?

事务隔离级别1. READ UNCOMMITTED : RU 称为浏览访问,可以读取事务未提交的数据。 2. READ COMMITTED : RC 称为游标稳定,只能读取已经提交事务的数据。 3. REPEATABLE READ: RR 可重复读。 4. SERIALIZABLE : SR 序列化。所有事务按照次序依次执行。当一个事务开始未提交时,其他事务均不能执行。

2020-05-09 15:06:39 2165 1

原创 【mysql】Innodb存储引擎是如何保证事务的ACID四个原则的

事务

2020-05-08 10:56:29 1413 4

原创 【mysql】InnoDB关键特性---两次写、自适应哈希和异步IO

上篇博客总结了InnoDB的插入缓冲特性,这篇博客总结关于InnoDB的另外三个特性两次写,自适应哈希和异步IO两次写Insert Buffer带给InnoDB存储引擎是性能上的提升,而double write带给InnoDB的则是数据页的可靠性。产生背景当InnoDB引擎正在写入某个页到表中时,这个页只写了一部分发生了宕机,这种情况被称为部分写失效。这种情况下,可以通过重做日志进行恢复,...

2020-04-24 10:20:53 221

原创 【mysql】InnoDB关键特性---插入缓冲

要想深刻的理解InnoDB插入缓冲特性,我们需要对mysql的索引有比较深刻的理解。聚集索引和非聚集索引聚集索引:聚集索引是指数据库表行中数据的物理顺序与键值的逻辑(索引)顺序相同。在InnoDB中,表中的数据都是按照主键顺序存放。而聚集索引就是按照每张表的主键构造一棵B+树,同时叶子节点中存放的就是整张表的行记录数据,也将聚集索引的叶子节点称为数据页。同B+树结构一样,每隔数据页都通过一个...

2020-04-21 14:36:18 337

原创 JAVA CMS垃圾回收器回收机制

CMS concurrent marks sweep 并行标记清除垃圾回收机制。此篇文章是根据众多网上资料总结的关于CMS垃圾回收器的相关知识点。便于个人总结和回忆。垃圾回收器类型1、串行回收,Serial回收器,单线程回收,全程stw;2、并行回收,名称以Parallel开头的回收器,多线程回收,全程stw;3、并发回收,cms与G1,多线程分阶段回收,只有某阶段会stw;CMS垃圾回...

2019-04-11 15:52:12 7157 4

原创 【JVM】类加载、连接和初始化过程

程序运行时,加载类主要经过3个阶段分别是类的加载,连接和初始化。分别介绍一下这三个过程。一、加载类的加载指的是将类的.class文件中二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构。加载.class文件的方式1、从本地系统中直接加载2、通过网络下载.class文件3、从zip,jar等归档文件中加

2016-08-04 14:35:30 5403 1

原创 【多线程】四种种方案实现多线程之间相互协作的通信

在并发编程中,经常会遇到多个线程之间需要相互协作的情况,即并不是多个线程同时执行,而是按照一定的顺序循环执行的情况。那么怎样去实现这种效果呢?这里介绍三种方案。这里都以子线程循环10次,然后主线程循环10次,然后往复循环50次的思路来做例子。一、synchronized+notify+waitpublic class communication01 { public stat

2016-07-27 14:37:10 7299 2

原创 2020这极为特殊的一年

这是一篇流水账~~~今年总在围绕一个词‘疫情’疫情2020刚开始就跟往常不太一样,因为武汉疫情风暴波及全国,2020春节,我们谁也没有出家门,宅在家里看电视,刷抖音,之前期盼的天天在家闲的没事的生活也经不起打磨,过不了几天大家就很闷,无聊,于是,2020的春节,大家开始在家学者各种烹饪技术,做凉皮,烤面包,学各种炒菜等等。看看我们在疫情期间做的美味吧(哈哈)是不是看着还不错,所以因为今年的疫情我涨了10斤肉肉哈哈哈哈。今年的春节假期也格外长,因为疫情,国家统一推迟了假期到20月10号,公

2021-01-19 17:56:01 674 5

原创 【算法+数据结构】多种方法实现二叉树遍历

二叉树遍历也是面试中经常碰到的题目,这篇文章主要总结一下有关二叉树遍历的相关问题。二叉树结构 public static class Node{ //左子节点 public Node left; //右子节点 public Node right; public int value; public Node(int v){ value = v; } }二叉树的遍历

2020-12-11 10:35:19 242

原创 【算法+数据结构】矩阵相乘

矩阵相乘特别容易搞晕。其实理解了矩阵相乘的来源也就没有那么难理解了。不过在此之前,要记住一个,矩阵相乘只有在第一个矩阵的列和第二个矩阵的行数相等时才有效哦。对于普通的二元一次方程2x + 4y = 10;x + 3y = 7;我们用矩阵可以表示为:这个属于第一个矩阵是多行,第二个矩阵为单列的情况。当第一个矩阵为多行,第二个矩阵为多列时例如:2x + 4y = 10;x + 3y = 7;2k + 4m = 10;k + 3m = 7;这样的表达式表示成矩阵如下:那么根据上

2020-11-26 16:43:56 934

原创 【工具】charles代理抓包配置

像这种工具的使用,通常是固定的配置步骤,但是长时间不用吧,再回来使用的时候总是忘记他的配置步骤,还得再重新琢磨,于是,这次我决定把chales的配置步骤记录下来,方便下次查看。【手机系统】IOS 用的苹果13的系统配置步骤1、先安装好chales工具2、安装电脑端证书2、配置手机端代理Help —> SSL Proxying ----> install chales Root Certificate on Mobile Device Or Remote Browser点击上

2020-07-24 10:52:48 540

原创 【高并发】JAVA集合之队列----- (一)概览

说起JAVA中的阻塞队列,就不得不提到JAVA中的集合,队列Queue继承了Collection的所有的方法,也是一种集合的表现形式。

2020-06-30 16:58:04 224

原创 【Redis】集群通信、复制和故障转移

Redis集群是Redis提供的分布式数据库方案,集群通过分片来进行数据共享,并提供复制和故障转移功能。节点握手一个redis集群通常是由多个节点组成,刚开始的时候,每隔节点都是相互独立的,它们都处于一个只包含自己的集群当中,要组建一个真正可工作的集群,我们必须将多个独立的节点连接起来,构成一个保护多个节点的集群。连接各个节点的工作由CLUSTER MEET命令完成。节点握手过程:1、节...

2020-04-16 17:05:41 343

原创 【Redis】sentinel故障转移

在redis中,根据不同架构方式可以有不同的故障转移方案。主要有通过sentinel和集群两种方式。Sentinel架构模式Sentinel是Redis高可用性的解决方案。在Redis主从架构中,当主服务器发生故障时,不能进行主备切换。而Sentinel产生就是为了完整redis的故障转移工作。sentinel系统工作图如下:在启动sentinel系统以后,sentinel系统会为其所监...

2020-04-10 15:16:59 573

原创 【Redis】主从同步复制原理

在Redis中,可以通过SLAVEOF命令或者slaveof选项,让一个服务器去复制另一个服务器,被复制的服务器称为主服务器,而对主服务器进行复制的称为从服务器。进行复制中的主从服务器数据库将保存相同的数据,概念上将这种现象称作“数据库状态一致”。复制功能主要分为同步和命令传播两个操作同步操作用于将从服务器的数据库状态更新至主服务器当前所处的数据库状态。命令传播操作则用于在主服务器的数据...

2020-04-02 14:09:07 199

原创 【Redis】redis中一条命令的执行都需要经历什么?

我们都知道在redis客户端向服务器发送一条命令可以实现数据的增删改查,但是这条命令的执行过程是怎么样的呢?执行命令前需要哪些准备呢?首先在所有命令执行前,必须要启动服务器和客户端:1、服务器的启动2、客户端地创建其次,才是命令的发送、执行和回复。服务器的启动流程1、初始化状态结构首先,redis在启动服务器时,会先创建一个struct redisServer类型的事例变量serv...

2020-03-31 14:13:04 490

原创 【IO】Reactor模式

先看前两篇:一、IO的四种基本模式了解相关的概念:【IO】SBIO,SNBIO,ANIO,AIO二、IO多路复用:【IO】IO多路复用及select,poll,epoll运行机制接下来继续总结Reactor模式。IO多路复用只是简单的介绍了在网络请求中的前半部分,而后半部分的请求处理和响应就是接下来的reactor模式演化。最最原始的网络编程思路就是服务器用一个while循环,不断监听端...

2020-03-23 15:02:04 425

原创 【IO】IO多路复用及select,poll,epoll运行机制

上篇文章梳理了四种不同的IO模式,这篇博客继续梳理IO多路复用和Reactor模式。IO多路复用概念io多路复用就是利用 select、poll、epoll 可以同时监察多个流的 I/O 事件的能力,在空闲的时候,会把当前线程阻塞掉。当有一个或多个流有 I/O事件时,就从阻塞态中唤醒,于是程序就会轮询一遍所有的流(epoll 是只轮询那些真正发出了事件的流),并且只依次顺序的处理就绪的流...

2020-03-19 15:26:07 537

原创 【IO】SBIO,SNBIO,ANIO(其实没有异步非阻塞io),AIO

最近发现了自己之前的学习过程中的许多问题,于是想要踏实下来重写梳理学习过的一些基础概念,以便以后学习更加便捷。这篇文章主要总结四种不同的IO模式。IO分成四种模型分别为同步阻塞(Synchronous blocking I/O),同步非阻塞(Synchronous non-blocking I/O),异步阻塞(Asynchronous blocking I/0),异步非阻塞(Asynchrono...

2020-03-18 13:19:16 247

原创 【Redis】再看Redis持久化机制RDB和AOF

Redis作为目前最流行的内存数据库,持久化机制是我们必须要考虑的问题之一。这里主要总结一下Redis的持久化机制以及他们之间的优缺点。Redis持久机制主要分为RDB和AOF。RDB即熟称快照方式(Redis Database),AOF即文件写入方式(Append On File),下面分别介绍一下这两种方式。RDBRDB:快照方式,redis可以设置每隔多长时间自动生成一份当前内存中所...

2020-03-17 13:58:50 121

原创 【Redis】用数据结构解释Redis基本数据类型

redis支持多种数据类型,string,list,hash,set,zset,这个可能很多人都已经了如指掌了,但是redis中这些基本的数据类型都是由什么数据机构进行实现的呢,这其中的原理又是怎么样的呢?这篇文章主要来针对redis中每种数据类型的具体实现进行详细介绍。基本的数据结构首先,需要整体上了解一下redis中用到的一些基本数据结构的含义和概念。1、字符串SDS:简单动态字符串,r...

2020-03-16 13:32:32 164

原创 java中的集合(一)

总觉得很久没有总结一些基础知识了。很空虚,所以想着那就总结一下java中的集合类吧。常用的集合类有ArrayList,LinkList,Vector,HashMap,HashTable,HashSet这几种。主要通过对比这些集合之间的区别和内部机制来总结一下各自的特点。1、ArrayList和LinkList和Vector三者的共同点是都实现了List接口不同点:1、内部实现Arra...

2020-01-17 16:27:20 97

转载 dubbo架构原理

什么是Dubbo?Dubbo是一个RPC远程调用框架, 分布式服务治理框架什么是Dubbo服务治理?服务与服务之间会有很多个Url、依赖关系、负载均衡、容错、降级、路由规则、自动注册服务。Dubbo架构节点角色说明:Provider: 暴露服务的服务提供方。 Consumer: 调用远程服务的服务消费方。 Registry: 服务注册与发现的注册中心。Container:...

2020-01-13 10:01:05 152

原创 2019年年末给我自己的一个总结---发现自己其实外表平静,内心狂野哈哈哈哈哈

曾经的我们,每年年终都会写一个年终总结,内容是总结这一年来自己学到的知识,懂得的道理等等。算是对过去的一个反思,以及对未来的一个期许。然而工作之后很长时间内,已经把这个习惯丢掉了。其实这样很不好,会觉得自己一年下来什么也没留下。很空虚。所以无论好坏,我还是想总结一下过去这一年的自己。在2019年里,我经历了很多事情,包括工作上的,感情上的,同时也比原来更加看透了许多事情,懂得了很多道理。我想人总...

2019-12-26 10:48:35 613 1

原创 HighLevelRestClient操作ES几种常见API总结

一、环境配置版本在这里一定要注意,es从6.3之后api发生了很多变化,很多api被弃用了。所以这里用的是6.8.4.导入jar包 <dependency> <groupId>org.elasticsearch.client</groupId> <artifactId>elasticsearc...

2019-11-21 11:41:06 3991

空空如也

空空如也

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

TA关注的人

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