自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Synchronized原理(1)

如下抢票的代码,如果不加锁,就会出现超卖或者一张票卖给多个人 Synchronized【对象锁】采用互斥的方式让同一时刻至多只有一个线程能持有 【对象锁】,其它线程再想获取这个【对象锁】时就会阻塞住。如果没有线程持有,则让当前线程持有,表示该线程获取锁成功。【对象锁】采用互斥的方式让同一时刻至多只有一个线程能持。:存储当前获取锁的线程的,只能有一个线程可以获取。是关联的获得锁的线程,并且只能关联一个线程;中的线程去竞争锁的持有权(非公平)如果有线程持有,则让当前线程进入。:关联没有抢到锁的线程,处于。

2024-03-12 22:18:26 358 1

原创 Spring注解式AOP实现原理

前面我们在学习Spring的时候说过,Spring有两个核心的概念,一个是IOC/DI,一个是AOP。前面已经对IOC/DI进行了系统的学习,接下来要学习它的另一个核心内容,就是AOP。对于AOP,我们前面提过一句话是:AOP是在不改原有代码的前提下对其进行增强。对于下面的内容,我们主要就是围绕着这一句话进行展开学习,主要学习两方面内容AOP核心概念AOP作用。1.1 什么是AOP面向切面编程,一种编程范式,指导开发者如何组织程序结构。面向对象编程我们都知道OOP是一种编程思想。

2024-01-14 12:44:42 1634 1

原创 Springboot自动配置原理(简单全面)

SpringBoot的自动配置就是当Spring容器启动后,一些配置类、bean对象就自动存入到了IOC容器中,不需要我们手动去声明,从而简化了开发,省去了繁琐的配置操作。比如:我们要进行事务管理、要进行AOP程序的开发,此时就不需要我们再去手动的声明这些bean对象了,我们直接使用就可以从而大大的简化程序的开发,省去了繁琐的配置操作。

2024-01-08 22:36:09 5691 2

原创 Bean的生命周期

对于普通的 Java 对象,当 new 的时候创建对象,然后该对象就能够使用了。一旦该对象不再被使用,则由 Java 自动进行垃圾回收。而 Spring 中的对象是 bean,bean 和普通的 Java 对象没啥大的区别,只不过 Spring 不再自己去 new 对象了,而是由 IoC 容器去帮助我们实例化对象并且管理它,我们需要哪个对象,去问 IoC 容器要即可。IoC 其实就是解决对象之间的耦合问题,Spring Bean 的生命周期完全由容器控制。

2024-01-07 12:54:30 1682 1

原创 元素排序Comparable和Comparator有什么区别?

Comparable是“比较”的意思,而Comparator是“比较器”的意思;Comparable是通过重写compareTo方法实现排序的,而Comparator是通过重写compare方法实现排序的;Comparable必须由自定义类内部实现排序方法,而Comparator是外部定义并实现排序的。所以用一句话总结二者的区别:Comparable可以看作是“对内”进行排序接口,而Comparator是“对外”进行排序的接口。

2023-10-30 22:25:39 63 1

原创 HashSet如何去重

当有对象插入HashSet中的时候,首先需要判断该对象的HashCode的值在HashSet中是否有相同的,如果没有,那么就插入,如果有相同的HashCode值的对象,这时会调用对象的equals方法来检查对象是否真的相同,如果真的相同,那么就不能插入。从上述源码可以看出,当将一个键值放入HashMap中时,首先根据key的hashCode()返回值决定该Entry的存储位置,如果有两个key的hash值相同,那么就让这两个key进行equals比较,如果两者相等,那么就不允许插入。

2023-10-30 17:52:12 74 1

原创 HashSet源码分析

通过dubug可以发现bincount的初始值是0,也就是说操作第2个节点他是0,操作第三个他是1......操作第八个他是6,大于临界值会树化。该方法会执行 hash(key) 得到 key 对应的 hash 值 算法 h = key.hashCode()) ^ (h >>> 16)补充一下 临界值是链表下挂载数量超过8个节点且数组长度超过64 进行红黑树转换。其中bincount初始值是0,那为什么要加=呢?

2023-10-15 15:51:29 64 1

原创 ArrayList扩容机制

oldCapacity 为原来的数组长度,newCapacity是oldCapacity的1.5倍,如果仍小于minCapacity,则扩大至minCapacity大小(说明了minCapacity是扩容的最小值)。最后通过elementData=Arrays.copyOf(elementData, newCapacity);将原来数据复制到扩容后的数组中。扩容指的是数组长度,而不是list的个数;但扩容方法使用的参数却是与list的个数,即size有关;

2023-10-12 10:15:03 46

原创 StringBuilder扩容原理及源码分析

当coder标识为LATIN1时,表示字符串只包含 LATIN-1编码的字符,coder 变量的值将为0,咱们现在看到的时一个三元表达式,如果是true就返回第一个值,false返回第二个值,而COMPACT_STRINGS之前是为true的,所以返回了coder=0的值。接下来又看到了咱们的老朋友coder,他还是0,所以oldCapacity会等于str的长度16,minimumCapacity的值为count加length,count的初始值为0,所以minimumCapacity也是16。

2023-10-08 21:53:52 322

原创 LeetCode数组入门

给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。[0,1]因为 nums[0] + nums[1] == 9 ,返回 [0, 1]。

2023-09-27 22:09:50 55

原创 java构造方法使用

【代码】java构造方法使用。

2023-09-26 18:56:21 212

原创 Java方法和类笔记

Java方法和类的重要概念

2023-09-25 17:41:26 41 1

空空如也

空空如也

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

TA关注的人

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