- 博客(33)
- 收藏
- 关注
原创 elasticsearch-6.8.23的集群搭建过程
--------------------------------------------- 设置集群的账户和密码(可选) ----------------------------------------------------------------------------------------------------- 备份过程中可能遇到的问题 -------------------------------------------------------也可以先下载下来,再上传的方式完成。
2024-06-29 15:57:22
1518
原创 InnoDB行级锁加锁规则
先来看语句查询条件的前半部分 id >= 20,因此,这条语句最开始要找的第一行是 id = 20,然后向右遍历,结合加锁的两个核心,(1)查找过程中访问到的对象才会加锁(2)加锁的基本单位是 Next-key Lock(左开右闭)。这里为什么是 (20,25] 而不是 (20, 22],因为 id = 22 的记录不存在呀,所以InnoDB 先找到 id = 20 的记录,发现不匹配,于是继续往下找,发现 id = 25,因此,id = 25 的这一行被扫描到了,所以整体的加锁范围是 (20, 25]。
2024-04-27 08:34:37
966
1
原创 LongAdder 和 Striped64 基础学习
b,表示获取的 base 值,类似于 AtomicLong 中全局变量的 value 值,在没有竞争的情况下数据直接累加到 base 上,或者扩容时,也需要将数据写入到 base 上;看下里面的 THREAD_PROBE,在 jdk8 中用的是 UNSAFE 类,这里是 MethodHandles.lookup()。3、负数的反码:符号位保持不限,其他位取反,负数的补码:补码 + 1。1、对于有符号的而言,最高位为符号位,0表示正数,1表示负数。2、正数的原码,反码和补码都一样,三码合一。
2024-04-04 10:45:55
369
原创 happens-before 原则
1、次序原则:一个线程内,按照代码的顺序,写在前面的操作先行发生于写在后面的操作,也就是说前一个操作的结果可以被后续的操作获取(保证语义串行性,按照代码顺序执行)。问题描述:假设存在线程A和B,线程A先(时间上的先后)调用了 setValue() 方法,然后线程B调用了同一个对象的 getValue() 方法,那么线程B收到的返回值是什么?3、volatile 变量原则:对一个 volatile 变量的写操作先行发生于后面对这个变量的读操作,前面的写对后面的读是可见的,这里的后面同样指时间上的先后。
2024-04-02 16:13:12
1056
转载 单例模式双重校验锁使用synchronized,为什么同时使用volatile?
具体来说就是synchronized虽然保证了原子性,但却没有保证指令重排序的正确性,会出现A线程执行初始化,但可能因为构造函数里面的操作太多了,所以A线程的uniqueInstance实例还没有造出来,但已经被赋值了。而B线程这时过来了,错以为uniqueInstance已经被实例化出来,一用才发现uniqueInstance尚未被初始化。要知道我们的线程虽然可以保证原子性,但程序可能是在多核CPU上执行。
2024-04-01 18:38:03
112
原创 JUC 三大辅助类和 CompletableFuture、StampedLock
JUC 中提供了三种常用的辅助类,通过这些辅助类可以很好的解决线程数量过多时 Lock 锁的频繁操作。这三种辅助类为:CountDownLatch: 减少计数CyclicBarrier: 循环栅栏Semaphore: 信号灯。
2024-04-01 15:36:48
1263
原创 常见的 BlockingQueue
意思就是消费者线程取元素时,如果队列不为空,则直接取走数据,若队列为空,那就生成一个节点(节点元素为 null)入队,然后消费者线程被等待在这个节点上,后面生产者线程入队时发现有一个元素为 null 的节点,生产者线程就不入队了,直接就将元素填充到该节点,并唤醒该节点等待的线程,被唤醒的消费者线程取走元素,从调用的。2、为什么需要 BlockingQueue?因此使用的时候要特别注意,生产者生产数据的速度绝对不能快于消费者消费数据的速度,否则时间一长,会最终耗尽所有的可用堆内存空间。
2024-03-31 11:36:04
731
原创 版本 GA、RC、beta等含义
Release Candidate,发行候选版本,基本不再加入新的功能,主要修复bug。是最终发布成正式版的前一个版本,将bug修改完就可以发布成正式版了。General Availability,正式发布的版本,官方开始推荐广泛使用,国外有的用GA来表示release版本。稳定版,开源软件有的会用stable来表示正式发布的版本。正式发布版,官方推荐使用的版本,有的用GA来表示。SNAPSHOT: 快照版,可以稳定使用,且仍在继续改进版本。最终版,也是正式发布版的一种表示方法。比如Hibernate。
2024-03-18 15:07:37
538
原创 MongoDB
发现,从节点和仲裁节点对27017的心跳失败,当失败超过10秒,此时因为没有主节点了,会自动发起投票。例如:3个投票成员,则大多数的值是2。按照单个副本集的步骤,启动配置节点副本集,初始化副本集和创建主节点(尽量要连接主节点),执行初始化副本集命令,主节点配置查看,添加副本节点,添加副本节点,查看副本集的配置情况。按照单个副本集的步骤,启动第一套分片节点副本集,初始化副本集和创建主节点(尽量要连接主节点),执行初始化副本集命令,主节点配置查看,添加副本节点,添加仲裁节点,查看副本集的配置情况。
2024-03-03 16:37:11
1083
原创 适配器模式
spring定义了一个适配器接口,使得每一种Controller有一种对应的适配器实现类。扩展Controller层时,只需要增加一个适配器类就完成了SpringMVC的扩展了。适配器代替controller执行相应的方法。一个Controller 接口,三个实现类。springmvc中的适配器模式。一个适配器接口,多个实现类。这就是设计模式的力量。
2024-02-23 14:32:47
165
1
原创 工厂模式的三种形态
工厂模式通常有三种形态:● 第一种:简单工厂模式(Simple Factory):不属于23种设计模式之一。简单工厂模式又叫做:静态 工厂方法模式。简单工厂模式是工厂方法模式的一种特殊实现。● 第二种:工厂方法模式(Factory Method):是23种设计模式之一。● 第三种:抽象工厂模式(Abstract Factory):是23种设计模式之一。
2023-12-08 15:01:52
967
转载 接口的变化
它的出现解决接口升级问题。1万个类实现了一个接口,这时候对接口进行了升级,按照jdk1.7的规则,加方法的话只能加。有的时候我们希望1万个类如果有类想升级那么重写,有类的不想升级就别重写了。这时候default来了。抽象方法abstract(和final static private三个关键字冲突)可以把多个非静态的非抽象方法 或者 多个静态方法 的共性的内容 抽取成一些静态方法。抽象方法,当加完抽象方法之后1万个类瞬间编译报错。因为必须要重写抽象方法。让接口具备了功能, 让接口来调用。
2023-12-08 09:28:46
88
转载 常见的算法时间复杂度由小到大
本文为转载自优快云博主「刘望舒」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.youkuaiyun.com/itachi85/article/details/54882603算法的效率虽然计算机能快速的完成运算处理,但实际上,它也需要根据输入数据的大小和算法效率来消耗一定的处理器资源。要想编写出能高效运行的程序,我们就需要考虑到算法的效率。算法的效率主要由以下两个复杂度来评估:时间复杂度:评估执行程序所需的时间。可以估算出程序对处理器的
2021-09-14 14:04:33
4718
原创 递归的基本模型
To Iterate is Human, to Recurse, Divine.人理解迭代,神理解递归。写递归函数要考虑的问题:1.什么时候结束递归,就是你必须要明确递归终止条件,其实就是一个if()判断语句,满足了这个条件就结束递归。然后在花括号{}中给出递归终止时的处理办法。2.采用【分而治之】的思想,把大问题分解为容易解决的小问题,就是写一个通用的函数,能解决大问题下分解的小问题,小问题下分解的更小的问题。递归的编程模型模型一: 在递去的过程中解决问题function recursion
2021-09-14 12:21:46
855
原创 java语言用链表实现队列
结点类public class QueueNode { int data; QueueNode next; public QueueNode(int data){ this.data = data; } public int getData() { return data; } public void setData(int data) { this.data = data; }
2021-09-13 17:44:14
447
原创 稀疏数组的链式存储实现(使用单向链表)
稀疏数组的链式存储实现(使用单向链表)(1)链表类public class LinkedList { public int row;//链表存储的,稀疏数组中的有效数据所在的行 public int column;//链表存储的,稀疏数组中的有效数据所在的列 public int data;//链表存储的,稀疏数组中的有效数据 public LinkedList next; public LinkedList() { } public Link
2021-09-12 15:48:04
419
2
转载 @Param注解
在SSM框架中,@Param主要是用来注解dao类中方法的参数,便于在对应的dao.xml文件中引用,如:在userDAO类中有这么一个函数:User selectByNameAndPwd(@Param("userName") String name,@Param("Password") String );在其对应的dao.xml文件中的查询语句则为:SELECT username ...
2020-03-02 14:58:27
215
原创 keyProperty、useGeneratedKeys和keyColumn
keyProperty(仅对insert和update有用)此属性的作用是将插入或更新操作时的返回值赋值给PO类的某个属性,通常会设置为主键对应的属性。如果需要设置联合主键,可以在多个值之间用逗号隔开。useGeneratedKeys(仅对insert和update有用)此属性会使MyBatis使用JDBC的getGeneratedKeys()方法来获取由数据库内部生产的主键,如MySQL和SQ...
2020-03-01 16:03:22
2476
原创 “名为“xxx”的Bean的类型应该是“com”.xxx’,但实际上是’com.sun.proxy.$Proxy22’类型的。”
org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean named ‘userDao’ is expected to be of type ‘first3.com.zut.aop.annotation.UserDaoImpl’ but was actually of type ‘com.sun.proxy.$Pr...
2019-12-21 21:11:45
633
原创 cpu个数、内核数、线程数
总核数 = 物理CPU个数 X 每颗物理CPU的核数总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数在cmd命令中输入“systeminfo”,以下信息表示物理CPU有一个处理器:安装了一个CPU我们接触的电脑基本上都只有一个CPU一个cup中集成了多个内核,这样电脑的性能就成倍的提升。一个内核又被分成两个线程。一个CPU成多个内核,这是物理的分隔,拆开cpu是...
2019-12-20 11:02:02
1868
原创 spring下载地址。没有GitHub账号的,来这里
https://repo.spring.io/libs-release-local/org/springframework/spring/欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。新的改变我们对Markdown编辑器进行了一些功能...
2019-10-13 16:51:11
536
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人