自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

三分自留地

靡不有初鲜克有终

  • 博客(54)
  • 收藏
  • 关注

原创 一条更新语句在MySQL上是如何执行的

本篇文章主要是以一条SQL查询语句和一条SQL更新语句是如何执行的带出来整体的MySQL架构下方的图片是整体一个情况的概括,像查询缓存在MySQL8.0后已经弃用了,因为确实用处不大,而且像undo、redo和binlog在查询语句中是不会写入的。查询语句建立连接mysql> select * from T where ID=10;以如上的一条SQL语句为例,MySQL是采用...

2021-03-03 09:26:00 118

原创 MySQL学习记录之行格式与页格式

之前的文章https://blog.csdn.net/e5yrt2/article/details/112727473,已经提过了在BufferPool中,是按照页的形式来存放的。但是数据在表中是一行行的存储的,那么这些数据又是怎样的格式?行格式记录在磁盘上的存放方式被称为行格式,InnoDB存储引擎中有4种不同类型的行格式,Compact、Redundant、Dynamic和Compressed。指定行格式CREATE TABLE 表名 (列的信息) ROW_FORMAT=行格式名称 .

2021-01-23 15:20:19 328 2

原创 MySQL学习记录之BufferPool

上图是MySQL的整体架构和InnoDB存储引擎的架构,本篇文章来谈一下Buffer Pool(缓冲池)为什么需要BufferPool?由于对数据库CRUD是非常频繁的,如果直接在磁盘上更新操作数据的话,对磁盘进行随机读写,消耗是相当大的。所以需要在内存中开辟一个池子用来对数据进行暂时的读写操作,也就是Buffer Pool。当在内存中操作完毕后,需要在合适的机会将内存中的数据刷到磁盘上去,否则就是导致内存与磁盘的数据不一致,也就是脏数据。BufferPool整体结构由上图的左方可知,BP内的结..

2021-01-17 00:51:18 564

原创 一条SQL语句在MySQL中是如何执行的

本篇文章主要是以一条SQL查询语句和一条SQL更新语句是如何执行的带出来整体的MySQL架构下方的图片是整体一个情况的概括,像查询缓存在MySQL8.0后已经弃用了,因为确实用处不大,而且像undo、redo和binlog在查询语句中是不会写入的。查询语句建立连接mysql> select * from T where ID=10;以如上的一条SQL语句为例,MySQL是采用可拔插是存储引擎,常见的存储引擎有MyISAM、InnoDB、Memory等。咱们之前写Java代码的时候,一

2021-01-14 16:52:50 332

原创 MySQL系列文章(一)整体架构

本系列文章是我对MySQL的一个整理和复习,可能与之前的文章有冲突,但不重要。欢迎访问我的博客,只是懒得更新,东西比较少。https://www.xpang0.com/1、体系架构MySQL整体的体系架构图有很多,这个图就很形象的展示了大致的结构。MySQL Server自顶向下分为网络连接层、服务层、存储引擎层和系统文件层。1.1、网络连接层主要提供与MySQL服务器建立连接的支持。1.2、服务层连接池:负责存储和管理客户端与数据库的连接,一个线程负责管理一个连接。系统管理和.

2020-11-29 23:28:42 149

原创 Java并发学习记录—手写一个死锁的Demo

真实的面试场景下,当面试官问到死锁相关的知识点的时候,往往会让你手写一个死锁的案例,一般是考察面试者手写代码的功力。死锁,指两个或多个线程之间,由于互相持有对方需要的锁,而永久处于阻塞的状态。public class DeadLock implements Runnable{ int flag=1; static Object o1=new Object(); static Object o2=new Object(); @Override p.

2020-05-26 15:08:13 213

原创 JVM学习记录—详解G1垃圾回收器

本文主要参考狸猫技术窝文章之前的文章https://blog.csdn.net/e5yrt2/article/details/105540664,大致介绍了JVM相关的垃圾回收器,有CMS、PreNew和G1垃圾回收器。而G1(GarbageFirst)是性能最好,同样也是jdk9默认的垃圾回收器。G1回收器模型那么有多少Region?每个Region又有多大?因为新生代和老年代都会被Region管理,默认来说,Region的大小为分配的堆内存的大小除以2048。比如分配的堆内存.

2020-05-18 11:10:43 355

原创 JVM学习记录—JVM参数优化案例

本案例主要参考狸猫技术窝“从 0 开始带你成为JVM实战高手”系列文章。以百万级别的交易系统为例上图为一个交易系统的核心流程概况目前系统最大的压力是创建上百条订单时候系统的压力,具体可以考虑下面几个问题需要多少台机器 机器内存多少 如何给JVM分配内存 JVM中年轻代、老年代等如何分配预估系统压力假设每天100万个支付订单,那么一般用户交易行为都会发生在每天的高峰期几个小时,用100万平均分配到几个小时里,那么大概是每秒100笔订单左右,假设部署了三台机器,每台机器每秒的.

2020-05-15 13:53:33 164

原创 消息队列之RocketMQ学习记录(一)

目录什么是消息队列为什么要用消息队列解耦异步削峰为什么选择RocketMQRocketMQ架构原理什么是消息队列Message Queue就是消息队列,定义是在消息的传输过程中保存消息的容器。为什么要用消息队列解耦当一个服务与其他多个服务相互调用的时候,如果采取耦合在一起的方式,那么一旦提供服务的一方需要改动代码或其他,那么其他服务都会受到影响。...

2020-04-23 22:55:33 222

原创 Redis学习记录—整体知识架构(思维导图)

目前这个思维导图只是基本的redis体系结构的整理,不太完善。像redis集群的知识就没有,因为这些我认为需要单独开一篇博客具体讲,这个导图也仅仅是抛砖引玉。...

2020-04-21 22:06:54 562

原创 Spring AOP动态代理之jdk和cglib

Spring的两大特性就是IOC和AOP(Aspect Orient Programming),AOP一般称为面向切面编程,主要用于事务、日志等方面。AOP代理分为静态代理和动态代理,静态代理一般是AspectJAOP(编译时),动态代理则为Spring AOP(运行时)中的cglib和jdk两种。jdk动态代理jdk动态代理的核心是InvocationHandler接口和Proxy...

2020-04-20 17:02:06 181

原创 jdk1.8源码学习之ConcurrentHashMap

目录jdk1.7中的实现jdk1.8中的实现put方法https://blog.csdn.net/e5yrt2/article/details/105249839之前这篇文章介绍了hashmap的源码,但是hashmap是线程不安全的,jdk同样提供了java.util.concurrent包下的ConcurrentHashMap来解决这个问题jdk1.7中的实现...

2020-04-18 19:30:05 184 1

原创 Java多线程实现生产者消费者设计模式

这个题目是多线程很常见的题目,主要就是知道wait()和notify()方法的作用import java.util.Date;import java.util.LinkedList;/** * 用wait/notify实现生产者消费者 * @author : vi3nty * @date : 21:08 2020/4/17 */public class ProducerC...

2020-04-17 22:01:52 277

原创 MySQL学习记录—什么是Explain(表优化)

什么是Explain上图是一条查询语句在MySQL中的执行流程,而与Explain关联最大的就是优化器,优化器简单说就是MySQL基于成本和规则为查询语句生成一个执行计划,比如多表连接查询的顺序等等。而这片文章主要就来说下Explain,Explain就是用来帮我们查看MySQL给我们生成的是怎样的执行计划,从而我们可以有针对性的优化SQL。各列的含义如上图就是对一条SQL...

2020-04-16 18:21:51 186

原创 JVM学习记录—常见垃圾回收器

上文https://blog.csdn.net/e5yrt2/article/details/105515473介绍了常见的垃圾回收算法,这篇文章就来说下常见的垃圾回收器HotSpot虚拟机提供了7种垃圾收集器,其中适用于新生代的三种,老年代的三种,还有一种新生代老年代都适用新生代垃圾收集器:Serial收集器,ParNew收集器,Parallel Scavenge收集器老年代垃圾...

2020-04-15 22:30:57 165

原创 JVM学习记录—常见垃圾回收(GC)算法

JVM内存分代模型由上篇JVM内存模型中了解到,系统中创建的对象都是分配在堆上。堆的大小是固定的,那么如何利用好堆就是极为重要的。所以JVM分代模型为:年轻代、老年代和永久代(方法区)。public class Method1{ public static void main(String[] args) { Hello hello = new Hello();...

2020-04-14 23:19:28 277

原创 Java并发学习记录—基础知识脉络(思维导图)

本篇主要是建立一个对java并发基础知识的整个脉络结构,用来更好得理清并发的关系,不涉及各种工具类的使用和原理讲解等。

2020-04-12 22:37:34 424 1

原创 JVM学习记录—内存模型

本文是基于Java8的HotSpot虚拟机分析的什么是Java虚拟机众所周知,java主要特点就是平台无关性。那么如何实现平台无关性呢,答案就是用虚拟机将不同操作系统的差异隔离。Java 之所以要在虚拟机中运行,是因为它提供了可移植性。Java 代码被编译为 Java 字节码,可以在不同平台上的 Java 虚拟机实现上运行。JVM内存模型JVM(Java Virtual Ma...

2020-04-10 15:00:41 218

原创 MySQL学习记录—什么是锁

目录悲观锁和乐观锁悲观锁乐观锁MySQL中的锁按锁的粒度分类按锁是否可写分类悲观锁和乐观锁悲观锁悲观锁由名字可知,就是把各种东西看的很消极悲观。比如在获取数据处理的时候,担心自己处理的过程中有人会修改这条数据,那么就把数据加锁(表锁、行锁等等)。那么这时其他线程操作数据就会处于阻塞状态,直到该线程操作完毕。乐观锁乐观锁就是在对数据库操作过程中,认为...

2020-04-09 18:13:30 126

原创 MySQL学习记录—事务隔离

目录事务并发问题脏读不可重复读幻读解决方案MVCC版本链和readview上篇文章介绍了什么是事务,这篇就继续聊聊事务的另一方面——隔离级别上文提到了事务的四个特性,具体文章中会提到原子性(Atomicity) 隔离性(Isolation) 一致性(Consistency) 持久性(Durability)创建一个表,表的结构如下CREAT...

2020-04-07 23:09:36 124

原创 MySQL学习记录—什么是事务

目录事务定义事务例子事务规则原子性(Atomicity)隔离性(Isolation)一致性(Consistency)持久性(Durability)事务定义网上对事务比较术语化的解释是:事务是数据库操作的最小工作单元,是作为单个逻辑工作单元执行的一系列操作;这些操作作为一个整体一起向系统提交,要么都执行、要么都不执行;事务是一组不可再分割的操作集合。事务例子...

2020-04-04 15:06:19 143

原创 jdk1.8源码学习之HashMap

分析ConcurrentHashMap之前,首先要对Map和HashMap逐个分析,才能更好得理解ConcurrentHashMap。所以这片文章主要来分析HashMap。1、Map简介转存失败重新上传取消如图Map是一个接口,除此之外常用的集合类接口还有Collection转存失败重新上传取消2、HashMapjdk1.7与1.8关于hashmap做了些许改动,...

2020-04-02 11:24:19 162

原创 MySQL学习记录—常见索引

目录常见索引模型有序数组哈希表二叉搜索树B+树索引分类主键类型划分:主键索引和非主键索引唯一约束划分:唯一索引和普通索引索引联合划分:联合索引和单列索引最左前缀原则常见索引模型有序数组有序数据就很好理解了,底层就是一个数组。但缺点就是更新数据时候时间复杂度很高,最差的情况就是在数组头部插入,这样后边的所有数据都要挪动。优点就是查询非常快。哈希...

2020-03-31 23:17:08 82

原创 JS跨域问题及其解决办法

什么是跨域?跨域是出于浏览器的同源策略限制。同源策略(Sameoriginpolicy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。同源策略会阻止一个域的javascript脚本和另外一个域的内容进行交互。所谓同源(即指在同一个域)就是两个页面具有相同的...

2020-03-04 21:39:00 108

原创 MyBatis学习笔记(一)创建第一个MyBatis项目

一、新建Maven项目http://www.mybatis.org/mybatis-3/zh/index.html该链接为MyBatis官方地址创建MyBatis项目主要有两种办法,一种是导入jar包,可在github上下载https://github.com/mybatis/mybatis-3/releases。另一种方法就是现在比较常用的,也是官方推荐的maven导入。...

2019-03-12 21:39:00 117

原创 Servlet+JSP+JDBC设计实现图书系统——管理功能实现

Servlet+JSP+JDBC设计实现图书系统——管理功能实现 写在前面,之前由于种种原因博客好久没有更新。最近打算重拾JavaWeb,所以从头开始,先用servlet+jdbc+bootstrap最基础的代码实现一个图书系统。考虑有管理员端+用户端,项目完成后会上传至github,后期会升级ssh/ssm等,毕竟是温故学习,一点一点来,项目会...

2018-03-19 15:13:00 4186

原创 JAVA数据结构--优先队列(堆实现)

JAVA数据结构--优先队列(堆实现) 优先队列(堆)的定义堆(英语:Heap)是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象。在队列中,调度程序反复提取队列中第一个作业并运行,因为实际情况中某些时间较短的任务将等待很长时间才能结束,或者某些不短小,但具有重要性的作业,同样应当具有优先权。堆即为解决此类问题设计的...

2017-12-07 21:49:00 209

原创 JAVA数据结构--哈希表的实现(分离链接法)

JAVA数据结构--哈希表的实现(分离链接法) 哈希表(散列)的定义散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。哈希表的特点是采用以常数平均时间执行插入、删...

2017-11-29 14:12:00 445

原创 JAVA数据结构--AVL树的实现

JAVA数据结构--AVL树的实现 AVL树的定义在计算机科学中,AVL树是最先发明的自平衡二叉查找树。在AVL树中任何节点的两个子树的高度最大差别为1,所以它也被称为高度平衡树。查找、插入和删除在平均和最坏情况下的时间复杂度都是。增加和删除可能需要通过一次或多次树旋转来重新平衡这个树。AVL树得名于它的发明者G. M. Adelson-Vel...

2017-11-27 21:21:00 97

原创 JAVA数据结构--二叉查找树

JAVA数据结构--二叉查找树 二叉查找树定义二叉查找树(英语:Binary Search Tree),也称二叉搜索树、有序二叉树(英语:ordered binary tree),排序二叉树(英语:sorted binary tree),是指一棵空树或者具有下列性质的二叉树:若任意节点的左子树不空,则左子树上所有节点的值均小于它的根节点的值...

2017-11-26 22:56:00 114

原创 JAVA普通内部类的用法

JAVA普通内部类的用法   内部类顾名思义就是定义在一个类的内部  内部类又有普通内部类、方法和域内的内部类、匿名内部类、嵌套内部类普通内部类的基础用法 1 class MyClass{ 2 class InnerClass1{ 3 public InnerClass1() { 4 S...

2017-11-23 15:29:00 193

原创 关于JAVA泛型中的通配符类型

关于JAVA泛型中的通配符类型   之前对JAVA一知半解时就拿起weiss的数据结构开始看,大部分数据结构实现都是采取通配符的思想,好处不言而喻。    首先建立两个类employee和manager,继承关系如下。其次Pair类是一个简单的泛型类。          通配符的作用就是在泛型设计程序中允许类型参数变化      ...

2017-11-02 20:27:00 334

原创 JAVA泛型方法与类型限定

JAVA泛型方法与类型限定  泛型方法可以定义在普通类中,也可以定义在泛型类中1 class ArrayAlg{2 public static <T> T getMiddle(T...a){3 return a[a.length/2];4 }5 }  注意:类型变量放在修饰符后( ...

2017-10-30 15:57:00 635

原创 JAVA迭代器Iterator

JAVA迭代器Iterator   JAVA容器类类库的用途为“保存对象”,一种是Collection,一种就是Map。  但不论是哪种容器类,都必须有某种方式可以插入元素,并将它们取回!例如List中可以使用add()插入元素,get()用来取出元素。  但是容器类必须指定确切的类型,比如ArrayList<Interger>,但...

2017-10-18 14:09:00 77

原创 JAVA数据结构--希尔排序

JAVA数据结构--希尔排序 希尔排序通过将比较的全部元素分为几个区域来提升插入排序的性能。这样可以让一个元素可以一次性地朝最终位置前进一大步。然后算法再取越来越小的步长进行排序,算法的最后一步就是普通的插入排序,但是到了这步,需排序的数据几乎是已排好的了(此时插入排序较快)。假设有一个很小的数据在一个已按升序排好序的数组的末端。如果用复杂度为...

2017-10-16 22:23:00 214

原创 匿名内部类

匿名内部类 普通匿名内部类 1 /* 2 *普通匿名内部类 3 */ 4 public class Parcel7{ 5     public Contents contents(){ 6         return new Contents(){ 7             private int i=11; 8   ...

2017-09-27 10:27:00 53

原创 Android与MVC设计模式

Android与MVC设计模式 写在前面,之前做过一段时间移动开发,后来因为工作原因搁浅了,最新重新拿起Android权威编程指南学习,顺道做个学习笔记。首先呢,我想说无论是计算机科班出身还是培训班出身,都听说过高内聚低耦合以及MVC这两个词。MVC模式就是为了解决软件工程过程中内聚与耦合的关系。(维基中查看内聚 耦合的定义)MVC模式(...

2017-09-25 21:05:00 325

原创 JAVA数据结构--LinkedList双向链表

JAVA数据结构--LinkedList双向链表 链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 相比于线性表顺序结构,操作复杂。...

2017-09-18 16:04:00 199

原创 自动装箱和拆箱

自动装箱和拆箱 自动装箱拆箱要点:自动装箱时编译器调用valueOf将原始类型值转换成对象,同时自动拆箱时,编译器通过调用类似intValue(),doubleValue()这类的方法将对象转换成原始类型值。自动装箱是将boolean值转换成Boolean对象,byte值转换成Byte对象,char转换成Character对象,float值转...

2017-09-11 16:49:00 83

原创 JAVA数据结构--ArrayList动态数组

JAVA数据结构--ArrayList动态数组 在计算机科学中,动态数组,可扩展数组,可调整数组,动态表,可变数组或数组列表是一种随机存取可变大小列表数据结构,允许添加或删除元素。它提供许多现代主流编程语言的标准库。动态数组克服了静态数组的限制,静态数组具有需要在分配时指定的固定容量。动态数组与动态分配的数组不同,数组是数组分配时大小固定的数组...

2017-09-11 11:04:00 220

空空如也

空空如也

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

TA关注的人

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