<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[T型人小付的博客]]></title><description><![CDATA[我是T型人小付，喜欢我的博客欢迎在csdn上关注我，如果有问题欢迎在底下的评论区交流，谢谢。]]></description><link>https://blog.csdn.net/Victor2code</link><language>zh-cn</language><generator>https://blog.csdn.net/</generator><copyright><![CDATA[Copyright &copy; Victor2code]]></copyright><item><title><![CDATA[Grafana使用双Y坐标轴详解]]></title><link>https://blog.csdn.net/Victor2code/article/details/114991594</link><guid>https://blog.csdn.net/Victor2code/article/details/114991594</guid><author>Victor2code</author><pubDate>Thu, 18 Mar 2021 21:40:14 +0800</pubDate><description><![CDATA[最近在给公司做Grafana的监控图表，在一个显示错误数的面板这卡住了。想在一个面板同时显示RPC调用的成功次数和失败次数，不过因为失败次数和成功的次数远不在一个数量级，所以想着分两个Y轴来表示，左边显示成功次数，右边显示错误数。尝试了好久终于成功，这里记录下方法。
文章目录操作环境实际操作两个查询数据允许双Y轴给右Y轴配置数据
操作环境

Grafana v7.1.0-beta2

实际操作
实际操作之前先来看看最终效果图，这里绿线显示的是rpc成功次数，黄线显示的是失败次数，并且从legend可以看出使]]></description><category></category></item><item><title><![CDATA[mac快捷键大全（持续更新中）]]></title><link>https://blog.csdn.net/Victor2code/article/details/114232342</link><guid>https://blog.csdn.net/Victor2code/article/details/114232342</guid><author>Victor2code</author><pubDate>Sun, 28 Feb 2021 17:33:29 +0800</pubDate><description><![CDATA[快捷键
作用




ctrl+左/右
左右切换屏幕


cmd+shift+=
放大字体


cmd+shift+-
缩小字体


fn+向上
向上翻页


fn+向下
向下翻页


ctrl+tab
chrome向后切tab


ctrl+shift+tab
chrome向前切tab


cmd+数字
chrome切到特定位置tab



...]]></description><category></category></item><item><title><![CDATA[ntpd建立本地时间服务器供所有本地linux服务器使用]]></title><link>https://blog.csdn.net/Victor2code/article/details/114091429</link><guid>https://blog.csdn.net/Victor2code/article/details/114091429</guid><author>Victor2code</author><pubDate>Thu, 25 Feb 2021 16:54:15 +0800</pubDate><description><![CDATA[最近在本地搭建了一套prometheus+grafana的监控系统，因为整个监控系统是基于时序数据（time series data）的，prometheus根据服务器时间统一保存为utc格式，然后grafana显示的时候会根据浏览器时间进行时区转换，所以时间同步就显得尤其重要。这一节我们看看如何将本地一台服务器变为时间同步服务器供本地所有其他设备用来同步时间。
文章目录NTP操作环境时间同步服务器持续同步其他
NTP
NTP，Network Time Protocol，1985年创立，一个久经时间考验的时]]></description><category></category></item><item><title><![CDATA[docker多种创建volume操作详解]]></title><link>https://blog.csdn.net/Victor2code/article/details/113269092</link><guid>https://blog.csdn.net/Victor2code/article/details/113269092</guid><author>Victor2code</author><pubDate>Wed, 27 Jan 2021 20:19:00 +0800</pubDate><description><![CDATA[volume用于将容器内的数据在本地进行持久化，这一节我们以redis为例用实际操作来看看几种创建volume的方式。
文章目录操作环境原始镜像声明volume创建volume指定容器目录不指定宿主机目录指定容器目录指定宿主机目录总结
操作环境

Centos 7.9.2009
Docker version 20.10.2, build 2291f61

原始镜像
直接下载最新的redis镜像
docker pull redis

[root@testmachine fuhanxiao]# docker i]]></description><category></category></item><item><title><![CDATA[Redis从入门到精通（16）redis的删除策略详解]]></title><link>https://blog.csdn.net/Victor2code/article/details/112982199</link><guid>https://blog.csdn.net/Victor2code/article/details/112982199</guid><author>Victor2code</author><pubDate>Fri, 22 Jan 2021 12:58:49 +0800</pubDate><description><![CDATA[redis的数据都是保存在内存中，但是内存大小是有限的，所以这一节来看看redis中过期数据的删除，以及内存占用满以后新数据的插入问题。
文章目录过期数据数据删除策略定时删除惰性删除定期删除逐出算法
过期数据
在内存中有专门的一块区域用来记录key的地址和过期时间，暂且叫做过期时间表。如果key有过期时间就会被放进这个表。
不过一个key过期了，redis为了提升性能，并不会马上将这个过期的key从内存删除，毕竟删除key也是会消耗cpu影响整体性能的。一方面是删除key节约内存，另一方面是保留key节约c]]></description><category></category></item><item><title><![CDATA[Redis从入门到精通（15）redis的事务和锁详解]]></title><link>https://blog.csdn.net/Victor2code/article/details/112907994</link><guid>https://blog.csdn.net/Victor2code/article/details/112907994</guid><author>Victor2code</author><pubDate>Wed, 20 Jan 2021 18:42:58 +0800</pubDate><description><![CDATA[Mysql的事务和锁相信大家都很熟悉，其实redis也是有的，只是因为redis的事务比较鸡肋很少被人谈起，至于为什么鸡肋下面我们就会见到。同时redis的分布式锁还是非常值得我们了解一下的。
文章目录什么是事务事务基本操作错误处理锁分布式锁死锁
什么是事务
和Mysql一样，redis中的事务也是一组用关键字作为边界的有序排列的命令，用来将命令进行打包执行。但是redis的事务并没有mysql事务那么多优秀的特性，例如原子性，隔离性等等。
事务基本操作
下面这个表格是和事务相关的一些操作命令




命令]]></description><category></category></item><item><title><![CDATA[【Prometheus 01】搭建本地测试环境]]></title><link>https://blog.csdn.net/Victor2code/article/details/112482331</link><guid>https://blog.csdn.net/Victor2code/article/details/112482331</guid><author>Victor2code</author><pubDate>Mon, 11 Jan 2021 18:20:24 +0800</pubDate><description><![CDATA[学习Prometheus+Grafana，这一节我们首先在本地搭建一套测试环境
文章目录测试环境规划单台虚拟机初始化复制多台虚拟机
测试环境规划
我使用的是Mac，计划使用VMwareFusion创建3台Centos7的虚拟机组成集群，其中3台机器的规划如下




Hostname
Ip
功能




prometheus.test
172.16.141.20/24
Prometheus


grafana.test
172.16.141.21/24
Grafana


agent.test
172.16]]></description><category></category></item><item><title><![CDATA[Mac上利用iterm2多屏同时操作多个ssh终端]]></title><link>https://blog.csdn.net/Victor2code/article/details/112476490</link><guid>https://blog.csdn.net/Victor2code/article/details/112476490</guid><author>Victor2code</author><pubDate>Mon, 11 Jan 2021 16:53:21 +0800</pubDate><description><![CDATA[今天在本地的Mac上搭了一个集群用于测试Prometheus相关的东西，因为涉及到多台机器，有很多的操作都是重复的，如果能够敲一遍命令然后在多个ssh终端上同时执行，就可以省下很多功夫。Google了一下发现iterm2这个工具可以做到，这里记录下。
文章目录iterm2分屏多屏同时输入补充
iterm2
iterm2是一款Mac终端的升级工具，在原始终端的基础上还增加了一些新功能，例如我现在最需要的多终端同时执行。
直接去官网下载安装即可使用。
iterm2中利用profile来定义一个页签，如下打开「P]]></description><category></category></item><item><title><![CDATA[Linux通过环境变量限制用户能执行的命令]]></title><link>https://blog.csdn.net/Victor2code/article/details/112437728</link><guid>https://blog.csdn.net/Victor2code/article/details/112437728</guid><author>Victor2code</author><pubDate>Sun, 10 Jan 2021 19:37:50 +0800</pubDate><description><![CDATA[最近公司有个场景，需要限制用户登陆以后可以执行的命令，从而提高系统的安全性。本身bash已经有了一个受限制的版本叫做rbash，我们在这个基础上还可以通过环境变量的方式对用户做进一步的限制。
文章目录受限制的shell用户登录流程使用自定义profile文件验证后续
受限制的shell
正常情况下用useradd xx去创建用户的时候给用户配置的shell都是bash，这个可以通过查看文件/etc/passwd或者是通过命令echo $SHELL进行确认。
查看bash命令的man页面会发现bash还有一个]]></description><category></category></item><item><title><![CDATA[Mac的VMwareFusion安装VMware Tools解决不能复制粘贴的问题]]></title><link>https://blog.csdn.net/Victor2code/article/details/112355117</link><guid>https://blog.csdn.net/Victor2code/article/details/112355117</guid><author>Victor2code</author><pubDate>Fri, 08 Jan 2021 13:08:54 +0800</pubDate><description><![CDATA[在VMwareFusion中新安装完Centos虚拟机，结果发现虚拟机不能和宿主机互相复制粘贴，非常不方便，这篇文章来记录下解决的过程。
文章目录问题表现解决步骤
问题表现
VMwareFusion中的虚拟机不能和宿主机之间进行复制粘贴，尝试了键盘快捷键、鼠标右键，都不可以。只能在虚拟机内进行复制粘贴。
网上的评论都说安装VMware Tools可以解决，但是我这边的安装按钮是灰色的

解决步骤
再次Google之后发现可以进行手动安装，下面记录下过程。
首先在「应用程序」中找到「Vmware Fusion]]></description><category></category></item><item><title><![CDATA[Macbook利用VMwareFusion安装Centos7]]></title><link>https://blog.csdn.net/Victor2code/article/details/112298290</link><guid>https://blog.csdn.net/Victor2code/article/details/112298290</guid><author>Victor2code</author><pubDate>Wed, 06 Jan 2021 21:33:16 +0800</pubDate><description><![CDATA[最近换了工作，工作电脑改为了Mac。Macbook和Windows不同的是其不能再用VMware Workstation运行虚拟机了，而改为了专门的VMware Fusion。这一篇以Centos7为例来梳理下怎么在Mac上运行虚拟机。
文章目录安装VMware Fusion安装虚拟机权限问题
安装VMware Fusion
Fusion比较好的地方是官方有免费的个人版本供下载使用，如下图所示

注册完以后会给你的邮箱发送一个下载链接，以及对应的key，傻瓜式安装即可。
安装虚拟机
安装虚拟机的方式都是大同]]></description><category></category></item><item><title><![CDATA[【每日力扣Leetcode】1114-按序打印（多解法来深入理解python中的锁和阻塞）]]></title><link>https://blog.csdn.net/Victor2code/article/details/109851186</link><guid>https://blog.csdn.net/Victor2code/article/details/109851186</guid><author>Victor2code</author><pubDate>Fri, 20 Nov 2020 15:35:45 +0800</pubDate><description><![CDATA[力扣题库1114，在单例模式的前提下，使得类中的3个方法按照指定顺序执行。
题目链接点这里。
文章目录题目描述解题思路初始答案改进答案一改进答案二改进答案三注意事项
题目描述
我们提供了一个类：
public class Foo {
  public void first() { print("first"); }
  public void second() { print("second"); }
  public void third() { print("third"); }
}

三个不同的线程将]]></description><category></category></item><item><title><![CDATA[记一次机房断电办公室网络瘫痪的恢复经过]]></title><link>https://blog.csdn.net/Victor2code/article/details/109332681</link><guid>https://blog.csdn.net/Victor2code/article/details/109332681</guid><author>Victor2code</author><pubDate>Wed, 28 Oct 2020 15:34:05 +0800</pubDate><description><![CDATA[今早同事告诉我办公室所有Wifi的SSID都消失了，然后有线网络也访问不了，整个公司网络完全瘫痪，简直是吓尿了。好在最后查明原因并成功将网络恢复，这里记录一下整个过程，并整理一下改进方案。
文章目录发现故障初步定位详细排查运营商的猫和出口IP解决问题断电恢复ESXI虚拟机总结后续改进
发现故障
故障表现为办公室Wifi的SSID全部消失，有线网络也无法使用，整个网络瘫痪。
初步定位
虽然心里很慌，但是处理事情还是要有条不紊，先从时间维度和空间维度来对问题进行初步定位。
时间上，昨天下班还好好的，今天突然这样]]></description><category></category></item><item><title><![CDATA[python的时间操作模块datetime和time使用详解]]></title><link>https://blog.csdn.net/Victor2code/article/details/109257615</link><guid>https://blog.csdn.net/Victor2code/article/details/109257615</guid><author>Victor2code</author><pubDate>Sat, 24 Oct 2020 12:39:23 +0800</pubDate><description><![CDATA[python中有两个和时间相关的模块time和datetime，我自己在使用的时候经常搞混。这一篇就来记录下这两个模块常见的一些功能。
文章目录time模块和datetime模块时间的表示time模块操作datetime模块操作Mysql存储
time模块和datetime模块
time是python的内建模块，用与和时间相关的一些操作；datetime模块是第三方模块，为了方便操作，将和date与time相关的一些操作进行了封装。
所以本质上来讲，能用datetime来操作的都能用time来实现，通过后面]]></description><category></category></item><item><title><![CDATA[python中的位运算和集合运算妙用实例]]></title><link>https://blog.csdn.net/Victor2code/article/details/109227143</link><guid>https://blog.csdn.net/Victor2code/article/details/109227143</guid><author>Victor2code</author><pubDate>Thu, 22 Oct 2020 17:45:31 +0800</pubDate><description><![CDATA[python中有一些运算符不是经常会用到，例如&amp;还有|，但是这些运算符在很多场合却能显示奇效。这篇文章让我们一起来看看python中的位运算和集合运算，然后看看实际应用中两个非常巧妙的使用场景。
文章目录位运算集合运算实际应用位运算集合运算
位运算
位运算只适用于整数，将对应的二进制数逐位进行计算，其规则如下




符号
含义




&amp;
与运算，都为1返回1，否则返回0


|
或运算，都为0返回0，否则返回1


^
异或运算，不同为1，相同为0


~
取反，1变0，0变1


&l]]></description><category></category></item><item><title><![CDATA[python的单例模式及多线程加锁实现详解]]></title><link>https://blog.csdn.net/Victor2code/article/details/109123052</link><guid>https://blog.csdn.net/Victor2code/article/details/109123052</guid><author>Victor2code</author><pubDate>Fri, 16 Oct 2020 19:25:27 +0800</pubDate><description><![CDATA[单例模式算是最常见的设计模式了，也是面试中的高频测试点。这一篇就来总结下如何在python中实现单例模式。
文章目录单例模式对象创建过程代码实现多线程import模块来实现单例模式总结
单例模式
所谓单例模式，就是针对某一个类，不管实例化多少次，实例出来的对象都是同一个。
之所以需要用到单例模式，有两个主要原因。其一是在程序开发中很多对象用于全局的记录，这些对象不管在程序的哪个地方被调用都应该是指向同一个，例如日志对象。其二是因为对象的创建和销毁都是耗费资源的，如果对象的创建次数减少，势必能提高程序的整体运]]></description><category></category></item><item><title><![CDATA[python多进程和多线程看这一篇就够了]]></title><link>https://blog.csdn.net/Victor2code/article/details/109005171</link><guid>https://blog.csdn.net/Victor2code/article/details/109005171</guid><author>Victor2code</author><pubDate>Sat, 10 Oct 2020 22:08:35 +0800</pubDate><description><![CDATA[脑海中关于进程和线程的概念一直很模糊，什么时候该用多进程，什么时候该用多线程总是搞不清楚。同时python因为历史遗留问题存在GIL全局锁，就让人更加困惑。这一篇就完整整理一下python中进程和线程的概念和实现。
文章目录进程和线程GIL锁多进程 vs 多线程代码实现多进程进程池进程间通讯多线程线程池异步线程间通讯总结
进程和线程
进程（process）和线程（thread）的区别应该算是个老生常谈的话题。
这里引用知乎用户的一个高赞回答来深入浅出的解释一下
看了一遍排在前面的答案，类似”进程是资源分配的]]></description><category></category></item><item><title><![CDATA[python中的反射及在动态导入中的使用详解]]></title><link>https://blog.csdn.net/Victor2code/article/details/108949412</link><guid>https://blog.csdn.net/Victor2code/article/details/108949412</guid><author>Victor2code</author><pubDate>Wed, 07 Oct 2020 12:24:51 +0800</pubDate><description><![CDATA[这篇博客记录下python中关于反射的知识点，同时结合实例看看其在动态导入中的应用。
什么是反射
反射（Reflect）是指面向对象编程中通过字符串动态获取对象的类型、属性和方法等信息。
反射使用场景
想象下面的场景，我们编写了几十个插件供业务程序来使用，而具体业务中使用哪些插件是由配置文件来控制的，或者由用户输入的。不管是配置文件还是用户输入，都是采用字符串形式来表示插件名，我们需要检查字符串代表的插件名是否存在，如果存在需要获取对应的插件对象并调用。
文字表述不太直观，看如下的一个项目

在plugin]]></description><category></category></item><item><title><![CDATA[python利用Decimal处理浮点数计算的精度问题]]></title><link>https://blog.csdn.net/Victor2code/article/details/108650118</link><guid>https://blog.csdn.net/Victor2code/article/details/108650118</guid><author>Victor2code</author><pubDate>Thu, 17 Sep 2020 18:39:02 +0800</pubDate><description><![CDATA[之前在学习Django中ORM的时候，一直不明白怎么有一个数据类型叫Decimal。直到最近在一个项目中遇到了小数点计算的问题，发现要解决小数计算的精度问题，还真得用到这个Decimal不可。
文章目录问题描述解决办法四舍五入Decimal
问题描述
浮点数在内存中存储的时候因为存储机制的原因，天然存在精度丢失的现象，具体原因这里不赘述了，感兴趣的朋友可以参考另一篇博客《浮点型数据精度丢失实例详解》。
a=2.2
a*3
Out[16]: 6.6000000000000005

本来期望的结果是6.6，结果]]></description><category></category></item><item><title><![CDATA[JQuery对象获取各类节点操作详解]]></title><link>https://blog.csdn.net/Victor2code/article/details/108591400</link><guid>https://blog.csdn.net/Victor2code/article/details/108591400</guid><author>Victor2code</author><pubDate>Tue, 15 Sep 2020 00:23:39 +0800</pubDate><description><![CDATA[在前面的《JQuery的选择器和过滤器汇总》中我总结了JQ中直接获取元素的几种方式，但是在很多时候，都是某个元素的事件响应中，需要对另一个元素进行操作。这个时候除了使用id或者class这种定死的方式，还可以在事件响应的元素上做相对的查询。这一篇我们就来总结一下。
文章目录操作环境父级元素子级元素兄弟元素
操作环境
h5内容如下
&lt;div id="container"&gt;
    &lt;div id="box1"&gt;&lt;span id="span1"&gt;&lt;/span&gt;&l]]></description><category></category></item></channel></rss>