- 博客(65)
- 收藏
- 关注
原创 Mysql中EXPLAIN解读
当EXPLAIN与可解释的语句一起使用时,MySQL将显示来自优化器的有关语句执行计划的信息。也就是说,MySQL解释了它将如何处理该语句,包括有关如何连接表以及以何种顺序连接表的信息。在select语句之前增加explain关键字,执行后MySQL就会返回执行计划的信息,而不是执行sql。可以通过Explain来查看sql语句中的索引执行情况。
2022-11-11 16:59:23 719 1
原创 红黑树介绍
节点有颜色,分为红色和黑色两种颜色根节点是黑色的每个叶子结点都是黑色的空结点(NIL结点)红色节点的子节点都是黑色的,即任何相邻的节点都不能同时为红色每个节点,从该节点到达其可达叶子节点的所有路径,都包含相同数目的黑色节点。
2022-11-03 22:10:07 438
原创 数组中第K大的元素(基于快排优化解决)
解决本题的思路主要是:每次快排可确定一个元素num在数组中的位置pos,以num为标准可将数组划分成左右两部分,下标小于pos的元素全部小于等于num,下标大于pos的元素全部大于等于num,根据第k大元素应处的位置挑选其中一个区间进行递归查找,直到num正好是我们要找的第k大元素。分析:最佳情况下,第一个被选中的元素恰好是第k大的元素;最差情况下,需要不断递归查找,n+ 1/2 * n + 1/4 * n + 1/8 * n +…1/n * n
2022-10-25 15:40:16 234
原创 CAP理论
BASE 理论本质上是对 CAP 的延伸和补充,更具体地说,是对 CAP 中 AP 方案的一个补充。其核心思想是即使无法做到强一致性(Strong Consistency),但应用可以采用适当的方式达到最终一致性(Eventual Consitency)。例如在分布式系统发生故障时,系统可适时放弃一致性,但不是永久放弃。⼀个分布式系统在满足分区容错性(Partition tolerance)的前提下,只能再满足一致性(Consistency)、可用性(Availability)二者中的一个。
2022-10-18 17:23:01 256
原创 Spring学习纪要
当一个类需要另一个类时,就意味着依赖,一旦出现依赖就可以把另一个类作为本类的成员变量,最终通过Spring配置文件进行注入。Spring框架在运行时,通过动态字节码技术,无需加载,直接在JVM中创建,运行在JVM内部,等程序结束后,会和JVM一起消失。将对于成员变量赋值的控制权,从代码中转移到Spring工厂中和配置文件当中。本质就是基于Spring的动态代理开发,通过代理类为原始类增加额外功能。通过Spring的工厂及配置文件,为对象的成员变量赋值。概念:通过代理类,为原始类增加额外的功能。
2022-10-05 21:30:40 408
原创 JVM基础_9_各种垃圾回收器
主要是通过吞吐量,暂停时间和内存占用三大指标。Serial收集器Serial是一种串行运行的,执行新生代收集的收集器。采用的是复制算法。Serail Old收集器是串行运行的,运行老年代收集的收集器。采用的是标记-整理算法。当Serial/Serial Old收集器运行时,其他用户线程必须要暂停,用户线程和GC线程无法并发运行。ParNew是Serial收集器的多线程版本,采用并行回收的方式执行新生代的内存回收。Parallel Old是基于并行回收的处理老年代垃圾的垃圾回收器,采用的是标记整理
2022-09-13 16:30:53 254 1
原创 JVM基础_4_对象
栈中的引用变量指向java堆中句柄池中对应的句柄,每个句柄存储指向对象实例数据的指针(指向堆)和指向对象类型数据的指针(指向方法区)它是对象真正存储的有效信息,包括程序代码中定义的各种类型的字段(包括从父类继承下来的和本身所拥有的字段)栈中的引用变量指向java堆,堆中存放的是对象类型的指针(指向方法区)和对象实例的数据。主要是分为两种:句柄访问和直接指针(hotspot采用)包括运行时元数据以及类型指针两部分。
2022-08-24 22:36:15 96
原创 JVM基础_2_类加载
自定义String类,但是在加载自定义String类的时候会优先用启动类加载器进行加载,启动类加载器会优先加载jdk自带文件中的String类,而不是用户自定义的String类。JVM对class文件采用的是按需加载的方式,也就是说等到需要使用该类的时候才会对它的class文件加载到内存生成class对象。用户可以通过继承java.lang.ClassLoader类的方式,实现自己的类加载器,以满足自己的需求。Java程序对类的使用方式分为:主动使用和被动使用。将常量池内的符号引用转换为直接引用的过程。..
2022-08-13 10:49:56 314
原创 Java中String为什么要被设置成不可变?
因为要保证String类的不可变,那么将这个类定义为final的就很容易理解了。如果没有final修饰,那么就会存在String的子类,这些子类可以重写String类的方法,强行改变字符串的值,这便违背了String类设计的初衷。...
2022-08-05 16:44:07 212
原创 Java中全局变量和局部变量的区别
未被static修饰的成员变量也叫实例变量,它存储于对象所在的堆内存中,生命周期与对象相同;被static修饰的成员变量也叫类变量,它存储于方法区中,生命周期与当前类相同。局部变量存储于栈内存中,作用的范围结束,变量空间会自动的释放。成员变量是在类的范围里定义的变量;局部变量是在方法里定义的变量;局部变量没有默认初始值;成员变量有默认初始值;...
2022-08-05 10:51:51 218
原创 MySql中的锁
由于两个事务都需要对多行进行操作,与此同时会对多行进行上锁,待事务提交之后才会释放行锁。因此在上图中都无法获取到自己所需要的行锁,两事务都无法正常提交事务,故而陷入死锁。在InnoDB事务中,⾏锁是在需要的时候才加上的,但并不是不需要了就⽴刻释放,⽽是要等到事务提交后才释放。⾏锁就是针对数据表中行记录的锁。比如事务A更新了一行,而这时候事务B也要更新同⼀行,则必须等事务A的操作完成后才能进⾏更新。MySql中并不是所有引擎都支持行锁,如MyISAM引擎就不⽀持行锁,但InnoDB是⽀持⾏锁的。...
2022-07-30 17:12:06 164
原创 Java中如何保证线程安全
这样一来,就可以避免多线程访问共享变量了,它们访问的是自己独占的资源,它从根本上隔离了多个线程之间的数据共享。除了以上三种方式外以外,juc包下还提供了一些线程同步工具类,如CountDownLatch(允许一个或多个线程等待其他线程完成操作)、Semaphore(信号量,可以控制同时访问特定资源的线程数量)等等.Java保证线程安全的方式有很多,其中较为常用的有三种,按照资源占用情况由轻到重排列,这三种保证线程安全的方式分别是原子类、volatile、锁。...
2022-07-30 10:40:50 1650
原创 MySql索引
若根据非主键字段进行查找时,则会先扫描对应的非主键索引的B+树,在叶子节点处得到对应的主键值,再去主键索引的B+树进行查找,得到所需要查找的值。这个最左前缀可以是联合索引的最左N个字段,也可以是字符串索引的最左M个字符。如果有一个3列索引(a,b,c),则已经对(a)、(a,b)、(a,b,c)上建立了索引;如果有一个2列的索引(a,b),则已经对(a)、(a,b)上建立了索引;若根据主键字段进行查找时,则会直接扫描主键索引的B+树,得到所要查找的数据;......
2022-07-29 15:43:53 215
原创 SQL语句的执行顺序
在分组前对数据进行过滤,筛选出表中满足条件的行,不可与聚合函数连用。在分组后对数据进行过滤,筛选出满足条件的组,可与聚合函数连用。
2022-07-28 22:01:52 89
原创 MySql事务
针对不同隔离级别,数据库⾥⾯会创建⼀个视图,访问的时候以视图的逻辑结果为准。在“可重复读”隔离级别下,这个视图是在事务启动时创建的,整个事务存在期间都⽤这个视图。在“读提交”隔离级别下,这个视图是在每个SQL语句开始执⾏的时候创建的。这⾥需要注意的是,“读未提交”隔离级别下直接返回记录上的最新值,没有视图概念;系统会判断当没有事务需要⽤到这些回滚⽇志的时候,回滚⽇志会被删除。即当系统⾥没有线程使用⽐这个回滚⽇志更早的read-view的时候。读未提交、读已提交、可重复读、串⾏化。脏读、不可重复读、幻读。..
2022-07-27 20:39:28 231
原创 三次握手、四次挥手的详细过程
在建立连接时由计算机生成的随机数作为其初始值,通过SYN包传给接收端主机,每发送一次数据,就「累加」一次该「数据字节数」的大小。1.客户端打算关闭连接,此时会发送一个TCP首部FIN标志位被置为1的报文,也即FIN报文,之后客户端进入FIN_WAIT_1状态。指下一次「期望」收到的数据的序列号,发送端收到这个确认应答以后可以认为在这个序号以前的数据都已经被正常接收。5.客户端收到服务端的FIN报文后,回一个ACK应答报文,之后进入TIME_WAIT状态。...............
2022-07-27 11:37:39 432
原创 sql查询语句的执行流程
优化器的作用主要是确定语句的执行方案,保证执行时最优的效率。比如在表⾥⾯有多个索引的时候,决定使⽤哪个索引;或者在⼀个语句有多表关联(join)的时候,决定各个表的连接顺序。若查询结果已经被缓存在内存之中,则直接返回结果。若内存中无缓存,则继续执行后续阶段。由于缓存失效非常频繁且查询缓存命中率低,故MySql8.0以后将查询缓存功能删除。MySQL需要对SQL语句做解析。这部分主要是进行词法分析和语法分析。连接器负责跟客户端建⽴连接、认证身份获取权限、维持和管理连接。执行器是负责执行语句。.........
2022-07-26 11:44:55 398
原创 观察者模式
又被称为发布-订阅(Publish/Subscribe)模式,属于行为型模式的一种,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态变化时,会通知所有的观察者对象,使他们能够自动更新自己。观察者模式主要就是两部分主题(Subject)和观察者(Observer)。观察者模式主要解决一个对象状态改变给其他对象通知的问题,而且要考虑到易用和低耦合,保证高度的协作。Subject。...
2022-07-18 11:14:22 129
原创 TIME_WAIT和CLOSE_WAIT区别
是在四次挥手中主动进行关闭连接的一方在接收到对方传达的带有FIN标志的数据包并且发送带有ACK标志的数据包后进入的状态,也就是第三、四次挥手后,主动关闭方的状态。由于要等待本次连接中所有传递的信息接收完毕,不能干扰到之后的连接,所以等待时间会比较长,一般是四分钟左右。因此,为了尽量避免TIME_WAIT,服务端一般不会主动关闭连接。CLOSE_WAIT是被动关闭连接方接收到主动方的带有FIN标志的数据包且发送带有ACK标志的数据包后进入的状态,也就是第一、二次挥手之后被动关闭方的状态。而若执行close操作
2022-06-29 16:18:47 2071
原创 三个并发线程顺序打印1-100
主要利用了synchronized对象锁,wait()以及notifyAll()方法。结果展示:结果较长,只展示开头和结尾部分。……
2022-06-27 20:19:34 326
原创 synchronized和lock的区别
1.synchronized可以给方法和代码块上锁,lock只能用于代码块2.synchronized不需要手动获取锁和释放锁,发生异常会自动释放锁,不会造成死锁;而lock需要自己加锁和释放锁,可能造成死锁3.通过lock可以知道是否成功获取到锁,而synchronized无法确定是否成功获取到锁...
2022-06-18 22:24:00 37
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人