自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 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 273

原创 happens-before 原则

1、次序原则:一个线程内,按照代码的顺序,写在前面的操作先行发生于写在后面的操作,也就是说前一个操作的结果可以被后续的操作获取(保证语义串行性,按照代码顺序执行)。问题描述:假设存在线程A和B,线程A先(时间上的先后)调用了 setValue() 方法,然后线程B调用了同一个对象的 getValue() 方法,那么线程B收到的返回值是什么?3、volatile 变量原则:对一个 volatile 变量的写操作先行发生于后面对这个变量的读操作,前面的写对后面的读是可见的,这里的后面同样指时间上的先后。

2024-04-02 16:13:12 555

转载 单例模式双重校验锁使用synchronized,为什么同时使用volatile?

具体来说就是synchronized虽然保证了原子性,但却没有保证指令重排序的正确性,会出现A线程执行初始化,但可能因为构造函数里面的操作太多了,所以A线程的uniqueInstance实例还没有造出来,但已经被赋值了。而B线程这时过来了,错以为uniqueInstance已经被实例化出来,一用才发现uniqueInstance尚未被初始化。要知道我们的线程虽然可以保证原子性,但程序可能是在多核CPU上执行。

2024-04-01 18:38:03 14

原创 JUC 三大辅助类和 CompletableFuture、StampedLock

JUC 中提供了三种常用的辅助类,通过这些辅助类可以很好的解决线程数量过多时 Lock 锁的频繁操作。这三种辅助类为:CountDownLatch: 减少计数CyclicBarrier: 循环栅栏Semaphore: 信号灯。

2024-04-01 15:36:48 1018

原创 常见的 BlockingQueue

意思就是消费者线程取元素时,如果队列不为空,则直接取走数据,若队列为空,那就生成一个节点(节点元素为 null)入队,然后消费者线程被等待在这个节点上,后面生产者线程入队时发现有一个元素为 null 的节点,生产者线程就不入队了,直接就将元素填充到该节点,并唤醒该节点等待的线程,被唤醒的消费者线程取走元素,从调用的。2、为什么需要 BlockingQueue?因此使用的时候要特别注意,生产者生产数据的速度绝对不能快于消费者消费数据的速度,否则时间一长,会最终耗尽所有的可用堆内存空间。

2024-03-31 11:36:04 659

原创 java集合多线程异常

java集合的多线程问题

2024-03-30 17:41:35 732

原创 线程池基础

线程池基础

2024-03-29 21:06:37 666

原创 多线程基础

多线程基础

2024-03-28 18:31:25 870

原创 版本 GA、RC、beta等含义

Release Candidate,发行候选版本,基本不再加入新的功能,主要修复bug。是最终发布成正式版的前一个版本,将bug修改完就可以发布成正式版了。General Availability,正式发布的版本,官方开始推荐广泛使用,国外有的用GA来表示release版本。稳定版,开源软件有的会用stable来表示正式发布的版本。正式发布版,官方推荐使用的版本,有的用GA来表示。SNAPSHOT: 快照版,可以稳定使用,且仍在继续改进版本。最终版,也是正式发布版的一种表示方法。比如Hibernate。

2024-03-18 15:07:37 185

原创 RabbitMQ

尚硅谷的课件

2024-03-05 16:15:50 928

原创 MongoDB

发现,从节点和仲裁节点对27017的心跳失败,当失败超过10秒,此时因为没有主节点了,会自动发起投票。例如:3个投票成员,则大多数的值是2。按照单个副本集的步骤,启动配置节点副本集,初始化副本集和创建主节点(尽量要连接主节点),执行初始化副本集命令,主节点配置查看,添加副本节点,添加副本节点,查看副本集的配置情况。按照单个副本集的步骤,启动第一套分片节点副本集,初始化副本集和创建主节点(尽量要连接主节点),执行初始化副本集命令,主节点配置查看,添加副本节点,添加仲裁节点,查看副本集的配置情况。

2024-03-03 16:37:11 990

原创 servlet规范

javaweb中的servlet规范

2024-03-01 10:57:09 541 1

原创 适配器模式

spring定义了一个适配器接口,使得每一种Controller有一种对应的适配器实现类。扩展Controller层时,只需要增加一个适配器类就完成了SpringMVC的扩展了。适配器代替controller执行相应的方法。一个Controller 接口,三个实现类。springmvc中的适配器模式。一个适配器接口,多个实现类。这就是设计模式的力量。

2024-02-23 14:32:47 109 1

原创 创建者模式

【代码】创建者模式。

2024-02-23 11:15:14 101 1

原创 “Communications link failure”的分析

连接数据库的一个报错,梳理一下用到的知识点。

2024-01-29 11:44:20 377

转载 方法引用(三种形式)

方法引用

2024-01-04 16:05:50 23 1

原创 工厂模式的三种形态

工厂模式通常有三种形态:● 第一种:简单工厂模式(Simple Factory):不属于23种设计模式之一。简单工厂模式又叫做:静态 工厂方法模式。简单工厂模式是工厂方法模式的一种特殊实现。● 第二种:工厂方法模式(Factory Method):是23种设计模式之一。● 第三种:抽象工厂模式(Abstract Factory):是23种设计模式之一。

2023-12-08 15:01:52 853

转载 接口的变化

它的出现解决接口升级问题。1万个类实现了一个接口,这时候对接口进行了升级,按照jdk1.7的规则,加方法的话只能加。有的时候我们希望1万个类如果有类想升级那么重写,有类的不想升级就别重写了。这时候default来了。抽象方法abstract(和final static private三个关键字冲突)可以把多个非静态的非抽象方法 或者 多个静态方法 的共性的内容 抽取成一些静态方法。抽象方法,当加完抽象方法之后1万个类瞬间编译报错。因为必须要重写抽象方法。让接口具备了功能, 让接口来调用。

2023-12-08 09:28:46 31

原创 lambda表达式

lambda的演化过程

2023-11-24 15:57:27 356 1

原创 Redis的高并发问题简单介绍

Redis的高并发情况下会出现的问题

2023-01-31 22:50:30 198

原创 悲观锁与乐观锁

悲观锁与乐观锁的介绍

2023-01-31 21:28:59 79

转载 常见的算法时间复杂度由小到大

本文为转载自CSDN博主「刘望舒」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。原文链接:https://blog.csdn.net/itachi85/article/details/54882603算法的效率虽然计算机能快速的完成运算处理,但实际上,它也需要根据输入数据的大小和算法效率来消耗一定的处理器资源。要想编写出能高效运行的程序,我们就需要考虑到算法的效率。算法的效率主要由以下两个复杂度来评估:时间复杂度:评估执行程序所需的时间。可以估算出程序对处理器的

2021-09-14 14:04:33 4007

原创 递归的基本模型

To Iterate is Human, to Recurse, Divine.人理解迭代,神理解递归。写递归函数要考虑的问题:1.什么时候结束递归,就是你必须要明确递归终止条件,其实就是一个if()判断语句,满足了这个条件就结束递归。然后在花括号{}中给出递归终止时的处理办法。2.采用【分而治之】的思想,把大问题分解为容易解决的小问题,就是写一个通用的函数,能解决大问题下分解的小问题,小问题下分解的更小的问题。递归的编程模型模型一: 在递去的过程中解决问题function recursion

2021-09-14 12:21:46 728

原创 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 149

原创 稀疏数组的链式存储实现(使用单向链表)

稀疏数组的链式存储实现(使用单向链表)(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 339 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 142

原创 keyProperty、useGeneratedKeys和keyColumn

keyProperty(仅对insert和update有用)此属性的作用是将插入或更新操作时的返回值赋值给PO类的某个属性,通常会设置为主键对应的属性。如果需要设置联合主键,可以在多个值之间用逗号隔开。useGeneratedKeys(仅对insert和update有用)此属性会使MyBatis使用JDBC的getGeneratedKeys()方法来获取由数据库内部生产的主键,如MySQL和SQ...

2020-03-01 16:03:22 1992

原创 修改已存在的表为自增

alter table 表名 modify 字段名 int auto_increment;

2019-12-28 20:53:11 389 1

原创 “名为“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 523

原创 cpu个数、内核数、线程数

总核数 = 物理CPU个数 X 每颗物理CPU的核数总逻辑CPU数 = 物理CPU个数 X 每颗物理CPU的核数 X 超线程数在cmd命令中输入“systeminfo”,以下信息表示物理CPU有一个处理器:安装了一个CPU我们接触的电脑基本上都只有一个CPU一个cup中集成了多个内核,这样电脑的性能就成倍的提升。一个内核又被分成两个线程。一个CPU成多个内核,这是物理的分隔,拆开cpu是...

2019-12-20 11:02:02 1377

原创 spring下载地址。没有GitHub账号的,来这里

https://repo.spring.io/libs-release-local/org/springframework/spring/欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。新的改变我们对Markdown编辑器进行了一些功能...

2019-10-13 16:51:11 353

空空如也

空空如也

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

TA关注的人

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