<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Mr_changxin的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/Mr_changxin</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Mr_changxin]]></copyright><item><title><![CDATA[Netty 入门]]></title><link>https://blog.youkuaiyun.com/Mr_changxin/article/details/139340252</link><guid>https://blog.youkuaiyun.com/Mr_changxin/article/details/139340252</guid><author>Mr_changxin</author><pubDate>Fri, 31 May 2024 09:21:16 +0800</pubDate><description><![CDATA[​ Netty 中所有的 I/O 操作都是异步的，即操作不会立即得到返回结果，所以 Netty 中定义了一个 ChannelFuture 对象作为这个异步操作的“代言人”，表示异步操作本身。​ Bootstrap 是客户端的引导类，Bootstrap 在调用 bind()（连接UDP）和 connect()（连接TCP）方法时，会新创建一个 Channel，仅创建一个单独的、没有父 Channel 的 Channel 来实现所有的网络交换。Worker线程通常是一个线程池，可以处理多个客户端的连接请求。]]></description><category></category></item><item><title><![CDATA[一文搞懂RabbitMQ]]></title><link>https://blog.youkuaiyun.com/Mr_changxin/article/details/139340050</link><guid>https://blog.youkuaiyun.com/Mr_changxin/article/details/139340050</guid><author>Mr_changxin</author><pubDate>Fri, 31 May 2024 09:17:10 +0800</pubDate><description><![CDATA[RabbitMQ是一个开源的消息中间件，它实现了高级消息队列协议（AMQP），用于在不同的应用程序之间进行异步通信，一文搞懂]]></description><category></category></item><item><title><![CDATA[Docker 部署Java程序以及常用命令详解]]></title><link>https://blog.youkuaiyun.com/Mr_changxin/article/details/137971024</link><guid>https://blog.youkuaiyun.com/Mr_changxin/article/details/137971024</guid><author>Mr_changxin</author><pubDate>Fri, 19 Apr 2024 16:59:32 +0800</pubDate><description><![CDATA[在执行 docker pull 命令时，Docker 客户端会首先检查本地是否有该镜像，如果没有，它会从配置的镜像仓库（默认为 Docker Hub）下载镜像到本地。简单来说，Docker port命令可以帮助我们查看容器内部的端口是如何映射到宿主机的端口的，从而使得我们可以从外部访问容器中运行的应用程序。但请注意，这并不会导出容器的配置（如环境变量、卷挂载等），因此新创建的容器可能需要额外的配置才能与原始容器具有相同的行为。docker ps 是 Docker 的一个命令，用于列出当前正在运行的容器。]]></description><category></category></item><item><title><![CDATA[Redis 核心面试题归纳]]></title><link>https://blog.youkuaiyun.com/Mr_changxin/article/details/136513730</link><guid>https://blog.youkuaiyun.com/Mr_changxin/article/details/136513730</guid><author>Mr_changxin</author><pubDate>Wed, 06 Mar 2024 18:17:41 +0800</pubDate><description><![CDATA[Redis 面试题，涉及到AOF，RDB，主从同步等]]></description><category></category></item><item><title><![CDATA[TCP/IP 三次握手&四次挥手详解，以及异常状态分析]]></title><link>https://blog.youkuaiyun.com/Mr_changxin/article/details/136192477</link><guid>https://blog.youkuaiyun.com/Mr_changxin/article/details/136192477</guid><author>Mr_changxin</author><pubDate>Tue, 20 Feb 2024 16:03:24 +0800</pubDate><description><![CDATA[确认客户端与服务器之间都有收发功能。如客户端发出连接请求，但因连接请求报文丢失而未收到确认，于是客户端再重传一次连接请求。后来收到了确认，建立了连接。数据传输完毕后，就释放了连接，客户端共发出了两个连接请求报文段，其中第一个丢失，第二个到达了服务端，但是第一个丢失的报文段只是在某些网络结点长时间滞留了，延误到连接释放以后的某个时间才到达服务端，此时服务端误认为客户端又发出一次新的连接请求，于是就向客户端发出确认报文段，同意建立连接，不采用三次握手，只要服务端发出确认，就建立新的连接了，]]></description><category></category></item><item><title><![CDATA[Redis 核心原理]]></title><link>https://blog.youkuaiyun.com/Mr_changxin/article/details/124715007</link><guid>https://blog.youkuaiyun.com/Mr_changxin/article/details/124715007</guid><author>Mr_changxin</author><pubDate>Wed, 11 May 2022 17:42:52 +0800</pubDate><description><![CDATA[Redis 核心原理
Redis 数据结构
1. 动态字符串 SDS
我们都知道Redis中保存的key是字符串，value往往是字符串或者字符串的集合。可见字符串是Redis中最常用的一种数据结构
Redis没有直接使用C语言中的字符串，因为C语言字符串中存在很多问题

获取字符串长度需要通过运算
非二进制安全
不可修改

Redis 构建了一种新的字符串结构，称为 简单动态字符串，简称SDS
​	·
本质是一个结构体，源码如下：
struct __attribute__((__packed__)) sd]]></description><category></category></item><item><title><![CDATA[Redis 高级总结]]></title><link>https://blog.youkuaiyun.com/Mr_changxin/article/details/124714417</link><guid>https://blog.youkuaiyun.com/Mr_changxin/article/details/124714417</guid><author>Mr_changxin</author><pubDate>Wed, 11 May 2022 17:17:36 +0800</pubDate><description><![CDATA[文章目录Redis 持久化1. RDB2. AOF3. AOF 和 RDB 对比Redis 主从集群结构准备实例和配置启动开启主从关系测试数据同步原理搭建哨兵集群集群结构准备实例和配置启动测试哨兵的作用SpringBoot 访问哨兵集群搭建分片集群集群结构准备实例和配置启动创建集群测试散列插槽集群伸缩故障转移SpringBoot 访问分片集群Redis 键值设计优雅的 key 结构拒绝 BigKey批处理优化集群下的批处理服务端优化持久化配置：慢查询：内存配置集群还是主从
Redis 持久化
1. RDB
]]></description><category></category></item><item><title><![CDATA[MySQL高级总结]]></title><link>https://blog.youkuaiyun.com/Mr_changxin/article/details/124541386</link><guid>https://blog.youkuaiyun.com/Mr_changxin/article/details/124541386</guid><author>Mr_changxin</author><pubDate>Mon, 02 May 2022 15:26:51 +0800</pubDate><description><![CDATA[文章目录MySQL 高级1、MySQL架构介绍2、MyISAM 和 InnoDB 对比InnoDBMyISAM3. 索引的数据结构索引的本质优点缺点B+ 树B 树B 树 和B+ 树的对比索引分类4、三大范式5、关于优化索引失效关联查询优化子查询优化排序优化索引覆盖前缀索引索引下推6、事务基础7、MySQL 事务日志redo logundo logundo log 的刷盘策略8、锁表锁行锁页锁锁结构9、多版本并发控制快照读当前读Undo Log 版本链ReadViewMVCC整体操作流程10、其他日志
MyS]]></description><category></category></item><item><title><![CDATA[HashMap 源码分析与常见面试题]]></title><link>https://blog.youkuaiyun.com/Mr_changxin/article/details/123842070</link><guid>https://blog.youkuaiyun.com/Mr_changxin/article/details/123842070</guid><author>Mr_changxin</author><pubDate>Wed, 30 Mar 2022 11:29:12 +0800</pubDate><description><![CDATA[HashMap 源码分析
jdk 1.7
jdk 1.7 中的 HashMap 采用的是数组 + 链表的方式来进行数据的存储，链表采用的是头插法。下面对各个源码中的各个核心方法进行对比
内部常量
public class HashMap&lt;K,V&gt;
    extends AbstractMap&lt;K,V&gt;
    implements Map&lt;K,V&gt;, Cloneable, Serializable
{
    // HashMap 默认大小 16
	static fin]]></description><category></category></item><item><title><![CDATA[SpringMVC 从初始化 到 doDispatch 底层源码分析]]></title><link>https://blog.youkuaiyun.com/Mr_changxin/article/details/123805849</link><guid>https://blog.youkuaiyun.com/Mr_changxin/article/details/123805849</guid><author>Mr_changxin</author><pubDate>Mon, 28 Mar 2022 20:58:45 +0800</pubDate><description><![CDATA[文章目录SpringMVC 初始化Servlet 接口GenericServlet 抽象类HttpServlet 抽象类HttpServletBean 抽象类FrameworkServlet 抽象类DispatcherServlet 类中央调度器核心方法 doDispatch请求处理源码分析SpringMVC流程组件说明：核心架构的具体流程步骤如下：总体流程图
SpringMVC 初始化
首先来看继承树

Servlet 接口
首先来看最核心的 Servlet 接口，以及相关定义的方法
public int]]></description><category></category></item><item><title><![CDATA[Spring 核心方法 Refresh 源码和三级缓存分析，以及手写一个IOC容器]]></title><link>https://blog.youkuaiyun.com/Mr_changxin/article/details/123740370</link><guid>https://blog.youkuaiyun.com/Mr_changxin/article/details/123740370</guid><author>Mr_changxin</author><pubDate>Fri, 25 Mar 2022 17:07:04 +0800</pubDate><description><![CDATA[文章目录1. refresh方法1.prepareRefresh 方法2. obtainFreshBeanFactory 方法3. prepareBeanFactory4. postProcessBeanFactory 方法5.invokeBeanFactoryPostProcessors 方法6. 监听器、广播、国际化方法7. finishBeanFactoryInitialization 方法2. 自定义一个简单的IOC容器3. 循环依赖问题1. Bean对象创建过程2.循环依赖问题分析3. 三级缓存4]]></description><category></category></item><item><title><![CDATA[Java 类加载机制（从源码来看双亲委派机制）]]></title><link>https://blog.youkuaiyun.com/Mr_changxin/article/details/123314508</link><guid>https://blog.youkuaiyun.com/Mr_changxin/article/details/123314508</guid><author>Mr_changxin</author><pubDate>Mon, 07 Mar 2022 16:14:11 +0800</pubDate><description><![CDATA[Java 类加载机制
1、类加载过程
class ----&gt; loading （加载）----&gt; linking（校验、准备、解析） ----&gt; initializing（初始化）----&gt; GC
Linking 中被分为了 verification、preparation、resolution 三个部分
loading：将字节码文件加载到内存中去
link：
​		verification：校验，验证class 字节码文件是否符合class文件的标准
​		preparation：]]></description><category></category></item><item><title><![CDATA[Java抽象队列同步器源码分析（AQS）]]></title><link>https://blog.youkuaiyun.com/Mr_changxin/article/details/123296041</link><guid>https://blog.youkuaiyun.com/Mr_changxin/article/details/123296041</guid><author>Mr_changxin</author><pubDate>Sun, 06 Mar 2022 15:11:12 +0800</pubDate><description><![CDATA[文章目录AQS1. AQS 概述2. AQS 的数据结构3. 资源共享模式4. AQS 的主要源码解析4.1 获取资源4.2 释放资源
深入理解 synchronized 关键字（关于对象头和锁的升级）
深入理解 volatile 关键字（内存屏障和指令重排问题）
AQS
1. AQS 概述
AQS是 AbstractQueuedSynchronizer 的简称，即 抽象队列同步器 ，从字⾯意思上理解:

抽象：抽象类，只实现⼀些主要逻辑，有些⽅法由⼦类实现；
队列：使⽤先进先出（FIFO）队列存储数据；
]]></description><category></category></item><item><title><![CDATA[Java线程池原理及其执行过程源码分析]]></title><link>https://blog.youkuaiyun.com/Mr_changxin/article/details/123297708</link><guid>https://blog.youkuaiyun.com/Mr_changxin/article/details/123297708</guid><author>Mr_changxin</author><pubDate>Sun, 06 Mar 2022 15:09:47 +0800</pubDate><description><![CDATA[文章目录Java线程池原理及其执行过程源码分析1. 为什么要使用线程池2. 线程池的原理2.1 ThreadPoolExecutor 的构造方法2.2 ThreadPoolExecutor的策略2.3 线程池主要的任务处理流程2.4 ThreadPoolExecutor如何做到线程复⽤的？3. 四种常见线程池3.1 newCachedThreadPool3.2 newFixedThreadPool3.3 newSingleThreadExecutor3.4 newScheduledThreadPool
Ja]]></description><category></category></item><item><title><![CDATA[深入理解 synchronized 关键字（关于对象头和锁的升级）]]></title><link>https://blog.youkuaiyun.com/Mr_changxin/article/details/123294630</link><guid>https://blog.youkuaiyun.com/Mr_changxin/article/details/123294630</guid><author>Mr_changxin</author><pubDate>Sat, 05 Mar 2022 15:21:13 +0800</pubDate><description><![CDATA[文章目录synchronized 关键字1. 概述2. synchronized 的四种锁状态2.1 Java对象头2.2 偏向锁2.3 轻量级锁2.4 重量级锁2.5 总结锁的升级流程2.6 各个锁的优缺点对比
深入理解 volatile 关键字
synchronized 关键字
1. 概述
⾸先需要明确的⼀点是：Java多线程的锁都是基于对象的，Java中的每⼀个对象都可以作为⼀个锁。
还有⼀点需要注意的是，我们常听到的类锁其实也是对象锁。Java类只有⼀个Class对象（可以有多个实例对象，多个实例共]]></description><category></category></item><item><title><![CDATA[深入理解 volatile 关键字（理解内存屏障与指令重排）]]></title><link>https://blog.youkuaiyun.com/Mr_changxin/article/details/123289855</link><guid>https://blog.youkuaiyun.com/Mr_changxin/article/details/123289855</guid><author>Mr_changxin</author><pubDate>Sat, 05 Mar 2022 14:44:16 +0800</pubDate><description><![CDATA[文章目录一、volatile 关键字1. 几个基本概念1.1 内存可见性1.2 指令重排序1.3 happens-before 规则2. volatile 的效果2.1 内存可见性2.2 内存屏障3. volatile 的用途3.1 单例模式双重检查锁
一、volatile 关键字
1. 几个基本概念
1.1 内存可见性
我们都知道，在Java内存模型中，JMM 中有一个内存，每个线程有自己独立的内存空间，线程的私有内存中包含了对内存中的变量的拷贝。
内存可见性就是指当两个线程的私有内存中有对内存中同一个变]]></description><category></category></item><item><title><![CDATA[Java垃圾回收算法以及垃圾回收器]]></title><link>https://blog.youkuaiyun.com/Mr_changxin/article/details/123192294</link><guid>https://blog.youkuaiyun.com/Mr_changxin/article/details/123192294</guid><author>Mr_changxin</author><pubDate>Mon, 28 Feb 2022 21:11:16 +0800</pubDate><description><![CDATA[文章目录前言JVM 内存区域如何识别垃圾引用计数法可达性算法虚拟机栈（栈帧中的本地变量表）中引用的对象方法区中类静态属性引用的对象方法区中常量引用的对象本地方法栈中 JNI 引用的对象垃圾回收主要方法标记清除算法复制算法标记整理法分代收集算法分代收集工作原理垃圾收集器种类新生代收集器Serial 收集器ParNew 收集器Parallel Scavenge 收集器老年代收集器Serial Old 收集器Parallel Old 收集器CMS 收集器G1（Garbage First） 收集器总结
前言
Jav]]></description><category></category></item><item><title><![CDATA[JVM调优实战]]></title><link>https://blog.youkuaiyun.com/Mr_changxin/article/details/123192204</link><guid>https://blog.youkuaiyun.com/Mr_changxin/article/details/123192204</guid><author>Mr_changxin</author><pubDate>Mon, 28 Feb 2022 21:04:19 +0800</pubDate><description><![CDATA[* JVM 参数简介
* 发生 OOM 的主要几种场景及相应解决方案
* OOM 问题排查的一些常用工具
* GC 日志格式怎么看
* jstat 与可视化 APM 工具构建
* 再谈 JVM 参数设置]]></description><category></category></item><item><title><![CDATA[Java 集合源码分析]]></title><link>https://blog.youkuaiyun.com/Mr_changxin/article/details/122945695</link><guid>https://blog.youkuaiyun.com/Mr_changxin/article/details/122945695</guid><author>Mr_changxin</author><pubDate>Tue, 15 Feb 2022 15:30:31 +0800</pubDate><description><![CDATA[Java集合
文章目录Java集合前置知识Lamdba表达式Lamdba表达式 方法的引用函数式接口简介Iterable 接口Iterator\ iterator() 方法void forEach(Consumer&lt;? super T&gt; action) 方法Spliterator\ spliterator() 方法Collection 接口ArrayListVectorLinkedList 类StackHashSetTreeSetLinkedHashSet 类PriorityQueueHashM]]></description><category></category></item><item><title><![CDATA[SpringBoot 高级特性]]></title><link>https://blog.youkuaiyun.com/Mr_changxin/article/details/121678092</link><guid>https://blog.youkuaiyun.com/Mr_changxin/article/details/121678092</guid><author>Mr_changxin</author><pubDate>Thu, 02 Dec 2021 16:05:47 +0800</pubDate><description><![CDATA[SpringBoot 高级特性以及SpringBoot的整个执行流程]]></description><category></category></item></channel></rss>