<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[main_Scanner01的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/main_Scanner01</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; main_Scanner01]]></copyright><item><title><![CDATA[第4章：再谈类的加载器]]></title><link>https://blog.youkuaiyun.com/main_Scanner01/article/details/125627049</link><guid>https://blog.youkuaiyun.com/main_Scanner01/article/details/125627049</guid><author>main_Scanner01</author><pubDate>Tue, 05 Jul 2022 20:08:25 +0800</pubDate><description><![CDATA[类加载器是JVM执行类加载机制的前提。ClassLoader的作用：ClassLoader是Java的核心组件，所有的Class都是由ClassLoader进行加载的，ClassLoader负责通过各种方式将Class信息的二进制数据流读入JVM内部，转换为一个与目标类对应的java.lang.Class对象实例。然后交给Java虚拟机进行链接、初始化等操作。因此，ClassLoader在整个装载阶段，只能影响到类的加载，而无法通过ClassLoader去改变类的链接和初始化行为。至于它是否可以运行，则由E]]></description><category></category></item><item><title><![CDATA[第3章：类的加载过程(类的生命周期)详解]]></title><link>https://blog.youkuaiyun.com/main_Scanner01/article/details/125571764</link><guid>https://blog.youkuaiyun.com/main_Scanner01/article/details/125571764</guid><author>main_Scanner01</author><pubDate>Sat, 02 Jul 2022 13:10:49 +0800</pubDate><description><![CDATA[在Java中数据类型分为基本数据类型和引用数据类型。基本数据类型由虚拟机预先定义，引用数据类型则需要进行悉类的加载。(这里的类不是狭义上的类，而是包括：接口，注解，枚举)按照Java虚拟机规范，从class文件到加载到内存中的类，到类卸载出内存为止，它的整个生命周期包括如下7个阶段：其中，验证、准备、解析3个部分统称为链接（Linking）从程序中类的使用过程来看：我们所说的加载完毕包括**：加载、链接、初始化三个阶段都完成之后类进入方法区**中我们待会所讲的是按照五个阶段来进行讲解的。蚂蚁金服:
描述一下]]></description><category></category></item><item><title><![CDATA[Class文件结构和字节码指令集]]></title><link>https://blog.youkuaiyun.com/main_Scanner01/article/details/125472926</link><guid>https://blog.youkuaiyun.com/main_Scanner01/article/details/125472926</guid><author>main_Scanner01</author><pubDate>Sun, 26 Jun 2022 18:46:47 +0800</pubDate><description><![CDATA[JVM规范所有的 JVM 全部遵守 Java 虚拟机规范，也就是说所有的 JVM 环境都是一样的， 这样一来字节码文件可以在各种 JVM 上进行。想要让一个 Java 程序正确地运行在 JVM 中，Java 源码就是必须要被编译为符合 JVM 规范的字节码。前端编译器的主要任务就是负责将符合 Java 语法规范的 Java 代码转换为符合 JVM 规范的字节码文件。javac 是一种能够将 Java 源码编译为字节码的前端编译器。javac 编译器在将 Java 源码编译为一个有效的字节码文件过程中经历了4]]></description><category></category></item><item><title><![CDATA[String 的基本操作&StringTable的相关问题]]></title><link>https://blog.youkuaiyun.com/main_Scanner01/article/details/125023043</link><guid>https://blog.youkuaiyun.com/main_Scanner01/article/details/125023043</guid><author>main_Scanner01</author><pubDate>Sat, 28 May 2022 21:22:32 +0800</pubDate><description><![CDATA[String 的基本操作&amp;StringTable的相关问题
Java语言规范里要求完全相同的字符串字面量，应该包含同样的Unicode字符序列（包含同一份码点序列的常量），并且必须是指向同一个String类实例。
package com.journaldev.test;

public class Memory {

	public static void main(String[] args) { // Line 1
		int i=1; // Line 2
		Object obj = new ]]></description><category></category></item><item><title><![CDATA[对象的访问定位]]></title><link>https://blog.youkuaiyun.com/main_Scanner01/article/details/124971672</link><guid>https://blog.youkuaiyun.com/main_Scanner01/article/details/124971672</guid><author>main_Scanner01</author><pubDate>Wed, 25 May 2022 18:54:33 +0800</pubDate><description><![CDATA[对象的访问定位

对象的两种访问方式：句柄访问和直接指针

句柄访问


缺点：在堆空间中开辟了一块空间作为句柄池，句柄池本身也会占用空间；通过两次指针访问才能访问到堆中的对象，效率低
优点：reference中存储稳定句柄地址，对象被移动（垃圾收集时移动对象很普遍）时只会改变句柄中实例数据指针即可，reference本身不需要被修改

图示


直接指针（HotSpot采用）


优点：直接指针是局部变量表中的引用，直接指向堆中的实例，在对象实例中有类型指针，指向的是方法区中的对象类型数据
缺点：对象被移]]></description><category></category></item><item><title><![CDATA[对象实例化过程]]></title><link>https://blog.youkuaiyun.com/main_Scanner01/article/details/124971323</link><guid>https://blog.youkuaiyun.com/main_Scanner01/article/details/124971323</guid><author>main_Scanner01</author><pubDate>Wed, 25 May 2022 18:28:03 +0800</pubDate><description><![CDATA[判断对象对应的类是否是加载、链接、初始化
虚拟机遇到一条new指令，首先去检查这个指令的参数能否在Metaspace的常量池中定位到一个类的符号引用，并且检查这个符号引用代表的类是否已经被加载、解析和初始化。(即判断类元信息是否存在)。如果没有，那么在双亲委派模式下，使用当前类加载器以ClassLoader+包名+类名为Key进行查找对应的.class文件。如果没有找到文件，则抛出ClassNotFoundException异常，如果找到，则进行类加载，并生成对应的Class类对象


指针碰撞：
如...]]></description><category></category></item><item><title><![CDATA[双亲委派机制]]></title><link>https://blog.youkuaiyun.com/main_Scanner01/article/details/124813766</link><guid>https://blog.youkuaiyun.com/main_Scanner01/article/details/124813766</guid><author>main_Scanner01</author><pubDate>Tue, 17 May 2022 09:10:28 +0800</pubDate><description><![CDATA[双亲委派机制原理
Java虚拟机对class文件采用的是按需加载的方式，也就是说当需要使用该类时才会将它的class文件加载到内存生成Class对象。而且加载某个类的class文件时，Java虚拟机采用的是双亲委派模式，即把请求交由父类处理，它是一种任务委派模式

工作原理：

如果一个类加载器收到了类加载请求，它并不会自己先去加载，而是把这个请求委托给父类的加载器去执行；
如果父类加载器还存在其父类加载器，则进一步向上委托，依次递归请求，最终将到达顶层的启动类加载器；
如果父类加载器可以完成类加载任务，就]]></description><category></category></item><item><title><![CDATA[二叉树的前序、中序和后序遍历]]></title><link>https://blog.youkuaiyun.com/main_Scanner01/article/details/124398414</link><guid>https://blog.youkuaiyun.com/main_Scanner01/article/details/124398414</guid><author>main_Scanner01</author><pubDate>Mon, 25 Apr 2022 10:11:49 +0800</pubDate><description><![CDATA[二叉树的前序、中序和后序遍历


前序遍历：先输出父节点，再遍历左子树（递归）和右子树（递归）


中序遍历：先遍历左子树（递归），再输出父节点，再遍历右子树（递归）


后序遍历：先遍历左子树（递归），再遍历右子树（递归），最后输出父节点



先创建一颗二叉树，前序、中序和后续的步骤
前序遍历：

先输出当前节点（初始节点是 root 节点）
如果左子节点不为空，则递归继续前序遍历
如果右子节点不为空，则递归继续前序遍历

上图的输出顺序为：1、2、3、4
中序遍历：

如果当前节点的左子节点不为空，则]]></description><category></category></item><item><title><![CDATA[MySQL数据库备份与恢复]]></title><link>https://blog.youkuaiyun.com/main_Scanner01/article/details/124259156</link><guid>https://blog.youkuaiyun.com/main_Scanner01/article/details/124259156</guid><author>main_Scanner01</author><pubDate>Mon, 18 Apr 2022 20:52:43 +0800</pubDate><description><![CDATA[第19章_数据库备份与恢复
在任何数据库环境中，总会有不确定的意外情况发生，比如例外的停电、计算机系统中的各种软硬件故障、人为破坏、管理员误操作等是不可避免的，这些情况可能会导致数据的丢失、服务器瘫痪等严重的后果。存在多个服务器时，会出现主从服务器之间的数据同步问题。
为了有效防止数据丢失，并将损失降到最低，应定期对MySQL数据库服务器做备份。如果数据库中的数据丢失或者出现错误，可以使用备份的数据进行恢复。主从服务器之间的数据同步问题可以通过复制功能实现.
物理备份与逻辑备份
**物理备份：**备份数据文]]></description><category></category></item><item><title><![CDATA[MySQL主从复制]]></title><link>https://blog.youkuaiyun.com/main_Scanner01/article/details/124259050</link><guid>https://blog.youkuaiyun.com/main_Scanner01/article/details/124259050</guid><author>main_Scanner01</author><pubDate>Mon, 18 Apr 2022 20:48:53 +0800</pubDate><description><![CDATA[第18章_主从复制
主从复制概述
( 1 )首先, MySQL主库在事务提交时会把数据变更作为事件 Events 记录在二进制日志文件Binlog中; MySQL主库上的 sync_binlog参数控制 Binlog日志刷新到磁盘。
( 2 )主库推送二进制日志文件 Binlog中的事件到从库的中继日志 Relay Log, 之后从库根据中继日志 Relay Log重做数据变更操作, 通过逻辑复制以此来达到主库和从库的数据一致。
如何提升数据库并发能力

此外，一般应用对数据库而言都是"读多写少"，也就说对]]></description><category></category></item><item><title><![CDATA[MySQL其它数据库日志]]></title><link>https://blog.youkuaiyun.com/main_Scanner01/article/details/124258920</link><guid>https://blog.youkuaiyun.com/main_Scanner01/article/details/124258920</guid><author>main_Scanner01</author><pubDate>Mon, 18 Apr 2022 20:42:52 +0800</pubDate><description><![CDATA[第17章_其它数据库日志
我们在讲解数据库事务时，讲过两种日志：重做曰志、回滚日志
对于线上数据库应用系统，突然遭遇数据库宕机怎么办？在这种情况下，定位宕机的原因就非常关键。我们可以查看数据库的错误日志。因为日志中记录了数据库运行中的诊断信息，包括了错误、警告和注释等信息。比如：从日志中发现某个连接中的SQL操作发生了死循环，导致内存不足，被系统强行终止了。明确了原因，处理起来也就轻松了，系统很快就恢复了运行。
除了发现错误，日志在数据复制、数据恢复、操作审计，以及确保数据的永久性和一致性等方面，都有着不可]]></description><category></category></item><item><title><![CDATA[MySQL之MVCC]]></title><link>https://blog.youkuaiyun.com/main_Scanner01/article/details/124086743</link><guid>https://blog.youkuaiyun.com/main_Scanner01/article/details/124086743</guid><author>main_Scanner01</author><pubDate>Sun, 10 Apr 2022 21:45:50 +0800</pubDate><description><![CDATA[第16章_多版本并发控制
什么是MVCC
MVCC （Multiversion Concurrency Control），多版本并发控制。顾名思义，MVCC 是通过数据行的多个版
本管理来实现数据库的并发控制。这项技术使得在InnoDB的事务隔离级别下执行一致性读（快照读）操作有了保
证。换言之，就是为了查询一些正在被另一个事务更新的行，并且可以看到它们被更新之前的值，这样
在做查询的时候就不用等待另一个事务释放锁。  （个人感觉有点像CopyOnWrite写时复制技术）
MVCC没有正式的标准，在不同的D]]></description><category></category></item><item><title><![CDATA[MySQL中的锁]]></title><link>https://blog.youkuaiyun.com/main_Scanner01/article/details/124073049</link><guid>https://blog.youkuaiyun.com/main_Scanner01/article/details/124073049</guid><author>main_Scanner01</author><pubDate>Sun, 10 Apr 2022 09:38:08 +0800</pubDate><description><![CDATA[第15章_锁
事务的隔离性由这章讲述的锁来实现。
概述
锁是计算机协调多个进程或线程并发访问某一资源的机制。在程序开发中会存在多线程同步的问题，当多个线程并发访问某个数据的时候，尤其是针对一些敏感的数据（比如订单、金额等)，我们就需要保证这个数据在任何时刻最多只有一个线程在访问，保证数据的完整性和一致性。在开发过程中加锁是为了保证数据的一致性，这个思想在数据库领域中同样很重要。
在数据库中，除传统的计算资源〈如CPU、RAM、I/O等）的争用以外，数据也是一种供许多用户共享的资源。为保证数据的一致性，需要对]]></description><category></category></item><item><title><![CDATA[第14章_MySQL事务日志（redo log 和 undo log）]]></title><link>https://blog.youkuaiyun.com/main_Scanner01/article/details/123977860</link><guid>https://blog.youkuaiyun.com/main_Scanner01/article/details/123977860</guid><author>main_Scanner01</author><pubDate>Tue, 05 Apr 2022 21:30:54 +0800</pubDate><description><![CDATA[第14章_MySQL事务日志
事务有4种特性：原子性、一致性、隔离性和持久性。那么事务的四种特性到底是基于什么机制实现呢?

事务的隔离性由锁机制实现。
而事务的原子性、一致性和持久性由事务的 redo 日志和undo 日志来保证。

REDO LOG 称为重做日志，提供再写入操作，恢复提交事务修改的页操作，用来保证事务的持久性。
UNDO LOG 称为回滚日志，回滚行记录到某个特定版本，用来保证事务的原子性、一致性。



有的DBA或许会认为 UNDO 是 REDO 的逆过程，其实不然。REDO和UND]]></description><category></category></item><item><title><![CDATA[数据库设计规范小节]]></title><link>https://blog.youkuaiyun.com/main_Scanner01/article/details/123889177</link><guid>https://blog.youkuaiyun.com/main_Scanner01/article/details/123889177</guid><author>main_Scanner01</author><pubDate>Fri, 01 Apr 2022 09:06:03 +0800</pubDate><description><![CDATA[数据库设计规范小节
为什么需要数据库设计
**我们在设计数据表的时候，要考虑很多问题。**比如：

用户都需要什么数据?需要在数据表中保存哪些数据?
如何保证数据表中数据的正确性，当插入、删除、更新的时候该进行怎样的约束检查?
如何降低数据表的数据冗余度，保证数据表不会因为用户量的增长而迅速扩张?
如何让负责数据库维护的人员更方便地使用数据库?
使用数据库的应用场景也各木相同，可以说针对不同的情况，设计出来的数据表可能千差万别。

现实情况中，面临的场景:
当数据库运行了一段时间之后，我们才发现数据表设计的]]></description><category></category></item><item><title><![CDATA[关联查询优化&子查询优化&排序优化]]></title><link>https://blog.youkuaiyun.com/main_Scanner01/article/details/123786044</link><guid>https://blog.youkuaiyun.com/main_Scanner01/article/details/123786044</guid><author>main_Scanner01</author><pubDate>Mon, 28 Mar 2022 08:27:57 +0800</pubDate><description><![CDATA[关联查询的优化(都可以自己去实验一下)
数据准备
#分类
CREATE TABLE IF NOT EXISTS `type` (
`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`card` INT(10) UNSIGNED NOT NULL,
PRIMARY KEY (`id`)
);
#图书
CREATE TABLE IF NOT EXISTS `book` (
`bookid` INT(10) UNSIGNED NOT NULL AUTO_INCREMEN]]></description><category></category></item><item><title><![CDATA[JOIN语句原理]]></title><link>https://blog.youkuaiyun.com/main_Scanner01/article/details/123786007</link><guid>https://blog.youkuaiyun.com/main_Scanner01/article/details/123786007</guid><author>main_Scanner01</author><pubDate>Mon, 28 Mar 2022 08:21:18 +0800</pubDate><description><![CDATA[JOIN语句原理
join方式连接多个表，本质就是各个表之间数据的循环匹配。MySQL5.5版本之前，MySQL只支持一种表间关联方式，就是嵌套循环(Nested Loop Join)。如果关联表的数据量很大，则join关联的执行时间会非常长。在MySQL5.5以后的版本中，MySQL通过引入BNLJ算法来优化嵌套执行。
驱动表和被驱动表
驱动表就是主表，被驱动表就是从表、非驱动表
SELECT * FROM A JOIN B ON ...

A一定是驱动表吗？不一定，优化器会根据你查询语句做优化，决定先查]]></description><category></category></item><item><title><![CDATA[索引优化与查询优化]]></title><link>https://blog.youkuaiyun.com/main_Scanner01/article/details/123771566</link><guid>https://blog.youkuaiyun.com/main_Scanner01/article/details/123771566</guid><author>main_Scanner01</author><pubDate>Sun, 27 Mar 2022 13:10:32 +0800</pubDate><description><![CDATA[都有哪些维度可以进行数据库调优？简言之:

索引失效、没有充分利用到索引——索引建立
关联查询太多JOIN(设计缺陷或不得已的需求)——SQL优化
服务器调优及各个参数设置(缓冲、线程数等)——调整my.cnf。
数据过多——分库分表

关于数据库调优的知识点非常分散。不同的DBMS，不同的公司，不同的职位，不同的项目遇到的问题都不尽相同。这里我们分为三个章节进行细致讲解。
虽然SQL查询优化的技术有很多，但是大方向上完全可以分成物理查询优化和逻辑查询优化两大块。

物理查询优化是通过索引和表连接方式等技术]]></description><category></category></item><item><title><![CDATA[EXPLAIN四种输出格式&MySQL监控分析视图——sys schema]]></title><link>https://blog.youkuaiyun.com/main_Scanner01/article/details/123740910</link><guid>https://blog.youkuaiyun.com/main_Scanner01/article/details/123740910</guid><author>main_Scanner01</author><pubDate>Fri, 25 Mar 2022 17:18:35 +0800</pubDate><description><![CDATA[EXPLAIN四种输出格式
这里谈谈EXPLAIN的输出格式。EXPLAIN可以输出四种格式：传统格式，JSON格式，TREE格式以及可视化输出。用户可以根据需要选择适用于自己的格式。
EXPLAIN四种输出格式
传统格式
传统格式简单明了，输出是一个表格形式，概要说明查询计划。
EXPLAIN SELECT s1.key1, s2.key1 FROM s1 LEFT JOIN s2 ON s1.key1 = s2.key1 WHERE
s2.common_field IS NOT NULL;

JSON格]]></description><category></category></item><item><title><![CDATA[MySQL性能分析工具的使用]]></title><link>https://blog.youkuaiyun.com/main_Scanner01/article/details/123721306</link><guid>https://blog.youkuaiyun.com/main_Scanner01/article/details/123721306</guid><author>main_Scanner01</author><pubDate>Thu, 24 Mar 2022 20:56:40 +0800</pubDate><description><![CDATA[性能分析工具的使用
在数据库调优中，我们的目标就是响应时间更快，吞吐量更大。利用宏观的监控工具和微观的日志分析可以帮我们快速找到调优的思路和方式。
数据库服务器的优化步骤
当我们遇到数据库调优问题的时候，该如何思考呢？这里把思考的流程整理成下面这张图。
整个流程划分成了观察（Show status） 和 行动（Action） 两个部分。字母 S 的部分代表观察（会使
用相应的分析工具），字母 A 代表的部分是行动（对应分析可以采取的行动）。

如果A2和A3都不能解决问题，我们需要考虑数据库自身的SQL查询]]></description><category></category></item></channel></rss>