自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 四种内部类重要知识点介绍

四种内部类重要知识点介绍。

2023-08-20 18:08:08 106

原创 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

原创 Java中接口和抽象类的区别

相同点:不同点:

2022-10-28 15:48:09 117

原创 数组中第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常见注解

在类或者方法上加上特定的注解,完成特定功能的开发。其主要作用是替换XML这种配置形式,简化配置。

2022-10-18 16:23:22 307

原创 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基础_8_强软弱虚引用

Java中有四类引用:强引用,软引用,弱引用,虚引用,强度依次减弱。

2022-09-04 22:01:13 100

原创 JVM基础_7_垃圾回收

垃圾是指在运行程序中没有任何指针指向的对象,该对象不会再被程序利用,但是又占据着内存空间直至程序结束。

2022-08-29 22:28:00 59

原创 JVM基础_6_StringTable

此外,当通过字面量的方式给一个字符串赋值,此时的字符串声明在字符串常量池中。

2022-08-28 22:35:26 134

原创 JVM基础_5_执行引擎

将字节码指令解释/编译成对应平台上的本地机器指令。

2022-08-26 14:43:31 188

原创 JVM基础_4_对象

栈中的引用变量指向java堆中句柄池中对应的句柄,每个句柄存储指向对象实例数据的指针(指向堆)和指向对象类型数据的指针(指向方法区)它是对象真正存储的有效信息,包括程序代码中定义的各种类型的字段(包括从父类继承下来的和本身所拥有的字段)栈中的引用变量指向java堆,堆中存放的是对象类型的指针(指向方法区)和对象实例的数据。主要是分为两种:句柄访问和直接指针(hotspot采用)包括运行时元数据以及类型指针两部分。

2022-08-24 22:36:15 96

原创 JVM基础_3_运行时数据区

其中堆和元数据区(方法区)是多线程共享的,程序计数器、本地方法栈以及虚拟机栈是线程私有的。

2022-08-13 22:43:21 238

原创 JVM基础_2_类加载

自定义String类,但是在加载自定义String类的时候会优先用启动类加载器进行加载,启动类加载器会优先加载jdk自带文件中的String类,而不是用户自定义的String类。JVM对class文件采用的是按需加载的方式,也就是说等到需要使用该类的时候才会对它的class文件加载到内存生成class对象。用户可以通过继承java.lang.ClassLoader类的方式,实现自己的类加载器,以满足自己的需求。Java程序对类的使用方式分为:主动使用和被动使用。将常量池内的符号引用转换为直接引用的过程。..

2022-08-13 10:49:56 314

原创 JVM基础_1

虚拟机分为系统虚拟机和程序虚拟机。无论是哪一种虚拟机,在其上面运行的软件都限制于虚拟机提供的资源。

2022-08-12 22:39:07 279

原创 Spring容器

Spring主要提供了两种类型的容器:BeanFactory和ApplicationContext。

2022-08-10 21:54:09 678

原创 HashMap中put的过程(Java)

HashMap中put的过程(Java)

2022-08-05 22:31:04 228

原创 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

原创 设计模式简介

大致按照模式的应用目标分类,设计模式可以分为创建型模式、结构型模式和行为型模式。

2022-08-01 22:28:47 79

原创 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更新语句的执行流程

与执行查询语句不同的是,更新流程中有两个重要的日志模块redolog(重做日志)和binlog(归档日志)。

2022-07-26 20:05:53 458 2

原创 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

原创 String类的常用方法

String类的常用方法

2022-06-30 22:26:42 38

原创 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

原创 Java中ArrayList和Array的区别

Array和ArrayList的区别

2022-06-15 22:21:04 97

原创 仿牛客项目中各个实体类中成员变量的意义

整理了前五章中实体类的成员变量的对应信息

2022-06-14 17:20:43 136

原创 Java中的引用类型

Java中四种引用类型

2022-06-12 11:12:47 70

原创 Object类中的方法

Object类中包括了十一种方法:

2022-06-09 10:48:44 480

原创 数据库三大范式特点

数据库三大范式的特点

2022-06-07 22:25:53 457

空空如也

空空如也

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

TA关注的人

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