<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[mangosea的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/mangosea</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; mangosea]]></copyright><item><title><![CDATA[高龄白菜java学习第115天（MySql数据库高级（6））]]></title><link>https://blog.youkuaiyun.com/mangosea/article/details/121896071</link><guid>https://blog.youkuaiyun.com/mangosea/article/details/121896071</guid><author>mangosea</author><pubDate>Sun, 12 Dec 2021 23:55:56 +0800</pubDate><description><![CDATA[第四章：MySql锁机制
锁的分类：共享锁、排他锁
锁的粒度越大，冲突概率越高
SHOW OPEN TABLES FROM 库名：查看某个库中的表锁
UNLOCK TABLES
读锁的加锁方可以读加锁的表，不能改，同时也不能读别的表，是为了防止未解锁就去对别的表进行操作，最后忘了解锁这个事

分析表锁定
SHOW STATUS LIKE ‘table%’

行锁的前提是有索引和事务
间隙锁


如何锁定一行


行锁的优化建议


...]]></description><category></category></item><item><title><![CDATA[高龄白菜java学习第114天（MySql数据库高级（5））]]></title><link>https://blog.youkuaiyun.com/mangosea/article/details/121880755</link><guid>https://blog.youkuaiyun.com/mangosea/article/details/121880755</guid><author>mangosea</author><pubDate>Sat, 11 Dec 2021 22:37:18 +0800</pubDate><description><![CDATA[第三章：查询截取分析

优化1：小表驱动大表
exist语法：将主查询的数据放到子查询中做条件验证，判断数据是否可以保留

in的时候先执行内查询（括号），exist的时候先执行外查询

优化2：Order By关键字优化


单路排序





优化3：group by关键字优化

慢查询日志



show global status like ‘%Slow_queries%’  可以显示慢sql条数，可用作健康度的检查
cat一下slow.log（数据量少的时候）
MySql提供了日志分析工具mysq]]></description><category></category></item><item><title><![CDATA[高龄白菜java学习第113天（MySql数据库高级（4））]]></title><link>https://blog.youkuaiyun.com/mangosea/article/details/121845975</link><guid>https://blog.youkuaiyun.com/mangosea/article/details/121845975</guid><author>mangosea</author><pubDate>Thu, 09 Dec 2021 22:51:03 +0800</pubDate><description><![CDATA[索引失效

最左原则

4和5：范围右边不生效&amp;多用覆盖索引

6：

8：

如果想要%%的like能够使用索引，可以设置覆盖索引（查询字段与索引字段保持一致）
注：主键默认会有索引
​		最左原则指的是where后面的筛选条件

9：会进行隐式类型转换，违背了3
10：

小结：
全值匹配我最爱，最左前缀要遵守；
带头大哥不能死，中间兄弟不能断；
索引列上少计算，范围之后全失效；
Like百分写最右，覆盖索引不写星；
不等空值还有or，索引失效要少用；
面试题分析：
sql的查询优化器会优化语句]]></description><category></category></item><item><title><![CDATA[高龄白菜java学习第112天（MySql数据库高级（3））]]></title><link>https://blog.youkuaiyun.com/mangosea/article/details/121802965</link><guid>https://blog.youkuaiyun.com/mangosea/article/details/121802965</guid><author>mangosea</author><pubDate>Wed, 08 Dec 2021 22:47:00 +0800</pubDate><description><![CDATA[（4）type：重点

从最好到最差依次是：
system&gt;const&gt;eq_ref&gt;ref&gt;range&gt;index&gt;all


eq_ref：双表：前一个表的唯一索引只能在后表中找到唯一记录
（5）key、possible_keys(可以用来做索引失效的校验)

查询的字段就在索引中（顺序和个数都匹配），此时展示的情况就是possible_keys为空但key中有值
（6）key_len：

key_len只计算where条件用到的索引长度，单列索引计算整个索引长度，多]]></description><category></category></item><item><title><![CDATA[高龄白菜java学习第111天（MySql数据库高级（2））]]></title><link>https://blog.youkuaiyun.com/mangosea/article/details/121780239</link><guid>https://blog.youkuaiyun.com/mangosea/article/details/121780239</guid><author>mangosea</author><pubDate>Tue, 07 Dec 2021 22:26:39 +0800</pubDate><description><![CDATA[mysql索引结构：B树索引、Hash索引、full-text索引、R-Tree索引




对3的说明：

二、性能分析（***）


explain

作用：

explain+SQL语句之后获得的表的表头信息：

字段解释
（1）id：

情况一：

情况二：

情况三：

（2）select_type：数据读取操作的操作类型


（3）table：显示这一行的数据是关于哪张表的

...]]></description><category></category></item><item><title><![CDATA[高龄白菜java学习第110天（MySql数据库高级（1））]]></title><link>https://blog.youkuaiyun.com/mangosea/article/details/121756891</link><guid>https://blog.youkuaiyun.com/mangosea/article/details/121756891</guid><author>mangosea</author><pubDate>Mon, 06 Dec 2021 21:45:15 +0800</pubDate><description><![CDATA[第一章：概述
frm文件存放表结构
myd文件存放表数据
myi文件存放表索引

存储引擎，类似策略模式
连接层、服务层、引擎层、存储层
插件式的存储引擎架构将查询处理、其他的系统任务、数据的存储提取相分离
MyISAM和InnoDB两种引擎的对比

第二章 性能优化
性能下降的可能原因
1、sql语句写的不好
2、索引失效
3、关联查询join了太多表
4、服务器调优及各个参数配置

七种join类型


由于mysql中不支持全外连，可以使用union汇总+去重查询结果实现相同目的
索引是一种数据结构：]]></description><category></category></item><item><title><![CDATA[高龄白菜java学习第109天（java数据结构和算法（27））]]></title><link>https://blog.youkuaiyun.com/mangosea/article/details/121666924</link><guid>https://blog.youkuaiyun.com/mangosea/article/details/121666924</guid><author>mangosea</author><pubDate>Wed, 01 Dec 2021 22:51:34 +0800</pubDate><description><![CDATA[九、弗洛伊德算法


代码实现：
package Algorithm.Floyd;

public class Floyd {
    public static void main(String[] args) {
        char[] vertex = {'A', 'B', 'C', 'D', 'E', 'F', 'G'};
        int[][] matrix = new int[vertex.length][vertex.length];
        final int N = ]]></description><category></category></item><item><title><![CDATA[高龄白菜java学习第108天（java数据结构和算法（26））]]></title><link>https://blog.youkuaiyun.com/mangosea/article/details/121645107</link><guid>https://blog.youkuaiyun.com/mangosea/article/details/121645107</guid><author>mangosea</author><pubDate>Tue, 30 Nov 2021 23:08:28 +0800</pubDate><description><![CDATA[八、迪杰斯特拉算法



![在这里插入图片描述](https://img-blog.csdnimg.cn/a3c28eb2970d44428dbe55d361cc7860.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA6LSl54Gr572X5rGJ5p6c,size_20,color_FFFFFF,t_70,g_se,x_16)

注：代码中有两个部分会更新dis【】，分别是直连距离和通过其他顶点]]></description><category></category></item><item><title><![CDATA[高龄白菜java学习第107天（java数据结构和算法（25））]]></title><link>https://blog.youkuaiyun.com/mangosea/article/details/121622037</link><guid>https://blog.youkuaiyun.com/mangosea/article/details/121622037</guid><author>mangosea</author><pubDate>Mon, 29 Nov 2021 23:06:33 +0800</pubDate><description><![CDATA[七、克鲁斯卡尔算法




逻辑：
获取排序后边的集合，保证优先添加权值最小的边，通过回路判断（终点是否一致）决定是否将边加入最终结果集
代码实现：
package Algorithm.Kruskal;

import java.lang.reflect.Array;
import java.util.Arrays;

//克鲁斯卡尔算法
public class KK {

    int edgeNum;//边的数量
    char[] vertex;//顶点数组
    int[][] matrix]]></description><category></category></item><item><title><![CDATA[高龄白菜java学习第106天（java数据结构和算法（24））]]></title><link>https://blog.youkuaiyun.com/mangosea/article/details/121600158</link><guid>https://blog.youkuaiyun.com/mangosea/article/details/121600158</guid><author>mangosea</author><pubDate>Sun, 28 Nov 2021 23:22:13 +0800</pubDate><description><![CDATA[六、普利姆算法





代码实现：
package Algorithm.Prim;

import java.util.Arrays;

public class Prim {
    public static void main(String[] args) {
        MGraph graph = new MGraph(7);
        MinTree minTree = new MinTree();
        char[] data ={'A','B','C','D','E',]]></description><category></category></item><item><title><![CDATA[高龄白菜java学习第105天（java数据结构和算法（23））]]></title><link>https://blog.youkuaiyun.com/mangosea/article/details/121583941</link><guid>https://blog.youkuaiyun.com/mangosea/article/details/121583941</guid><author>mangosea</author><pubDate>Sat, 27 Nov 2021 21:30:57 +0800</pubDate><description><![CDATA[四、KMP算法
kmp算法的学习主要参考了sofu6博主的帖子，链接如下： KMP算法详解
五、贪心算法

思路分析

1、取一轮中包含覆盖地区最多的key
2、在下一轮把已覆盖的地区从地区集合中去掉，直到地区集合为空
代码实现：
package Algorithm.GreedyAlgorithm;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;

p]]></description><category></category></item><item><title><![CDATA[高龄白菜java学习第104天（java数据结构和算法（22））]]></title><link>https://blog.youkuaiyun.com/mangosea/article/details/121548605</link><guid>https://blog.youkuaiyun.com/mangosea/article/details/121548605</guid><author>mangosea</author><pubDate>Thu, 25 Nov 2021 22:00:56 +0800</pubDate><description><![CDATA[第八章：十大算法
一、二分查找（非递归）
注：使用二分查找的前提是一个有序数组
package Algorithm;

//二分查找的非递归实现
public class BinarySearchNoRecursion {

    public static void main(String[] args) {
        int[] arr = {3,7,11,46};
        int index = binarySearch(arr, 11);
        System.out.pri]]></description><category></category></item><item><title><![CDATA[高龄白菜java学习第103天（java数据结构和算法（21））]]></title><link>https://blog.youkuaiyun.com/mangosea/article/details/121504761</link><guid>https://blog.youkuaiyun.com/mangosea/article/details/121504761</guid><author>mangosea</author><pubDate>Tue, 23 Nov 2021 22:44:45 +0800</pubDate><description><![CDATA[第七章：图






#### 一、图的创建
思路分析
1、用一个String数组保存顶点
2、用一个二维数组保存邻接矩阵
3、通过方法实现顶点之间边的添加和计数
package Graph;

import java.util.ArrayList;
import java.util.Arrays;

//图
public class Graph {

    private ArrayList&lt;String&gt; vertexList;//存储顶点
    private int[][] edg]]></description><category></category></item><item><title><![CDATA[高龄白菜java学习第102天（java数据结构和算法（20））]]></title><link>https://blog.youkuaiyun.com/mangosea/article/details/121483430</link><guid>https://blog.youkuaiyun.com/mangosea/article/details/121483430</guid><author>mangosea</author><pubDate>Mon, 22 Nov 2021 23:30:54 +0800</pubDate><description><![CDATA[十、多路查找树
B树就是一种多路树





插入的具体步骤：
（1）

（2）

（3）

B树，B+树,B*树




]]></description><category></category></item><item><title><![CDATA[高龄白菜java学习第101天（java数据结构和算法（19））]]></title><link>https://blog.youkuaiyun.com/mangosea/article/details/121460940</link><guid>https://blog.youkuaiyun.com/mangosea/article/details/121460940</guid><author>mangosea</author><pubDate>Sun, 21 Nov 2021 21:44:20 +0800</pubDate><description><![CDATA[九、平衡二叉树


左旋转


右旋转

双旋转

上图直接右旋转，最后仍不然是平衡二叉树
双旋转的第一旋，目的就是把二叉树转换成"外侧"高度&gt;"内侧"高度的标准格式，方便后续的旋转操作
package Tree.AVL;

public class demo {
    public static void main(String[] args) {
//        int[] arr = {4, 3, 6, 5, 7, 8};//右子树高
//        int[] arr = {10, ]]></description><category></category></item><item><title><![CDATA[高龄白菜java学习第一百天（java数据结构和算法（18）链表部分复习）]]></title><link>https://blog.youkuaiyun.com/mangosea/article/details/121441309</link><guid>https://blog.youkuaiyun.com/mangosea/article/details/121441309</guid><author>mangosea</author><pubDate>Sat, 20 Nov 2021 16:36:28 +0800</pubDate><description><![CDATA[出现的问题
1、单链表的反转。需要保存的是当前节点的next节点，而不是当前节点，否则用.属性名的方式修改next域之后，原链表仍然会断掉

2、从尾到头打印链表这个题目中不能在for循环当中作栈的pop操作，因为stack的size是会发生变化的

3、双链表自我删除时，temp.next.pre==temp.pre需要加判断来避免要删除的是最后一个节点

### 4、环形链表的构建时，For循环的条件取值需要注意，保障临时指针，在首节点first的取值之前（i==1），是不参与构建的

5、约瑟夫问题之]]></description><category></category></item><item><title><![CDATA[高龄白菜java学习第九十八、九天（java数据结构和算法（17））]]></title><link>https://blog.youkuaiyun.com/mangosea/article/details/121432590</link><guid>https://blog.youkuaiyun.com/mangosea/article/details/121432590</guid><author>mangosea</author><pubDate>Fri, 19 Nov 2021 22:55:05 +0800</pubDate><description><![CDATA[文件的压缩和解压(其余部分复用上面)
    //将一个文件压缩
    /**
     * @param srcFile   要压缩的文件的全路径
     * @param dstFile   压缩后要保存在哪里的全路径
     */
    public static void zipFile(String srcFile, String dstFile) throws IOException {
        FileInputStream is = null;
        FileOut]]></description><category></category></item><item><title><![CDATA[高龄白菜java学习第九十七天（java数据结构和算法（16））]]></title><link>https://blog.youkuaiyun.com/mangosea/article/details/121390735</link><guid>https://blog.youkuaiyun.com/mangosea/article/details/121390735</guid><author>mangosea</author><pubDate>Wed, 17 Nov 2021 23:42:37 +0800</pubDate><description><![CDATA[1、赫夫曼编码
2、使用赫夫曼编码生成编码数据
3、将编码数据解压回原文




压缩思路分析

解压思路分析
1、把压缩后得到的byte转换为二进制字符串
2、把字符串按照指定的编码进行解码（把赫夫曼编码表进行一次调换，因为要反向查询）
3、创建一个集合存放byte
4、通过newString方法把原字符串对应的byte数组转回字符串
package Tree.HuffManTree.HuffManCode;

import java.util.*;

import static java.lang.In]]></description><category></category></item><item><title><![CDATA[高龄白菜java学习第九十六天（java数据结构和算法（15））]]></title><link>https://blog.youkuaiyun.com/mangosea/article/details/121367782</link><guid>https://blog.youkuaiyun.com/mangosea/article/details/121367782</guid><author>mangosea</author><pubDate>Tue, 16 Nov 2021 23:10:20 +0800</pubDate><description><![CDATA[七、赫夫曼树





代码实现
package Tree.HuffManTree;

import java.util.ArrayList;
import java.util.Collections;

public class HuffManDemo {
    public static void main(String[] args) {
        int[] arr = {13,7,8,3,29,6,1};
        Node root = createHuffManTree(arr)]]></description><category></category></item><item><title><![CDATA[高龄白菜java学习第九十四、五天（java数据结构和算法（14））]]></title><link>https://blog.youkuaiyun.com/mangosea/article/details/121325043</link><guid>https://blog.youkuaiyun.com/mangosea/article/details/121325043</guid><author>mangosea</author><pubDate>Sun, 14 Nov 2021 22:27:25 +0800</pubDate><description><![CDATA[四、顺序存储二叉树

代码实现
package Tree.BinaryTree;

//顺序存储二叉树
public class ArrBinaryTree {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4, 5, 6, 7};
        ArrTree tree = new ArrTree(arr);
        tree.preOrder();
        System.out.pr]]></description><category></category></item></channel></rss>