自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 mysql对order by 的实现

首先,根据解释查询计划,在mysql里对order by的排序可以大致分为两种(explain的extra字段标明),一种是using index,一种是using filesort。

2024-04-01 19:32:07 167

原创 InnoDB引擎的查询过程

在mysql种。一条查询语句的流程如下首先判断是否击中查询缓存,是:走查询缓存对应数据;否:走b+树,看数据页的位置;判断数据页是否在buffer pool中:是:返回数据页数据;否:去数据库磁盘查找数据;查找完数据:LRU算法。

2024-03-31 15:40:45 527 1

原创 进程,线程,协程

进程是系统进行资源分配和调度的一个独立单位,是系统运行程序的基本单位,由于进程之间的创建切换销毁开销都比较大,因此人们创建了一种轻量级的进程,即线程,线程被设计为进程的一个执行路径,线程是CPU调度的基本单位,同一进程内的线程会共享进程的堆和方法区资源,因此在线程切换的成本上要远低于进程。可以将线程成为轻量级的进程。线程共享进程的堆和方法区,但是实际上也有自己的私有资源,即程序计数器,虚拟机栈和本地方法栈。程序计数器主要是用来记录现在读到哪个指令了,方便自身的运行以及线程切换。

2024-03-27 22:02:49 186

原创 spring三级缓存以及为什么不用二级缓存

因此采用三级缓存,在这个过程中如果B需要A注入,而A存在代理的话,那么就会生成一个早期的代理对象给B,用于解决循环依赖,而最终的代理对象还是要在beanA完成了属性填充和初始化后再继续进行,这两个生成的代理对象是存在区别的,因此也不算真正破坏到Spring代理在Bean初始化完成后的原则,因为Spring仍然确保了最终的代理对象是在Bean完全初始化后才生成的。3:B的初始化完成了,A继续属性赋值,顺利从⼀级缓存拿到实例化且初始化完成的B对象,A对象创建也完成,删除⼆级缓存中的A,同时把A放⼊⼀级缓存。

2024-03-27 15:31:47 738

原创 反射的优点和缺点

反射的本质是JVM得到了class对象之后,对class对象进行反编译从而获取到对象的各类信息,当然,这里的反编译并不是真的反编译,因为class对象本身就包含了所有的类信息,不需要反编译,这里是指运行时,通过class对象去动态地获取类相关地信息。反射犹豫需要动态加载类,获取类的各类信息,安全检查等额外开销,并且相对于直接调用中编译器做了很多的优化,反射是没有的,因此导致反射的性能不如直接调用。2、反射的代码可读性下降。我们在运行的时候不必明确指定具体的类,可以让我们在程序运行时再确定,比如动态代理。

2024-03-25 22:22:59 263 1

原创 为什么重写equals就要重写hashcode

但是由于A和B的hashcode计算方式不同(我们没有重写hashcode),那么hashset在计算B的hashcode来放置B时,会发现位置是空的(因此我们向例如hashset这种结构里面存入了A,而A.equals(B)==true的时候,我们希望向hashset里面存入的B是会重复的。这是因为我们在用hash结构去存储数据的时候,是用hashcode去计算这个数据的位置,而不是数据本身的值。),会将B也放进去,导致一个hashset里面出现两个数值重复的值。

2024-03-25 19:22:36 206

原创 redis的底层数据结构

redis性能高的原因很大程度上是由于它的每一种数据结构都经过专门设计来应对不同场景,redis的数据结构本质上可以分为两层,对外暴露的数据结构以及内部底层的数据结构。

2024-03-25 17:18:14 1350 1

空空如也

空空如也

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

TA关注的人

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