- 博客(85)
- 资源 (1)
- 收藏
- 关注
原创 elasticsearch bulk 批量操作
{“doc”:{“name”:“测试create数据101”,“age”:“21”}}{“doc”:{“name”:“测试create数据101”,“age”:“22”}}再次执行,为重新覆盖整条doc(相当于删除后新增)再次删除,文档已经不存在,返回错误。
2023-09-19 22:50:16
1052
原创 动态映射方式之字段名称匹配机制
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
原创 Linux中Es安装启动以及启动问题
1:安装包链接:https://pan.baidu.com/s/1-sohDpOA-8qh58miRPh8AQ提取码:ukz3
2022-01-13 15:14:44
9563
原创 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
原创 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
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人