自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 MySQL之InnoDB锁机制

InnoDB存储引擎中的锁锁的类型InnoDB存储引擎实现了如下两种标准的行级锁:共享锁(S Lock):允许事务读一行数据。排他锁(X Lock):允许事务删除或更新一行数据。如果一个事务 T1 已经获得了行 r 的共享锁,那么另外的事务 T2 可以立即获得行 r 的共享锁,因为读取并没有改变行 r 的数据,称这种情况为锁兼容。但若有其他的事务 T3 想获得行 r 的排他锁,则其必须等待事务T1、T2释放行 r 上的共享锁这种情况称为锁不兼容。即共享锁不互斥获取,排他锁互斥获取。共享锁与排

2020-12-30 09:39:56 2732 6

原创 MySQL之InnoDB存储引擎深入理解

参考自《MySQL技术内幕InnoDB存储引擎》继前文对MySQL的存储引擎做一个全面的介绍之后,现在我们针对主流的InnoDB存储引擎深入理解。一、InnoDB体系架构InnoDB是事务安全的 MySQL存储引擎。支持ACID事务的储存引擎,特点是行锁设计、支持MVCC、支持外键、提供一致性非锁定读,同时被设计用来最有效地利用以及使用内存和CPU。首先,在深入介绍InnoDB存储引擎之前,我们先来了解下InnoDB的体系架构:后台线程的主要作用是负责刷新内存池中的数据,保证缓冲池中的内存缓存

2020-12-28 16:06:35 281

原创 MySQL体系结构与存储引擎

目录一、性能化简介1.1 通过性能剖析进行优化参考自《高性能MySQL》对于服务器端的开发来说,服务器的性能不言而喻,这是直接影响用户体验的,那么针对服务器性能方面的问题,我们最常碰到的主要有三个请求:如何判断服务器性能到了最佳状态?某条语句为什么执行不够快?用户投诉的停顿、堆积、或者卡死的某些间歇性疑难故障如何解决?带着这三个问题,我们抓住测量服务器的时间花费在哪个阶段,这一关键点来开始学习服务器关于性能的知识。一、性能化简介首先要了解服务器性能,我们要知道性能的评判标准是什么?性

2020-12-28 10:37:23 277

转载 MySQL索引原理以及查询优化

目录一、介绍1.1 什么是索引?1.2 为什么要有索引呢?二、索引的原理2.1 索引原理2.2 磁盘IO与预读三、索引的数据结构3.1 b+树的查找过程3.2 b+树性质3.2.1 索引字段要尽量的小3.2.2 索引的最左匹配特性(即从左往右匹配)四、Mysql索引管理4.1 功能4.2 MySQL的索引分类4.3 索引的两大类型hash与btree4.4 创建/删除索引的语法五、测试索引5.1 准备5.2 在没有索引的前提下测试查询速度5.3 加上索引六、正确使用索引6.1 覆盖索引6.2 联合索引6.3

2020-12-26 15:33:56 136

原创 MySQL之高性能alter table操作

一、alter table 原理MySQL的alter table操作的性能对大表来说,是一个大问题,为什么呢?我们来看看alter table的底层原理,大多数情况下(有的时候未必会重建表),当我们执行一个alter table操作后,其底层会执行如下几个操作:用一个新的结构创建一个空表;从旧表中查出所有数据插入新表;然后删除旧表。当数据表特别大的时候,这样的操作严重影响了效率,因此,在实际开发中,我们应该避免这样的耗时操作,采用高效的操作。对于常见的场景,我们能使用的一般有两种方法:

2020-12-25 16:45:21 1750 2

原创 MySQL事务理解

本文参考自《高性能MySQL》知道数据库的人都应该清楚,事务是数据库高级特性的基础,如果你不了解事务的话,那基本可以确定你并不会数据库,好了,废话不多说了,直接切入主题吧!一、什么是事务首先,什么是事务呢?在数据库里,事务就是一组原子性的SQL查询,或者说一个独立的工作单元。简而言之就是一组执行特定功能的SQL语句,这些语句要么都执行成功,要么都执行失败,不能可能部分成功或者部分失败。这样一个过程就称做事务。二、事务的特性既然谈到事务,那就不可能避免地要谈及事务的特性;事务具有ACID的特性,那

2020-12-23 20:37:11 102

原创 JVM之类加载机制详解

目录一、类加载1.1 什么是类加载1.2 类加载的时机二、类加载的过程2.1 加载2.2 验证2.2.1 文件格式验证2.2.2 元数据验证2.2.3 字节码验证2.2.4 符号引用验证2.3 准备2.4 解析2.5 初始化2.5.1 \()方法参考自《深入理解Java虚拟机》Java虚拟机是如何加载并识别执行.class文件,以及该识别过程采用何种机制,如何执行的,这些都是Java虚拟机必须了解掌握的,今天就在此做个记录。一、类加载1.1 什么是类加载Java虚拟机把描述类的数据从Class文件

2020-12-22 14:17:23 251 4

原创 JVM垃圾收集器与内存分配深入剖析

目录I.分区内存回收思考一、对象存活判定1.1 引用计数算法1.2 可达性分析算法二、引用2.1 强引用2.2 软引用2.3 弱引用2.4 虚引用三、回收方法区本文参考自《深入理解Java虚拟机》垃圾收集器(Garbage Collection)也就是常说GC,这是JVM的一个核心。那么,我们为什么要去了解垃圾收集和内存分配呢?当需要排查各种内存溢出、内存泄漏问题时,当垃圾收集成为系统达到更高并发量的瓶颈时,我们就必须对这些“自动化”的技术实施必要的监控和调节。I.分区内存回收思考首先,我们考虑一个

2020-12-18 14:44:32 162

原创 JVM之运行时数据区

目录一、运行时数据区域1.1 程序计数器1.2 Java虚拟机栈1.3 本地方法栈1.4 Java堆1.5 方法区1.5.1 运行时常量池1.6 直接内存二、HotSpot虚拟机对象探秘2.1 对象的创建2.1.1 指针碰撞2.1.2 空闲列表2.1.3 多线程并发内存分配问题2.2 对象的内存布局2.2.1 对象头2.2.2 实例数据2.2.3 对齐填充2.3 对象的访问定位2.3.1 使用句柄2.3.2 直接指针本文参考自《深入理解Java虚拟机》一、运行时数据区域Java虚拟机在执行Java程序

2020-12-18 09:10:51 131

原创 并发编程之深入浅析Executor框架

目录一、Executor框架简介1.1 Executor框架的两级调度模型1.2 Executor框架的结构1.3 Executor框架二、ThreadPoolExecutor详解二级目录三级目录本文参考自《并发编程艺术》在Java中,使用线程来异步执行任务。Java线程的创建与销毁需要一定的开销,如果我们为每一个任务创建一个新线程来执行,这些线程的创建与销毁将消耗大量的计算资源。同时,为每一个任务创建一个新线程来执行,这种策略可能会使处于高负荷状态的应用最终崩溃。Java的线程既是工作单元,也是执行

2020-12-16 18:32:02 148

原创 Java多并发之线程池

目录一、为什么需要线程池二、线程池实现原理三、线程池的使用3.1 线程池的创建3.2 向线程池提交任务3.3 关闭线程池3.4 线程池的监控本文参考自《并发编程艺术》一、为什么需要线程池Java中的线程池是运用场景最多的并发框架,几乎所有需要异步或并发执行任务的程序都可以使用线程池。在开发过程中,合理地使用线程池能够带来3个好处。降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。提高线程的可管理性。线程是稀缺

2020-12-16 14:16:53 231

原创 Java多并发之并发容器和框架

目录一、ConcurrentHashMap的实现原理与使用1.1 为什么要使用ConcurrentHashMap1.2 ConcurrentHashMap的锁分段技术1.3 ConcurrentHashMap的结构1.4 ConcurrentHashMap的操作1.4.1 get操作1.4.2 put操作1.4.3 size操作二、ConcurrentLinkedQueue三、Fork/Join框架3.1 什么是Fork/Join框架3.2 工作窃取算法3.3 Fork/Join框架的设计3.4 使用For

2020-12-15 15:00:48 178 3

转载 Java线程安全和非线程安全集合

目录一、ArrayList和vector区别二、HashTable、HashMap、HashSet:1. HashMap:2. HashTable:3. HashSet:三、TreeSet、TreeMap:1. TreeSet:2. TreeMap:四、StringBuffer和StringBulider:java中线程安全和非线程安全的集合一、ArrayList和vector区别Vector和ArrayList间唯一的区别就是Vector每个方法都自带同步机制。例:比如我要往集合里面加一个元素,

2020-12-15 08:46:41 252

原创 Java多并发之锁机制

目录一、Lock接口1.1 什么是锁?1.2 Lock对比synchronized关键字及常用API1.3 Lock接口源码二、队列同步器2.1 什么是队列同步器2.2 队列同步器的接口与示例三、重入锁3.1 什么是重入锁3.2 实现重进入四、读写锁4.1 什么是读写锁4.2 读写锁的接口与示例4.3 锁降级五、Condition接口5.1 什么是Condition5.2 代码举例本文参考Java并发编程艺术锁机制是Java多并发的核心之一,凡是谈及多并发多线程问题,锁机制是在所难免的,本文将对Java

2020-12-14 19:52:03 425

原创 JVM之Java内存模型深入理解

目录一、Java内存模型的基础1.1 Java内存模型(JMM)的抽象结构1.2 源代码到指令序列的重排序二、重排序2.1 数据依赖性2.2 重排序对多线程的影响三、顺序一致性3.1 顺序一致性内存模型3.2 同步程序的顺序一致性效果三、volatile的内存语义3.1 volatile的特性3.2 volatile写-读的内存语义四、final域的内存语义4.1 final域的重排序规则4.2 写final域的重排序规则4.3 读final域的重排序规则4.4 注意五、happens-before规则六、

2020-12-11 14:22:25 130 1

原创 Java多线程之同步问题

Java多线程的重要性不言而喻,在多线程中有一个重要的问题就是共享资源的问题,synchronized关键字就是其中一个,这篇文章简要介绍下synchronized同步代码块的一些知识点。synchronized的作用多线程情况下互斥访问共享资源共享资源的修改及时可见有效解决重排序问题synchronized锁对象synchronized锁对象主要有如下三种:普通同步方法,锁的是当前的实例对象静态的同步方法,锁的是当前的Class对象同步代码块锁的是括号里面的对象下面以多线程抢票

2020-12-09 21:14:20 202 1

转载 JUC之Java多线程

Java多线程的重要性不言而喻,本篇文章在此做个小结!进程和线程的区别网上很多,在此就不多做介绍了!一、什么是多线程所谓多线程是指一个进程在执行过程中可以产生多个更小的程序单元,这些更小的单元称为线程(操作系统中调度的最小单位元,也叫轻量级进程),这些线程可以同时存在,同时运行,一个进程可能包含多个同时执行的线程。当然这种同时执行并非严格意义上的并行化执行。二、线程的生命周期及基本状态在介绍线程之前,先介绍一些线程的基础知识:Java多线程的五种基本状态新建状态(New):当线程对象对创建后

2020-12-07 21:33:01 71

转载 设计模式----------工厂模式(factory pattern)

工厂顾名思义就是创建产品,根据产品是具体产品还是具体工厂可分为简单工厂模式和工厂方法模式,根据工厂的抽象程度可分为工厂方法模式和抽象工厂模式。该模式用于封装和管理对象的创建,是一种创建型模式。本文从一个具体的例子逐步深入分析,来体会三种工厂模式的应用场景和利弊。1. 简单工厂模式该模式对对象创建管理方式最为简单,因为其仅仅简单的对不同类对象的创建进行了一层薄薄的封装。该模式通过向工厂传递类型来指定要创建的对象,其UML类图如下:下面我们使用手机生产来讲解该模式:Phone类:手机标准规范类(Abs

2020-12-07 09:14:29 89

转载 Java集合类底层数据结构

本文源自参考《Think in Java》,多篇博文以及阅读源码的总结前言Java的集合其实就是各种基本的数据结构(栈,队列,hash表等),基于业务需求进而演变出的Java特有的数据结构(因为不仅仅是基本数据结构)。现在,我们以数据结构的视角来看看Java的集合到底是什么样子。并分析他们的性能。一 JAVA集合体系JAVA的集合体系分为两类,Collection接口和Map接口主要分为三种:Set-------无插入顺序的不重复数据集接口(集合演变而来)List-------有插入顺序的数

2020-12-06 22:51:29 601

原创 Java比较器、迭代器、lambda表达式

目录一、比较器(1)Comparable接口(2)Comparator接口二、Iterato迭代器Iterator与Iterable三、lambda表达式(1)函数式接口(2)lambda表达式语法一、比较器需要为多个对象排序时必须设置排序规则,而排序规则就可以通过比较器进行设置,在Java中,提供了两种比较器,分别是Comparable(定义类时实现)接口和Comparator(主要用于在已有未实现比较类的基础上实现比较功能也就是定义类时没有实现Comparable接口)接口,接下来展开介绍:(1)

2020-12-06 16:19:38 596

转载 Java主要类集记录

Java类集是框架可以使程序在处理对象时更加标准化,类集接口是所有构造类集的基础,主要基于Collection接口和Map接口;接下来我们进行主要的接口实现类介绍。(网上很多该类的博客,但是关系图似乎不太正确,博主在剖析源码利用idea给处继承关系图,应该是比较正确的图,哈哈,基于不重复造轮子的思想,本文转自他人博客,仅记录笔记而已!)集合框架主要继承关系图Collection类该类主要方法绿色实线------接口的继承关系 | 绿色虚线------接口的实现关系 | 蓝色实线------类的继

2020-12-06 10:04:16 95

原创 Java之反射机制深入理解

反射机制是Java中的一个难点,反射机制也是各个框架的核心,个人认为正是反射机制的存在,才显得Java的OOP特性的强大,这篇博客中,笔者会基于自己的理解和阅读的书籍以及博客,做一个比较详细的介绍,剖析底层实现原理(仅供参考),如有存在错误的地方,欢迎指正。Java反射机制Java反射机制是在运行状态中,对任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法,这种动态获取信息以及动态调用对象的方法的功能称为Java语言的反射机制。反射机制主要提供的功能在运行时

2020-12-04 16:43:53 111

原创 设计模式-------单例模式简要浅析

单例设计模式特点单例(Singleton)模式的定义:指类的实例化对象只有一个,对外关闭实例化入口,只提供一个实例化对象获取入口。单例模式类的实例化对象只有一个并且由自己创建;减少内存开销和资源的过多占用;单例模式类对所有其他对象提供同一实例。饿汉式单例模式饿汉式单例模式,在编译期间就立即加载类的实例化对象,无论有没有使用,这个实例化对象已经创建了。public class Hungry { // 构造器私有化 private Hungry(){ } //

2020-12-03 16:29:18 99

原创 Java常用API记录

目录1.System类(1)exit(int status)方法(2)CurrentTimeMills()方法(3)getProperties()方法2.Runtime类3.日期操作类(1)日期操作类(2)日期格式化类4.正则表达式(1)正则表达式语法(2)正则表达式常用方法(String类的方法)1.System类System类中的所有成员都是静态的(1)exit(int status)方法传递一个非零参数,则可提前终止虚拟机的运行,若正常程序终止则传递零作为参数。(2)CurrentTimeM

2020-12-02 09:52:58 135

原创 java中的enum枚举类型理解

枚举类型格式定义定义格式为: enum 枚举名 { 枚举值表 };enum Day { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY} //必须有限个数,也就是说每个值都必能能够被枚举出来枚举使用规则通过枚举名.枚举值使用,通常与switch语句结合使用public class EnumDemo { public static void ma

2020-12-01 09:53:16 132

原创 abstract抽象类、interface接口、匿名内部类

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结仅限个人理解,如有错误,欢迎指正---------------------------------lensen明前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一、pandas是什么?示例:p

2020-12-01 08:52:19 113

转载 == 和equals()记录笔记

==: 它的作用是判断两个对象的地址是不是相等。即,判断两个对象是不是同一个对象;对于基本数据类型(如int double 等)而言 ==比较的是值;对于引用数据类型而言 == 比较的是内存地址equals(): 它的作用也是判断两个对象是否相等。但是equals()方法分为两种使用情况:**(1)子类没有重写父类的equals() 方法:**那么默认继承的是Object类的equals()方法,该方法进行两个类的比较时等价于通过“==”比较这两个对象;因为Object类的equals()方法比较的是

2020-11-30 23:19:24 80

原创 JDK、JRE、JVM 三者关系简要浅析

JDK(Java Development Kit)所谓JDK即java开发工具包,可以理解成我们平常说的集成ide,这是一个很强大的软件。JRE(Java Runtime Environment)JRE即java运行时环境,是我们java程序编写完成后,支撑java程序运行的基础。JVM(Java Virtual Machine)JVM就是java虚拟机,与操作系统底层进行交互,是将java程序编译后生成的.class文件(字节码文件)解释成具体平台的机器指令进行执行。这也就是java能够跨平台的

2020-11-30 15:52:07 126

原创 谈谈自己对Spring中IOC和AOP的理解

Spring框架的核心思想主要是IOC和AOP的思想IOCIOC概念Spring中的IOCAOP新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入IOCIOC概念所谓IOC即 Inversion Of Control--

2020-11-26 22:32:15 1038

原创 MySQ压缩包自定义安装问题及配置文件编写

官网下载MySQL压缩包下载安装包在自定义的路径中解压,并且在系统环境Path路径中配置MySQL安装路径下的lib环境变量编写配置文件my.ini在MySQL安装目录下编写配置文件,my.ini(MySQL程序内部只识别该名字的配置文件必须这个名字),配置文件的内容如下:[mysqld]basedir=(你的MySQL安装目录下)datadir=(你的MySQL安装目录下)\data\port=3306 #端口号,可以自己自定义更改,建议使用3306端口号skip-grant-tab

2020-11-10 20:58:22 142

原创 linux中mysql记录插入无法输入中文的问题

在Linux安装完mysql时,向数据库中插入记录,若记录包含中文,无法插入,大部分会有类似如下提示:因为数据库内的字符编码不包含中文的字符编码,我们可以使用show create table <表名> 命令来查询表的一些属性信息也可以使用show create database <数据库名>来查询数据库的一些信息如下所示:(插入中文字符有两种形式:1.我们可以修改数据库的...

2020-03-06 18:03:33 2466

空空如也

空空如也

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

TA关注的人

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