自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(28)
  • 资源 (1)
  • 问答 (2)
  • 收藏
  • 关注

原创 Mysql是如何保证数据不丢的(mysql45讲)

WAL机制的延伸binlog的写入流程redolog写入流程另外两种让一个没有提交的事务写入到磁盘的场景组提交机制小结binlog的写入流程1. 事务执行过程中,先把日志写到binlog cache2. 事务提交的时候,再把binlog cache写到binlog文件中注意点:一个事务的binlog是不能被拆分的,因此不论这个事务多大,也要确保一次性写入,这就涉及到binlog cache的保存问题系统给binlog cache分配了一片内存,每个线程一个,参数binlog_cache_siz

2020-08-29 16:23:01 292

原创 Mysql提高性能的方法(mysql45讲)

饮鸩止渴的方案问题短连接风暴解决方案慢查询性能问题索引没有设计好语句没写好mysql选错了索引问题业务高峰期,生产环境的MYSQL压力太大,没法正常响应,需要短时间内、临时性的提升一些性能短连接风暴正常的短连接模式就是连接到数据库后,执行很少的SQL语句就断开,下次需要的时候就重连。如果使用的是短连接,在业务高峰期的时候,就可能出现连接数突然暴涨的情况sql语句: 查看数据库连接数的上限:mysql> show variables like '%max_connections%';+-

2020-08-28 23:32:05 174

原创 Mysql的加锁规则(Mysql45讲)

Mysql的加锁加锁的几个优化原则mysql的优化案例三级目录加锁的几个优化原则两个原则,两个优化,一个bug两个原则:加锁的基本单位是next-key lock,next-key lock是前开后闭区间查找过程中访问到的对象才会加锁两个优化:索引上的等值查询,给唯一索引加锁的时候,next-key lock退化为行锁索引上的等值查询,向右遍历且最后一个值不满足等值条件的时候,next-key lock退化为间隙锁一个Bug:唯一索引上的范围查询会访问到不满足条件的第一个值为

2020-08-27 22:56:28 373

原创 如何正确的显示随机消息

Mysql的排序问题内存临时表Mysql是用什么办法来定位“一行数据”的Mysql5.6引入的新的排序算法(数据大小超过sort_buffer_size)如何正确的随机呢?问题如果现在有一个随机显示三个单词的需求,有什么方法实现,存在什么问题以及如何改进?内存临时表首先,用order by rand()来实现这个逻辑:select word from words order by rand() limit 3;这个语句的意思很直白,随机排序取前三个,虽然这个SQL语句写法很简单,但执行流程很

2020-08-15 21:38:44 209

原创 ReentrantLock的公平锁解析

公平锁前置概念park和unpark多线程执行逻辑这里对AQS类做一个介绍公平锁源码分析深入分析公平锁的实现前置概念park和unparkunpark函数为线程提供“许可(permit)”,线程调用park函数则等待“许可”。 Thread thread = Thread.currentThread(); LockSupport.park(); //park()是不可重入的,如果连续调用两次park(),会发生线程阻塞 LockSupport.unpark(thr

2020-08-15 11:29:27 227

原创 count(*)的理解(mysql45讲)

count函数的运行机制问题count(*)的实现方式TABLE_ROWS自己计数的方式用缓存系统保存计数在数据库保存计数不同的count现在的优化器只是给count(*)做了取行数的优化,其他的count都会进行判断,大大的耗时count深度解析按照效率排序问题在开发系统的时候,你可能需要计算一个表的行数,比如一个交易系统的所有变更记录总数,这时候就会使用select count(*) from t来解决,随着系统记录数越来越多,这些语句执行也会越来越慢,这是个啥原因呢?count(*)的实现方式

2020-08-11 22:15:13 6323 2

原创 Mysql是怎么删除数据的?

Mysql的删除问题数据库表的空间回收删除表之后为什么空间不减小参数innodb_file_per_table(表数据的位置)数据删除流程重建表online DDL 和 inplace(没搞懂)optimze table/analyze table/alter table这三种方式重建表的区别问题有时候会遇到这么一种情况,当数据库占用空间太大时,把一个最大的表删掉了一半的数据,怎么表文件的大小还是没变?数据库表的空间回收一个InnoDB表包含两部分,即表结构定义和数据,在Mysql8版本以前,

2020-08-10 22:55:01 497

原创 G1垃圾回收器(jdk9默认)

区域化分代式问题G1的参数设置G1的特点并行和并发分代收集空间整合可预测的停顿时间模型G1回收器的缺点其他分区Region : 划整为0(使用指针碰撞)问题已经有了前面几个垃圾回收器,为什么还要造出G1回收器呢?应用程序所对应的业务越来越庞大,复杂,用户越来越多,经常造成STW的GC又跟不上实际需求适应不断扩大的内存和不断增加的处理器数量目标:在延迟可控的情况下获得尽可能高的吞吐量,所以才担当起“全功能收集器”的重任和期望G1的参数设置-XX:+UseG1GC 开启G1收集器,jdk9

2020-08-10 18:03:11 1317

原创 JVM常见参数设置

JVM常见参数JVM参数分类小问题具体的参数分类标配参数X参数(主要用来设置编译器)XX参数常见的五种OOM异常heap Space OOMGCOverHeadLimitExceed OOMDirectBufferMemory OOMUnableToCreateNewNativehread OOM附加一道线程面试题元空间 OOM注意点JVM参数分类小问题哪一些对象可以是GCRoots对象?虚拟机中栈引用的对象,虚拟机中方法区的静态属性引用的变量,常量值中的符号引用,本地方法栈中的引用的对象具体

2020-08-10 16:13:33 332

原创 SQl语句为什么变“慢”(mysql45讲)

Mysql的刷脏页机制问题mysql“抖”的原因什么情况会引发数据库的flush过程呢?思考InnoDB刷脏页的控制策略一个有趣的策略:小结问题一条SQl语句,正常执行的时候特别快,但是有时也不知道怎么回事,它就会变得特别慢,而且这样的场景很难复现,它不只随机,而且持续时间还很短,看上去就像Mysql抖了一下,这是什么原因?mysql“抖”的原因InnoDB在处理更新语句的时候,只做了写日志这一个磁盘操作,这个日志叫Redo log(重做日志)把内存里的数据写入磁盘的过程,术语就是Flush

2020-08-09 23:05:21 126

原创 线程池

线程池创建线程池的方法线程池的作用5个创建方法线程池应用举例高级的创建线程池的方法线程池的代码实践线程池银行举例创建线程池的方法线程池的作用线程复用控制最大并发度管理线程5个创建方法 //看方法有五种线程池 ExecutorService threadPool = Executors.newFixedThreadPool(5);//一池5个处理线程 ExecutorService singleThreadExecutor = Executors.newSi

2020-08-09 21:00:30 107

原创 垃圾回收器

7大垃圾回收器两个评价参数Serial回收器:串行回收ParNew(管新生代)(不上不下,已经失宠)Parallel Scavenge回收器(吞吐量优先)CMS(current-Mark-Sweep)低延迟小结两个评价参数吞吐量: 用户时间和总时间的比值暂停时间:垃圾回收线程停止工作的时间Serial回收器:串行回收新生代名字: Serial GC(新生代)收集算法: 复制算法老年代名字: Serial Old GC(老年代)收集算法: 标记-压缩算法优点和缺点缺点

2020-08-09 20:10:52 179

原创 怎么给字符串字段加索引(mysql45讲)

字符串如何加索引问题普通索引到前缀索引增加额外的记录扫描行数什么方法能够确定我应该使用多长的索引呢?前缀索引对覆盖索引的影响其他来给字符串加索引解决方案:倒序存储和hash存储的异同点小结问题现在,几乎所有的系统都支持邮箱登录,如何在邮箱这样的字段上建立合理的索引,是我们今天要讨论的问题普通索引到前缀索引Mysqll是支持前缀索引的,也就是说,你可以定义字符串的一部分作为索引,默认的,如果你创建索引的语句不指定前缀长度,那么索引就会包含整个字符串比如下面两个例子:ALTER TABLE S

2020-08-08 23:29:22 625

原创 生产者消费者

生产者消费者问题注意点synchronized版阻塞队列版注意点多线程操作资源类,牢记三步走:判断干活唤醒synchronized版//A : num + 1//B : num - 1public class A { public static void main(String[] args) { Data data = new Data(); new Thread(() -> { for (int i = 0

2020-08-08 21:54:40 86

原创 synchronized和lock的区别

synchronized和lock的区别1. synchronized是jvm层面的,lock是API层面的锁2. synchronized不需要解锁3. 等待是否可中断4. synchronized是非公平锁5. 锁绑定多个条件Condition(精准唤醒)精准唤醒的Condition代码举例1. synchronized是jvm层面的,lock是API层面的锁使用如下代码验证public class LockAndSynchronizedDemo { public static vo

2020-08-08 21:48:39 476 1

原创 阻塞队列

阻塞队列的使用阻塞队列的简介jdk里面的其中阻塞队列的实现阻塞队列的四组方法ArrayBlockingQueue的代码验证SynchronousQueue的代码验证阻塞队列的简介阻塞队列(BlockingQueue)是一个支持两个可以进行阻塞插入和阻塞移除的附加方法的队列。1)阻塞插入:当队列满后,队列会阻塞(拒绝)插入元素,直到队列不满。2)阻塞移除:当队列为空时,队列会阻塞(拒绝)移除元素,直到队列里有元素。jdk里面的其中阻塞队列的实现ArrayBlockingQueue:由数组结构组成的

2020-08-08 21:22:26 97

原创 mysql为什么会选错索引(mysql45讲)

文章目录问题场景举例说明这里没有走索引,是为什么?优化器是怎么判断扫描行数的?采样统计索引统计别慌,判断值不只是扫描行数!!!修正统计信息的命令但是,优化器不只是看行数索引选择异常和处理小结问题在mysql中一张表是可以支持多个索引的,但是,写SQL语句的时候,并没有主动指定使用哪一个索引,也就是说,这种没有指定索引的情况下,使用哪个索引是由MYSQL决定的场景一条本来可以执行的很快的语句,由于MySql选错了索引,而导致执行速度变的很慢举例说明CREATE TABLE t( id I

2020-08-07 22:18:43 108

原创 普通索引和唯一索引(mysql45讲)

普通索引和唯一索引问题几个注意点普通索引和唯一索引的读区别普通索引和唯一索引更新区别change buffer使用change buffer的条件change buffer的参数设置change buffer的使用场景索引选择与实践change buffer和redo log结论问题在不同的业务场景下,应该选择普通索引,还是唯一索引?几个注意点数据页内部通过二分法来定位记录面对比较大的类似于身份证号的字段,每一条都是唯一的记录(一般使用唯一索引)查看表T上面的索引的sql语句mysql

2020-08-06 22:09:20 100

原创 读写锁

读写锁简介互斥条件代码验证简介本质是提高线程并发的手段,java里面通过ReentrantReadWriteLock实现可以实现对同一个资源类的读写分离互斥条件读 - 读 不互斥读 - 写 互斥写 - 写 互斥代码验证class MyCache{ //资源类 private volatile Map<String,Object> map = new HashMap<>(); //private Lock lock = new Reentra

2020-08-06 18:15:40 81

原创 自旋锁

自旋锁自旋锁简介代码实现自旋锁juc中自旋锁源码自旋锁简介是指尝试获取锁的线程不会立即阻塞,而是采用循环的方式尝试获取锁,这样的好处是减少线程上下文切换的消耗,缺点是循环会消耗CPU代码实现自旋锁public class SpinLock { //原子引用线程 AtomicReference<Thread> atomicReference = new AtomicReference<Thread>(); public static void m

2020-08-06 18:05:51 80

原创 事务隔离和行锁之间的联系(Mysql45讲)

事务隔离和行锁问题开启事务的命令两个视图深入理解MVCC核心原理:关于更新数据行锁的等待问题当前读的锁问题事务的可重复读是如何实现的读提交和可重复读的区别问题在可重复读隔离级别下,一个事务要更新一行,另一个事务要等待之前更新的这一行的行锁,要等到之前的事务提交才会释放行锁,那么第二个事务(等待行锁的事务)自己更新的时候具体的什么操作流程呢?它读到的值又是什么呢?开启事务的命令begin/start transaction命令并不是一个事务的起点,在执行到他们之后的第一个操作InnoDB表的语句,事

2020-08-05 22:34:47 184 1

原创 数据库锁之行锁(Mysql45讲)

行锁行锁其他概念两阶段锁协议死锁解决死锁检测消耗太多资源的方案行锁1. mysql的行锁是在引擎层由各个引擎自己实现的,但并不是所有的引擎都支持行锁,比如MyISAM就不支持行锁2. 行锁就是针对数据表中行记录的锁,举个例子:如果事务A更新了一行,而这时候事务B也要更新同一行,则必须等事务A的操作完成后才能更新其他概念两阶段锁协议在InnoDB事务中,行锁是在需要的时候被加上的,但并不是不需要了就立刻释放,而是要等到事务结束时才释放由两阶段锁协议所导出的业务原则:如果你的事务需要锁多个

2020-08-04 22:09:03 526

原创 CAS

CASCAS你知道吗?CAS是什么?CAS底层原理?如果知道,谈谈你对unsafe的理解CAS缺点原子更新引用知道吗? 如何规避ABA问题?原子引用解决ABA问题CAS你知道吗?CAS是什么?比较并交换CAS底层原理?如果知道,谈谈你对unsafe的理解自旋锁,UNSafecas是一条CPU并发原语,判断内存某个位置的是否为预期值,如果是则更改为新的值这个过程是原子的CAS缺点循环时间长,开销大(如果CAS失败,会一直进行尝试,如果CAS长时间不成功,开销很大)只能保证一个共享变量的

2020-08-04 18:37:41 137

原创 全局锁和表锁

MySQl的锁锁的出现锁的分类全局锁做全库逻辑备份不同全局锁,用mysqldump另一种设置全库只读的方式表级锁表锁MDL(metadata lock)锁的出现1. 数据库锁设计的初衷是解决并发问题2. 作为多用户共享的资源,当出现并发访问时,数据库需要合理的控制资源的访问规则,而锁就是用来实现这些访问规则的重要数据结构锁的分类1. 全局锁(解决全库逻辑备份问题)2. 表级锁3. 行锁全局锁就是对整个数据库实例加锁加全局读锁的语句:flush tables with read l

2020-08-03 22:41:55 352

原创 索引2(总结)

案例索引搜索案例回表覆盖索引联合索引(要考虑索引失效)最左前缀原则(联合索引优化)索引下推重建表的命令索引搜索案例create table T( -> ID int primary key, -> k int not null default 0, -> s varchar(16) not null default '', -> index k(k)) -> engine = InnoDb;INSERT INTO T VALUES

2020-08-02 22:41:27 117

原创 操作系统之进程通信

进程通信管道(不可见管道)FIFO(命名管道)消息队列信号量共享内存进程如何知道其他进程给自己发送了数据?两个进程之间是相对独立的空间,无法在用户态进行通信,可以通过内核中的“对象”进行通信2. 线程可以通过同一个进程里面设置全局变量进行通信管道(不可见管道)1. 不可见(文件系统中无文件名)2. 通过一个队列实现(入队就是写,出队就是读)3. 是一个特殊的文件(只需要两个文件描述符,一个出,一个入)FIFO(命名管道)1. 可见(文件系统中有文件)2. 向里面写的时候会阻塞读

2020-08-02 15:11:43 142

原创 索引1(总结)

索引索引的作用索引的常见模型哈希表(适合等值查询)有序数组二叉搜索树mysql里面InnoDB的索引InnoDB索引的分类主键索引(聚簇索引)非主键索引(二级索引)InnoDB索引的维护索引的作用 索引的出现为了提高查询的效率可以把索引类比于书的目录,索引就是每一张表的目录索引的常见模型哈希表(适合等值查询)hash表的实现原理: 把值放在数组中,用一个hash函数把key换算成一个确定的位置然后把Value放在这个数组的位置优点: 增加新的数据时速度很快缺点: 做区间查询的速度很慢

2020-08-01 21:41:01 269

原创 内存溢出和内存泄漏

这里写目录标题内存溢出(内存不够用)内存泄漏(内存开始够用,但浪费很多,之后不够用)有关内存泄漏的例子内存溢出(内存不够用)典型的内存溢出就是Out Of Memory(OOM)由于GC不断发展,所以一般情况下不会发生OOM,除非应用程序占用的内存增长速度非常快,造成垃圾回收的速度已经跟不上内存消耗的速度官方对于OOM的解释就是没有空闲的内存,并且垃圾回收器也无法提供更多内存堆内存不够一般有两个原因jvm设置的堆的大小不够 : 可通过Xmx,Xms来设置代码中创建了大量大

2020-08-01 19:37:16 98

[练习题+答案]Harmony OS应用开发者高级认证

包过,覆盖[ 99% ]考试范围

2024-06-01

SQL常见大厂面试题 - 7大类型

1. 行转列 2. 连续N天登录 3. N日留存率 4. 分组内Top前几 5. 窗口函数 6. 带条件的聚合统计

2022-12-01

Redis可远程连接的配置文件

1. 注释 bind 127.0.0.1 2. protected-mode no

2021-08-01

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

TA关注的人

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