- 博客(298)
- 资源 (5)
- 收藏
- 关注

原创 HashMap如何确定数组位置
HashMap 底层数据结构为数组+链表+红黑树,当map去put的时候,元素先定位到数组的位置,如果有多个元素定位到了数组的同一个位置,就会生成链表,当链表长度大于8并且数组长度大于64时,会转换为红黑树。先看put方法数组位置定位:第一步:hash运算第二步:用第一步的值与数组容量取余因为hashmap的容量大小是2的幂次方,所以可以通过&运算来优化%运算。例如:(16 % 5 )等价于 (16 & (5 - 1))4.位置计算hash = (h = key.hashCode()) ^ (h
2022-07-02 17:37:49
2199
1

原创 【JAVA】值传递与引用传递
Java中没有引用传递值传递:就是在方法调用的时候,实参是将自己的一份拷贝赋给形参,在方法内,对该参数值的修改不影响原来的实参。引用传递:是在方法调用的时候,实参将自己的地址传递给形参,此时方法内对该参数值的改变,就是对该实参的实际操作。结果:调用前baseValue的值:30调用后baseValue的值:30可以看到,baseValue的值并没有发生变化。结果分析:1)value被初始化为baseValue值的一个拷贝(30)2)value被乘以2后等于60,但baseValue的值仍为303)这
2022-06-27 17:23:30
549

原创 【线程与线程池】-线程池-execute源码
文章目录1.看代码2.运行结果3.结果分析4.execute源码流程图1.看代码public class ThreadPoolDemo { public static void main(String[] args){ Long start = System.currentTimeMillis(); ThreadPoolExecutor threadPoolExecutor=new ThreadPoolExecutor(10,20,
2022-02-17 07:18:24
660

原创 【线程与线程池】-Java自带线程池以及核心参数
文章目录一、Java自带线程池:二、看个例子三、分析1. newCachedThreadPool 在底层实现源码:1.11.22.newFixedThreadPool 和 newSingleThreadPool2.1 newFixedThreadPool:2.2 newSingleThreadPool:四、总结一、Java自带线程池:1.newCachedThreadPool2.newFixedThreadPool3.newSingleThreadExecutor二、看个例子public cl
2022-02-16 07:11:33
1073

原创 【线程与线程池】-线程创建的越多,执行效率越高吗?
文章目录1. 提问:线程创建的越多,执行效率越高吗?2.举例:例1:例2:解答:原因:3.总结1. 提问:线程创建的越多,执行效率越高吗?2.举例:例1: public static void main(String[] args) throws InterruptedException { Long start = System.currentTimeMillis(); final Random random= new Random(); final
2022-02-15 06:34:32
1055

原创 JDK1.7-为什么hashmap会出现死循环?
文章目录问题:为什么在JDK1.7中hashmap会出现死循环?(CPU100%)1.头插法2.扩容3.总结问题:为什么在JDK1.7中hashmap会出现死循环?(CPU100%)1.头插法JDK1.7中采用的是头插法,即从头部插入。比如:在x01位置已存在A,经过hash运算后B也需要插入到x01位置。那么插入之后的结果是这样的:当有新插入的值,最先插入的数据会进入到链表部分。2.扩容死循环发生在并发扩容阶段这是hashmap初始状态:在并发的时候,有两个线程同时对hashm
2021-12-21 06:56:16
1415

原创 JMM内存模型
两个线程操作,共享变量如何变化1.read(读取):作用于主内存变量,把一个变量值从主内存传输到线程的工作内存中,以便随后的load动作使用2.load(载入):作用于工作内存的变量,它把read操作从主内存中得到的变量值放入工作内存的变量副本中。3.use(使用):作用于工作内存的变量,把工作内存中的一个变量值传递给执行引 擎,每当虚拟机遇到一个需要使用变量的值的字节码指令时将会执行这个操作。4.assign(赋值):作用于工作内存的变量,它把一个从执行引擎接收到的值赋值给 工作内存的变量,每当
2021-12-01 06:54:22
277

原创 【Spring】手把手教你->写出spring底层原理
文章目录1.ApplicationContext2.自己手写注解2.1 Autowired2.2 Component2.3 ComponentScan2.4 Scope2.5 ZjyValue3.相关类3.1 BeanDefinition3.1 BeanPostProcessor3.2 InitializingBean3.3 ZjyBeanPostPocessor3.4 ZjyValueBeanPostPocessor3.5 AppConfig3.6 BeanNameAware3.7 UserInterf
2021-10-25 06:52:45
325
1

原创 MYSQL-主键索引与二级索引
文章目录提问:1.主键索引提问:二级索引是不是聚集索引?1.主键索引看图,这是一个主键索引,叶子节点存放了此id下的整行记录,主键索引是聚集索引。MYSQL-聚集索引和非聚集索引叶节点包含了完整的数据记录...
2021-09-05 15:32:21
1033
2

原创 MYSQL-联合索引
文章目录0. 提问:1.看图说话2.索引是什么?0. 提问:联合索引的查询,为什么要遵循最左前缀?1.看图说话现用name,age,location 组成联合索引 idx_name_age_location,结构如下2.索引是什么?是排好序的数据结构!整型就比较大小,字符串就比较ASCII码,然后按顺序排好。当使用联合索引 idx_name_age_location 时 ,组建索引的时候先比较name,name相同比较age,age相同比较location,直到找到一个小的放前边 ,这颗树
2021-08-30 20:54:06
230
2

原创 MYSQL-建innodb表必须要建主键WHY?
文章目录提问 :1.为什么建主键?a.b.2.为什么是整型?3.为什么自增?4.总结提问 :为什么mysql建innodb表必须要建主键,且DBA会推荐使用整型的自增主键?1.为什么建主键?a.因为ibd文件必须要用b+tree来组织,如果有主键,主键自带主键索引,那就可以用主键来组织整张表的数据。b.如果没有主键,数据该怎样存储呢?mysql会从第一列开始,选择一列所有元素都不相等的列,用这一列去组织一颗B+tree。如果没有选到这样的列,mysql会帮你建一个隐藏列,它会自己维护一个唯
2021-08-29 22:17:48
818

原创 MYSQL-聚集索引和非聚集索引
文章目录1.提问:InnoDB和MyISAM引擎是针对表还是数据库?2.如何存储?2.1 我们看/usr/local/var/mysql目录下都有什么:2.2 存储引擎设置a.我将test库的article表的存储引擎设置为MyISAMb. 再将test库的book表的存储引擎设置为InnoDbc./usr/local/var/mysql/test目录下的这两个文件3.聚集索引和非聚集索引3.1 区别3.2 用两张图对比一下4.哪个更快?5.总结1.提问:InnoDB和MyISAM引擎是针对表还是数据库?
2021-08-29 19:46:22
659
3

原创 MYSQL-为什么索引要使用B+TREE?
[video(video-gFIZVAon-1629618903644)(type-tencent)(url-https://v.qq.com/txp/iframe/player.html?vid=m3270ssd3lv)(image-http://puui.qpic.cn/vpic/0/m3270ssd3lv.png/0)(title-二叉树)]
2021-08-22 15:55:21
1121
2
原创 Spring之底层架构核心概念-事件发布
事件发布的两种方式A. applicationContext.publishEvent("msg")B. 事件发布器 applicationEventPublisher.publishEvent("msg");
2022-12-26 10:30:16
323
1
原创 Spring之底层架构核心概念-BeanFactory 与ApplicationContext
可以理解为 ApplicationContext 继承自BeanFactory,即 ApplicationContext 就是BeanFactory,它拥有BeanFactory 的所有功能。
2022-12-22 10:18:27
668
原创 Spring之底层架构核心概念-BeanDefinition
BeanDefinition可以理解为bean的定义,包括: Bean 的类名 Bean的父类 Bean是否为懒加载bean是否可以自动注入 Bean的 作用域、自动绑定模式、生命周期回调、初始方法、销毁方法等 Bean之间的依赖关系,dependencies 构造参数、属性设置 等等。
2022-12-21 11:25:18
608
原创 【Java-插入排序】
插入排序,一般也被称为直接插入排序。对于少量元素的排序,它是一个有效的算法 。插入排序是一种最简单的排序方法,它的基本思想是将一个记录插入到已经排好序的有序表中,从而一个新的、记录数增1的有序表。在其实现过程使用双层循环,外层循环对除了第一个元素之外的所有元素,内层循环对当前元素前面有序表进行待插入位置查找,并进行移动...
2022-07-13 21:08:04
521
1
原创 多种方式实现斐波那契数列
时间复杂度和空间复杂度都为 n的平方打印结果:可以看出来递归是越来越耗时的。非递归 :时间复杂度 O(n) 空间复杂度O(n)2.3 用数组进行缓存用数组进行缓存:将已经计算出来的值存在数组里避免了重复计算时间复杂度 O(n) 空间复杂度O(n)打印结果:好记性不如烂笔头,知道不如做到。.........
2022-07-05 17:06:48
522
1
原创 【操作系统】用户态和内核态
文章目录1.百度百科:2.个人理解:3. CPU保护模式1.百度百科:用户态(user mode)在计算机结构指两项类似的概念。在CPU的设计中,用户态指非特权状态。在此状态下,执行的代码被硬件限定,不能进行某些操作,比如写入其他进程的存储空间,以防止给操作系统带来安全隐患。在操作系统的设计中,用户态也类似,指非特权的执行状态。内核禁止此状态下的代码进行潜在危险的操作,比如写入系统配置文件、杀掉其他用户的进程、重启系统等。内核模式操作的一种高特权模式,其中的程序代码能直接访问所有内存(包括所有的
2022-03-07 06:42:28
724
1
原创 合并两个有序链表
文章目录1.题目2.解决方式1.题目将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例 1:输入:l1 = [1,2,4], l2 = [1,3,4]输出:[1,1,2,3,4,4]示例 2:输入:l1 = [], l2 = []输出:[]示例 3:输入:l1 = [], l2 = [0]输出:[0]提示:两个链表的节点数目范围是 [0, 50]-100 <= Node.val <= 100l1 和 l2 均按 非
2021-07-22 15:59:36
169
1
原创 有效的括号
文章目录1.题目2.解题思路1.题目给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。示例 1:输入:s = “()”输出:true示例 2:输入:s = “()[]{}”输出:true示例 3:输入:s = “(]”输出:false示例 4:输入:s = “([)]”输出:false示例 5:输入:s = “{[]}”输出:true提示
2021-07-21 20:46:18
132
原创 最长公共前缀
文章目录1.题目2.解题思路1.题目编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 “”。示例 1:输入:strs = [“flower”,“flow”,“flight”]输出:“fl”示例 2:输入:strs = [“dog”,“racecar”,“car”]输出:""解释:输入不存在公共前缀。提示:0 <= strs.length <= 2000 <= strs[i].length <= 200strs[i] 仅由小写英
2021-07-21 17:51:47
116
原创 罗马数字转整数
文章目录1.题目:2.解题思路1.题目:罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII,
2021-07-21 16:28:16
229
原创 取配置需求实现思路
上一篇的需求如何实现呢?你的想法是不是这样的:先判断村儿,再判断渠道,再判断用户类型,然后得到配置。我按照这个思路画流程图,成功给自己画出了个闭环…其实还有一种思路,很简单:将所有配置读取到内存中,然后filter按条件筛选,最终选出来符合条件的配置。 /** * * @param channel 用户渠道 * @param village 村 * @param isPay 11 付费 21 未付费 */ public Str
2021-06-21 09:36:22
188
5
原创 需求-如何取配置?
以上表格是产品经理需要的配置,什么需求呢?逢年过节回馈老用户,登陆APP有礼物!当然了,不同用户为本店做出的贡献是不同的,所以礼物也会不同。字段解释:指定村儿 :表示当这个村儿的用户登录后先走这条配置。排除村儿:表示只要不是这个村儿的都可走这条配置。指定渠道:表示这个渠道的用户先走这条配置,有A、B、C三条渠道。排除渠道:表示不是这个渠道的用户都可走这条配置。用户类型: 付费用户,未付费用户,全部用户礼物:一颗榴莲,一个苹果,一粒葡萄开关:如果配置成关,表示符合条件的用户不下发礼物,如.
2021-06-16 18:32:36
148
原创 论trycatch的重要性
文章目录前言:1. 以下举例,业务1,2,3 并无关联2.但是如果将业务1,2 catch住的话 ,是不会影响后续业务的进行的。结尾前言:为什么想写try catch呢?业务场景:前端调用登陆接口,后端返回一系列的配置项,eg:此用户使用A侧还是B侧,某页面是否要给此用户展示,是否允许此用户使用某功能等。这些配置之间没有关联性。但当一段代码报错,如果没有异常捕获,后续所有代码将无法执行,即无法正常返回配置项,会影响用户登录。1. 以下举例,业务1,2,3 并无关联这样写,毫无疑问,会报错pu
2021-06-10 11:48:18
1358
原创 线上数据清洗-一个有趣的算法
需求1:I look at youYou look at me两个功能:a.我可以查看谁 look at 了我 b.查看我look at 了谁。历史设计:MySQL数据库分了100张表,当 I look at you , 我的表里存一条数据: I look at you 状态为0 ,you的 表里插一条数据 我被你look at 状态为1 。 当You look at me ,you的表里插入 状态为0 的数据,我的表里插入状态为1 的数据,即:一方look at 插入双方的数据
2021-06-08 20:07:48
630
2
原创 清理线上Redis没有设置过期时间的key
文章目录前言:发现后处理:一、改代码二、如何给线上的30个key后补过期时间?第一版:使用Python脚本第二版:Job第三版:哪些数据可以删掉?第四版:如何控制?第五版:你有几台Redis前言:我在开发中写了两个Redis的key,没有设置过期时间。原因是:在视频呼叫接通、挂断的时候会把key删除,当时觉得没有必要设置过期时间。项目上线后发现,这俩key已经有了30万的数据没有被删除。经分析发现:呼叫超时、杀进程等情况是不能调到删key接口的,所以才导致了这俩key有30万条都没能被删除。发现
2021-05-29 09:53:14
2079
6
原创 break、return、continue的区别
放段代码,自己反思 private static List<Integer> list = new ArrayList<>(); static { list.add(1); list.add(2); list.add(3); list.add(4); list.add(5); list.add(6); } pub
2021-03-25 09:39:33
221
实战java高并发程序设计
2018-05-13
SVN FOR VS
2016-11-29
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人