<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[绿水本无忧]]></title><description><![CDATA[正在学习]]></description><link>https://blog.youkuaiyun.com/Freedomer3</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Freedomer3]]></copyright><item><title><![CDATA[微信小程序以SpringBoot作为后端开发遇到的问题及解决思路总结]]></title><link>https://blog.youkuaiyun.com/Freedomer3/article/details/120753904</link><guid>https://blog.youkuaiyun.com/Freedomer3/article/details/120753904</guid><author>Freedomer3</author><pubDate>Wed, 13 Oct 2021 22:29:31 +0800</pubDate><description><![CDATA[背景

关键字：微信小程序、SpringBoot 项目、腾讯云服务器、SSL、HTTPS、Tomcat

注：本文记录了一个菜鸟解决问题的思路，觉得啰嗦可以略过，解决方案在文末。技术不精，文章有错误烦请指正。
最近想着做个小程序，后端使用 SpringBoot，直接跑在腾讯云服务器上。微信小程序要求配置指定的通信域名，意思是只能访问特定的服务器和接口。最关键的是这个域名需要使用 HTTPS 协议。配置 SSL 证书也不难，腾讯云上提供了免费的证书提供商，也提供了几种配置 SSL 证书的方法，比如使用 NGI]]></description><category></category></item><item><title><![CDATA[注解和反射]]></title><link>https://blog.youkuaiyun.com/Freedomer3/article/details/120378229</link><guid>https://blog.youkuaiyun.com/Freedomer3/article/details/120378229</guid><author>Freedomer3</author><pubDate>Sun, 19 Sep 2021 22:28:45 +0800</pubDate><description><![CDATA[注解概述
注解（Annotation） 可以理解为对代码的特殊标记，这些标记可以在编译、类加载、运行时被读取，并进行相应的处理。通过注解，开发人员可以在不改变原有代码和逻辑的情况下在源代码中嵌入补充信息。
内置注解

@Override：覆盖，该方法将覆盖或者实现超类中的方法。
@Deprecated：已过时的，该元素不鼓励程序员进行使用。
@SuppressWarnings：抑制该元素编译时的警告信息。

元注解
负责注解其他注解

@Target：指示当前注解类型适用的上下文元素类型，如字段、方法等。
]]></description><category></category></item><item><title><![CDATA[源码学习——HashMap]]></title><link>https://blog.youkuaiyun.com/Freedomer3/article/details/119889506</link><guid>https://blog.youkuaiyun.com/Freedomer3/article/details/119889506</guid><author>Freedomer3</author><pubDate>Tue, 24 Aug 2021 18:01:46 +0800</pubDate><description><![CDATA[文章目录继承关系内部节点类静态常量成员变量构造方法无参构造传入初始化容量大小和负载因子传入初始化容量大小添加扩容树化注意事项树化时机扩容时机
继承关系
UML 图示

内部节点类
与之前介绍的 LinkedList 使用的节点类有所不同，LinkedList 使用的节点类中荷载的只有数据，而这里需要一个 K-V 键值对。
static class Node&lt;K,V&gt; implements Map.Entry&lt;K,V&gt; {
    final int hash;
    final K]]></description><category></category></item><item><title><![CDATA[源码学习——LinkedList]]></title><link>https://blog.youkuaiyun.com/Freedomer3/article/details/119873925</link><guid>https://blog.youkuaiyun.com/Freedomer3/article/details/119873925</guid><author>Freedomer3</author><pubDate>Mon, 23 Aug 2021 19:17:37 +0800</pubDate><description><![CDATA[源码学习——ArrayList
文章目录前言继承关系内部节点类成员变量构造方法添加添加到末尾插入到指定位置添加一个集合删除删除一个元素查看修改双端队列相关LinkedList 和 ArrayList 的区别
前言
将常用的步骤解释的较为详尽易懂，若有错误麻烦指正。个人认为甚至些许啰嗦，建议有基础的同学直接看源码，源码更为直接了当易懂，且不会产生语句上的歧义。
继承关系
UML 图示


实现 List 接口，属于列表类
实现 Deque 接口，属于一个双端队列
实现 Cloneable 接口，可以重写 Ob]]></description><category></category></item><item><title><![CDATA[源码学习——ArrayList]]></title><link>https://blog.youkuaiyun.com/Freedomer3/article/details/119869153</link><guid>https://blog.youkuaiyun.com/Freedomer3/article/details/119869153</guid><author>Freedomer3</author><pubDate>Mon, 23 Aug 2021 17:16:22 +0800</pubDate><description><![CDATA[文章目录前言继承关系成员变量构造方法添加添加到列表末尾添加到固定位置添加一个集合删除删除一个元素删除部分元素查看修改
前言
将常用的步骤解释的较为详尽易懂，若有错误麻烦指正。个人认为甚至些许啰嗦，建议有基础的同学直接看源码，源码更为直接了当易懂，且不会产生语句上的歧义。
继承关系
UML 图示


实现 List 接口，属于列表类
实现 RandomAccess 接口，具备快速随机访问的能力。（所有的 list 都可以支持随机访问，但是不一定支持快速随机访问，有的可以通过迭代器，如 linkedList，与]]></description><category></category></item><item><title><![CDATA[缓存相关问题及解决方案]]></title><link>https://blog.youkuaiyun.com/Freedomer3/article/details/119350681</link><guid>https://blog.youkuaiyun.com/Freedomer3/article/details/119350681</guid><author>Freedomer3</author><pubDate>Fri, 20 Aug 2021 11:10:54 +0800</pubDate><description><![CDATA[缓存相关问题及解决方案
缓存穿透
问题： 指查询一个一定不存在的数据，缓存未命中，去查询数据库，但是数据库也没有该记录，返回为 null，不写入缓存里。之后每次查询这个不存在的数据都要穿透到数据库查询。高并发下数据库压力过大。
解决方案：

将该不存在的数据返回的 null 结果缓存，加上短暂的过期时间。
布隆过滤器。

缓存雪崩
问题： 指设置缓存时大面积的数据采用相同的过期时间，导致这一面积的缓存在某一时刻集体失效，所有请求落在数据库上，数据库压力过大。
解决方案： 在设置过期时间时，在一定的范围内使用]]></description><category></category></item><item><title><![CDATA[Redis 事务处理]]></title><link>https://blog.youkuaiyun.com/Freedomer3/article/details/119815669</link><guid>https://blog.youkuaiyun.com/Freedomer3/article/details/119815669</guid><author>Freedomer3</author><pubDate>Fri, 20 Aug 2021 10:05:52 +0800</pubDate><description><![CDATA[本文参考于 Redis 中文文档
相关命令

MULTI：multiple，多个，这里用来开启事务，总是返回 OK，之后的命令不会立即执行，而是进入一个命令队列。
EXEC：execute，执行，这里用来执行队列中的事务。
DISCARD：丢弃，这里用来丢弃队列中的所有事务。
WATCH：这里用来监视某些键， 如果有至少一个被监视的键在 EXEC 执行之前被修改了， 那么整个事务都会被取消。CAS（check and set）操作。

实现
准备三个键值对
2021 年 21 岁 体重 140
127.0.]]></description><category></category></item><item><title><![CDATA[延时队列实现数据的最终一致性]]></title><link>https://blog.youkuaiyun.com/Freedomer3/article/details/119729192</link><guid>https://blog.youkuaiyun.com/Freedomer3/article/details/119729192</guid><author>Freedomer3</author><pubDate>Mon, 16 Aug 2021 23:18:34 +0800</pubDate><description><![CDATA[文章目录实现场景可能出现的问题CAP 定理BASE 定理解决方案——Seata解决方案——延时队列延时队列方案具体实现使用消息队列的相关问题
实现场景
在分布式微服务场景下，实现用户提交订单的最后一步 submitOrder() 方法，首先需要将 order 实体保存到订单服务对应的数据库下，然后需要去仓储服务下锁定（预留）库存，锁定库存后还可能调用其他服务做其他事，又或者在当前订单服务下做其他事。
预留库存的原因是客户并不是立即支付的，往往会有预留一定的时间。下文的场景中，用户可以有 30 分钟的时间来支]]></description><category></category></item><item><title><![CDATA[缓存与分布式锁——Redisson]]></title><link>https://blog.youkuaiyun.com/Freedomer3/article/details/119376754</link><guid>https://blog.youkuaiyun.com/Freedomer3/article/details/119376754</guid><author>Freedomer3</author><pubDate>Wed, 04 Aug 2021 19:36:36 +0800</pubDate><description><![CDATA[Redisson
简介
整合
redisson 官方文档
Maven 依赖
&lt;!-- https://mvnrepository.com/artifact/org.redisson/redisson --&gt;
&lt;dependency&gt;
    &lt;groupId&gt;org.redisson&lt;/groupId&gt;
    &lt;artifactId&gt;redisson&lt;/artifactId&gt;
    &lt;version&gt;3.12.0&lt;]]></description><category></category></item><item><title><![CDATA[缓存与分布式锁——场景实现]]></title><link>https://blog.youkuaiyun.com/Freedomer3/article/details/119356657</link><guid>https://blog.youkuaiyun.com/Freedomer3/article/details/119356657</guid><author>Freedomer3</author><pubDate>Tue, 03 Aug 2021 21:34:43 +0800</pubDate><description><![CDATA[文章目录版本 1.0 本地锁原生场景缓存缓存击穿版本 2.0 分布式锁基本原理SETNX分布式锁-阶段 1分布式锁-阶段 2分布式锁-阶段 3分布式锁-阶段 4
版本 1.0 本地锁
原生场景
进入一个网站首页，首页向后端发送请求，后端向数据库请求几百个数据的商品分类信息。
向数据库查询分类信息
// 向数据库查询分类信息
String getCatalogJsonFromDB(){
    String res = null;
   /*
   get res from db
    */
    ret]]></description><category></category></item><item><title><![CDATA[性能与压力测试]]></title><link>https://blog.youkuaiyun.com/Freedomer3/article/details/119329384</link><guid>https://blog.youkuaiyun.com/Freedomer3/article/details/119329384</guid><author>Freedomer3</author><pubDate>Tue, 03 Aug 2021 10:15:35 +0800</pubDate><description><![CDATA[文章目录性能与压力测试性能指标JMeter的安装和使用测试中间件的优化业务优化jvisualvm 的使用与分析模拟内存溢出JVM 优化
性能与压力测试
性能指标

响应时间：Response Time，RT 指用户从客户端发起一个请求到接收从服务端返回的响应耗费的时间。
每秒点击次数：Hits Per Second，HPS
每秒处理交易数：Transaction Per Second，TPS
每秒处理查询次数：Query Per Second，QPS
最大响应时间：Max Response Time，MRT]]></description><category></category></item><item><title><![CDATA[Elasticsearch 实战（五、整合到 Java 项目）]]></title><link>https://blog.youkuaiyun.com/Freedomer3/article/details/119253473</link><guid>https://blog.youkuaiyun.com/Freedomer3/article/details/119253473</guid><author>Freedomer3</author><pubDate>Fri, 30 Jul 2021 20:47:12 +0800</pubDate><description><![CDATA[ES 官方 Java REST Client 文档
创建项目
创建一个 springboot 项目 lvshui5u-search
添加依赖
		&lt;dependency&gt;
            &lt;groupId&gt;org.elasticsearch.client&lt;/groupId&gt;
            &lt;artifactId&gt;elasticsearch-rest-high-level-client&lt;/artifactId&gt;
          ]]></description><category></category></item><item><title><![CDATA[Elasticsearch 实战（四、分词与IK分词器）]]></title><link>https://blog.youkuaiyun.com/Freedomer3/article/details/119251035</link><guid>https://blog.youkuaiyun.com/Freedomer3/article/details/119251035</guid><author>Freedomer3</author><pubDate>Fri, 30 Jul 2021 17:39:07 +0800</pubDate><description><![CDATA[官方分词器的使用
使用分词器的格式如下
POST _analyze
{
  "analyzer": "standard",
  "text": "i am a good-boy"
}

其中 analyzer 参数用来指定分词器，text 位置指定需要分词的语句。
可登录 ES 官方文档-分词器 查看分词器种类，例中使用标准 standard 分词器。
标准分词器将文本划分为单词边界上的术语，如 Unicode 文本分割算法所定义。它删除了大多数标点符号。
分词结果：
{
  "tokens" : [
  ]]></description><category></category></item><item><title><![CDATA[Elasticsearch 实战（三、进阶检索）]]></title><link>https://blog.youkuaiyun.com/Freedomer3/article/details/119212589</link><guid>https://blog.youkuaiyun.com/Freedomer3/article/details/119212589</guid><author>Freedomer3</author><pubDate>Thu, 29 Jul 2021 15:29:32 +0800</pubDate><description><![CDATA[我写也是流水账
直接看文档  ES 官方文档

]]></description><category></category></item><item><title><![CDATA[Elasticsearch 实战（二、简单检索）]]></title><link>https://blog.youkuaiyun.com/Freedomer3/article/details/119184343</link><guid>https://blog.youkuaiyun.com/Freedomer3/article/details/119184343</guid><author>Freedomer3</author><pubDate>Wed, 28 Jul 2021 20:13:41 +0800</pubDate><description><![CDATA[Elasticsearch
_cat： 查询 es 相关的一些信息

/_cat/nodes  查看 es 内节点信息
/_cat/health  查看 es 的健康状况
/_cat/master  查看主节点信息
/_cat/indices  查看所有索引信息


保存一条数据
PUT 方式
使用 put 方式发送数据时，需要指定 Index/Type/Id
// 例中 Index 为 amdin， Type 为 advanced，指定 id 为1
http://100.100.100.100:9200/]]></description><category></category></item><item><title><![CDATA[Elasticsearch 实战（一、基本概念与安装使用）]]></title><link>https://blog.youkuaiyun.com/Freedomer3/article/details/119180678</link><guid>https://blog.youkuaiyun.com/Freedomer3/article/details/119180678</guid><author>Freedomer3</author><pubDate>Wed, 28 Jul 2021 16:34:59 +0800</pubDate><description><![CDATA[Elasticsearch
作用： 快速存储、搜索和分析海量数据。
基本概念
Index 索引： 类似 MySQL 中的 Insert，指插入（索引）一条数据；也可以类似为 MySQL 中的  Database，一个数据库（索引）。
Type： 类似于 MySQL 中的 table，可以理解成一张表（一个类型）。
Document： 一条记录，以 json 格式存储。
安装
使用 Docker 安装
命令中含有注释，请勿直接复制粘贴
下载
docker pull elasticsearch:7.4.2

配]]></description><category></category></item><item><title><![CDATA[MySQL 一条查询语句的执行过程]]></title><link>https://blog.youkuaiyun.com/Freedomer3/article/details/118888004</link><guid>https://blog.youkuaiyun.com/Freedomer3/article/details/118888004</guid><author>Freedomer3</author><pubDate>Mon, 19 Jul 2021 09:12:31 +0800</pubDate><description><![CDATA[一条 sql 查询语句的执行过程


客户端（client）通过连接器（Connection Handing &amp; net I/O）连接到 MySQL 服务器。
如果服务器开启了查询缓存，则去检查缓存（Query Cache），如果缓存中有结果集，则直接返回结果集。
MySQL 通过语法解析器（Parser）对 SQL 语句进行解析，它将使用 MySQL 语法规则对解析树进行验证和解析，例如验证是否使用错误的关键字、使用关键字的顺序是否正确，或者字符串上面的引号有没有闭合等。
查询优化器（Optimi]]></description><category></category></item><item><title><![CDATA[设计模式之工厂方法模式]]></title><link>https://blog.youkuaiyun.com/Freedomer3/article/details/118875335</link><guid>https://blog.youkuaiyun.com/Freedomer3/article/details/118875335</guid><author>Freedomer3</author><pubDate>Sun, 18 Jul 2021 15:03:45 +0800</pubDate><description><![CDATA[设计模式之工厂方法模式
定义： Define an interface for creating an object,but let subclasses decide which class to  instantiate. Factory Method lets a class defer instantiation to subclasses. 定义一个用于创建对象的接口，让子类决定实例化哪一个类。工厂方法让一个类的实例化延迟到它的子类。
优点：

良好的封装性，代码结构清晰，降低模块间的耦合。
扩展]]></description><category></category></item><item><title><![CDATA[设计模式之单例模式]]></title><link>https://blog.youkuaiyun.com/Freedomer3/article/details/118873390</link><guid>https://blog.youkuaiyun.com/Freedomer3/article/details/118873390</guid><author>Freedomer3</author><pubDate>Sun, 18 Jul 2021 10:18:11 +0800</pubDate><description><![CDATA[设计模式之单例模式
定义： Ensure a class has only one instance, and provide a global point of access to it. 确保一个类只有一个实例，而且自行实例化并向整个系统提供访问。
优点：

单例模式在内存中只有一个实例，减少了内存开支和系统的性能开销。特别是在一个对象需要频繁地被创建、销毁情况下。
单例模式可以避免对资源的多重占用，比如一个写文件动作，由于只有一个实例存在，避免了对一个资源文件的同时写。
单例模式在系统上设置全局的访问]]></description><category></category></item><item><title><![CDATA[Redis LRU 策略]]></title><link>https://blog.youkuaiyun.com/Freedomer3/article/details/118695175</link><guid>https://blog.youkuaiyun.com/Freedomer3/article/details/118695175</guid><author>Freedomer3</author><pubDate>Wed, 14 Jul 2021 11:01:50 +0800</pubDate><description><![CDATA[Redis LRU 策略

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