<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[安得情怀似旧时]]></title><description><![CDATA[和气春风贤者坐，静山流水玉人怀]]></description><link>https://blog.youkuaiyun.com/KentZhang_</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; KentZhang_]]></copyright><item><title><![CDATA[请假的羞耻感]]></title><link>https://blog.youkuaiyun.com/KentZhang_/article/details/143697579</link><guid>https://blog.youkuaiyun.com/KentZhang_/article/details/143697579</guid><author>KentZhang_</author><pubDate>Mon, 11 Nov 2024 22:57:36 +0800</pubDate><description><![CDATA[如果中国所有企业都双休，不允许加班，那么企业的生产成本会提升，所生产的货物在国际市场上没有竞争力，因为就算中国不内卷了，但是越南会内卷、印度会内卷，他们的竞争力会提升，会抢夺中国的市场，会导致中国企业破产和更多的人失业。中国的文化，其实是推崇集体主义，即少数服从多数，个体服从集体，不要锋芒毕露，不要特行独立，任劳任怨，不屈不挠，埋头骨干，拼命硬干，反正就是吃苦在前，享受在后，前人栽树，后人乘凉，舍己为人，舍小家保大家。请假，仅仅只告诉领导，这可能是害怕对比压力，不想让别人知道，想做到悄无声息的休假。]]></description><category></category></item><item><title><![CDATA[经验分享：我推荐这两款SD-WAN]]></title><link>https://blog.youkuaiyun.com/KentZhang_/article/details/143661633</link><guid>https://blog.youkuaiyun.com/KentZhang_/article/details/143661633</guid><author>KentZhang_</author><pubDate>Sun, 10 Nov 2024 15:41:59 +0800</pubDate><description><![CDATA[最后，我来说说，我理解的SD-WAN，它的全称：Software-Defined Wide Area Network，即软件定义广域网，直白一点就是用软件来连接网络，具体它内部怎么分发流量的，不需要关注，有可能是走专线，有可能是通过POP点转发，也有可能是优化了广域网的协议，相对于专线，SD-WAN更便宜。关于费用问题，我也比较过，具体多少钱，需要根据的自己业务量选择相应的配置的套餐，使用SD-WAN是一个订阅式服务，会涉及续费问题，具体签了多少的钱的合同，我这里就不便透漏了。这样的流程，其实很低效。]]></description><category></category></item><item><title><![CDATA[Mysql事务的实现]]></title><link>https://blog.youkuaiyun.com/KentZhang_/article/details/121593112</link><guid>https://blog.youkuaiyun.com/KentZhang_/article/details/121593112</guid><author>KentZhang_</author><pubDate>Sun, 28 Nov 2021 16:12:37 +0800</pubDate><description><![CDATA[文章目录四种隔离级别的实现行锁MVCC实现
四种隔离级别的实现
结论：


对于RR和RC级别隔离，InnoDB使用MVCC+行锁实现。


对于Serializable，使用表锁实现。


具体实现：

在可重复读(RR)的隔离级别下，事务启动时得到一个事务ID，整个事务存在期间只能看到小于等于这个事务ID的版本数据。（MVCC实现）
在读提交(RC)的隔离级别下，每个SQL执行时，得到一个事务ID，这个SQL只能看到小于等于这个事务ID的版本数据。（MVCC实现）
在串行化(Serializable)的]]></description><category></category></item><item><title><![CDATA[B树和B+树的区别]]></title><link>https://blog.youkuaiyun.com/KentZhang_/article/details/121529333</link><guid>https://blog.youkuaiyun.com/KentZhang_/article/details/121529333</guid><author>KentZhang_</author><pubDate>Thu, 25 Nov 2021 08:15:19 +0800</pubDate><description><![CDATA[文章目录B树B+树比较疑问每个子节点内部的数据一定是有序的吗？进入叶节点后，查询的复杂度是怎么样的？
B树

定义
class BTreeNode 
{ 
 int *keys; // 存储关键字的数组
 int t;  // 最小度 (定义一个结点包含关键字的个数 t-1 &lt;= num &lt;= 2t -1) 
 BTreeNode **C; // 存储孩子结点指针的数组
 int n;  // 记录当前结点包含的关键字的个数
 bool leaf; // 叶子结点的一个标记，如果是叶子结点则为t]]></description><category></category></item><item><title><![CDATA[Docker解决部署难题]]></title><link>https://blog.youkuaiyun.com/KentZhang_/article/details/121452163</link><guid>https://blog.youkuaiyun.com/KentZhang_/article/details/121452163</guid><author>KentZhang_</author><pubDate>Sun, 21 Nov 2021 12:44:24 +0800</pubDate><description><![CDATA[文章目录部署存在的问题docker如何解决docker VS 虚拟机参考
部署存在的问题
1、环境依赖
一个程序的运行，需要依赖文件系统、网络、动态库、各种运行时（例如Java虚拟机）等等。最简单的例子，一个Java程序要运行，机器上必须装有Java虚拟机。程序要写日志，对应的目录必须是可写的。
因此，程序的部署依赖于环境的配置，配置环境需要消耗不小的工作量。
2、环境冲突
一台机器上，一般要部署多个服务程序。
首先，它们的环境依赖可能存在冲突，比如A服务和B服务只能有一个监听80端口，它们依赖的运行时版本]]></description><category></category></item><item><title><![CDATA[Linux系统平均负载的含义]]></title><link>https://blog.youkuaiyun.com/KentZhang_/article/details/121450167</link><guid>https://blog.youkuaiyun.com/KentZhang_/article/details/121450167</guid><author>KentZhang_</author><pubDate>Sun, 21 Nov 2021 10:19:41 +0800</pubDate><description><![CDATA[定义
平均负载，表示当前正在运行的线程加上等待运行的线程的数量。
## 8.70表示过去1分钟的平均负载，7.33表示过去5分钟的平均负载，6.29表示过去15分钟的平均负载
top - 10:01:07 up 83 days, 23 min,  1 user,  load average: 8.70, 7.33, 6.29 


分析
对于一个良好的系统，平均负载应该小于CPU核心数，这意味着所有的任务都可以被及时处理，而不需要等待，反之说明任务过多，无法及时响应，长期处于这样的状态，机器存在性能问题。
]]></description><category></category></item><item><title><![CDATA[如何在docker中产生core文件]]></title><link>https://blog.youkuaiyun.com/KentZhang_/article/details/121412566</link><guid>https://blog.youkuaiyun.com/KentZhang_/article/details/121412566</guid><author>KentZhang_</author><pubDate>Thu, 18 Nov 2021 23:16:50 +0800</pubDate><description><![CDATA[docker参数
 security_opt:
        - seccomp:unconfined
    privileged: true  ### 主要是这一项
    cap_add:
        - SYS_PTRACE
        - SYS_ADMIN
    ulimits:
        core: -1    # may also use -1 to indicates unlimited

启动脚本
## 配置core文件名的格式、保存位置  
## 正常情况下，不能修改]]></description><category></category></item><item><title><![CDATA[Golang易错知识点]]></title><link>https://blog.youkuaiyun.com/KentZhang_/article/details/121390652</link><guid>https://blog.youkuaiyun.com/KentZhang_/article/details/121390652</guid><author>KentZhang_</author><pubDate>Wed, 17 Nov 2021 23:34:25 +0800</pubDate><description><![CDATA[文章目录string和'\0'sliceWaitGroup使用range产生的临时变量goroutine泄露闭包闭包与range带来的问题对象滥用的后果
string和’\0’
Golang的string内部就是字节数组，末尾没有’\0’，对于Golang来说，’\0’也是一个普通的字节。其他语言在传输字符串的时候有可能在末尾加’\0’，那么Golang解析的时候会在末尾多了’\0’字符。
就会出现很尴尬的事情。比如C语言传输了’CHINA\0’，Golang解析后，再用’CHINA’比较，就不会相等了，但]]></description><category></category></item><item><title><![CDATA[Mysql索引设计和使用]]></title><link>https://blog.youkuaiyun.com/KentZhang_/article/details/121301507</link><guid>https://blog.youkuaiyun.com/KentZhang_/article/details/121301507</guid><author>KentZhang_</author><pubDate>Sat, 13 Nov 2021 11:03:05 +0800</pubDate><description><![CDATA[文章目录1 概述2 设计原则3 设计误区4 索引方法5 索引类型6 参考资料
1 概述
索引就是对某些字段提前排序，生成特定的数据结构（例如B+树或者哈希），然后加快查询。
2 设计原则

要在过滤字段上创建索引。即where后出现的字段上创建索引。
要在取值范围广的字段创建索引。比如用性别字段创建索引，那意义就不大。
尽量使用短字段做索引。首先是节省空间，其次是IO较少，比较更快。
主键尽量使用自增、整型字段。因为普通索引会保存主键，太长的主键会占用空间。
创建联合索引时，利用最左字段查询。创建联合索引后]]></description><category></category></item><item><title><![CDATA[Mysql四种隔离级别]]></title><link>https://blog.youkuaiyun.com/KentZhang_/article/details/121276970</link><guid>https://blog.youkuaiyun.com/KentZhang_/article/details/121276970</guid><author>KentZhang_</author><pubDate>Thu, 11 Nov 2021 21:37:22 +0800</pubDate><description><![CDATA[文章目录查看隔离级别四种隔离级别read uncommitted  （  RU，读未提交 ）read committed （RC，读已提交 ）repeatable read  （RR，可重复读）serializable  可串行化隔离解决的问题dirty read 脏读non-repeatable read 不可重复读phantom 幻读对应的解决方法
查看隔离级别
首先隔离级别是Mysql的一个参数配置，是可以修改的。
SQL为：
SHOW VARIABLES LIKE 'transaction_isol]]></description><category></category></item><item><title><![CDATA[C语言实现选择排序]]></title><link>https://blog.youkuaiyun.com/KentZhang_/article/details/120754514</link><guid>https://blog.youkuaiyun.com/KentZhang_/article/details/120754514</guid><author>KentZhang_</author><pubDate>Wed, 13 Oct 2021 23:11:52 +0800</pubDate><description><![CDATA[文章目录算法描述C语言代码实现算法特点时间复杂度
算法描述

第一步，找到数组中最小的数据，把它和第一个数据交换位置
第二步，在剩余数据中，找到最小的数据，把它和第二个数据交换位置
如此不断地重复，直到所有的数据排好顺序

因为这种算法，总是在剩余数据中选择最小的数据，所以叫做选择排序。
C语言代码实现
#include &lt;stdio.h&gt;

void SelectSort(int data[], int len) {
	for (int i = 0; i &lt; len; i++) {
		]]></description><category></category></item><item><title><![CDATA[写博客的原则和方法]]></title><link>https://blog.youkuaiyun.com/KentZhang_/article/details/120119762</link><guid>https://blog.youkuaiyun.com/KentZhang_/article/details/120119762</guid><author>KentZhang_</author><pubDate>Sun, 05 Sep 2021 19:47:22 +0800</pubDate><description><![CDATA[文章目录原则篇1、不写安装教程类博客2、用自己的语言来表达3、站在他人的肩膀上方法篇1、平时注重记录2、平时注重总结3、平时注重思考
原则篇
1、不写安装教程类博客
比如Mysql安装教程，Redis集群搭建，Golang在Linux上安装配置教程等等，这类教程网上非常多，也有一定的作用。但是，却不是我写博客的范围。
因为，我觉得这种工具类的软件，其官方会有对应的教程，我不用去写这类教程。另外，纯操作类型的教程仅仅指明如何操作而已，既没有说明底层原理，也没有说明这样操作的目的，反正就是跟着操作就对了。参与者]]></description><category></category></item><item><title><![CDATA[Golang中如何处理tcp粘包]]></title><link>https://blog.youkuaiyun.com/KentZhang_/article/details/120118553</link><guid>https://blog.youkuaiyun.com/KentZhang_/article/details/120118553</guid><author>KentZhang_</author><pubDate>Sun, 05 Sep 2021 18:05:37 +0800</pubDate><description><![CDATA[文章目录为什么要处理粘包处理粘包的方法总结
为什么要处理粘包
由于tcp协议是数据流传输，一次读数据不一定能得到一个完整的业务数据包，所以需要进行粘包处理，保证要处理的数据是一个或者多个完成的业务数据包。
处理粘包的方法
假设：

包的格式为 四字节包头  +  包体， 包头指明包体的长度
大端传输数据

处理过程：

先读取四字节包头，解析出包头的长度bodyLen
再读取bodyLen长度的包体，这次读取的数据就是一个完整的业务包bodyData
把bodyData返回到业务层处理

处理代码如下：
c]]></description><category></category></item><item><title><![CDATA[slice在Golang中的实现和应用]]></title><link>https://blog.youkuaiyun.com/KentZhang_/article/details/120113263</link><guid>https://blog.youkuaiyun.com/KentZhang_/article/details/120113263</guid><author>KentZhang_</author><pubDate>Sun, 05 Sep 2021 12:36:27 +0800</pubDate><description><![CDATA[文章目录底层实现创建slice的三种方法1、使用make创建slice2、使用数组创建slice3、直接定义向slice插入数据直接使用在索引位置插入使用append插入数据总结
底层实现
struct Slice
{ 
  byte* array; // actual data
  uintgo len;  // number of elements
  uintgo cap;  // allocated number of elements
};

我们知道slice是用来管理一个内存地址连续的内存空间]]></description><category></category></item><item><title><![CDATA[Golang和C++简单对比]]></title><link>https://blog.youkuaiyun.com/KentZhang_/article/details/119979991</link><guid>https://blog.youkuaiyun.com/KentZhang_/article/details/119979991</guid><author>KentZhang_</author><pubDate>Sun, 29 Aug 2021 14:08:11 +0800</pubDate><description><![CDATA[文章目录编译内存管理标准库性能并发编程语法复杂度开发和调试难度总结
编译
都可以静态编译，直接编译成二进制文件。目前，许多语言(比如Java,C#)都是基于运行时，能静态编译语言的不多，Go算一个。同时，都可以跨平台。
内存管理
在C++中，需要自己使用new和delete管理内存，尽管C++已经有了智能指针，但是有一些坑，不是那么好用。
Go虽是静态语言，但是自己管理内存，减轻了程序员的心智负担。这一点，非常重要。因为C++程序的崩溃，大多数时候都是内存问题，比如内存泄漏，非常难以解决。
标准库
一门语言]]></description><category></category></item><item><title><![CDATA[写博客的五个好处]]></title><link>https://blog.youkuaiyun.com/KentZhang_/article/details/119979393</link><guid>https://blog.youkuaiyun.com/KentZhang_/article/details/119979393</guid><author>KentZhang_</author><pubDate>Sun, 29 Aug 2021 13:02:56 +0800</pubDate><description><![CDATA[文章目录绪论减轻记忆负担减少检索时间知识积累显性化有利于传播和复用总结经验
绪论
写博客，其实是一件费力费时的事情，现实中没有多少人能长期坚持下来。我自己也是断断续续地写，也没有写坚持下来。在实践的过程中，我本身却是收益良多。我养成了记录的习惯，记录确实提高我的工作效率。
其根本原因：程序员本身就是一个知识工作者，每天的工作就是使用知识、创造知识。人的大脑，处理能力是有限的，记忆力更是不靠谱，因此做好知识管理可以分担大脑的负担。为什么有的人总是遗忘，总是粗心？光凭脑子，是记不住的，必然容易犯错。
我认为，写]]></description><category></category></item><item><title><![CDATA[git使用]]></title><link>https://blog.youkuaiyun.com/KentZhang_/article/details/119978368</link><guid>https://blog.youkuaiyun.com/KentZhang_/article/details/119978368</guid><author>KentZhang_</author><pubDate>Sun, 29 Aug 2021 11:25:18 +0800</pubDate><description><![CDATA[目录原理分支本地仓库撤销撤销add撤销commit撤销push关于HEAD删除对比修改message其他常用操作
原理
对于一个使用5年svn的人来说，突然使用git，确实不太习惯，而且他们的设计方式上有很大的不同。
他们最大的不同有2点：

svn没有分支
svn没有本地仓库

分支
在svn中，没有分支，都是保存一个一个文件，这些文件是平行存放的。而在git中，你进入一个仓库，要切换到你需要的分支中。那么这些文件的存储也比svn要复杂，据我观察，大概是只存储不同分支代码的不同部分。

git branc]]></description><category></category></item><item><title><![CDATA[一个简单的socket编程demo]]></title><link>https://blog.youkuaiyun.com/KentZhang_/article/details/85038312</link><guid>https://blog.youkuaiyun.com/KentZhang_/article/details/85038312</guid><author>KentZhang_</author><pubDate>Sun, 16 Dec 2018 16:44:03 +0800</pubDate><description><![CDATA[记录这个demo，相当于是保留一份代码片段，以后可以随时拿来用，验证新的想法。人的大脑是很靠谱的，经常记错东西，需要保留一个索引，放在这里。
服务端
#include &amp;amp;amp;lt;sys/socket.h&amp;amp;amp;gt;
#include &amp;amp;amp;lt;netinet/in.h&amp;amp;amp;gt;
#include &amp;amp;amp;lt;arpa/inet.h&amp;amp;amp;gt;
#include &amp;a]]></description><category></category></item><item><title><![CDATA[mysql使用笔记]]></title><link>https://blog.youkuaiyun.com/KentZhang_/article/details/85038080</link><guid>https://blog.youkuaiyun.com/KentZhang_/article/details/85038080</guid><author>KentZhang_</author><pubDate>Sun, 16 Dec 2018 16:24:10 +0800</pubDate><description><![CDATA[常用界面工具
有时候为了方面，可以使用界面工具查看修改mysql，推荐两个工具：


Navicat      需要破解


HeidiSQL   开源免费


shell操作
远程登录
mysql -u username -p123456 -h 192.168.97.200 -P 3300 -D dbname ## 注意 -p后面无空格，紧跟密码 

查看数据库和表
show databases...]]></description><category></category></item><item><title><![CDATA[pragma pack和内存对齐]]></title><link>https://blog.youkuaiyun.com/KentZhang_/article/details/85037735</link><guid>https://blog.youkuaiyun.com/KentZhang_/article/details/85037735</guid><author>KentZhang_</author><pubDate>Sun, 16 Dec 2018 15:47:53 +0800</pubDate><description><![CDATA[内存对齐
内存对齐和CPU有关系，可以认为内存对齐的大小就是CPU一次读取内存的大小，例如32CPU一次读取4字节，那么内存的对齐方式就4字节，64位就是8字节。本质上是保证CPU使用尽量少的次数将某一个变量取出来。
pragma pack(n)的作用
上面说了，编译默认对齐方式是4字节（32位系统）或者8字节（64）位系统，但是通过pragma pack可以自己定义内存的对齐方式。
#pragm...]]></description><category></category></item></channel></rss>