自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 联合索引介绍

联合索引的底层存储结构例如我们创建了一个联合索引(name,age,position),那么在B+树中,排序的规则是首先根据name字段来排序,如果name相同,再根据age来排序,都一样之后再根据position排序。想要走联合索引需要符合最左匹配原则,不然无法走索引。上面这张表,select * from user where name = xxx,age = xxx 可以走索引。但是select * from user where age = xxx,position=

2022-03-31 02:30:29 1518

原创 URL编码

URL编码指的是对网址上的不安全的字符,例如中文,进行编码,编码后的中文方便在网络上传输。  URL编码是一种用于将URL中的非ASCII字符的特殊字符转换为可以为Web浏览器和服务器普遍接受的、有明确的表示形式的格式,因为URL只能通过使用ASCII字符集(十六进制)将特殊字符在Web浏览器和服务器上显示。如果URL包含ASCII集之外的字符,则必须转换为ASCII字符才可显示。  在URL编码中,非ASCII字符将会被替换为“%”,后跟十六进制数字的格式。  例如:空格符号是最常见的

2022-03-18 22:20:57 7924

原创 Redis 基础知识

什么是Redis:Redis是一个数据库,不过他是C语言开发的。不同于其他的数据库,他是一个基于内存的数据库,数据直接存储在内存中,所以他的读写速度非常快,(不需要从磁盘中IO)。但是由于内存的存储空间的限制,所以redis主要广泛用于缓存方向。另外,Redis 除了做缓存之外,也经常用来做分布式锁,甚至是消息队列。缓存数据的处理过程:1. 首先查看缓存中是否有,有得话直接返回。2.缓存中没有,在数据库中查找。3.数据库中没有,直接返回空。4.数据库中有,更新到缓存中,然后返回数据。为什么使

2022-03-01 02:27:40 646

原创 MYSQL的日志

在MySQL中有三个比较重要的日志:1. bin log(二进制日志) 2. redo log(重做日志) 3. undo log(回滚日志)。Redo log(重做日志)Redo log是InnoDB数据库引擎独有的一种日志,他可以让数据库拥有故障崩溃之后的恢复能力。mysql挂了或者宕机之后,innodb依赖redo log恢复数据,保证了数据的持久性。...

2022-02-28 00:22:06 1331

原创 MVCC多版本并发控制

在并发访问同一条数据的时候,可能会造成数据的丢失情况。例如:事务A和事务B查询同一个账户,A查看余额为1000,B也查看余额为1000.A存了100进去,提交事务之后余额为1100.而事务B取出100,提交事务之后余额变成900.然而实际上存100,再取出100,总的额度应该还是1000的。基于锁解决并发问题:使用锁的机制,在事务里修改数据的时候加锁,同一时间只有一个实务可以修改当前的数据,,别的事务想要修改的话必须要等当前的事务释放锁。MVCC(多版本并发控制):MVC

2022-02-25 20:06:27 370

原创 DataBase (2)

连接查询(join):join可以将多个表的字段连接起来,可以指定特定的连接条件。inner join(内连接):默认的join,只有数据存在的时候才会发生连接,结果不能出现空行。outer join(外连接):如果数据不存在,也会出现在结果集中。left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录,如果右表中的没有对应数据,按null补充。right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录,如果左表中的没有对应数据,按

2022-02-25 00:06:42 121

原创 DataBase (1)

数据库三大范式:什么是范式:简言之就是,数据库设计对数据的存储性能,还有开发人员对数据的操作都有莫大的关系。所以建立科学的,规范的的数据库是需要满足一些规范的来优化数据数据存储方式。在关系型数据库中这些规范就可以称为范式。1.第一范式:数据表中的每一列数据(字段)都是最小的单位,不可再分。满足第一范式事最基本的。2. 第二范式:一行数据中,所有的非主键数据都需要与主键相关,简单来说就是一行数据只记录一件事情。消除部分依赖。例子:酒店订单表格:订单编号(主键),房间号,联系人,

2022-02-24 01:12:03 105

原创 J.U.C 学习

AQS:AQS 是一个用来构建锁和同步器的框架,使用 AQS 能简单且高效地构造出应用广泛的大量的同步器,比如我们提到的ReentrantLock,Semaphore,其他的诸如ReentrantReadWriteLock,SynchronousQueue,FutureTask等等皆是基于 AQS 的。当然,我们自己也能利用 AQS 非常轻松容易地构造出符合我们自己需求的同步器。AQS 核心思想是,如果被请求的共享资源空闲,则将当前请求资源的线程设置为有效的工作线程,并且将共享资源设置为锁...

2022-02-21 15:10:55 58

原创 (JMM) Java 内存模型

什么是JMM:JMM定义了一套规范,描述了java程序中的各种变量(线程共享变量)的访问规则,以及如何在JVM中将变量存储到内存中或者如何从内存中读取变量到工作线程的细节。 JMM内存模型保证了对于共享数据读写的可见性,原子性和有序性。主内存和工作内存:Java内存模型规定了所有的变量都存储在主内存中。每条线程还有自己的工作内存,线程的工作内存中保存了被该线程使用到的变量的主内存副本拷贝,线程对变量的所有操作(读取、赋值等)都必须在工作内存进行,而不能直接读写主内存中的变量。不同的线程之间也无法直

2022-02-17 19:44:16 203

原创 多线程学习(2)

线程的生命周期:一共有五种状态,分别是新建,就绪,运行,阻塞和死亡。新建状态:当程序new了一个thread之后,那么这个线程就属于新建状态,此时JVM会给它分配内存,并初始化。就绪状态:当线程调用了start方法之后,该线程就处于就绪状态。java虚拟机会给他创建方法调用栈和程序计数器,等待调度运行。运行状态:如果处于就绪状态的线程获得了cpu的时间片,那么就进入了运行状态,开始执行run方法。阻塞状态:阻塞状态是指线程因为某些原因放弃了cpu的使用权,暂时停止了运行。知道重新进入就绪

2022-02-17 17:58:15 79

原创 多线程并发学习

JAVA 线程实现/创建方式1. 继承Thread类。public class MyThread extends Thread { public void run() { System.out.println("MyThread.run()"); } } MyThread myThread1 = new MyThread(); myThread1.start();2. 实现runnable接口。当你想要使用的类已经继承了别的类,那么就无法使

2022-02-16 13:48:21 166

原创 集合学习1

Java集合类存在于 Java.util 包下,主要有三种类型的集合: set,list,map。如下图所示,集合类有三个主要的接口。1. Collection:collection是集合set,list,queue的最基本的接口。2. Iterator:迭代器接口,可以通过迭代器遍历集合中的数据。3. Map:map是一种基于映射关系的集合(key-value)。List:List的我们最常用的集合,它是一个有序的集合。List一共有三个实现类: ArrayList,Linke

2022-02-12 02:37:59 206

原创 JAVA类加载器

启动类加载器(Bootstrap ClassLoader):由C/C++实现,负责加载<JAVA_HOME>\jre\lib目录下特定名称的jar包到虚拟机内存中。在JVM启动时,通过Bootstrap ClassLoader加载rt.jar,并初始化sun.misc.Launcher从而创建Extension ClassLoader和Application ClassLoader的实例.扩展类加载器(Extension Classloader):只有一个实例,由sun.misc

2022-02-10 21:25:45 185

原创 JVM 类的加载机制

1. 什么是JVM的类加载?虚拟机将class文件加载到内存,并对数据校验、转换解析和初始化,最终形成可以被虚拟机直接使用的java类型。类的加载一般分为五个阶段:加载,校验,准备,解析,初始化。而校验,准备,解析被统称为连接阶段。加载:通过一个类的全限定名来获取定义此类的二进制字节流 将获取到的二进制字节流转化成一种数据结构并放进方法区 在内存中生成一个代表此类的java.lang.Class对象,作为访问方法区中各种数据的接口简单来说:在加载阶段,JVM通过类的名称来找到需

2022-02-10 18:18:14 65

原创 GC 垃圾收集器

新生代的垃圾收集器:1. Serial 垃圾收集器最简单的GC收集器,单线程收集器,主要使用的是复制算法。当进行垃圾收集的时候,需要暂停其他的所有工作线程(stop the world)直到垃圾收集结束为止。Serial 垃圾收集器虽然在收集垃圾过程中需要暂停所有其他的工作线程,但是它简单高效,对于限 定单个 CPU 环境来说,没有线程交互的开销,可以获得最高的单线程垃圾收集效率,因此 Serial 垃圾收集器依然是 java 虚拟机运行在 Client 模式下默认的新生代垃圾收集器。...

2022-02-05 23:52:28 84

原创 JVM 学习(3)

4种引用类型:1. 强引用 在 Java 中最常见的就是强引用,把一个对象赋给一个引用变量,这个引用变量就是一个强引 用。当一个对象被强引用变量引用时,它处于可达状态,它是不可能被垃圾回收机制回收的,即 使该对象以后永远都不会被用到 JVM 也不会回收。因此强引用是造成 Java 内存泄漏的主要原因之 一。.2. 软引用 软引用需要用 Soft Reference 类来实现,对于只有软引用的对象来说,当系统内存足够时它 不会被回收,当系统内存空间不足时它会被回收。软引用通常用在对内存敏感的程序中。

2022-01-28 03:17:27 62

原创 JVM 学习(2)- 垃圾回收与算法

如何确定什么是垃圾,什么是可以回收的?在堆中存放着对象实例,GC回收器在对堆进行回收前,需要确定哪些对象需要被回收,即确定哪些对象还存活,哪些对象已经死去(即不可能在被任何途径使用的对象)1. 引用计数法:给每个对象设定一个计数器,当一个对象如果有一次引用就加1,引用失效就减去一,当一个对象的计数为0的时候就代表这个对象可以被回收。优点:简单方便缺点: 存在着循环引用问题,例如 对象A 只引用着对象B,对象B只引用着对象A,对象A和对象B的计数都不为零,无法进行垃圾回收。(之后再把对象A和B

2022-01-28 02:56:38 58

原创 JVM 学习(1)

1. java 的源代码首先通过编译器产生class字节码文件。2. 接着JVM就可以解释执行二进制的字节码文件了。3. 所以说java能够跨平台运行,因为java是运行在JVM上的,而不是直接运行在CPU上。4. 各个操作系统有着相对应的JVM,所以JVM可以把相同的class文件翻译成各个操作系统能识别的机器码,运行在计算机上。所以说java程序一次编写就可以运行在各个平台上。(跨平台性)JVM 内存区域主要分为两个部分 : 线程独享的区域和线程共享的区域线程独享...

2022-01-23 04:20:52 70

空空如也

空空如也

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

TA关注的人

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