<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Janson_Lin]]></title><description><![CDATA[梦想多没好也不要忘记你手头的工作！]]></description><link>https://blog.youkuaiyun.com/Janson_Lin</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Janson_Lin]]></copyright><item><title><![CDATA[【设计模式】带你从0到1学习设计模式之六大原则（一）]]></title><link>https://blog.youkuaiyun.com/Janson_Lin/article/details/151395504</link><guid>https://blog.youkuaiyun.com/Janson_Lin/article/details/151395504</guid><author>Janson_Lin</author><pubDate>Wed, 10 Sep 2025 10:09:45 +0800</pubDate><description><![CDATA[以前的文章也写过一些设计模式的文章，但是经过思考与沉淀，我决定从新开始，写一些设计模式的文章。]]></description><category></category></item><item><title><![CDATA[Conda 命令]]></title><link>https://blog.youkuaiyun.com/Janson_Lin/article/details/137147586</link><guid>https://blog.youkuaiyun.com/Janson_Lin/article/details/137147586</guid><author>Janson_Lin</author><pubDate>Fri, 29 Mar 2024 15:41:45 +0800</pubDate><description><![CDATA[获取版本号Anaconda的安装文件都包含在一个目录中，直接将该目录删除即可。Linux系统下建议将.bashrc中的Anaconda路径也删掉上面得出的会有一个下载地址，通过下面不能直接mv，下面操作必须在base上进行)~/.condarc文件#显示目前conda的数据源有哪些#添加数据源：如清华源#删除数据源#显示目前pip的数据源有哪些# 添加#添加全局使用该数据源# 删除# 例如#搜索# 升级pip---总结pip国内的相关源14.]]></description><category></category></item><item><title><![CDATA[MySQL用B+树(而不是B树)做索引的原因]]></title><link>https://blog.youkuaiyun.com/Janson_Lin/article/details/123099595</link><guid>https://blog.youkuaiyun.com/Janson_Lin/article/details/123099595</guid><author>Janson_Lin</author><pubDate>Wed, 23 Feb 2022 21:20:37 +0800</pubDate><description><![CDATA[众所周知，MySQL的索引使用了B+树的数据结构。那么为什么不用B树呢？
先看一下B树和B+树的区别。

1.B树

维基百科对B树的定义为“在计算机科学中，B树（B-tree）是一种树状数据结构，它能够存储数据、对其进行排序并允许以O(log n)的时间复杂度运行进行查找、顺序读取、插入和删除的数据结构。B树，概括来说是一个节点可以拥有多于2个子节点的二叉查找树。与自平衡二叉查找树不同，B-树为系统最优化大块数据的读和写操作。B-tree算法减少定位记录时所经历的中间过程，从而加快存取速度。普遍运用在数据]]></description><category></category></item><item><title><![CDATA[之前写参数校验(Validator)，差点被劝退...]]></title><link>https://blog.youkuaiyun.com/Janson_Lin/article/details/122358993</link><guid>https://blog.youkuaiyun.com/Janson_Lin/article/details/122358993</guid><author>Janson_Lin</author><pubDate>Fri, 07 Jan 2022 10:24:45 +0800</pubDate><description><![CDATA[为什么要用validator


	javax.validation的一系列注解可以帮我们完成参数校验,免去繁琐的串行校验

	不然我们的代码就像下面这样:
	

//http://localhost:8080/api/user/save/serial

/**
*走串行校验
*
*@paramuserVO
*@return
*/
@PostMapping("/save/serial")
publicObjectsa...]]></description><category></category></item><item><title><![CDATA[Redis到底是多线程还是单线程？]]></title><link>https://blog.youkuaiyun.com/Janson_Lin/article/details/121740173</link><guid>https://blog.youkuaiyun.com/Janson_Lin/article/details/121740173</guid><author>Janson_Lin</author><pubDate>Mon, 06 Dec 2021 09:34:32 +0800</pubDate><description><![CDATA[1、Redis 单线程到底指什么？

没错，大家所熟知的 Redis 确实是单线程模型，指的是执行 Redis 命令的核心模块是单线程的，而不是整个 Redis 实例就一个线程，Redis 其他模块还有各自模块的线程的。

下面这个解释比较好：




Redis基于Reactor模式开发了网络事件处理器，这个处理器被称为文件事件处理器。它的组成结构为4部分：多个套接字、IO多路复用程序、文件事件分派器、事件处理器。
因为文件事件分派器队列的消费是单线程的，所以Redis才叫单线程模型。


2、Redi.]]></description><category></category></item><item><title><![CDATA[【PMP】燃起图燃尽图分析]]></title><link>https://blog.youkuaiyun.com/Janson_Lin/article/details/121540229</link><guid>https://blog.youkuaiyun.com/Janson_Lin/article/details/121540229</guid><author>Janson_Lin</author><pubDate>Thu, 25 Nov 2021 16:09:35 +0800</pubDate><description><![CDATA[Scrum中采用燃尽图（Burndown Chart）来直观得展现项目总体进度。它展示了时间和项目剩余总体工作量间的关系。燃尽图（burn down chart）是在项目完成之前，对需要完成的工作的一种可视化表示。理想情况下，该图表是一个向下的曲线，随着剩余工作的完成，“烧尽”至零。示例如下：





燃起图（Burnup Chart），它能够直观展现项目时间与已完成的工作间的关系的一种图表，根据每天完成的story情况动态展现工作成果的曲线。因为燃起图可以区分不同角色展现工作量完成状况，更易跟踪和理解.]]></description><category></category></item><item><title><![CDATA[【PMP】数据表现]]></title><link>https://blog.youkuaiyun.com/Janson_Lin/article/details/121537142</link><guid>https://blog.youkuaiyun.com/Janson_Lin/article/details/121537142</guid><author>Janson_Lin</author><pubDate>Thu, 25 Nov 2021 14:34:04 +0800</pubDate><description><![CDATA[适用于本过程的数据表现术包括（但不限于）：

流程图。流程图，也称过程图，用来显示在一个或多个输入转化成一个或多个输出的过程中，所需要的步骤顺序和可能分支。它通过映射水平价值链的过程细节来显示活动、决策点、分支循环、并行路径及整体处理顺序。图 8-6 展示了其中一个版本的价值链，即 SIPOC（供应商、输入、过程、输出和客户）模型。流程图可能有助于了解和估算一个过程的质量成本。通过工作流的逻辑分支及其相对频率来估算质量成本。这些逻辑分支细分为完成符合要求的输出而需要开展的一致性工作和非一致性工作。用于展示过]]></description><category></category></item><item><title><![CDATA[这篇 MySQL 索引和 B+Tree 讲的太通俗易懂]]></title><link>https://blog.youkuaiyun.com/Janson_Lin/article/details/121383560</link><guid>https://blog.youkuaiyun.com/Janson_Lin/article/details/121383560</guid><author>Janson_Lin</author><pubDate>Wed, 17 Nov 2021 19:33:18 +0800</pubDate><description><![CDATA[正确的创建合适的索引，是提升数据库查询性能的基础。在正式讲解之前，对后面举例中使用的表结构先简单看一下：


createtableuser(idbigintnotnullcomment'id'primarykey,namevarchar(200)nullcomment'name',agebigintnullcomment'age',genderintnullcomment'gende...]]></description><category></category></item><item><title><![CDATA[Mac关闭电脑后，配置的环境又失效了]]></title><link>https://blog.youkuaiyun.com/Janson_Lin/article/details/121300800</link><guid>https://blog.youkuaiyun.com/Janson_Lin/article/details/121300800</guid><author>Janson_Lin</author><pubDate>Sat, 13 Nov 2021 10:18:25 +0800</pubDate><description><![CDATA[继昨天关闭终端后配置失效问题：Mac终端配置好的环境变量在关闭终端后失效问题

今天开机后，发现配置又是失效了。

这里需要执行一个命令：


cat ~/.zshrc

因为这里每次打开终端，回去加载这个文件

我这里执行完，是没有发现有这个文件的，执行一下命令


touch ~/.zshrc

然后吧加载的环境的配置文件信息写入：


vim ~/.zshrc

#这里是加载bash_profile
source .bash_profile


...]]></description><category></category></item><item><title><![CDATA[Mac终端配置好的环境变量在关闭终端后失效问题]]></title><link>https://blog.youkuaiyun.com/Janson_Lin/article/details/121285363</link><guid>https://blog.youkuaiyun.com/Janson_Lin/article/details/121285363</guid><author>Janson_Lin</author><pubDate>Fri, 12 Nov 2021 11:58:54 +0800</pubDate><description><![CDATA[配置号的环境，在关闭终端后，环境有变成not found

执行下面代码


echo 'source ~/.bash_profile'&gt;&gt;~/.bash_profile

这里的.bash_profile可以是以下文件，也可以是自定义文件。

a. /etc/profile
b. /etc/paths
c. ~/.bash_profile
d. ~/.bash_login
e. ~/.profile
f. ~/.bashrc
...]]></description><category></category></item><item><title><![CDATA[linux环境Mysql主从库配置]]></title><link>https://blog.youkuaiyun.com/Janson_Lin/article/details/121247576</link><guid>https://blog.youkuaiyun.com/Janson_Lin/article/details/121247576</guid><author>Janson_Lin</author><pubDate>Wed, 10 Nov 2021 14:44:26 +0800</pubDate><description><![CDATA[mysql主从同步定义

主从同步使得数据可以从一个数据库服务器复制到其他服务器上，在复制数据时，一个服务器充当主服务器（master），其余的服务器充当从服务器（slave）。因为复制是异步进行的，所以从服务器不需要一直连接着主服务器，从服务器甚至可以通过拨号断断续续地连接主服务器。通过配置文件，可以指定复制所有的数据库，某个数据库，甚至是某个数据库上的某个表。

使用主从同步的好处：

通过增加从服务器来提高数据库的性能，在主服务器上执行写入和更新，在从服务器上向外提供读功能，可以动态地调整从服务器的数]]></description><category></category></item><item><title><![CDATA[volatile 关键字，你真的理解吗？]]></title><link>https://blog.youkuaiyun.com/Janson_Lin/article/details/120763826</link><guid>https://blog.youkuaiyun.com/Janson_Lin/article/details/120763826</guid><author>Janson_Lin</author><pubDate>Thu, 14 Oct 2021 14:44:00 +0800</pubDate><description><![CDATA[volatile 的作用

大家都应该知道 volatile 的主要作用有两点： - 保证变量的内存可见性 - 禁止指令重排序

那么，什么是内存可见性，什么是指令重排序，以及它们涉及了那些机制呢？下面就让我们来看看吧。

在这里提醒一下，各位小伙伴要有个心理准备，就一个 volatile 关键字所涉及的知识点超乎你的想象哟。

可见性问题

在理解 volatile 的内存可见性前，我们先来看看这个比较常见的多线程访问共享变量的例子。


/**
 * 变量的内存可见性例子
 *
 * @author s]]></description><category></category></item><item><title><![CDATA[Java线程池 ExecutorService、ThreadPoolExecutor、ScheduledThreadPoolExecutor及Executors工厂类]]></title><link>https://blog.youkuaiyun.com/Janson_Lin/article/details/120751142</link><guid>https://blog.youkuaiyun.com/Janson_Lin/article/details/120751142</guid><author>Janson_Lin</author><pubDate>Wed, 13 Oct 2021 20:42:18 +0800</pubDate><description><![CDATA[Java中的线程池类有两个，分别是：ThreadPoolExecutor和ScheduledThreadPoolExecutor，这两个类都继承自ExecutorService。利用这两个类，可以创建各种不同的Java线程池，为了方便我们创建线程池，Java API提供了Executors工厂类来帮助我们创建各种各样的线程池。下面我们分别介绍一下这三个类。

Java线程池ExecutorService继承树：



1、ExecutorService介绍

ExecutorService是Java中对线.]]></description><category></category></item><item><title><![CDATA[HandlerInterceptor中的preHandle、postHandle与afterCompletion]]></title><link>https://blog.youkuaiyun.com/Janson_Lin/article/details/120427840</link><guid>https://blog.youkuaiyun.com/Janson_Lin/article/details/120427840</guid><author>Janson_Lin</author><pubDate>Thu, 23 Sep 2021 09:12:36 +0800</pubDate><description><![CDATA[HandlerInterceptor简介

拦截器我想大家都并不陌生，最常用的登录拦截、或是权限校验、或是防重复提交、或是根据业务像12306去校验购票时间,总之可以去做很多的事情。
我仔细想了想
这里我分三篇博客来介绍HandlerInterceptor的使用，从基本的使用、到自定义注解、最后到读取body中的流解决无法多次读取的问题。

1、定义实现类

定义一个Interceptor 非常简单方式也有几种，我这里简单列举两种
1、类要实现Spring 的HandlerInterceptor 接口
2、]]></description><category></category></item><item><title><![CDATA[vue中$refs、$emit、$on的使用场景]]></title><link>https://blog.youkuaiyun.com/Janson_Lin/article/details/120287041</link><guid>https://blog.youkuaiyun.com/Janson_Lin/article/details/120287041</guid><author>Janson_Lin</author><pubDate>Tue, 14 Sep 2021 14:43:30 +0800</pubDate><description><![CDATA[1、$emit的使用场景

子组件调用父组件的方法并传递数据注意：子组件标签中的时间也不区分大小写要用“-”隔开

子组件：


&lt;template&gt;
 &lt;button @click="emitEvent"&gt;点击我&lt;/button&gt;
&lt;/template&gt;
&lt;script&gt;
 export default {
  data() {
   return {
    msg: "我是子组件中的数据"
   }
  },
...]]></description><category></category></item><item><title><![CDATA[Linux常用命令大全(详细归纳)]]></title><link>https://blog.youkuaiyun.com/Janson_Lin/article/details/119999458</link><guid>https://blog.youkuaiyun.com/Janson_Lin/article/details/119999458</guid><author>Janson_Lin</author><pubDate>Mon, 30 Aug 2021 16:16:57 +0800</pubDate><description><![CDATA[这篇文章可以搭配阅读：Linux常用命令大全(单个解析)

Linux常用命令大全

一、系统操作相关命令

1、系统信息处理


arch显示机器的处理器架构

uname-m显示机器的处理器架构

uname-r显示正在使用的内核版本

dmidecode-q显示硬件系统部件-(SMBIOS/DMI)

hdparm-i/dev/hda罗列一个磁盘的架构特性

hdparm-tT/dev/sda在磁盘上执行测试性读取操作

cat/proc/cpuinfo显...]]></description><category></category></item><item><title><![CDATA[【NIO】Java NIO知识汇总（详细）]]></title><link>https://blog.youkuaiyun.com/Janson_Lin/article/details/119947145</link><guid>https://blog.youkuaiyun.com/Janson_Lin/article/details/119947145</guid><author>Janson_Lin</author><pubDate>Fri, 27 Aug 2021 14:29:54 +0800</pubDate><description><![CDATA[一、Java NIO 概述

Java NIO 由以下几个核心部分组成：

Channels
	Buffers
	Selectors
虽然Java NIO 中除此之外还有很多类和组件，但在我看来，Channel，Buffer 和 Selector 构成了核心的API。其它组件，如Pipe和FileLock，只不过是与三个核心组件共同使用的工具类。因此，在概述中我将集中在这三个组件上。其它组件会在单独的章节中讲到。



Channel 和 Buffer

基本上，所有的 IO 在NIO 中都从一个Chann]]></description><category></category></item><item><title><![CDATA[websocket+netty实时视频弹幕交互功能（Java版）]]></title><link>https://blog.youkuaiyun.com/Janson_Lin/article/details/119903453</link><guid>https://blog.youkuaiyun.com/Janson_Lin/article/details/119903453</guid><author>Janson_Lin</author><pubDate>Wed, 25 Aug 2021 09:14:26 +0800</pubDate><description><![CDATA[2021年了，还有不支持弹幕的视频网站吗，现在各种弹幕玩法层出不穷，抽奖，ppt都上弹幕玩法了，不整个弹幕都说不过去了，今天笔者就抽空做了一个实时视频弹幕交互功能的实现，不得不说这样的形式为看视频看直播，讲义PPT，抽奖等形式增加了许多乐趣。

1 技术选型

1.1 netty

官方对于netty的描述：


https://netty.io/


主要关键词描述：netty是异步事件驱动网络框架，可做各种协议服务端，并且支持了FTP，SMTP，HTTP等很多协议，并且性能，稳定性，灵活性都很棒。


]]></description><category></category></item><item><title><![CDATA[【面试】Redis 都有哪些监控指标]]></title><link>https://blog.youkuaiyun.com/Janson_Lin/article/details/119733810</link><guid>https://blog.youkuaiyun.com/Janson_Lin/article/details/119733810</guid><author>Janson_Lin</author><pubDate>Mon, 16 Aug 2021 15:16:07 +0800</pubDate><description><![CDATA[# 监控指标


	性能指标：Performance
	
	
	内存指标: Memory
	
	
	基本活动指标：Basic activity
	
	
	持久性指标: Persistence
	
	
	错误指标：Error
	
	
	性能指标：Performance
	
Name
			Description
		latency
			Redis响应一个请求的时间
		instantaneous_ops_per_sec
			平均每秒处理请求总数
		hi rate(calculated)
			缓存命中率]]></description><category></category></item><item><title><![CDATA[【面试题】RabbitMQ 面试总结]]></title><link>https://blog.youkuaiyun.com/Janson_Lin/article/details/119733462</link><guid>https://blog.youkuaiyun.com/Janson_Lin/article/details/119733462</guid><author>Janson_Lin</author><pubDate>Mon, 16 Aug 2021 15:08:28 +0800</pubDate><description><![CDATA[# 前言

RabbitMQ是基于AMQP协议的，通过使用通用协议就可以做到在不同语言之间传递。

# AMQP协议

核心概念


	server：又称broker，接受客户端连接，实现AMQP实体服务。
	
	
	connection：连接和具体broker网络连接。
	
	
	channel：网络信道，几乎所有操作都在channel中进行，channel是消息读写的通道。客户端可以建立多个channel，每个channel表示一个会话任务。
	
	
	message：消息，服务器和应用程序之间传递的数]]></description><category></category></item></channel></rss>