自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Mysql事务隔离级别与锁机制

提供严格的事务隔离,它要求事务序列化执行,事务只能一个接着一个地执行,但不能并发执行,如果仅仅通过“行级锁”是无法实现序列化的,必须通过其他机制保证新插入的数据不会被执行查询操作的事务访问到。:在一个事务内,多次读同一个数据,在这个事务还没结束时,其他事务不能访问该数据(包括了读写),这样就可以在同一个事务内两次读到的数据是一样的。:一个事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。行级锁是通过对索引上的索引项加锁来实现的。

2023-10-04 16:18:13 88

原创 JVM 垃圾收集器ParNew&CMS

当灰色对象要删除指向白色对象的引用关系时, 就将这个要删除的引用记录下来, 在并发扫描结束之后, 再将这些记录过的引用关系中的灰色对象为根, 重新扫描一次,这样就能扫描到白色的对象,将白色对象直接标记为黑色(为了避免内存碎片化的问题,想想复制算法是如何解决标记清除算法的内存碎片化问题的,将内存分为大小相等的两块,将存活的对象复制到另一块内存,这里也是一样的道理。表示对象尚未被垃圾收集器访问过。显然在可达性分析刚刚开始的阶段, 所有的对象都是白色的, 若在分析结束的阶段, 仍然是白色的对象, 即代表不可达。

2022-12-11 22:49:51 483

原创 Mysql SQL底层执行原理

在statement模式下,由于他是记录的执行语句,所以,为了让这些语句在slave端也能正确执行,那么他还必须记录每条语句在执行的时候的一些相关信息,也就是上下文信息,以保证所有语句在slave端被执行的时候能够得到和在master端执行时候相同的结果。:在row模式下,bin-log中可以不记录执行的sql语句的上下文相关的信息,仅仅只需要记录那一条记录被修改了,修改成什么样了,所以row的日志内容会非常清楚的记录下每一行数据修改的细节,非常容易理解。如果语句不在查询缓存中,就会继续后面的执行阶段。

2022-12-10 18:56:05 329

原创 Mysql索引优化实战

尽量少建单值索引,让每一个联合索引都尽量去包含sql语句里的where、order by、group by的字段,要确保这些联合索引的字段顺序尽量满足sql查询的最左前缀原则。对于这种varchar(255)的大字段可能会比较占用磁盘空间,可以稍微优化下,比如针对这个字段的前20个字符建立索引,就是说,对这个字段里的每个值的前20个字符放在索引树里。这种情况只会走name字段索引,因为根据name字段过滤完,得到的索引行里的age和position是不一定有序的,无法很好的利用索引。

2022-12-10 18:45:53 142

原创 JMM&并发三大特性

目标都是最大化CPU的使用率,并行在多处理器系统中存在,而并发可以在单处理器和多处理器系统中都存在,并发能够在单处理器系统中存在是因为并发是并行的假象,并行要求程序能够同时执行多个操作,而并发只是要求程序假装同时执行多个操作(每个小时间片执行一个操作,多个操作快速切换执行)指在同一时刻,有多条指令在多个处理器上同时执行指在同一时刻只能有一条指令执行,但多个进程指令被快速的轮换执行程序执行的顺序按照代码的先后顺序执行。JVM 存在指令重排,所以存在有序性问题如何保证有序性一个或多个操作,要么全部执行且在执行过

2022-12-06 23:44:50 369

原创 Mysql Explain详解与索引实践

使用EXPLAIN关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句。分析你的查询语句或是表结构的性能瓶颈通过EXPLAIN,我们可以分析出以下结果:用法:在select语句前添加explainselect查询的序列,表示查询中执行select子句或操作表的顺序。id列越大执行优先级越高用来表示查询的类型,主要是用于区别普通查询、联合查询、子查询等的复杂查询表示 explain 的一行正在访问哪个表表示的是查询使用了哪种类型;type包含的类型,依次从最优到最差分别syste

2022-12-06 23:14:57 1444

原创 Mysql索引底层数据结构与算法

索引是帮助MySQL高效获取数据的排好序的数据结构数据结构可视化:Data Structure Visualization特点左子节点比当前节点值小,右子节点比当前节点值大存在的问题如上图,当进行顺序新增数据时,二叉树就变成单边的”链条“,这样查找数据的效率就变慢了。例如查找5,就要经过5次查找。特点存在的问题红黑树和二叉树对比,在一定程度上解决单边过长的问题,但它存储高度的问题。如果数据量过大,IO次数更多,性能损耗更大例如图中查找Tom,只要通过一次hash计算就可以确定数据所在的位置。优点存在的问题B

2022-12-04 12:31:35 401

原创 AQS之独占锁ReentrantLock

AbstractQueuedSynchronizer简称AQS,AQS是一个依赖状态(state)的同步器,是多线程访问其共享资源的同步框架 Exclusive-独占:只有一个线程可以执行,如ReentrantLock Share-共享:多个线程可以同时执行,如Semaphore/CountDownLatch 同步等待队列: 是个双向链表,当前线程获取同步状态失败,AQS会将当前线程构造成一个Node节点,然后进入到同步队列并阻塞当前线程;当同步状态释放时,公平锁中

2022-12-04 12:09:28 207

原创 并发编程之Executor线程池

corePoolSize:核心线程数;当提交一个任务时,线程池会创建一个新的线程去执行任务,直到当前线程数等于corePoolSize;如果当前线程数达到corePoolSize,继续提交的任务会存放到阻塞队列中,等待被执行;maximumPoolSize:最大线程数;当阻塞队列满了,并且有继续提交新的任务,则会创建非核心线程执行任务,如果当线程数大于maximumPoolSize,则执行拒绝策略keepAliveTime:非核心线程数的最大空闲时间;当线程池中的线程数量大于corePoolSize时,

2022-11-19 09:07:18 592

原创 JVM类加载机制

loadClass的类加载过程1、加载:加载磁盘里的字节码文件,使用到类时才会加载2、验证:验证字节码文件的正确性3、准备:给类的静态变量分配内存,并赋予默认值,例如int初始值为0,boolean初始值为false,对象为null4、解析:将符号引用转化为直接引用。该阶段会把一些静态方法(比如main()方法)替换为指向数据所存内存的指针或句柄等(直接引用),即为静态链接过程(类加载期间完成)

2022-10-15 12:27:31 114

原创 JVM类加载机制、内存模型

当我们运行某个类时,首先需要通过类加载器把主类加载到JVM加载、验证、准备、解析、初始化、使用、卸载在磁盘上查找并通过IO读入字节码文件,使用到类时才会加载验证字节码文件的正确性给静态变量分配内存,并赋予默认值将符号引用替换成直接引用静态链接:当一个字节码文件被装载进 JVM 内部时,如果被调用的目标方法在编译期可知,且运行期保持不变时,这种情况下将调用方法的符号引用转换为直接引用的过程称之为静态链接。

2022-09-29 23:04:25 166 1

原创 Class常量池与运行时常量池

文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一、pandas是什么?示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。二、使用步骤1.引入库代码如下(示例):import numpy as npimport

2021-07-13 23:38:19 251

原创 java并发编程之volatile详解

volatile它只是一个变量修饰符,只能用来修饰变量不能修饰方法和代码块。

2020-12-20 23:15:59 73

原创 java 并发编程之CountDownLatch、CyclicBarrier、Semaphore

CountDownLatch、CyclicBarrier、Semaphore是java JUC包下的同步工具类,用于多线程实现同步的效果一、CountDownLatch1、概念允许一个或多个线程一直等待直到其他线程执行完毕才开始执行;CountDownLatch类是一个同步倒数计数器,计数器的值是线程的大小。当一个线程执行完之后,调用一次countDown()方法,计数器的值就相应得减1;计数器大于0 时,await()方法会阻塞后面程序执行,直到计数器为0;当计数器到达0时,表示所有的线程都已完成

2020-11-02 00:22:59 75

原创 java 并发编程之Synchronized的使用及其原理

Synchronized一、特性1、原子性:一个操作或全部操作;要么全部执行,要么不执行;例如i++就不具有原子性2、可见性:一个线程对其中的资源进行操作,对于其他几个线程是可见的3、有序性:在多线程中会禁止指令重排,按照程序中的操作进行先后执行二、用法1、同步非静态方法;锁是当前实例对象public synchronized void methodName(){ ……}2、同步静态方法;锁是当前类的class对象public synchronized static void met

2020-10-23 22:56:05 138

空空如也

空空如也

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

TA关注的人

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