- 博客(25)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 hashMap的扩容原理
HashMap的扩容机制hashMap扩容:扩容就是重新计算容量,向hashMap不停的添加元素,当hashMap无法装载新的元素,对象将需要扩大数组容量,以便装入更多的元素。haspMap扩容跟数据迁移具有很大的关联,我们先用图解的方式来说明数据迁移.进行扩容前先介绍一些hahMap源码的变量Node<K,V> loHead = null, loTail = null; //低位链表的头尾结点Node<K,V> hiHead = null, hiTail = nu
2021-04-17 16:11:47
6372
7
原创 揭开ReentrantLock和AQS的神秘面纱
**一.JUC自我介绍:java.util.concurrent是在并发编程中比较常用的工具类,里面包含很多用来在并发场景中使用的组件。比如线程池、阻塞队列、计时器、同步器、并发集合等等。并发包的作者是大名鼎鼎的DougLea.二.核心LockLock本质上是一个接口,它定义了释放锁和获得锁的抽象方法,定义成接口就意味着它定义了锁的一个标准规范,也同时意味着锁的不同实现。实现Lock接口的,比如大名鼎鼎的ReentrantLock、ReentrantReadWriteLock、StampedLock
2021-11-07 11:39:30
117
原创 记录一次关于微信发放代金券遇到的坑
这个星期接手了个公司一个需求:业务背景为公司与某银行进行合作对接,银行进行一次活动,而我们公司为其引流,进行发放代金券,进行营销活动需求描述1.用户进入活动页面,2.点击领取按钮3.进行动态配置获取活动名额是否达到限制,这活动名额做成动态配置a.领取成功b.领取失败,活动名额已满4.获取相应的公众号用户的openid和unionid5.判断用户是否能领取,根据unionId限制自然月享受2次,每周五限制1次,只有周五能够领取,调用微信的发券接口openid和unionid;流程图
2021-08-29 13:15:49
788
1
原创 三分钟学会springcloud微服务
SpringCloud Alibabaif not now when ,if not me who官网[https://spring.io/projects/spring-cloud-alibaba]Spring CloudFlow control and service degradation:flow control, circuit breaking and system adaptive protection with Alibaba SentinelService regi
2021-07-10 15:04:23
199
原创 leetCode100 相同的树
相同的树在leetCode有这样一个题目:给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。eq:输入:p = [1,2,3], q = [1,2,3]输出:true思路:经过一会的脑力风暴,发现这题可以用递归,或者非递归的前中序遍历等方式解决。第一种方法:递归这种方法只要判断两树的结点有一个层次结构不同就为false,如果层次结构相同,就将根左右各结点每次进行比较判断,都满足则为true,否则
2021-06-27 22:37:51
91
1
原创 leetCode88合并两个有序数组
合并两个有序数组在力扣88题中有这么一个题目:给你两个有序整数数组 nums1 和 nums2,请你将 nums2 合并到 nums1 中,使 nums1 成为一个有序数组。 初始化nums1 和 nums2 的元素数量分别为 m 和 n 。你可以假设 nums1 的空间大小等于 m + n,这样它就有足够的空间保存来自nums2 的元素。eq:输入:nums1 = 1,2,3,0,0,0], m = 3, nums2 = [2,5,6], n = 3输出:[1,2,2,3,5,6]
2021-06-26 11:17:41
66
原创 mybatis笔记
myBatis深度解析一、概述MyBatis 是一款优秀的持久层框架,也是当前最流行的java持久层框架之一,它内部封装了jdbc,使开发者只需要关注sql语句本身,而不需要花费精力去处理加载驱动、创建连接创建statement等繁杂的过 程。采用ORM思想解决了实体和数据库映射的问题,对jdbc进行了封装屏蔽了jdbc api底层访问细节,使我们不用与jdbc api打交道,就可以完成对数据库的持久化操作。 mybatis通过xml或注解的方式将要执行的各种statement配置起来,并通过java对
2021-05-17 21:31:38
162
原创 浅谈ConcurrentHashMap(get,put)
浅谈ConcurrentHashMap(get,put)1.前言:我们效率有hashMap了,安全性有hashTable,甚至还有Collections.synchronizedMap这个工具类。怎么为什么还需要ConcurrentHashMap呢?主要基于两个原因:在多线程并发情况下,hashMap会产生数据不安全性hashTable和Collections.synchronizedMap虽然能保证安全性,但原理都是通过synchronized关键字保证数据安全性,同步锁效率不高2
2021-05-05 11:30:05
1285
2
原创 volatile关键字原理
volatile关键字原理概述volatile关键字是Java虚拟机提供的最轻量级的同步机制。在多线程编程中volatile和synchronized都起着举足轻重的作用,没有这两者,也就没有那么多JUC供我们使用。并发编程(线程安全)三大特性原子性:一个操作或者多个操作,要么全部执行成功,要么全部执行失败。满足原子性的操作,中途不可被中断可见性: 多个线程同时访问一个共享变量,当其中一个线程对共享变量进行写操作,其他线程能够立刻知道修改后的值有序性: 程序的执行的顺序按照代码的先后
2021-04-24 13:09:30
522
原创 Spring ioC源码深入剖析
Spring ioC源码深入剖析spring有两个主要的核心,谈到spring必定绕不过ioc和aop.下面就让我们走进spring ioc源码中一探究竟,看看ioc它为什么这么牛,让无数面试官欢心雀跃,让我们这些求职者面露难色.spring ioc概述ioc: Inverse of Control(控制反转)我更倾向为它是种思想,通过它我们可以将原本的手动创建的对象,交由spring管理,并且默认是单列对象,它把控制权交给了spring管理,我们只需要DI依赖注入就行了,极大的简化了开发人员的繁琐的
2021-04-20 09:22:36
326
原创 同步锁synchronized追溯本源
同步锁synchronized追溯本源概念synchronized:是Java中的关键字,是一种同步锁。Java中锁分为以下几种:乐观锁、悲观锁(syn)独享锁(syn)、共享锁公平锁、非公平锁(syn)互斥锁(syn)、读写锁可重入锁(syn)分段锁synchronized JDK1.6锁升级(无锁 -> 偏向锁 (非锁)-> 轻量级锁 -> 重量级锁(1.6前都是)众所周知 synchronized 关键字是解决并发问题常用解决方案,有以下三种使用方式:同步
2021-04-18 12:14:03
254
1
原创 hashMap底层实现
HashMap数据结构hashMap的概念HashMap 是一个利用散列表(哈希表)原理来存储元素的集合,是根据Key value而直接进行访问的数据结构在 JDK1.7 中,HashMap 是由 数组+链表构成的。在 JDK1.8 中,HashMap 是由 数组+链表+红黑树构成hashMap变化历程jdk1.7数据结构:基于链表+数组,总所周知链表时间复杂度为O(n),当链表过长每个节点进行equals判断很消耗性能jdk1.8数据结构:基于链表+红黑树+数组,基于红黑树的添加查询性能
2021-04-17 14:07:38
191
1
原创 spring循环依赖
spring循环依赖什么是循环依赖循环依赖其实就是循环引用,也就是两个或则两个以上的bean互相持有对方,最终形成闭环。比如A依赖于B,B依赖于A。spring设计三级缓存的意义,一二级缓存有什么意义?bean在容器中默认是单列的,但是在同一个map中,如果半成品和成品放置了一起,有可能会get到半成品的对象,所以需要对map分层一级缓存:成品对象二级缓存:半成品对象为什么还要设置三级缓存?如果程序中用到了AOP则,必须要用到三级缓存,主要解决AOP的循环依赖问题aop过程干了什么?
2021-04-16 15:15:42
190
2
原创 今天又为归并排序损失了几根头发
归并排序1、基本思想:归并排序就是利用归并的思想实现的排序方法。而且充分利用了完全二叉树的深度是的特性,因此效率比较高。其基本原理如下:对于给定的一组记录,利用递归与分治技术将数据序列划分成为越来越小的半子表,在对半子表排序,最后再用递归方法将排好序的半子表合并成为越来越大的有序序列。经过第一轮比较后得到最小的记录,然后将该记录的位置与第一个记录的位置交换;接着对不包括第一个记录以外的其他记录进行第二次比较,得到最小记录并与第二个位置记录交换;重复该过程,知道进行比较的记录只剩下一个为止。2. 工.
2021-04-15 20:01:38
90
1
原创 震惊 希尔竟然是这样
希尔排序希尔排序分为两种:1.插入时采用交换法,效率不高public class ShellSort { public static void main(String[] args) { int[] arr = new int[10000000]; for (int i = 0; i < arr.length; i++) { arr[i] = (int) (Math.random() * 100); } int count
2021-04-15 19:57:11
66
原创 设计原则
面向对象七大设计原则面向对象设计原则概述:对于面向对象软件系统的设计而言,在支持可维护性的同时,提高系统的可复用性 是一个至关重要的问题,如何同时提高一个软件系统的可维护性和可复用性是面向 对象设计需要解决的核心问题之一。在面向对象设计中,可维护性的复用是以设计 原则为基础的。每一个原则都蕴含一些面向对象设计的思想,可以从不同的角度提 升一个软件结构的设计水平。面向对象设计原则为支持可维护性复用而诞生,这些原则蕴含在很多设计模式中, 它们是从许多设计方案中总结出的指导性原则。面向对象设计原则也是我们.
2021-04-15 19:52:56
81
原创 2021-04-15 震惊,基数排序竟然.....
震惊,基数排序竟然是这样子的基数排序基数排序介绍基数排序(radix sort)又称桶排序(bucket sort),相对于常见的比较排序,基数排序是一种分配式排序,即通过将所有数字分配到应在的位置最后再覆盖到原数组完成排序的过程。计数排序的稳定性,即排序前和排序后相同的数字相对位置保持不变。今天我们要说的基数排序就要利用到排序稳定性这一点。过程解析初始化:构造一个10*n的二维数组,一个长度为n的数组用于存储每次位排序时每个桶子里有多少个元素。循环操作:从低位开始(我们采用LSD的方.
2021-04-15 19:46:21
82
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人