<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[styhm的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/styhm</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; styhm]]></copyright><item><title><![CDATA[Mysql为什么要使用索引，一般索引结构是什么样的？]]></title><link>https://blog.youkuaiyun.com/styhm/article/details/115041051</link><guid>https://blog.youkuaiyun.com/styhm/article/details/115041051</guid><author>styhm</author><pubDate>Sun, 21 Mar 2021 10:52:24 +0800</pubDate><description><![CDATA[1、Mysql引擎InnoDb下，使用索引能快速定位到数据。

索引分类：主索引（一级索引，聚簇索引），二级索引（非主键索引）

注：聚簇索引的特点是该列数据具有唯一性的，并不一定聚簇索引就一定是主键索引，但主键索引一定是聚簇索引。

2、Mysql的索引数据结构是B+树

为什么是B+tree呢，而不是单链表，或者是Btree

这是B+tree的性质决定的。

链表显然有致命的缺点:千万数据的索引，如果用链表作为索引，最差情况需要千万次IO，因为数据只有读到内存中才能比较是否拿到需要的数据。链表一个节点]]></description><category></category></item><item><title><![CDATA[Mysql MVCC多并发版本控制]]></title><link>https://blog.youkuaiyun.com/styhm/article/details/114304059</link><guid>https://blog.youkuaiyun.com/styhm/article/details/114304059</guid><author>styhm</author><pubDate>Wed, 03 Mar 2021 14:10:25 +0800</pubDate><description><![CDATA[mysql mvcc理解
1.mysql事务隔离级别
1.1).读未提交 | read uncommitted : 读取尚未提交的数据 ：就是脏读
1.2).读已提交 | read committed：读取已经提交的数据 ：可以解决脏读，存在重复读，幻读问题（RC）
1.3).不可重复度 | repeatable read：重读读取：可以解决脏读 和 不可重复读 ,存在幻读问题（RR，mysql默认隔离级别）
1.4).serializable：串行化：可以解决 脏读 不可重复读 和 幻读---相当于锁表（]]></description><category></category></item><item><title><![CDATA[java高级面试总结]]></title><link>https://blog.youkuaiyun.com/styhm/article/details/114281777</link><guid>https://blog.youkuaiyun.com/styhm/article/details/114281777</guid><author>styhm</author><pubDate>Tue, 02 Mar 2021 11:45:16 +0800</pubDate><description><![CDATA[面试总结
### **Java基础**
	1.Java序列化，怎么让一个字段不参与序列化，序列化serialVersionUID有什么用
Redis
1.速度快，因为数据存在内存中，类似于HashMap，HashMap的优势就是查找和操作的时间复杂度都是O(1)
2.序列化两种：RDB，AOF
3.怎么防止redis击穿
4.redis的优势是什么
5.redis有什么需要注意的地方，master不要备份，主从最好在局域网中，slave做备份
6.Redis Sentinel着眼于高可用，在master宕机]]></description><category></category></item><item><title><![CDATA[HashMap结构]]></title><link>https://blog.youkuaiyun.com/styhm/article/details/111227145</link><guid>https://blog.youkuaiyun.com/styhm/article/details/111227145</guid><author>styhm</author><pubDate>Tue, 15 Dec 2020 17:43:29 +0800</pubDate><description><![CDATA[HashMap结构及版本区别

1、HashMap：

继承于AbstractMap，实现了Map、Cloneable、java.io.Serializable接口。

是散列分布存储的，通过key/value结构实现。其中key和value都可以是null，是无序的。

2、HashMap的结构

2.1、jdk1.7采用数组+ 单链表的数据结构

hashMap 在1.7的结构



hash表是一个数组，根据索引将条目存入hash表中，如果出现hash索引相同的时候，将会以链表的形式在同一个索引处储.]]></description><category></category></item><item><title><![CDATA[hashmap死锁的产生]]></title><link>https://blog.youkuaiyun.com/styhm/article/details/111227027</link><guid>https://blog.youkuaiyun.com/styhm/article/details/111227027</guid><author>styhm</author><pubDate>Tue, 15 Dec 2020 17:39:38 +0800</pubDate><description><![CDATA[都说hashmap是线程不安全的，多线程时候容易造成死锁

死锁的原因就在扩容的时候

原hashmap结构图假如如下，A、B是hashmap其中两个Entry，在扩容之前具有相同的index，形成链表结构，如图





1、线程一运行到Entry A, B = A.next，运行完这行后。线程一进入线程等待（此时链表关系A.next = B）



2、线程二正常运行，顺利完成扩容，在偶尔情况下恰好扩容之后A、B，在newTable中还是拥有相同的index，但此时由于经过了一次扩容，由于扩容过程也是.]]></description><category></category></item><item><title><![CDATA[hashMap1.7头插法及扩容]]></title><link>https://blog.youkuaiyun.com/styhm/article/details/111212508</link><guid>https://blog.youkuaiyun.com/styhm/article/details/111212508</guid><author>styhm</author><pubDate>Tue, 15 Dec 2020 15:16:05 +0800</pubDate><description><![CDATA[hashmap头插法是在jdk1.7之前版本中存在的。

1、什么是头插法

hashmap结构内部table表，当不同的元素hash相等的时候，在改位置table[i]形成链表，相同位置后来者插入到链表表头的位置


    public V put(K key, V value) {
        if (table == EMPTY_TABLE) {
            inflateTable(threshold);
        }
        if (key == null)
   ]]></description><category></category></item><item><title><![CDATA[为什么hashmap的容量必须是2的n次幂]]></title><link>https://blog.youkuaiyun.com/styhm/article/details/109778522</link><guid>https://blog.youkuaiyun.com/styhm/article/details/109778522</guid><author>styhm</author><pubDate>Wed, 18 Nov 2020 18:31:06 +0800</pubDate><description><![CDATA[要明白为什么是2的n次幂，这要从hashmap的hashCode方式说起，hashmap的容量期望就是用来均匀散列存放map中的元素。hashmap根据hash值把元素放到hashmap内部数组的一个位置上。

1、为什么hashmap的容量必须是2的n次幂？？

我们不妨先看看hashCode的原理，以String为列，获取hashCode的方法源码


    public int hashCode() {
        int h = hash;
        if (h == 0 &amp...]]></description><category></category></item><item><title><![CDATA[mysql 数据库索引b+树深度问题]]></title><link>https://blog.youkuaiyun.com/styhm/article/details/109512895</link><guid>https://blog.youkuaiyun.com/styhm/article/details/109512895</guid><author>styhm</author><pubDate>Thu, 05 Nov 2020 16:36:00 +0800</pubDate><description><![CDATA[常见面试题：mysql数据库一颗b+数据深度大概是多少？

这要从b+树的结构和数据库索引大小去分析问题，索引字段占内存大小，指针占内存大小（6字节 6Byte,或者6B）

1、先看看b+树结构

下面看一颗树



第一行中，1，320为索引数据排序后的数据范围，1-30，320-32 对应的是页指针，指向下一页

* b+树非叶子节点存放的都是key+nest指针。叶子节点存放数据

*在mysql索引b+树中，非叶子节点键值数=子节点数

2、计算

在mysql索引中索引页默认大小16k


S.]]></description><category></category></item><item><title><![CDATA[spring cloud feign 熔断hystrix]]></title><link>https://blog.youkuaiyun.com/styhm/article/details/108771052</link><guid>https://blog.youkuaiyun.com/styhm/article/details/108771052</guid><author>styhm</author><pubDate>Thu, 24 Sep 2020 11:56:22 +0800</pubDate><description><![CDATA[熔断是为了避免雪崩现象。

eureka-server和eureka-provider就不在赘述。

consumer项目pom


&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.a.]]></description><category></category></item><item><title><![CDATA[springcloud + ribbon重试策略]]></title><link>https://blog.youkuaiyun.com/styhm/article/details/108670773</link><guid>https://blog.youkuaiyun.com/styhm/article/details/108670773</guid><author>styhm</author><pubDate>Fri, 18 Sep 2020 18:28:54 +0800</pubDate><description><![CDATA[1、本例采用spring cloud feign + eureka 实现

2、feign底层其实用的ribbon实现负载均衡

3、代码分析

provider1代码如下：


@Slf4j
@RestController
public class TestController {

    @GetMapping("/hello")
    public Object hello() throws InterruptedException {
        log.info("service prov]]></description><category></category></item><item><title><![CDATA[spring cloud之ribbon负载均衡，eureka分布式服务注册]]></title><link>https://blog.youkuaiyun.com/styhm/article/details/108646696</link><guid>https://blog.youkuaiyun.com/styhm/article/details/108646696</guid><author>styhm</author><pubDate>Thu, 17 Sep 2020 17:48:35 +0800</pubDate><description><![CDATA[目录

一、目标

二、组成成员

三、示例



一、目标

学会使用spring cloud ribbon进行服务负载调度，所有微服务由eureka发现注册服务。

二、组成成员

整个模块可以分化为3个部分：server管理中心（eureka-server），微服务群（eureka-provider），调用发起端（consumer）

eureka-server：提供服务注册和发现
	eureka-provider：服务提供方将自身服务注册到Eureka,从而使服务消费方能够找到（向注册中心服务注册.]]></description><category></category></item><item><title><![CDATA[vue element-ui el-form表单验证表单验证，数值输入验证踩坑]]></title><link>https://blog.youkuaiyun.com/styhm/article/details/107715363</link><guid>https://blog.youkuaiyun.com/styhm/article/details/107715363</guid><author>styhm</author><pubDate>Fri, 31 Jul 2020 16:06:56 +0800</pubDate><description><![CDATA[1、官网介绍表单验证使用https://element.faas.ele.me/#/zh-CN/component/form#biao-dan-yan-zheng

2、所遇到的问题，当字段是数字类型的时候，输入input后，验证不通过

原因是


el-input默认值的类型是字符串类型

输入即使是数字，也被el-input 自己处理成了字符换数字。

3、解决办法


&lt;el-form-item class="base_block" label="渠道号" prop="channelId" l]]></description><category></category></item><item><title><![CDATA[vue刷新浏览器后，存在全局getters的数据丢失]]></title><link>https://blog.youkuaiyun.com/styhm/article/details/107556747</link><guid>https://blog.youkuaiyun.com/styhm/article/details/107556747</guid><author>styhm</author><pubDate>Fri, 24 Jul 2020 11:15:34 +0800</pubDate><description><![CDATA[问题：vue项目登陆后，将用户相关信息存在getters中，然后在项目中取getters中的username显示在右上角。

登陆进入后，显示没问题



浏览器直接刷新后：



先记录问题，解决后更新
]]></description><category></category></item><item><title><![CDATA[vue 启动报错，但是没有错误信息 Failed to compile with 1 errors]]></title><link>https://blog.youkuaiyun.com/styhm/article/details/107556298</link><guid>https://blog.youkuaiyun.com/styhm/article/details/107556298</guid><author>styhm</author><pubDate>Fri, 24 Jul 2020 11:08:15 +0800</pubDate><description><![CDATA[vue webpack2.0 有报错但是没有错误提示





完全看不到错误信息，懵逼



昨天还运行好好的项目，今天一来启动搞这

搜了下码友们遇到类似的问题；

npm run build

打印出详细信息：

意思就是找不到：/workspace/wp_202002/myroject_name/index.vue.html

联想到我刚把其中一个module的index.vue删掉了，然后idea给我提示啥玩意，没看完就手一哆嗦点了确定。

事实上，这一哆嗦修改了基础配置文件

webpack..]]></description><category></category></item><item><title><![CDATA[怎样理解快速排序]]></title><link>https://blog.youkuaiyun.com/styhm/article/details/103744952</link><guid>https://blog.youkuaiyun.com/styhm/article/details/103744952</guid><author>styhm</author><pubDate>Sat, 28 Dec 2019 16:19:48 +0800</pubDate><description><![CDATA[一.原理

快速排序:干说原理

先从数组中选出一个值,作为权重temp,然后从数组最右边high(其中一边都行)开始,向左边遍历(记最左边为low)
	如果arr[high]比temp大,那么不管,high继续向左移动
	如果arr[high]比temp小,那么此时
	arr[low] = arr[high]
	当找到第一个赋值的地方的时候,不在继续high--;这个时候从左边开始
	如果arr...]]></description><category></category></item><item><title><![CDATA[怎样理解插入排序]]></title><link>https://blog.youkuaiyun.com/styhm/article/details/103736672</link><guid>https://blog.youkuaiyun.com/styhm/article/details/103736672</guid><author>styhm</author><pubDate>Sat, 28 Dec 2019 10:09:09 +0800</pubDate><description><![CDATA[插入排序,把数组从第一个元素开始,每往后一个,将后一个元素插入到前面,使得前面的是序的.

给定无序数组如下：



把数组的首元素5作为有序区，此时有序区只有这一个元素：



第一轮

让元素8和有序区的元素依次比较。

8&gt;5，所以元素8和元素5无需交换。

此时有序区的元素增加到两个：



第二轮

让元素6和有序区的元素依次比较。

6&lt;8，所以把元素6和元素8进行交换：
...]]></description><category></category></item><item><title><![CDATA[怎样理解选择排序]]></title><link>https://blog.youkuaiyun.com/styhm/article/details/103735382</link><guid>https://blog.youkuaiyun.com/styhm/article/details/103735382</guid><author>styhm</author><pubDate>Fri, 27 Dec 2019 17:02:51 +0800</pubDate><description><![CDATA[为什么叫选择排序:就是先选择出最小的放前边(最大放后边)

选择排序,和冒泡排序一样,还是双层循环

用内层for选择出最小,然后把最小交换到最前,只需要交换一次.

原数组:[5, 8, 6, 3, 9, 2, 1, 7]
第0轮[] - [5,8,6,3,9,2,1,7]剩余最小数array[6]=1.交换5和1
第1轮[1] - [8,6,3,9,2,5,7]剩余最小数array[5]=2....]]></description><category></category></item><item><title><![CDATA[怎样理解冒泡排序]]></title><link>https://blog.youkuaiyun.com/styhm/article/details/103729795</link><guid>https://blog.youkuaiyun.com/styhm/article/details/103729795</guid><author>styhm</author><pubDate>Fri, 27 Dec 2019 13:14:40 +0800</pubDate><description><![CDATA[一.什么是冒泡排序

1.不断比较两个相邻元素,将大的往后或者往前排,就像水里的泡泡一样,越往后越接近水面泡泡体积越大,由此得名.

用图来说明:


冒泡排序

2.用java代码实现冒泡排序



    // ============================= 第0版 开始 ======================
    @Test
    public void sort01...]]></description><category></category></item><item><title><![CDATA[延迟调度实现]]></title><link>https://blog.youkuaiyun.com/styhm/article/details/103682884</link><guid>https://blog.youkuaiyun.com/styhm/article/details/103682884</guid><author>styhm</author><pubDate>Tue, 24 Dec 2019 14:59:53 +0800</pubDate><description><![CDATA[很多时候我们想把事件在某些事件之后执行

如：提交失败的数据每隔一些时间段执行一次（1min，30min，2h）
如：订单下单没有付款，第1天，第3天发短信提示

一、这就需要延迟调度实现，本文介绍两种方式

1、使用消息中间件rabbitmq延迟死信队列实现

rabbitmq方式类图展示


rabbitmq


package cn.quantgroup.cashloanflow.confi...]]></description><category></category></item><item><title><![CDATA[认识rabbitmq死信队列]]></title><link>https://blog.youkuaiyun.com/styhm/article/details/103682506</link><guid>https://blog.youkuaiyun.com/styhm/article/details/103682506</guid><author>styhm</author><pubDate>Tue, 24 Dec 2019 14:33:15 +0800</pubDate><description><![CDATA[rabbitmq死信队列：当消息在队列中过期，消息就会被投放到是死信Exchange

demo地址：https://github.com/foxiaotao/springboot-rabbitmq-demo

1、消息的过期分为两种：一种方式是设置队列的TTL，该队列中所有的消息的过期时间都一样，当消息过期后，消息跟根据Queue设置的死信Exchang 和routingkey路由到某个队列

...]]></description><category></category></item></channel></rss>