<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[pdf超级菜]]></title><description><![CDATA[怕什么真理无穷，进一步有一步的欢喜。]]></description><link>https://blog.youkuaiyun.com/pdfcxc</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; pdfcxc]]></copyright><item><title><![CDATA[RocketMQ源码解析——NameServer]]></title><link>https://blog.youkuaiyun.com/pdfcxc/article/details/121723264</link><guid>https://blog.youkuaiyun.com/pdfcxc/article/details/121723264</guid><author>pdfcxc</author><pubDate>Sun, 05 Dec 2021 13:49:16 +0800</pubDate><description><![CDATA[官方介绍
NameServer(名字服务)充当消息的提供者。生产者或消费者能够通过NameServer查找各主题对应的Broker IP列表。多个NameServer实例组成集群，但是相互独立，没有信息交换。具体来说就是：
NameServer 是一个非常简单的 Topic 路由注册中心 ，其角色类似 Dubbo 中的 zookeeper，支持 Broker 的动态注册与发现。主要包括两个功能：

Broker 管理：NameServer 接受 Broker 集群的注册信息并且保存下来作为路由信息的基本数据]]></description><category></category></item><item><title><![CDATA[「高性能MySQL」读书笔记]]></title><link>https://blog.youkuaiyun.com/pdfcxc/article/details/119054009</link><guid>https://blog.youkuaiyun.com/pdfcxc/article/details/119054009</guid><author>pdfcxc</author><pubDate>Sat, 02 Oct 2021 11:29:16 +0800</pubDate><description><![CDATA[第一章 MySQL架构与历史
1.1 MySQL逻辑架构


第一层负责连接处理、授权认证、安全等等
第二层是MySQL核心服务，包括查询解析、分析、优化、缓存以及所有的内置函数(例如，日期、时间、数学和加密函数)，所有跨存储引擎的功能都在这一层实现:存储过程、触发器、视图等。
第三层包含存储引擎，存储引擎负责MySQL中数据的存储和提取。服务器通过API与存储引擎进行通信。存储引擎API包含几十个底层函数，用于执行诸如“开始一个事物”或者“根据主键提取一行记录”等操作。但存储引擎不会去解析SQL，不同存储]]></description><category></category></item><item><title><![CDATA[Go Slice学习]]></title><link>https://blog.youkuaiyun.com/pdfcxc/article/details/118493385</link><guid>https://blog.youkuaiyun.com/pdfcxc/article/details/118493385</guid><author>pdfcxc</author><pubDate>Tue, 06 Jul 2021 16:38:06 +0800</pubDate><description><![CDATA[切片，即动态数组，其长度并不固定，我们可以向切片追加元素，它会在容量不足时自动扩容。切片的长度是动态的，声明时只需要指定切片中的元素类型。
var nums []int
var T []interface

切片在编译期间生成的类型只会包含切片中的元素类型。切片内元素的类型都是在编译期间确定的，编译器确定了类型以后，会将类型存储在Extra字段中帮助程序在运行时动态获取。
数据结构
运行时切片由如下的reflect.SliceHeader 结构体表示：
type SliceHeader struct{
	D]]></description><category></category></item><item><title><![CDATA[「Redis开发与运维」读书笔记]]></title><link>https://blog.youkuaiyun.com/pdfcxc/article/details/117385573</link><guid>https://blog.youkuaiyun.com/pdfcxc/article/details/117385573</guid><author>pdfcxc</author><pubDate>Sat, 29 May 2021 15:49:03 +0800</pubDate><description><![CDATA[第一章 初识Redis
Redis的8个重要特性


速度快

内存存储数据
C语言实现
单线程架构，避免多线程竞争问题
Redis源码优化好



基于键值对的数据结构服务器

Redis 值可支持多种数据结构，如字符串、哈希、列表、集合、有序集合



丰富的功能

键过期功能，可用来实现缓存
发布订阅功能，可用来实现消息系统
支持Lua脚本，可以利用Lua创造出新的Redis命令
提供流水线功能，客户单能将一批命令一次性传到Redis，减少网络开销



简单稳定

Redis代码量少，能够较容易掌握]]></description><category></category></item><item><title><![CDATA[21 Redis缓冲区]]></title><link>https://blog.youkuaiyun.com/pdfcxc/article/details/117217491</link><guid>https://blog.youkuaiyun.com/pdfcxc/article/details/117217491</guid><author>pdfcxc</author><pubDate>Mon, 24 May 2021 18:34:09 +0800</pubDate><description><![CDATA[缓冲区主要是用一块内存空间来暂时存放命令数据，以免出现因为数据和命令的处理速度慢于发送速度而导致的数据丢失和性能问题。但因为缓冲区的内存空间有限，如果往里面写入数据的速度持续地大于从里面读取数据的速度，就会导致缓冲区需要越来越多的内存来暂存数据。当缓冲区占用的内存超出了设定的上限阈值时，就会出现缓冲区溢出。
Redis是典型的client-server架构，所有的操作命令都需要通过客户端发送给服务器端。所以缓冲区在Redis中的一个主要应用场景就是在客户端和服务器端之间进行通信时，用来暂存客户端发送的命令数]]></description><category></category></item><item><title><![CDATA[20 删除数据后的Redis内存占用率为什么还是很高？]]></title><link>https://blog.youkuaiyun.com/pdfcxc/article/details/117198754</link><guid>https://blog.youkuaiyun.com/pdfcxc/article/details/117198754</guid><author>pdfcxc</author><pubDate>Sun, 23 May 2021 20:50:39 +0800</pubDate><description><![CDATA[有时候Redis明明做了数据删除，数据量已经不大了，但是使用top命令的时候，还会发现Redis占用了很多内存？

这是因为，当数据删除之后，Redis释放的内存空间会由内存分配器管理，并不会立即返还给操作系统。所以，操作系统仍然记录着给Redis分配了大量的内存。

同时还存在一个潜在风险点：Redis释放的内存空间可能并不是连续的，那么这些不连续的内存空间很有可能处于一种闲置的状态。这就会导致一个问题：虽然有空闲空间，Redis却无法用来保存数据，不仅会减少Redis能够实际保存的数据量，还会降低Red]]></description><category></category></item><item><title><![CDATA[18~19 Redis响应延迟]]></title><link>https://blog.youkuaiyun.com/pdfcxc/article/details/116950475</link><guid>https://blog.youkuaiyun.com/pdfcxc/article/details/116950475</guid><author>pdfcxc</author><pubDate>Wed, 19 May 2021 21:00:10 +0800</pubDate><description><![CDATA[判断Redis变慢

第一种方法：查看Redis的响应延迟

redis-cli --latency -h host -p port

当发现Redis命令的执行时间突然就增长到了几秒，基本可以认定Redis变慢。

第二种方法：基于当前环境下的Redis基线性能做判断。
基线性能：一个系统在低压力、无干扰的下的基本性能，这个性能只由当前的软硬件配置决定。

redis-cli --intrinsic-latency {time}

打印{time}秒内检测到的最大延迟。
一般来说，你要把运行时延迟和基线性]]></description><category></category></item><item><title><![CDATA[24 Redis缓存替换策略]]></title><link>https://blog.youkuaiyun.com/pdfcxc/article/details/116904237</link><guid>https://blog.youkuaiyun.com/pdfcxc/article/details/116904237</guid><author>pdfcxc</author><pubDate>Mon, 17 May 2021 21:30:49 +0800</pubDate><description><![CDATA[数据的淘汰的机制包括两步：

第一，根据一定的策略，筛选出对应用访问来说”不重要“的数据；
第二，将这些数据从缓存中删除，为新来的数据腾出空间。

设置多大的缓存容量合适
在实践过程中，Redis容量规划不能一概而论，是需要结合应用数据实际访问特征和成本开销来综合考虑的。
建议把缓存容量设置为总数据量的15%到30%，兼顾访问性能和内存空间开销。
Redis缓存淘汰策略

默认情况下，Redis使用的内存空间超过maxmemory之后不会淘汰数据，即noeviction策略。当缓存满了之后，再有写请求过来，]]></description><category></category></item><item><title><![CDATA[27 缓存污染（缓存数据的淘汰策略）]]></title><link>https://blog.youkuaiyun.com/pdfcxc/article/details/116743955</link><guid>https://blog.youkuaiyun.com/pdfcxc/article/details/116743955</guid><author>pdfcxc</author><pubDate>Fri, 14 May 2021 18:47:45 +0800</pubDate><description><![CDATA[缓存污染
定义：有些数据访问次数非常少，甚至只会被访问一次。当这些数据服务完访问请求之后，继续会留在内存中，占用缓存空间。
八种数据淘汰策略：
noeviction、volatile-random、volatile-ttl、volatile-lru、volatile-lfu、allkeys-lru、allkeys-random 和 allkeys-lfu 策略
volatile-random 和 allkeys-random
采用随机挑选数据的方式来筛选即将被淘汰的数据。
Redis不会根据数据的访问情况来]]></description><category></category></item><item><title><![CDATA[FTP、FTPS、SFTP浅析]]></title><link>https://blog.youkuaiyun.com/pdfcxc/article/details/112757804</link><guid>https://blog.youkuaiyun.com/pdfcxc/article/details/112757804</guid><author>pdfcxc</author><pubDate>Sat, 10 Apr 2021 15:27:31 +0800</pubDate><description><![CDATA[FTP
FTP即文件传输协议(File Transfer Protocol)，是一个用于计算机网络上客户端与服务器之间进行文件传输的应用层协议。FTP由FTP服务器和FTP客户端组成，客户端可以将本地的文件通过哦FTP协议上传到服务器，也可以将服务器的文件下载到本地。
TODO 扩充FTP相关知识
FTP工作原理
FTP连接需要FTP服务器和客户端两方在网络上建立通信。建立FTP连接时会有两个不同的通信通道。一个被称为命令通道，它的作用是发出和响应指令。另一个为数据通道，用于客户端和服务器端进行数据交互。
]]></description><category></category></item><item><title><![CDATA[Word解析之Word内部结构]]></title><link>https://blog.youkuaiyun.com/pdfcxc/article/details/113260490</link><guid>https://blog.youkuaiyun.com/pdfcxc/article/details/113260490</guid><author>pdfcxc</author><pubDate>Wed, 27 Jan 2021 18:05:33 +0800</pubDate><description><![CDATA[我们常用的Office Word格式分为doc和docx两种格式，doc是Word 97-2003版本使用的格式，Word2007及其之后的版本，默认格式是docx。
doc使用的是office 97-03的存储规范：OLE。它是一种对象链接和嵌入的技术，该技术可以包含文本，图形，电子表格甚至其他二进制数据。
docx使用OpenXML（OOXML）协议，它是微软在Office 2007中提出的一种新的文档格式，Office 2007及其以后的Word、Excel、PowerPoint默认均采用OpenXM]]></description><category></category></item><item><title><![CDATA[策略模式]]></title><link>https://blog.youkuaiyun.com/pdfcxc/article/details/112298635</link><guid>https://blog.youkuaiyun.com/pdfcxc/article/details/112298635</guid><author>pdfcxc</author><pubDate>Thu, 07 Jan 2021 11:39:29 +0800</pubDate><description><![CDATA[策略模式
角色
Context(环境类)：环境类是使用算法的角色，它在解决某个问题（即实现某个方法）时可以采用多种策略。在环境类中维持一个对抽象策略类的引用实例，用于定义所采用的策略。
Strategy(抽象策略类)：它为所支持的算法声明了抽象方法，是所有策略类的父类，它可以是抽象类或具体类，也可以是接口。环境类通过抽象策略类中声明的方法在运行时调用具体策略类中实现的算法。
ConcreteStrategy（具体策略类）：它实现了在抽象策略类中声明的算法。在运行时，具体策略类将覆盖在环境类中定义的抽象策略类]]></description><category></category></item><item><title><![CDATA[GO语言包的基本概念]]></title><link>https://blog.youkuaiyun.com/pdfcxc/article/details/105004395</link><guid>https://blog.youkuaiyun.com/pdfcxc/article/details/105004395</guid><author>pdfcxc</author><pubDate>Sat, 21 Mar 2020 10:02:18 +0800</pubDate><description><![CDATA[包的习惯用法：

包名一般是小写的，使用一个简短且有意义的名称。
包名一般要和所在的目录同名，也可以不同，包名中不能包含-等特殊符号。
包一般使用域名作为目录名称，这样能保证包名的唯一性，比如 GitHub 项目的包一般会放到GOPATH/src/github.com/userName/projectName目录下。
包名为 main 的包为应用程序的入口包，编译不包含 main 包的源码文件时不...]]></description><category></category></item><item><title><![CDATA[LeetCode 334. 递增的三元子序列]]></title><link>https://blog.youkuaiyun.com/pdfcxc/article/details/98482751</link><guid>https://blog.youkuaiyun.com/pdfcxc/article/details/98482751</guid><author>pdfcxc</author><pubDate>Mon, 05 Aug 2019 13:34:46 +0800</pubDate><description><![CDATA[题目：
给定一个未排序的数组，判断这个数组中是否存在长度为 3 的递增子序列。
数学表达式如下:
如果存在这样的 i, j, k,  且满足 0 ≤ i &lt; j &lt; k ≤ n-1，
使得 arr[i] &lt; arr[j] &lt; arr[k] ，返回 true ; 否则返回 false 。
说明: 要求算法的时间复杂度为 O(n)，空间复杂度为 O(1) 。

示例 1:
输入...]]></description><category></category></item><item><title><![CDATA[LeetCode 76. 最小覆盖子串]]></title><link>https://blog.youkuaiyun.com/pdfcxc/article/details/98480006</link><guid>https://blog.youkuaiyun.com/pdfcxc/article/details/98480006</guid><author>pdfcxc</author><pubDate>Mon, 05 Aug 2019 10:37:02 +0800</pubDate><description><![CDATA[题目：
给你一个字符串 S、一个字符串 T，请在字符串 S 里面找出：包含 T 所有字母的最小子串。

示例：
输入: S = “ADOBECODEBANC”, T = “ABC”
输出: “BANC”

说明：

如果 S 中不存这样的子串，则返回空字符串 “”。
如果 S 中存在这样的子串，我们保证它是唯一的答案。

题解：
import java.util.HashMap;
import j...]]></description><category></category></item><item><title><![CDATA[3道题彻底搞定：套路解决递归问题]]></title><link>https://blog.youkuaiyun.com/pdfcxc/article/details/98472591</link><guid>https://blog.youkuaiyun.com/pdfcxc/article/details/98472591</guid><author>pdfcxc</author><pubDate>Sun, 04 Aug 2019 18:43:53 +0800</pubDate><description><![CDATA[转自3道题彻底搞定：套路解决递归问题
前言
相信不少同学和我一样，在刚学完数据结构后开始刷算法题时，遇到递归的问题总是很头疼，而一看解答，却发现大佬们几行递归代码就优雅的解决了问题。从我自己的学习经历来看，刚开始理解递归思路都很困难，更别说自己写了。
我一直觉得刷算法题和应试一样，既然是应试就一定有套路存在。在刷题中，我总结出了一套解决递归问题的模版思路与解法，用这个思路可以秒解很多递归问题。
递...]]></description><category></category></item><item><title><![CDATA[LeetCode 29. 两数相除]]></title><link>https://blog.youkuaiyun.com/pdfcxc/article/details/98397248</link><guid>https://blog.youkuaiyun.com/pdfcxc/article/details/98397248</guid><author>pdfcxc</author><pubDate>Sun, 04 Aug 2019 00:04:12 +0800</pubDate><description><![CDATA[题目：
给定两个整数，被除数 dividend 和除数 divisor。将两数相除，要求不使用乘法、除法和 mod 运算符。
返回被除数 dividend 除以除数 divisor 得到的商。

示例 1:
输入: dividend = 10, divisor = 3
输出: 3


示例 2:
输入: dividend = 7, divisor = -3
输出: -2

说明:

被除数和除数均...]]></description><category></category></item><item><title><![CDATA[LeetCode 25. K 个一组翻转链表]]></title><link>https://blog.youkuaiyun.com/pdfcxc/article/details/98391932</link><guid>https://blog.youkuaiyun.com/pdfcxc/article/details/98391932</guid><author>pdfcxc</author><pubDate>Sat, 03 Aug 2019 23:12:03 +0800</pubDate><description><![CDATA[思路不难，但是感觉里面绕过来绕过去的，一会儿就绕晕了，日后一定要好好看一下这个代码
题目：
给你一个链表，每 k 个节点一组进行翻转，请你返回翻转后的链表。
k 是一个正整数，它的值小于或等于链表的长度。
如果节点总数不是 k 的整数倍，那么请将最后剩余的节点保持原有顺序。

示例 :
给定这个链表：1-&gt;2-&gt;3-&gt;4-&gt;5
当 k = 2 时，应当返回: 2-&gt;1...]]></description><category></category></item><item><title><![CDATA[LeetCode 17. 电话号码的字母组合]]></title><link>https://blog.youkuaiyun.com/pdfcxc/article/details/98385066</link><guid>https://blog.youkuaiyun.com/pdfcxc/article/details/98385066</guid><author>pdfcxc</author><pubDate>Sat, 03 Aug 2019 22:09:43 +0800</pubDate><description><![CDATA[题目：
给定一个仅包含数字 2-9 的字符串，返回所有它能表示的字母组合。
给出数字到字母的映射如下（与电话按键相同）。注意 1 不对应任何字母。

示例:
输入：“23”
输出：[“ad”, “ae”, “af”, “bd”, “be”, “bf”, “cd”, “ce”, “cf”].


说明:
尽管上面的答案是按字典序排列的，但是你可以任意选择答案输出的顺序。

题解：
import ja...]]></description><category></category></item><item><title><![CDATA[生产者消费者模型]]></title><link>https://blog.youkuaiyun.com/pdfcxc/article/details/98206092</link><guid>https://blog.youkuaiyun.com/pdfcxc/article/details/98206092</guid><author>pdfcxc</author><pubDate>Fri, 02 Aug 2019 15:08:21 +0800</pubDate><description><![CDATA[import java.util.PriorityQueue;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

/**
 * @Author dfpeng
 * @Date 20...]]></description><category></category></item></channel></rss>