- 博客(12)
- 收藏
- 关注
原创 Synchronized原理(1)
如下抢票的代码,如果不加锁,就会出现超卖或者一张票卖给多个人 Synchronized【对象锁】采用互斥的方式让同一时刻至多只有一个线程能持有 【对象锁】,其它线程再想获取这个【对象锁】时就会阻塞住。如果没有线程持有,则让当前线程持有,表示该线程获取锁成功。【对象锁】采用互斥的方式让同一时刻至多只有一个线程能持。:存储当前获取锁的线程的,只能有一个线程可以获取。是关联的获得锁的线程,并且只能关联一个线程;中的线程去竞争锁的持有权(非公平)如果有线程持有,则让当前线程进入。:关联没有抢到锁的线程,处于。
2024-03-12 22:18:26
386
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
1698
1
原创 Springboot自动配置原理(简单全面)
SpringBoot的自动配置就是当Spring容器启动后,一些配置类、bean对象就自动存入到了IOC容器中,不需要我们手动去声明,从而简化了开发,省去了繁琐的配置操作。比如:我们要进行事务管理、要进行AOP程序的开发,此时就不需要我们再去手动的声明这些bean对象了,我们直接使用就可以从而大大的简化程序的开发,省去了繁琐的配置操作。
2024-01-08 22:36:09
5850
3
原创 Bean的生命周期
对于普通的 Java 对象,当 new 的时候创建对象,然后该对象就能够使用了。一旦该对象不再被使用,则由 Java 自动进行垃圾回收。而 Spring 中的对象是 bean,bean 和普通的 Java 对象没啥大的区别,只不过 Spring 不再自己去 new 对象了,而是由 IoC 容器去帮助我们实例化对象并且管理它,我们需要哪个对象,去问 IoC 容器要即可。IoC 其实就是解决对象之间的耦合问题,Spring Bean 的生命周期完全由容器控制。
2024-01-07 12:54:30
1708
1
原创 元素排序Comparable和Comparator有什么区别?
Comparable是“比较”的意思,而Comparator是“比较器”的意思;Comparable是通过重写compareTo方法实现排序的,而Comparator是通过重写compare方法实现排序的;Comparable必须由自定义类内部实现排序方法,而Comparator是外部定义并实现排序的。所以用一句话总结二者的区别:Comparable可以看作是“对内”进行排序接口,而Comparator是“对外”进行排序的接口。
2023-10-30 22:25:39
88
1
原创 HashSet如何去重
当有对象插入HashSet中的时候,首先需要判断该对象的HashCode的值在HashSet中是否有相同的,如果没有,那么就插入,如果有相同的HashCode值的对象,这时会调用对象的equals方法来检查对象是否真的相同,如果真的相同,那么就不能插入。从上述源码可以看出,当将一个键值放入HashMap中时,首先根据key的hashCode()返回值决定该Entry的存储位置,如果有两个key的hash值相同,那么就让这两个key进行equals比较,如果两者相等,那么就不允许插入。
2023-10-30 17:52:12
95
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
80
1
原创 ArrayList扩容机制
oldCapacity 为原来的数组长度,newCapacity是oldCapacity的1.5倍,如果仍小于minCapacity,则扩大至minCapacity大小(说明了minCapacity是扩容的最小值)。最后通过elementData=Arrays.copyOf(elementData, newCapacity);将原来数据复制到扩容后的数组中。扩容指的是数组长度,而不是list的个数;但扩容方法使用的参数却是与list的个数,即size有关;
2023-10-12 10:15:03
65
原创 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
438
1
原创 LeetCode数组入门
给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。[0,1]因为 nums[0] + nums[1] == 9 ,返回 [0, 1]。
2023-09-27 22:09:50
88
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人