自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 HashMap源码解析

在介绍自定义对象的hash方法之前,我们先抛出一个问题,为什么重写equals方法一定要重写hashCode方法。比如我们有一个Person类,里面有姓名,电话,身高属性。我们在判断Person p1 和 Person p2时,认定当姓名,电话,身高相同是那么这两个对象就相等。但如果你不重写hashCode方法的话,他会默认拿p1和p2的内存地址进行计算,那么即使他们的属性都相同,但hash值却不相同。所以我们要自定义hashCode方法,让两个姓名,电话,身高相同的对象计算出来的hash值相同。

2023-05-14 21:49:29 185 1

原创 什么是MVCC,MVCC的作用是什么?

的,也就是说当某个事务在执行快照读的时候,对该记录创建一个Read View的视图,把它当作条件去判断当前事务能够看到哪个版本的数据,有可能读取到的是最新的数据,也有可能读取的是当前行记录的 undo log 中某个版本的数据。快照读:在第一次访问数据时,给当前数据拍一张照,之后读取的内容都是快照上的内容,而不是最新更改过的数据。操作的时候生产的读视图,在该事务执行快照读的那一刻,会生成一个数据系统当前的快照,记录并维护系统当前活跃事务的id,事务的id值是递增的。MVCC:多版本并发控制。

2023-03-09 21:12:31 415 1

原创 MySQL的间隙锁

MySQL就会在id>8的数据之间的间隙,和超出存储数据的id的空洞都加上了锁,这样的锁被称之为间隙锁。,或者所差无几,那么MySQL就不会USE INDEX,所以就加不上间隙锁,而使用的是表锁。在MySQL中,对一行数据加锁,是。因为串行化读主要是为了解决幻读问题,只要防止当前where条件不会出现幻读现象就可以了,这样的话并发效率也相对高点。在MySQL的事务并发访问下,数据可能会出现一些问题,所以我们需要使用锁来规避这些问题。比如你在 where 条件后的字段没有索引,就会导致行锁失效,成为表锁。

2023-03-09 21:07:54 421

原创 聊一聊MySQL的事务

我们先来明确一下什么是事务:我们在业务中往往不止有一条sql,多条sql要么全部执行成功,要么全部执行失败,不能一条成功一条失败,这就叫做事务。I:隔离性,当两个或者多个事务并发执行时,为了保证数据的安全性,将一个事物内部的操作与其它事务的操作隔离起来,不被其它正在执行的事务所看到,使得并发执行的各个事务之间不能互相影响。D:一致性,事务完成(commit)以后,DBMS保证它对数据库中的数据的修改是永久性的,即使数据库因为故障出错,也应该能够恢复数据。可重复读:解决了不可重复读问题,解决了部分幻读问题。

2023-02-09 11:52:24 84

原创 聊一聊MySQL的索引,MySQL索引为什么要选择B+树

而在MyISAM中,因为索引和数据是分开存放的,所以key存放的是主键,value存放的是数据在内存中的地址。在InnoDB引擎下,数据和索引在磁盘中是存放在一起的,全部存放在xxx.idb文件下,而MyISAM的数据和索引是分开存储的,分别存储在xxx.myi和xxx.myd文件下,这也是为什么。在MySQL中,我们常用的存储引擎为MyISAM和InnoDB,它们的底层索引都是由B+树进行构建的,但是他们数据存储的方式却有所不同。红黑树是AVL树的变种,它并不要求严格的平衡,而是大致平衡。

2023-02-07 14:26:53 212

原创 为什么在数据库中不推荐使用外键?

外键用来和其他表建立联系用,外键是另一表的主键,外键是可以有重复的,可以是空值。一个表可以有多个外键。【强制】不得使用外键与级联,一切外键概念必须在应用层解决。

2022-09-05 21:50:10 1693 1

原创 MySQL一条查询SQL语句的执行流程,MySQL的基础架构

建立连接的过程通常是比较复杂的,所以为了尽量避免重复连接,推荐使用长连接。但有些时候 MySQL 占用内存涨得特别快,这是因为 MySQL 在执行过程中临时使用的内存是管理在连接对象里面的。所以如果长连接累积下来,可能导致内存占用太大,被系统强行杀掉(OOM),从现象看就是 MySQL 异常重启了。优化器就是在表里面有多个索引时,决定使用哪个索引。MySQL的缓存是以key-value形式存储,key为SQL语句,value是查询的结果。建立连接后,就会执行逻辑,首先会查询缓存,但在。...

2022-08-30 20:29:57 144

原创 Java多线程基础笔记

多个线程同时被阻塞,它们中的一个或者全部都在等待某个资源被释放。由于线程被无限期地阻塞,因此程序不可能正常终止。如下图所示,线程 A 持有资源 2,线程 B 持有资源 1,他们同时都想申请对方的资源,所以这两个线程就会互相等待而进入死锁状态。...

2022-08-04 10:41:35 123

原创 SpringMVC的执行流程

1、 用户发送请求至前端控制器DispatcherServlet。2、 DispatcherServlet收到请求调用HandlerMapping处理器映射器。3、 处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器 拦截器(如果有则生成)一并返回给DispatcherServlet。......

2022-07-31 23:43:34 100

原创 SpringMVC中监听器、过滤器、拦截器的区别

过滤器(Filter):对request请求起到过滤的作用,作用在servlet之前,如果配置/*可以对所有的资源访问(servlet、js/css静态资源等)进行过滤处理。

2022-07-28 18:20:32 471

原创 Java中String为什么是不可变的?

保存字符串的char数组被final修饰且为私有(private)的,并且String类没有提供修改这个字符数组的方法。String类被final修饰导致其不能被继承,进而避免了子类破坏String不可变。

2022-07-27 23:42:47 295

原创 @Autowired和@Resource的区别

@Autowired和@Resource的区别。

2022-07-27 23:10:54 97

原创 ArrayList和LinkedList的区别?

LinkedList和ArrayList都实现了List接口,ArrayList的底层是使用数组实现的,可以以O(1)的复杂度完成对数据的随机访问。LinkedList底层是使用链表实现的,在访问数据时复杂度是O(n),因为需要一个一个的遍历。但在删除,增加时时间复杂度为O(1),因为LinkedList只需要修改节点的指针即可。与之对应的因为数组在增加或删除时需要移动大量的元素,所以ArrayList在删除和增加元素上时间复杂度为O(n);...

2022-07-25 10:52:59 167

原创 Java两个浮点数如何进行比较,3*0.1==0.3为何为false?

Java中3*0.1==0.3为何为false,两个浮点数要如何进行比较?

2022-07-24 22:12:54 1308 1

空空如也

空空如也

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

TA关注的人

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