<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Lin_Willen的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Lin_Willen</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Lin_Willen]]></copyright><item><title><![CDATA[MySQL数据库]]></title><link>https://blog.youkuaiyun.com/Lin_Willen/article/details/145695145</link><guid>https://blog.youkuaiyun.com/Lin_Willen/article/details/145695145</guid><author>Lin_Willen</author><pubDate>Thu, 14 Aug 2025 00:05:18 +0800</pubDate><description><![CDATA[B-树：

B+树：

（2）索引覆盖

（3）最左匹配原则

（4）索引下推

先理解：没有索引下推时的查询流程
当使用辅助索引（非聚簇索引，如联合索引）查询时，索引叶子节点只存储索引列的值和主键（用于回表查完整数据）。
问题：很多不满足 age > 20 的记录也被回表了，导致无效的磁盘 IO（回表需要读数据页）。
有索引下推时的优化：过滤逻辑 “下推” 到存储引擎
核心差异：把 age > 20 的过滤逻辑从服务器层 “下推” 到了存储引擎层，在索引层面就过滤掉无效记录，减少了回表次数
5、如何设计性]]></description><category></category></item><item><title><![CDATA[Spring注解驱动开发]]></title><link>https://blog.youkuaiyun.com/Lin_Willen/article/details/114682834</link><guid>https://blog.youkuaiyun.com/Lin_Willen/article/details/114682834</guid><author>Lin_Willen</author><pubDate>Tue, 08 Jul 2025 23:12:27 +0800</pubDate><description><![CDATA[Component@Override// 返回传入的原始bean，或者进行了包装之后的bean@Override// 返回传入的原始bean，或者进行了包装之后的bean中调用为bean填充属性，然后调用开始进行bean的初始化以及bean初始化的前后处理。调用方法：该方法会先调用；初始化前前置处理然后调用对bean进行初始化最后调用，初始化后置处理。会遍历所有的，执行每个的方法，如果某个返回null，则直接退出循环，不再执行后面的。]]></description><category></category></item><item><title><![CDATA[Nginx]]></title><link>https://blog.youkuaiyun.com/Lin_Willen/article/details/122524964</link><guid>https://blog.youkuaiyun.com/Lin_Willen/article/details/122524964</guid><author>Lin_Willen</author><pubDate>Sun, 16 Jan 2022 20:26:24 +0800</pubDate><description><![CDATA[一、 Nginx知识网络结构图

Nginx是一个高性能的HTTP反向代理服务器，特点是占用内存少，并发能力强，事实上nginx的并发能力确实在同类型的网页服务器中表现较好
nginx专为性能优化而开发，性能是其最重要的要求，十分注重效率，有报告nginx能支持高达50000个并发连接数
1.1 正向代理与反向代理
正向代理：局域网中的电脑用户想要直接访问网络是不可行的，只能通过代理服务器来访问，这种代理服务就被称为正向代理。

反向代理：客户端无法感知代理，因为客户端访问网络不需要配置，只要把请求发送到反]]></description><category></category></item><item><title><![CDATA[强引用、软引用、弱引用、虚引用（强软弱虚）]]></title><link>https://blog.youkuaiyun.com/Lin_Willen/article/details/122402176</link><guid>https://blog.youkuaiyun.com/Lin_Willen/article/details/122402176</guid><author>Lin_Willen</author><pubDate>Mon, 10 Jan 2022 01:20:58 +0800</pubDate><description><![CDATA[Java从1.2版本开始引入了4种引用，这4种引用的级别由高到低依次为：

强引用 &gt; 软引用 &gt; 弱引用 &gt; 虚引用

一、强引用（永不回收）

如果一个对象具有强引用，那垃圾回收器绝不会回收它。当内存空间不足，Java虚拟机宁愿抛出OutOfMemoryError错误，使程序异常终止，也不会靠随意回收具有强引用的对象来解决内存不足的问题。


public class StrongReferenceDemo {

    public static void main(Stri...]]></description><category></category></item><item><title><![CDATA[134. 加油站——中等]]></title><link>https://blog.youkuaiyun.com/Lin_Willen/article/details/115279042</link><guid>https://blog.youkuaiyun.com/Lin_Willen/article/details/115279042</guid><author>Lin_Willen</author><pubDate>Sun, 28 Mar 2021 17:25:03 +0800</pubDate><description><![CDATA[一、题目
在一条环路上有 N 个加油站，其中第 i 个加油站有汽油 gas[i] 升。
你有一辆油箱容量无限的的汽车，从第 i 个加油站开往第 i+1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发，开始时油箱为空。
如果你可以绕环路行驶一周，则返回出发时加油站的编号，否则返回 -1。

说明: 
如果题目有解，该答案即为唯一答案。
输入数组均为非空数组，且长度相同。
输入数组中的元素均为非负数。

示例 1:
输入: 
gas  = [1,2,3,4,5]
cost = [3,4,5,]]></description><category></category></item><item><title><![CDATA[JWT]]></title><link>https://blog.youkuaiyun.com/Lin_Willen/article/details/114228216</link><guid>https://blog.youkuaiyun.com/Lin_Willen/article/details/114228216</guid><author>Lin_Willen</author><pubDate>Sun, 28 Feb 2021 17:35:45 +0800</pubDate><description><![CDATA[一、什么是JWT
1、Json web token (JWT), 是一个开放标准（RFC 7519），它定义了一种紧凑且自包含的方式，用于在各方之间安全地将信息作为JSON对象传输。由于此信息是经过数字签名的，因此可以被验证和信任。可以使用秘密（使用HMAC算法）或使用RSA或ECDSA的公钥/私钥对对JWT进行签名。
2、通俗的解释：
JWT简称Json Web Token，也就是通过Json形式作为web应用中的令牌，用于在各方之间安全地将信息作为Json对象传输。在数据传输过程中还可以完成数据加密、签]]></description><category></category></item><item><title><![CDATA[198. 打家劫舍——中等]]></title><link>https://blog.youkuaiyun.com/Lin_Willen/article/details/114224591</link><guid>https://blog.youkuaiyun.com/Lin_Willen/article/details/114224591</guid><author>Lin_Willen</author><pubDate>Sun, 28 Feb 2021 15:30:45 +0800</pubDate><description><![CDATA[一、题目
你是一个专业的小偷，计划偷窃沿街的房屋。
每间房内都藏有一定的现金，影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统，
如果两间相邻的房屋在同一晚上被小偷闯入，系统会自动报警。
给定一个代表每个房屋存放金额的非负整数数组，计算你 不触动警报装置的情况下 ，一夜之内能够偷窃到的最高金额。

示例 1：
输入：[1,2,3,1]
输出：4
解释：偷窃 1 号房屋 (金额 = 1) ，然后偷窃 3 号房屋 (金额 = 3)。
     偷窃到的最高金额 = 1 + 3 = 4 。
     ]]></description><category></category></item><item><title><![CDATA[105. 从前序与中序遍历序列构造二叉树——中等]]></title><link>https://blog.youkuaiyun.com/Lin_Willen/article/details/113097923</link><guid>https://blog.youkuaiyun.com/Lin_Willen/article/details/113097923</guid><author>Lin_Willen</author><pubDate>Sun, 24 Jan 2021 22:13:21 +0800</pubDate><description><![CDATA[一、题目
根据一棵树的前序遍历与中序遍历构造二叉树。

注意:
你可以假设树中没有重复的元素。

例如，给出

前序遍历 preorder = [3,9,20,15,7]
中序遍历 inorder = [9,3,15,20,7]
返回如下的二叉树：

    3
   / \
  9  20
    /  \
   15   7


二、思路
对于任意一颗树而言，前序遍历的形式总是

[ 根节点, [左子树的前序遍历结果], [右子树的前序遍历结果] ]

即根节点总是前序遍历中的第一个节点。而中序遍历的形]]></description><category></category></item><item><title><![CDATA[Offer 54. 二叉搜索树的第k大节点]]></title><link>https://blog.youkuaiyun.com/Lin_Willen/article/details/113091865</link><guid>https://blog.youkuaiyun.com/Lin_Willen/article/details/113091865</guid><author>Lin_Willen</author><pubDate>Sun, 24 Jan 2021 16:38:29 +0800</pubDate><description><![CDATA[一、题目
给定一棵二叉搜索树，请找出其中第k大的节点。

示例 1:

输入: root = [3,1,4,null,2], k = 1
   3
  / \
 1   4
  \
   2
输出: 4
示例 2:

输入: root = [5,3,6,2,4,null,null,1], k = 3
       5
      / \
     3   6
    / \
   2   4
  /
 1
输出: 4
 

限制：

1 ≤ k ≤ 二叉搜索树元素个数


二、思路

二叉搜索树(二叉排序树]]></description><category></category></item><item><title><![CDATA[Offer68II.二叉树的最近公共祖先——简单]]></title><link>https://blog.youkuaiyun.com/Lin_Willen/article/details/113090563</link><guid>https://blog.youkuaiyun.com/Lin_Willen/article/details/113090563</guid><author>Lin_Willen</author><pubDate>Sun, 24 Jan 2021 15:33:47 +0800</pubDate><description><![CDATA[一、题目
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。

百度百科中最近公共祖先的定义为：“对于有根树 T 的两个结点 p、q，最近公共祖先表示为一个结点 x，
满足 x 是 p、q 的祖先且 x 的深度尽可能大（一个节点也可以是它自己的祖先）。”

例如，给定如下二叉树:  root = [3,5,1,6,2,0,8,null,null,7,4]

示例 1:

输入: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1
输出: 3
解释: 节]]></description><category></category></item><item><title><![CDATA[200、岛屿数量——中等]]></title><link>https://blog.youkuaiyun.com/Lin_Willen/article/details/112602041</link><guid>https://blog.youkuaiyun.com/Lin_Willen/article/details/112602041</guid><author>Lin_Willen</author><pubDate>Sun, 17 Jan 2021 13:26:52 +0800</pubDate><description><![CDATA[一、题目
给你一个由 '1'（陆地）和 '0'（水）组成的的二维网格，请你计算网格中岛屿的数量。

岛屿总是被水包围，并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。

此外，你可以假设该网格的四条边均被水包围。

 

示例 1：

输入：grid = [
  ["1","1","1","1","0"],
  ["1","1","0","1","0"],
  ["1","1","0","0","0"],
  ["0","0","0","0","0"]
]
输出：1
示例 2：

输入：gri]]></description><category></category></item><item><title><![CDATA[CommonJS和ES6模块的导入导出]]></title><link>https://blog.youkuaiyun.com/Lin_Willen/article/details/112645721</link><guid>https://blog.youkuaiyun.com/Lin_Willen/article/details/112645721</guid><author>Lin_Willen</author><pubDate>Fri, 15 Jan 2021 00:58:10 +0800</pubDate><description><![CDATA[一、模块
模块 就是一个js 文件，它实现了一部分功能，并且隐藏自己的内部实现，同时提供部分接口供其他模块使用。
模块有两个核心要素：


隐藏：模块内部实现


暴露：供外部使用的接口


任何一个正常的模块化标准，都应该 默认隐藏模块中的所有实现，而通过一些语法 或api 调用 来暴露接口。
1.1 模块导出

接口暴露的过程 就是模块的导出。

1.2 模块导入


当需要使用一个模块是，使用的是该模块暴露的部分（导出的部分），隐藏的部分是永远无法使用的


当通过某种语法 或 api 去使用一个模块]]></description><category></category></item><item><title><![CDATA[十一、Vue插槽]]></title><link>https://blog.youkuaiyun.com/Lin_Willen/article/details/112503233</link><guid>https://blog.youkuaiyun.com/Lin_Willen/article/details/112503233</guid><author>Lin_Willen</author><pubDate>Tue, 12 Jan 2021 00:47:21 +0800</pubDate><description><![CDATA[01-slot-插槽的基本使用
1.1 为什么使用slot
（一）slot翻译为插槽

在生活中很多地方都有插槽，电脑的USB插槽，插板当中的电源插槽
插槽的目的是让我们原来的设备具有更多的扩展性
比如电脑的USB我们可以插入U盘，硬盘，手机，音响，键盘，鼠标等

（二）组件的插槽

组件的插槽也是为了让我们封装的组件更具有扩展性
让使用者可以决定组件内部的一些内容到底展示什么

（三）例子：移动网站中的导航栏

移动开发中，几乎每个页面都有导航栏
导航栏我们必然会封装成一个插件，比如nav-bar组件
一]]></description><category></category></item><item><title><![CDATA[十、Vue组件化开发]]></title><link>https://blog.youkuaiyun.com/Lin_Willen/article/details/112425937</link><guid>https://blog.youkuaiyun.com/Lin_Willen/article/details/112425937</guid><author>Lin_Willen</author><pubDate>Sun, 10 Jan 2021 21:43:14 +0800</pubDate><description><![CDATA[01-组件化实现和使用步骤
1.1 什么是组件化？

人面对复杂问题的处理方式：

任何一个人处理信息的逻辑能力都是有限的
所以，当面对一个非常复杂的问题时，我们不太可能一次性搞定一大堆的内容
但是，我们人有一种天生的能力，就是将问题进行拆解
如果将一个复杂的问题，拆分成很多个可以处理的小问题，再将其放在整体当中，你会发现大的     问题也会迎刃而解


组件化也是类似的思想：

如果我们将一个页面中所有的处理逻辑全部放在一起，处理起来就会变得变得非常复杂，而且不利于后续的管理以及扩展
但如果，我们将一个]]></description><category></category></item><item><title><![CDATA[九、v-model的使用]]></title><link>https://blog.youkuaiyun.com/Lin_Willen/article/details/112423201</link><guid>https://blog.youkuaiyun.com/Lin_Willen/article/details/112423201</guid><author>Lin_Willen</author><pubDate>Sun, 10 Jan 2021 11:30:59 +0800</pubDate><description><![CDATA[01 v-model的使用和原理
1.1 v-model

表单控件在实际开发中式非常常见的，特别是对于用户信息的提交，需要大量的表单
Vue中使用v-model指令来实现表单元素和数据的双向绑定
案例解析：

当我们在输入框输入内容时
因为input中的v-model绑定了message，所以会实时将输入的内容传递给message,message发生改变
当message发生改变时，因为上面我们使用Mustache语法，将message的值插入到DOM中，所以会发生响应的改变
所以，通过v-model实现]]></description><category></category></item><item><title><![CDATA[八、书籍购物车案例]]></title><link>https://blog.youkuaiyun.com/Lin_Willen/article/details/112421078</link><guid>https://blog.youkuaiyun.com/Lin_Willen/article/details/112421078</guid><author>Lin_Willen</author><pubDate>Sun, 10 Jan 2021 01:22:45 +0800</pubDate><description><![CDATA[代码实战
&lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
&lt;head&gt;
  &lt;meta charset="UTF-8"&gt;
  &lt;title&gt;01-购物车案例&lt;/title&gt;
  &lt;style&gt;
    table {
      border: 1px solid #e9e9e9;
      border-collapse: collapse;
      border-spacing: 0;
    }]]></description><category></category></item><item><title><![CDATA[Error creating bean with name ‘dataSource‘ defined in class path resource]]></title><link>https://blog.youkuaiyun.com/Lin_Willen/article/details/112395013</link><guid>https://blog.youkuaiyun.com/Lin_Willen/article/details/112395013</guid><author>Lin_Willen</author><pubDate>Sat, 09 Jan 2021 18:05:49 +0800</pubDate><description><![CDATA[springboot+mybatis+druid，配置多数据源启动报错
原因：
1、根据标题报错显示创建不了‘dataSource’，这个bean，有理由想到springboot启动时自动配置扫描没有创建到该bean。
2、检查主启动类存放的位置，应该放在创建项目时填写GroupId对应的位置


...]]></description><category></category></item><item><title><![CDATA[56. 合并区间]]></title><link>https://blog.youkuaiyun.com/Lin_Willen/article/details/112306351</link><guid>https://blog.youkuaiyun.com/Lin_Willen/article/details/112306351</guid><author>Lin_Willen</author><pubDate>Thu, 07 Jan 2021 12:13:45 +0800</pubDate><description><![CDATA[一、题目
给出一个区间的集合，请合并所有重叠的区间。

示例 1:
输入: intervals = [[1,3],[2,6],[8,10],[15,18]]
输出: [[1,6],[8,10],[15,18]]
解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].

示例 2:
输入: intervals = [[1,4],[4,5]]
输出: [[1,5]]
解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间。
注意：输入类型已于2019年4月15日更改。 请重置默认代码定]]></description><category></category></item><item><title><![CDATA[七、Vue循环遍历]]></title><link>https://blog.youkuaiyun.com/Lin_Willen/article/details/112255606</link><guid>https://blog.youkuaiyun.com/Lin_Willen/article/details/112255606</guid><author>Lin_Willen</author><pubDate>Wed, 06 Jan 2021 00:56:46 +0800</pubDate><description><![CDATA[01-v-for遍历数组
1.1 代码实战
 &lt;!DOCTYPE html&gt;
&lt;html lang="en"&gt;
&lt;head&gt;
  &lt;meta charset="UTF-8"&gt;
  &lt;title&gt;01-v-for遍历数组&lt;/title&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;div id="app"&gt;
  &lt;!--  1.在遍历的过程中，没有使用索引值（下标值）--&gt;
  &lt;ul&gt;
]]></description><category></category></item><item><title><![CDATA[六、Vue条件判断]]></title><link>https://blog.youkuaiyun.com/Lin_Willen/article/details/112159318</link><guid>https://blog.youkuaiyun.com/Lin_Willen/article/details/112159318</guid><author>Lin_Willen</author><pubDate>Tue, 05 Jan 2021 02:06:46 +0800</pubDate><description><![CDATA[01-v-if,v-else-if,v-else的使用
1.1 v-if,v-else-if,v-else
1、v-if,v-else-if,v-else

这三个指令与JavaScript的条件语句if,else,else if类似
Vue的条件指令可以根据表达式的值在DOM中渲染或销毁元素或组件

2、v-if原理

v-if后面的条件为false时，对应的元素以及其子元素不会渲染
也就是根本没有不会有对应的标签出现在DOM中

1.2 代码实战
&lt;!DOCTYPE html&gt;
&lt;ht]]></description><category></category></item></channel></rss>