自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

持之以恒,方得始终

本人的博客主要为本人学习的笔记分享、开发过程中出现问题的记录,主要目的是便于日后复习回顾,以及和大家分享经验总结,如有侵权或不妥之处,请及时联系我进行修改QQ:1021204735。

  • 博客(111)
  • 资源 (2)
  • 收藏
  • 关注

原创 MySQL索引面试题汇总

目录1.前言2.索引数据结构分类3.二叉查找树4.红黑树(自平衡二叉查找树)5.B-Tree6.B+Tree 6.1 B+Tree概述及特点 6.2B+Tree存放数据示例 6.3 MyISAM存储引擎索引实现 6.4InnoDB底层存储引擎索引实现7.索引有关面试题解析 7.1 什么是索引 7.2 索引的分类 7.3 索引的优势 7.4 索引的劣势...

2021-03-07 16:46:58 19

原创 MySql逻辑架构及查询过程

目录1.MySQL逻辑架构图 1.1 连接层 1.2 服务层 1.3 引擎层 1.4 存储层2.MySQL查询过程 2.1 客户端/服务端通信协议 2.2 查询缓存 2.3语法解析和预处理 2.4查询优化 2.5查询执行引擎 2.6返回结果给客户端1.MySQL逻辑架构图 1.1 连接层 Con...

2021-03-05 22:56:22 43

原创 MySql常见数据类型及五大约束

目录1.数值型 1.1整型 1.2 小数 1.2.1 定点数 1.2.2 浮点数 1.2.3 特点2.字符型 2.1 短文本 2.2 char和varchar的区别 2.2 长文本3.日期型 3.1 具体日期类型 3.2datetime和timestamp区别1.数值型 1...

2021-03-04 20:19:31 26

原创 DML语法整理笔记

目录1.什么是DML2.两种INSERT方式 2.1 方式一 2.2 方式二 2.3 INSERT特点 2.4 两种方式对比3.UPDATE 3.1 修改单标记录 3.2 修改多表记录4.DELETE 4.1 方式一(可以删全表也可以删具体某一行的数据) 4.2 方式二(只能删全表的数据) 4.3两种方式对比1.什么是DMLDML:Data...

2021-03-04 20:19:12 26

原创 DQL语法整理笔记

1.什么是DQLDQL:Data QueryLanguage 数据查询语言标准语法: SELECT select_list FROM table_source [ WHERE search_condition ] [ GROUP BY group_by_expression ] [ HAVING search_condition ] [ ORDE...

2021-03-03 22:04:02 1927 8

原创 Spring配置文件头及xsd约束文件详解

1.老版本applicationContext.xml中的dtd约束文件 在Spring的核心配置文件applicationContext.xml中我们总能看到如下图这样的配置:红框里的部分的作用究竟是什么呢?想了解这个问题我们先看一下老版本的applicationContext.xml配置文件是什么样子的: 第一行表示xml声明,任何格式良好的xml文档第一行都必须是声明,相当于告诉解析器这个是xml文档,请用xml解析器进行解析。下面的dtd文件又是什么...

2021-02-05 11:11:05 69 1

转载 RSA加密、解密、签名、验签的原理及方法

最近被RSA加解密搞得一头雾水,直到看到这篇博文才把逻辑梳理清楚,感谢原帖博主分享解惑,原文地址:https://www.cnblogs.com/pcheng/p/9629621.html目录1.RSA加密简介2.RSA加密、签名区别3.代码示例1.RSA加密简介  RSA加密是一种非对称加密。可以在不直接传递密钥的情况下,完成解密。这能够确保信息的安全性,避免了直接传递密钥所造成的被破解的风险。是由一对密钥来进行加解密的过程,分别称为公钥和私钥。两者之间有数学相关,该加密算法的原理

2021-01-28 20:16:54 1272

原创 JVM13 - 垃圾回收相关概念

1.System.gc() 的理解 1.1System.gc() 方法 在默认情况下,通过System.gc()和Runtime.getRuntime().gc() 的调用,会显式触发Full GC,同时对老年代和新生代进行回收,尝试释放被丢弃对象占用的内存。System.gc()调用附带一个免责声明,无法保证对垃圾收集器的调用(不能确保立即生效)。JVM实现者可以通过System.gc() 调用来决定JVM的GC行为。而一般情况下,垃圾回收应该是自动进行的,无须手动触...

2021-01-25 22:27:57 43

原创 JVM12 - 垃圾回收相关算法

1.标记阶段:引用计数算法2.标记阶段:可达性分析算法3.对象的finalization机制4.GC Roots溯源5.清除阶段:标记-清除算法6.清除阶段:复制算法7.清除阶段:标记-压缩算法8.垃圾回收算法小结9.分代收集算法...

2021-01-21 10:22:29 45

原创 JVM11 - 垃圾回收概述

1.关于垃圾收集 Java 和 C++语言的区别,就在于垃圾收集技术和内存动态分配上,C语言没有垃圾收集技术,需要程序员手动收集。垃圾收集不是Java语言的伴生产物,早在1960年,第一门开始使用内存动态分配和垃圾收集技术的Lisp语言诞生。如今垃圾收集几乎成为现代语言的标配,即使经过如此长时间的发展,Java的垃圾收集机制仍然在不断的演进中,不同大小的设备、不同特征的应用场景,对垃圾收集提出了新的挑战。关于垃圾收集有三个经典问题:哪些内存需要回收? 什么时候回收? 如何回收?2....

2021-01-20 14:31:36 42

原创 深度剖析Java String的奥秘

1.String的基本特性 1.1String概述 (1)String:字符串,使用一对""引起来表示String s1 = "lalala" ; // 字面量的定义方式String s2 = new String("lala"); // new 对象的方式 (2)String声明为final的,不可被继承 (3)String实现了Serializable接口,表示字符串是支持序列化;实现了Comparable接口,表示Strin...

2021-01-16 12:08:52 1553

原创 JVM10 - 执行引擎

目录1.执行引擎概述 1.1 执行引擎所在位置 1.2 执行引擎概述 1.3执行工作过程2.Java 代码编译和执行过程 2.1 解释执行和即时编译 2.2解释器和编译器 2.3为什么说Java是半编译半解释型语言?3.机器码、指令、汇编语言 3.1机器码 3.2指令和指令集 3.3汇编语言 3.4高级语言 3.5程序编译流程 3.6字...

2021-01-15 11:21:42 41

原创 JVM09 - 对象的实例化内存布局与访问定位

1.创建对象的方式 (1)new:最常见的方式、单例类中调用getInstance的静态类方法,XXXFactory的静态方法 (2)Class的newInstance方法:在JDK9里面被标记为过时的方法,因为只能调用空参构造器,并且权限必须为 public (3)Constructor的newInstance(Xxxx):反射的方式,可以调用空参的,或者带参的构造器 (4)使用clone():不调用任何的构造器,要求当前的类需要实现Cloneable接口中...

2021-01-13 19:58:18 1719

原创 JVM08 - 本地方法接口

1.什么是本地方法 简单地讲,一个Native Method是一个非Java语言实现的方法,比如C或C++。这个特征并非Java所特有,很多其它的编程语言都有这一机制,比如在C++中,可以用extern告知C++编译器去调用C的函数。本地接口的作用是融合不同的编程语言为Java所用,它的初衷是融合C/C++程序。Demo:Thread类中的start0方法注:标识符native可以与其它java标识符连用,abstract除外(因为被abstract为抽象方法,但本地方法是需要...

2021-01-13 14:03:57 218

原创 JVM07 - 方法区

1.栈、堆、方法区三者的交互关系

2021-01-12 21:37:10 1767

原创 JVM06 - 本地方法栈

1.本地方法栈 1.1 本地方法栈的特点 (1)本地方法栈用于管理本地方法的调用。 (2)本地方法栈,也是线程私有的。 (3)允许被实现成固定或者是可动态扩展的内存大小,如果线程请求分配的栈容量超过本地方法栈允许的最大容量,Java虚拟机将会抛出一个stackoverflowError 异常。如果本地方法栈在尝试扩展的时候无法申请到足够的内存,或者在创建新的线程时没有足够的内存去创建对应的本地方法栈,那么Java虚拟机将会抛出一个outofMemoryE...

2021-01-12 14:30:20 228

原创 JVM05 - 堆

1.堆的核心概述 1.1 堆的基本概念 (1)一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域。 (2)Java堆区在JVM启动的时候即被创建,其空间大小也就确定了,堆是JVM管理的最大一块内存空间,并且堆内存的大小是可以调节的。 (3)《Java虚拟机规范》规定,堆可以处于物理上不连续的内存空间中,但在逻辑上它应该被视为连续的。 (4)所有的线程共享Java堆,在这里还可以划分线程私有的缓冲区(Thread Local Alloc...

2021-01-11 21:29:53 230

原创 从字节码的角度分析方法调用的本质

目录1.方法调用的本质2.静态链接与动态链接 2.1 静态链接: 2.2 动态链接:3.早期绑定与晚期绑定 3.1 早期绑定 3.2 晚期绑定4.非虚方法与虚方法 4.1非虚方法 4.2虚方法5.静态分派与重载6.动态分派与重写7.多态与虚方法表1.方法调用的本质 Java中可以通过对象.方法来实现方法的调用,但在虚拟机内究竟是怎么实现的呢?Demo:public void me...

2021-01-07 21:47:08 1700

原创 JVM04 - 虚拟机栈

1.虚拟机栈概述 1.1 栈和堆的区别 栈是运行时的单位,堆是存储的单位。栈解决程序的运行问题,即程序如何执行,或者说如何处理数据。堆解决的是数据存储的问题,即数据怎么放,放在哪里。2.栈的存储单位3.局部变量表...

2021-01-05 23:14:45 1741

原创 JVM03 - 程序计数器

1.程序计数器概述 程序计数器(Program Counter Register):并非是广义上所指的物理寄存器,将其翻译为PC计数器(或指令计数器)会更加贴切(也称为程序钩子),JVM中的PC寄存器是对物理PC寄存器的一种抽象模拟。在JVM规范中,每个线程都有它自己的程序计数器,是线程私有的,生命周期与线程的生命周期保持一致。程序计数器会存储当前线程正在执行的Java方法的JVM指令地址(如果是在执行native方法,则是undefned)。它是程序控制流的指示器,分支、循环、跳转、...

2021-01-04 11:30:06 252

原创 JVM02 - 类加载子系统

1.类加载系统的作用 (1)类加载器子系统负责从文件系统或者网络中加载Class文件,class文件在文件开头有特定的文件标识(0xCAFEBABE)。 (2)ClassLoader只负责class文件的加载,至于它是否可以运行,则由Execution Engine决定。 (3)加载的类信息存放于一块称为方法区的内存空间。除了类的信息外,方法区中还会存放运行时常量池信息,可能还包括字符串字面量和数字常量(这部分常量信息是Class文件中常量池部分的内存映射) ...

2020-12-29 22:05:12 246

原创 JVM01 - 概述

目录1.JVM整体结构2.Java代码执行流程3.JVM的生命周期3.1 虚拟机的启动3.2 虚拟机的执行3.3 虚拟机的退出1.JVM整体结构 JVM是Java Virtual Machine的缩写,是一种用于计算设备的规范,是一个虚构出来的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实现的。引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在...

2020-12-29 20:35:28 555 1

原创 Java集合13 - 二叉搜索树、平衡二叉树、红黑树特点总结

1.二叉搜索树(Binary Search Tree) 二叉搜索树:又称为二叉排序树, 属于树的一种, 通过二叉树将数据组织起来, 树的每个节点都包含了健值key、数据值data、左子节点指针、右子节点指针。其中健值key是最核心的部分, 它的值决定了树的组织形状; 数据值data是该节点对应的数据。 特点: (1)左右子树也分别是二叉搜索树。 (2)左子树的所有节点key值都小于它的根节点的key值。 (3)右子树的所有节点key值都大于他的根...

2020-12-27 22:58:42 217

原创 Java集合09 - JDK1.8中的HashMap

1.底层实现原理

2020-12-27 15:51:48 237

原创 为什么金额不能用浮点数来定义呢?

1.先来Demo复现下现象 可以发现同样是计算50000*50000的结果,如果用int类型来计算就会得到错误的结果,这是为什么呢?这个错误的结果是怎么来的呢?我们把50000*50000的结果转换为二进制:0 1001 0101 0000 0010 1111 1001 0000 0000 结果为33位,因int类型为4字节,所以发生溢出 1001 0101 0000 0010 1111 1001 0000 0000 去掉最高位后此数变为负数 11...

2020-12-25 18:00:07 1518

原创 Java中的引用类型真的是引用传递么?

目录1.辟谣时间2.什么是求值策略 2.1 严格求值 2.2 Java中的求值策略3.总结1.辟谣时间 在开始深入讲解之前,有必要纠正一下大家以前的那些错误看法了。如果你有以下想法,那么你有必要好好阅读本文: (1)错误理解一:值传递和引用传递,区分的条件是传递的内容,如果是个值,就是值传递。如果是个引用,就是引用传递。 (2)错误理解二:Java是引用传递。 (3)错误理解三:传递的参数如果是普通类型,那就是值传递,如果是对...

2020-12-24 17:35:23 524 1

原创 HashMap中的roundUpToPowerOf2()和tableSizeFor()

1.roundUpToPowerOf2()和tableSizeFor()是什么 roundUpToPowerOf2():JDK1.7中HashMap初始化时的一个方法,目的为:返回大于或等于最接近输入参数的2的整数次幂的数 tableSizeFor():JDK1.8中HashMap构造函数中用于初始化扩容阈值threshold的一个方法,其目的同上:返回大于或等于最接近输入参数的2的整数次幂的数2.roundUpToPowerOf2()方法解析 ro...

2020-12-24 15:27:47 221

原创 Java集合12 - JDK1.7中的LinkedHashMap

1.LinkedHashMap是什么 一个基于LinkedList和HashMap实现的Map,继承自HashMap,实现了Map接口。源码上的注释告诉了我们以下几件事: 底层实现:基于LinkedList和HashMap实现,允许null元素,内部维护了一个贯穿所有内部节点的双向链表,可以通过构造函数来指定其迭代顺序(插入顺序/访问顺序)。 性能:与HashMap一样,add、contains、remove提供恒定的时间性能,假设hash函数在bucket之...

2020-12-24 10:44:50 226

原创 Java集合11 - HashMap中一些值得思考的问题

1.Key为null的键值对存储位置 JDK1.7存放null值源码: 可以看到1.7中将null值存放在数组0号索引处,JDK1.8源码: 由于在hash函数中,null的hash为0,所以红框中的代码可以简化成:if ((p = tab[i = 0]) == null) tab[i] = newNode(hash, key, value, null);可以看到1.8中也是将null值存放在数组0号索引处,综上两种情况,HashM...

2020-12-23 23:27:21 1773

原创 Java集合10 - JDK1.7和JDK1.8中HashMap的区别

1. 底层实现结构不同 JDK1.7:数组+链表 JDK1.8:数组+链表+红黑树2. 扰动函数不同 JDK1.7:九次扰动,四次位运算+五次异或运算 JDK1.8:两次扰动,1次位运算+1次异或运算3. resize()函数功能不同 JDK1.7:resize()为扩容,inflateTable()为初始化底层数组 JDK1.8:resize()为初始化+扩容4. 扩容的判断时机不同 ...

2020-12-23 15:30:01 239

原创 Java集合08 - JDK1.7中的HashMap

1.HashMap底层实现原理先来看一下HashMap中定义了哪些

2020-12-22 22:36:33 245

原创 Java集合07 - SynchronizedList和Vector的区别

1.SynchronizedList、Vector概述 SynchronizedList:java.util.Collections中的一个静态内部类,可以通过List进行构造,用于返回线程安全的List集合 Vector:java.util包中的类,一个和ArrayList相同底层实现的线程安全的List集合 那么问题来了,这两个类一定存在着某种不同,否则直接把老的类删除掉就可以了,究竟有哪些不同呢,我们往下看。2.SynchronizedList和Ve...

2020-12-18 17:37:13 255 2

原创 Java集合06 - ArrayList、LinkedList和Vector的区别

1.LinkedList是什么 一个基于双向链表的List实现,继承自AbstractSequentialList,实现了List、Deque、Cloneable、Serializable,支持快速随机访问、克隆及序列化(不了解的小伙伴可以移步我前几篇博文,对这几个接口有做详细的说明,Deque(Double Queue)接口小伙伴们感兴趣的话可以自己看下,定义了一些双向链表的常用方法)。源码上的注释告诉了我们以下几件事: 底层实现:LinkedList基于双向链表实现,可存...

2020-12-17 16:53:15 247

原创 Java集合05 - ArrayList

1.Iterable是什么 Iterable接口是java集合框架的顶级接口,实现此接口使集合对象可以通过迭代器遍历自身元素。源码第一行告诉我们:实现此接口的对象可以使用增强for,看来这个甜甜的语法糖的底层实现确实是使用了迭代器。Iterable接口内部有三个成员方法: 第一个接口来自JDK1.5,后两个来自JDK1.8。不知道小伙伴会不会有疑问,反正我第一次看的时候疑惑得很,为什么接口里可以写实现方法!!!仔细一看有个default,好吧Java 8的新产...

2020-12-17 11:10:45 937

原创 Java中的fail-fast机制

1.问题由来 阿里开发规范里有一条:不要在foreach循环里进行元素的remove/add操作。remove元素请使用Iterator方式,如果并发操作,需要对Iterator对象加锁。这是为什么呢?看下面一个Demo:public static void main(String[] args) { List<String> list = new ArrayList<>(); list.add("1"); list.add("2");...

2020-12-16 10:59:27 1148

原创 JDK8新特性 - Lambda表达式

1.什么是Lambda表达式 Lambda表达式从本质上是一个匿名函数,作用为可以对接口中的方法进行非常简洁的实现,从而达到简化代码的目的。来个Lambda表达式最简单的应用,遍历集合我们可以用for循环遍历:for (int j = 0; j < list.size(); j++) { System.out.print(list.get(j));} 也可以用迭代器遍历:Iterator<Object> iterator = list....

2020-12-13 15:12:45 1052

原创 Java集合04 - RandomAccess

1.什么是RandomAccess RandomAccess和Cloneable、Serializable接口一样,本质上都是一种标志性接口,无具体实现,意在告知JVM此类(在恒定时间内)可支持快速随机访问。源码中一大段话翻译过来讲了这么几件事: (1)给List使用的标记型接口,目的是使其支持(在恒定时间内)的快速随机访问...

2020-12-11 15:44:37 245

原创 Java集合03 - Cloneable

1.Cloneable是什么 Cloneable和Serializable接口一样,本质上都是一种标志性接口,无具体实现,意在告知JVM此类可实现克隆功能。当程序中想要使用一个对象的clone方法,仅仅用public重写基类clone方法还不够,还要实现Cloneable接口,否则会抛出CloneNotSupportedException异常。2.clone方法的追根溯源 在Java Object类中默认提供了clone方法: 访问类型为prote...

2020-12-10 21:18:53 244

原创 Java集合02 - Serializable

1.什么是序列化与反序列化 在Java程序运行期间所创建的对象都暂时保存在内存中,服务端创建的用户session也是如此,假设有一天用户的session过多,并且这些session中有很多僵尸粉,长期不活跃还占用着服务器的内存资源,那么能不能有一种方法可以将处于内存中的对象持久化到硬盘中,等僵尸粉突然活跃后再将其取出重新加载进内存呢?这便用到了序列化技术: 序列化:把对象转换为字节序列的过程 反序列化:把字节序列恢复为对象的过程2.Serializable...

2020-12-09 15:47:56 1423

原创 Java集合01 - Collection整体架构

前言:写这篇文章之前笔者查阅过一些资料,发现网上大多数的博文要么就是东拼西凑别人的话,管它JDK版本对不对应,抄就完了,抄顺手了连图片也抄过来;要么就是博文写的内容自己都没验证过就往上发。笔者是菜鸡,但觉得既然决定写博文就要对自己和看的人负责,搞技术还是要做到知其然知其所以然,看源码最好还是自己动动手。如果亲爱的读者您在我的任何一篇博文中发现问题,欢迎批评指正,笔者必虚己受人。1.Collection整体架构图 吐槽完毕,进入正题。架构图推荐自己动手用Idea Diagra...

2020-12-09 11:42:22 571

一键关闭Win10自动更新.zip

一键关闭Win10自动更新,亲测有效!

2019-09-13

数据结构课程设计-三叉链表赫夫曼解码译码器

做课设的时候发现网上资料没有用三叉链表动态实现赫夫曼树译码器的资料,自己写了一份,方便大家学习,完全由个人创作。

2017-12-15

空空如也

空空如也

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

TA关注的人 TA的粉丝

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