自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(85)
  • 资源 (1)
  • 收藏
  • 关注

原创 elasticsearch bulk 批量操作

{“doc”:{“name”:“测试create数据101”,“age”:“21”}}{“doc”:{“name”:“测试create数据101”,“age”:“22”}}再次执行,为重新覆盖整条doc(相当于删除后新增)再次删除,文档已经不存在,返回错误。

2023-09-19 22:50:16 1052

原创 post更新,put相当于删除重新增一条

索引数据//删除后新增//覆盖更新“doc”: {

2023-09-17 22:16:40 274

原创 动态映射方式之字段名称匹配机制

1:创建索引,dynamic_templates名称是固定的,不能随便命名;pernum字段类型是字段名称匹配中指定的类型。

2023-09-17 19:40:46 209

原创 es小记(copy_to)

设置索引的时候,我们给某些字段的store属性设置为true,在查询时,请求中可以携带stored_fields参数,指定某些字段,最后,这些字段会被包含在返回的结果中。如果请求中携带的字段没有被储存,将会被忽略。1: 3个主分片,各自有一个副本,总分片数为 3*2=6;refresh_interval为刷新频率;2: copy_to字段查询时不会返回。2.1:如下查询可返回。

2023-09-17 17:56:35 824 1

原创 Mysql索引基本详解

1

2022-01-13 16:17:46 210

原创 Linux中Es安装启动以及启动问题

1:安装包链接:https://pan.baidu.com/s/1-sohDpOA-8qh58miRPh8AQ提取码:ukz3

2022-01-13 15:14:44 9563

原创 Spring容器中的对象都是代理对象吗?

引自: 添加链接描述

2021-09-01 22:29:47 1047

原创 分布式锁解决浅析

2021-08-13 11:49:31 134

原创 负载均衡算法、类型

类型:

2021-08-13 11:30:24 213

原创 Redis 的主从复制原理

全量复制部分复制过程原理图:

2021-08-13 11:22:22 93

原创 Redis的集群方案

主从哨兵模式redis Cluster 服务端分片中 各个节点互为主从redis sharding 是在客户端进行分片

2021-08-13 11:12:41 111

原创 Redis的事务简述

事务的开始命令入队注意:事务开始后,如果是命令的语法错误,则事务会关闭 flags属性中的 Redis_MULIT,也就意味中事务关闭; 如果错误不是语法,而是逻辑错误,例如将 String类型的做一些 hashMap 操作的命令,那么只是这个命令执行错误,并不会关闭事务,事务会继续向下执行其他命令;事务执行...

2021-08-13 11:00:07 115

原创 Threadlocal的底层原理

Threadlocal是 java 提供的线程本地存储机制,可以利用该机制将数据缓存在 某个线程内部,任意方法中获取缓存的数据;Threadlocal 是通过 ThreadlocalMap来实现的,每个 Thread对象(注意:不是Threadlocal对象)中都存在一个 ThreadlocalMap,map的 key为Threadlocal对象,map的值为需要缓存的值;如果在线程池中使用 Threadlocal会造成内存泄漏,因为当Threadlocal使用完后,应该把设置的 key,value

2021-08-09 23:08:25 593

原创 Synchronized和Reentrantlock的区别

Synchronized 是一个关键字, Reentrantlock 是一个类;Synchronized 会自动加锁释放锁, Reentrantlock 需要程序员手动加锁释放锁;Synchronized 是 JVM层面的锁, Reentrantlock 是API层面的锁;Synchronized 是非公平锁, Reentrantlock 可以选择公平锁或非公平锁;Synchronized 锁的是对象,锁信息保存在对象头中, Reentrantlock 是通过代码中 int类型的 state标识来判

2021-08-09 22:42:38 269

原创 synchronized偏向锁,轻量级锁,重量级锁

偏向锁: 在锁对象的对象头中记录一下当前获取锁的线程ID,该线程下次如果再来直接获取锁;2)轻量级锁:有偏向锁升级而来,当一个线程获取锁后,此时这把锁是偏向锁,当另一个线程来竞争锁时,偏向锁就会升级为轻量级锁,轻量级锁底层是通过自旋来实现的,并不会阻塞线程;3)重量级锁:如果通过多次自旋还是没有获得锁,则会升级为重量级锁,重量级锁时线程阻塞的(当线程A获取锁,其他线程就会获取不到锁并进入等待,当线程A释放锁,其他锁之间就会去竞争锁);4) 自旋锁:线程之间在不停的竞争锁,会不停的自旋执行,,线程不会.

2021-08-09 22:30:57 257

原创 线程基本信息详解

线程的五种状态创建: 新建一个线程对象就绪:线程调用 start() 方法, 变得可运行,等待 CPU资源运行:线程获取 CPU资源,执行程序代码;阻塞:线程应为某种原因放弃CUP资源,暂时停止运行,直至线程再次进入就绪状态,才有机会运行;死亡: 线程执行完成或者 异常退出 run()方法,该线程结束生命周期;线程的三种阻塞情况等待阻塞: 运行的线程执行 wait(),线程会释放资源,JVM会把线程添加到’等待池’中,该种情况线程不能自动唤醒,需要调用 notify()或者notifyAll(

2021-08-09 21:48:06 219

原创 Reentrantlock中的公平锁和非公平锁的底层实现

首先不管是公平锁还是非公平锁,它们的底层都是使用 AQS进行排队;区别: 线程使用 lock() 方法加锁时,如果是公平锁,会先检查 AQS队列中是否存在线程排队,如果有线程在排队,那么当前线程也进行排队;如果是非公平锁,则不会去检查 AQS队列中是否有线程排队,而是直接去竞争锁;不管是公平锁还是非公平锁,一旦没有竞争到锁,都会进行排队,当锁释放时,都是唤醒排在最前面的线程,所有非公平锁只是体现在加锁阶段,而没有体现在唤醒阶段;另外 Reentrantlock 是可重入锁,不管公平锁还是非公平锁; 注

2021-08-09 21:42:53 484

原创 Reentrantlock里面lock和tryLock的区别

Lock和TryLock的区别1: lock拿不到锁会一直等待。tryLock是去尝试,拿不到就返回false,拿到返回true。2: tryLock是可以被打断的,被中断 的,lock是不可以。举一个例子如下:假如线程A和线程B使用同一个锁LOCK,此时线程A首先获取到锁LOCK.lock(),并且始终持有不释放。如果此时B要去获取锁,有四种方式:1)LOCK.lock(): 此方式会始终处于等待中,即使调用B.interrupt()也不能中断,除非线程A调LOCK.unlock()释放锁。

2021-08-09 21:21:25 3833

原创 String、StringBuffer和StringBuilder的区别

三者共同之处:都是final类,不允许被继承;String本身就是一个对象,因为String不可变对象,所以,每次修改变更,都会重新创建一个对象StringBuffer是线程安全,可以不需要额外的同步用于多线程中;StringBuilder是非同步线程不安全,运行于多线程中就需要使用着单独同步处理,但是速度就比StringBuffer快多了;运行速度,或者说是执行速度,在这方面运行速度快慢为:StringBuilder > StringBuffer > String...

2021-08-08 22:37:54 123

原创 List和Set的区别

List:有序,按对象进入的顺序保存对象,可重复,允许多个 Null元素对象,可以使用 Iterator取出所有元素,在逐一遍历时,还可以使用 get(index)取出指定下标位置数据;Set:无序,不可重复,最多允许一个 Null元素对象,只能使用 Iterator取出所有元素,在逐一遍历所有元素;...

2021-08-08 22:28:17 119

原创 Java 异常体系

Java把异常作为一种类,当做对象来处理。所有异常类的基类是Throwable类,两大子类分别是Error和Exception。系统错误由Java虚拟机抛出,用Error类表示。Error类描述的是内部系统错误,例如Java虚拟机崩溃。这种情况仅凭程序自身是无法处理的,在程序中也不会对Error异常进行捕捉和抛出。异常(Exception)又分为RuntimeException(运行时异常)和CheckedException(检查时异常),两者区别如下:RuntimeException:程序运行过程中

2021-08-08 21:56:37 121

原创 hashMap的扩容机制原理

1.7版本先生成新数组(原数组长度的 2倍)2)遍历老数组每个位置上链表上的元素3)取每个元素的 key,基于新数组的长度,计算出每个元素在新数组中的下标4)将元素添加到新数组中5) 所有元素转移完后,将新数组赋值给 hashMap对象的table属性1.8版本先生成新数组(原数组长度的 2倍)2)遍历老数组每个位置上链表或红黑树3)如果是链表,则直接计将链表上每个元素在重新计算下标并添加到新数组中4)如果是红黑树,则先遍历红黑树,计算出红黑树上的元素对应在新数组中的小标位置

2021-08-08 21:32:21 269

原创 hashCode与equals

hsahCode介绍hashCode的作用是获取哈希吗,也称为散列码,它实际返回的是一个 int整数;这个哈希码的作用是确定该对象在哈希表中索引的位置,java中任何类都包含有 hashCode()函数;hashCode 与 equals,以hashSet如何检查重复为例:有对象加入hashSet时,hashSet会先计算对象的 hashCode值来判断对象加入的位置,看该位置是否有值,如果没有,hashSet会判定对象没有重复;如果有值,这时会调用 equals()方法来检查两个对象是否真的相同,如

2021-08-08 21:08:55 102

原创 java中final浅析

简述 final:修饰类,表示该类不能被继承;修饰方法,表示该方法不能被重写,但可以重载;修饰变量,表示该变量一旦赋值就不能进行更改它的值;

2021-08-08 19:24:38 104

原创 CopyOnWriteArrayList原理

1)CopyOnWriteArrayList内部也是通过数组实现的,添加新元素时,会复制一个新数组,写操作在新数组上进行,读操作在原数组上进行;2)写操作会加锁(lock锁),防止并发写丢失数据问题;3) 写操作结束后,会把原数组指向新数组;4) 允许在写操作时读取数据,大大提高了读的性能,因此适合读多写少的场景,但是CopyOnWriteArrayList会比较占内存(每次写复制新数组),所有不适合实时性要求很高的场景;...

2021-08-07 23:23:53 416

原创 HashMap 与HashTable的区别

HashMap 与HashTable的区别1)HashMap是继承自AbstractMap类,而HashTable是继承自Dictionary类。不过它们都实现了同时实现了map、Cloneable(可复制)、Serializable(可序列化)这三个接口。2)Hashtable既不支持Null key也不支持Null value,HashMap中,null可以作为键,这样的键只有一个;可以有一个或多个键所对应的值为null。3)Hashtable是线程安全的,它的每个方法中都加入了Synchroni

2021-08-07 22:51:35 155

原创 ArrayList与LinkedList的区别

ArrayList:1)动态数组结构,它是连续内存存储,适合下标访问的(随机访问),查询快;2)ArrayList 的默认长度是10,当添加第 11 个元素时,进行扩容,是新建一个数组并将老数组中的数据复制到新数组中,老数组会被回收掉,扩容新建数据长度是老数组的 1.5倍;3) 插入数据时,如果不是尾部插入还会涉及到 元素的移动;比如要在头部插入 6 ,则需要1,2,3,4,5 依次向后移动;比如要在 4,5中间插入6,则 5向后移动一位,结果为 1,2,3,4,6,5,这种情况就是 插入,删除慢的情

2021-08-07 22:08:49 137

原创 ==和 equlas

== 情况1)如果比较的是基本数据类型( int )的变量值,则是直接比较变量值;2)如果比较 的引用类型( String ),则是比较内存地址;equals情况String类中是复写 equals方法,是直接比较两个值的内容的示例:...

2021-08-07 21:10:54 87

原创 Spring基础详解

Spring是什么?Spring是一个轻量级的控制反转(IOC) 和面向切面(AOP) 的容器框架;它是一个轻量级的 J2EE的开源框架、容器框架;AOP理解将程序中交叉业务逻辑(安全,日志,事务)等,封装成一个切面,然后注入到目标对象中(具体逻辑)中,AOP可以对某个对象或某个对象的功能进行增强,对对象的中方法进行增强,在方法之前或执行之后做一些事情;IOC理解IOC容器概念,控制反转,依赖注入;**IOC容器:**实际相当于Map,项目启动时,扫描到类似 @resipository,@Co

2021-08-05 22:34:35 166

原创 Mysql锁的类型有哪些

从锁的属性分类:共享锁: 共享锁又称读锁,简称 S锁,当一个事务为数据加上读锁后,其他事务也只能这些数据加读锁,不能加写锁,当所有事务都释放锁后,才能对这些数据加写锁;主要是为了支持并发读取数据,读取数据时不支持修改数据,避免重复读的问题;排他锁: 排他锁又称写锁,简称 X锁,当一个事务为数据加上写锁后,其他事务不能再对这些数据加任何锁,直到该锁释放后,其他事务才能加锁;目的是为了修改数据的时候,、不允许其他人同时修改,也不允许其他人读数据,避免数据出现脏读的情况;从锁的粒度分类表锁(InnoDB,

2021-08-05 21:47:55 322

原创 Redis 的RDB与AOF机制原理(持久化)

RDB:Redis DataBase在指定时间间隔内将内存中的数据集快照写入磁盘; 实际操作使 fork一个子进程,先将数据集写入到一个临时文件中,再用临时文件替换之前的文件,文件是用二进制压缩存储;优点 :1) 整个 Redis 只有一个 dump.rdb 文件,方便持久化,方便备份;2) 因为是 fork出一个子进程处理这些 I/O操作,主进程仍然继续处理命令,不进行这些 I/O操作,所以性能最大化,保证了Redis的高性能;缺点:数据安全性低, RDB持久化是每间隔一段时间进行的,若 re

2021-08-04 22:26:59 195

原创 Mysql的基本使用原则

索引的设计原则原则: 查询更快,占用空间少;适合的索引列在 where 字句中的列 或者连接字句指定的列;数据较少的表,索引效果差,没必要建立索引,因为建立索引,会产生索引文件,占用额外的磁盘空间,并且也需要去维护,反而增加了开销;不要过度的索引,因为索引也是需要磁盘空间的,过多的索引会降低写操作的性能,在修改表内容的时候,索引也需要进行重构的,索引列越多,这个维护索引的时间越长,所以只要保持需要的索引有利查询即可;定义外键列一定要建立索引;更新频繁的列不适合创建索引;尽量扩展索引,不要新建

2021-08-03 23:54:04 206

原创 线程基本信息详解

线程基本信息详解线程的五种状态创建: 新建一个线程对象就绪:线程调用 start() 方法, 变得可运行,等待 CPU资源运行:线程获取 CPU资源,执行程序代码;阻塞:线程应为某种原因放弃CUP资源,暂时停止运行,直至线程再次进入就绪状态,才有机会运行;死亡: 线程执行完成或者 异常退出 run()方法,该线程结束生命周期;线程的三种阻塞情况等待阻塞: 运行的线程执行 wait(),线程会释放资源,JVM会把线程添加到’等待池’中,该种情况线程不能自动唤醒,需要调用 notify()或者

2021-08-02 23:02:39 258

原创 MySql底层数据结构详解

索引: 索引是帮助SQL高效获取数据排好序的数据结构Mysql 底层索引: B+ Tree 或者 hashB+ Tree 数据结构示例图:如下图3层数据的 B+ Tree,数据从左到右是依次存储,第一二层为非叶子节点表示索引,存储的索引越多则当前 B+ Tree的层级越少;层级越少则表示更少的 I/O操作;第三层是存储数据的叶子节点,假如查找数据 30,实际只有两步,第一步时会把所有索引加到内存中,找到30在索引 20-49之间,则索引之间空白实际是它叶子节点的指针,通过指针直接就定位到 20到30,

2021-07-31 22:45:43 566

原创 高并发下双重检测锁指令重排问题

指令重排现象,以下图示例:线程 one中的 a=y,x=1 实际执行时,可能会先执行 a=y,再执行 x=1;也可能先执行 x=1,再执行 a=y;因为这两行代码之前是不存在依赖,如果存在以来,计算机则不会对其进行指令重排序高并发双重检测锁,以单例模式为例: 双重判断,假如线程A获得锁并进行创建 DoubleCheckLockSingleton 实例时,线程B实际已经执行完第一层 instance == null 在等待锁,当线程A执行完创建 了DoubleCheckLockSingleton实例,如.

2021-07-26 22:13:28 557

原创 volatile使共享变量可见性底层解析(多线程共享变量一致性)

多线程有共同变量 initFlag,未使用volatile效果如下:现象:线程1执行到while时,当前 initFlag = false,所以线程1进入死循环;线程2执行,调用 prepareData(),该方法中有将 initFlag重置为 true,线程2执行完,但从圈中部分可以看出程序仍在运行,线程1中的并没有跳出while的死循环(若跳出死循环则会打印出 success),可以看出线程1 使用的变量 initFlag 仍然是 = false的;结论是线程2变更initFlag的值,并没有共享到

2021-07-26 21:20:08 434

原创 JVM内存核心解析(内存模型)

代码参考解析示例内存模型示例以下参考上面两图1,本地方法栈:调用 native 的方法时,实际该方法时本地方法,本方法的实现在类包中,则本地方法栈是存放该方法的内存地址;2_1,栈(compute()栈帧):局表变量表是 compute()方法中的变量;操作数栈是a=1,b=2等一系列赋值运算操作的临时空间地址,操作完成后变量 a,b存放进局部变量表中;动态链接存放compute()方法的内存地址,当执行方法时根据这个地址找到对应的方法;方法出口 是存放compute()方法的位置,当方法执行完

2021-07-25 20:20:28 275 2

原创 linux中安装JDK

1:上传 jdk 到Linux 中,jdk8资源:提取码:pqxl

2021-04-07 22:09:53 131

原创 SpringApplication的构造函数初始

1,SpringApplication启动原理2, 通过上下文获取 Bean3,SpringApplication.run() 的底层调用

2020-11-16 21:17:35 144

原创 SpringBoot 的四大设计思想

1,SpringBoot 实现快速整合第三方框架2,完全去除 XML配置,采用注解形式3,内嵌服务器 Tomcat4,自定义 Starter

2020-11-11 21:12:49 514

oracle安装

oracle安装详细步骤,以及 oracle 的 安装包,安装完成及测试

2018-10-03

空空如也

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

TA关注的人

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