<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[MBuger的博客]]></title><description><![CDATA[与其临渊羡鱼，不如退而结网。]]></description><link>https://blog.youkuaiyun.com/MBuger</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; MBuger]]></copyright><item><title><![CDATA[二八法则]]></title><link>https://blog.youkuaiyun.com/MBuger/article/details/106966660</link><guid>https://blog.youkuaiyun.com/MBuger/article/details/106966660</guid><author>MBuger</author><pubDate>Fri, 26 Jun 2020 11:21:56 +0800</pubDate><description><![CDATA[说明

二八法则：二八定律是19世纪末20世纪初意大利经济学家帕累托发现的。他认为，在任何一组东西中，最重要的只占其中一小部分，约20%，其余80%尽管是多数，却是次要的，因此又称二八定律。（搬运百度百科词条）

但其实二八法则不止适用于经济学，在生活中的很多地方都可以有很好的验证。今天端午假期闲着没事总结了一下在工作中遇到的一些适用于二八法则的场景，明白了这些以后可以在一定程度上提高工作效率，少走弯路。
技能学习
技术人员需要不断的学习和精进，但是知识是学不完的，在海量的知识面前我们应该如何进行选择？
一]]></description><category></category></item><item><title><![CDATA[一次代码review引发的思考与总结（好的编码习惯总结）]]></title><link>https://blog.youkuaiyun.com/MBuger/article/details/105424342</link><guid>https://blog.youkuaiyun.com/MBuger/article/details/105424342</guid><author>MBuger</author><pubDate>Fri, 10 Apr 2020 00:25:41 +0800</pubDate><description><![CDATA[缘由
毕业后工作一年多，一直想总结一下工作中收获到的一些好的经验，但是一直没有找到机会把这些零散的经验好好的总结汇总起来。这一次在公司经历了整个一个功能模块从无到有的过程，包括，需求分析，模块设计，代码编写，前后端联调与自测，以及后期的bug的查找与修改，且整个过程都是由我一人负责，感觉又收获到了很多宝贵的经验。借着这个机会就将收获的经验总结记下。
编码
在公司完成了一个模块的代码编写后，进行了一...]]></description><category></category></item><item><title><![CDATA[【Ubuntu中合并cgroup挂载点失败】报错：mount: none is already mounted or /cgroup/cpu busy]]></title><link>https://blog.youkuaiyun.com/MBuger/article/details/103222407</link><guid>https://blog.youkuaiyun.com/MBuger/article/details/103222407</guid><author>MBuger</author><pubDate>Mon, 25 Nov 2019 09:16:20 +0800</pubDate><description><![CDATA[问题
有时候我们可能会遇到需要修改系统默认cgroup挂载点的情况，例如需要把cpu，cpuacct，cpuset挂载到一起的情况，但是有些操作系统如果直接使用下面方法合并挂载cgroup的时候可能会遇到下面这种报错。
具体原因目前无法得知，很可能的原因是不同的操作系统版本限制。
但是我们可以换另外一种方式解决这个问题。
猜想
cgroup默认挂载是由systemd去划分挂载的，那么systemd...]]></description><category></category></item><item><title><![CDATA[git rebase的使用（二）修改commit内容]]></title><link>https://blog.youkuaiyun.com/MBuger/article/details/86303210</link><guid>https://blog.youkuaiyun.com/MBuger/article/details/86303210</guid><author>MBuger</author><pubDate>Fri, 11 Jan 2019 15:35:20 +0800</pubDate><description><![CDATA[简介
有时候想修改某个部分代码，但是不想提交新的commit，需要在某次commit的原基础上进行修改，同样可以使用git rebase。
使用示例
如图所示，分别提交两次commit，现在想要修改first commit的内容：

接着在bash中输入命令
git rebase -i HEAD~2

弹出编辑窗口

修改第一次提交的操作选项pick为edit，保存退出，发现文件内容变为了第一次提...]]></description><category></category></item><item><title><![CDATA[git rebase 的使用（一）合并多次提交记录]]></title><link>https://blog.youkuaiyun.com/MBuger/article/details/86241033</link><guid>https://blog.youkuaiyun.com/MBuger/article/details/86241033</guid><author>MBuger</author><pubDate>Thu, 10 Jan 2019 16:54:53 +0800</pubDate><description><![CDATA[简介
有时候编写一个功能或者需求会提交多次commit，而有些commit只是修改了一些无关紧要的东西。而过多的commit记录是不利于codereview，并且当遇到特殊情况需要做版本回滚的时候，过多的commit记录也会带来问题。这个时候就需要把一些commit记录进行合并。让每个commit都是一个完整的功能，做到每个commit都是有必要的。
使用示例
现在工作目录中创建一个测试文件git...]]></description><category></category></item><item><title><![CDATA[服务器压力测试工具2——压力端控制模块设计]]></title><link>https://blog.youkuaiyun.com/MBuger/article/details/83688535</link><guid>https://blog.youkuaiyun.com/MBuger/article/details/83688535</guid><author>MBuger</author><pubDate>Sat, 03 Nov 2018 16:50:50 +0800</pubDate><description><![CDATA[简介
压力端控制模块（Robotctr）相对简单，主要负责控制压力端的压力生成以及部分测试数据的上传。
设计思路
Robotctr读取配置文件，把相应的配置项通过HTTP发送到各个Robotsrv，并使用HTTP请求控制Robotsrv机器的启动和停止测试。请求包括：
1.start请求：开始测试请求，会向配置文件压力服务器列表中的所有Robotsrv发送start请求。如果某个Robotsrv启...]]></description><category></category></item><item><title><![CDATA[服务器压力测试工具1——压力端模块设计]]></title><link>https://blog.youkuaiyun.com/MBuger/article/details/83188663</link><guid>https://blog.youkuaiyun.com/MBuger/article/details/83188663</guid><author>MBuger</author><pubDate>Sat, 20 Oct 2018 13:22:32 +0800</pubDate><description><![CDATA[简介
压力端主要负责压力的产生，以及压力

]]></description><category></category></item><item><title><![CDATA[服务器压力测试工具0——需求与设计]]></title><link>https://blog.youkuaiyun.com/MBuger/article/details/83148948</link><guid>https://blog.youkuaiyun.com/MBuger/article/details/83148948</guid><author>MBuger</author><pubDate>Thu, 18 Oct 2018 16:38:39 +0800</pubDate><description><![CDATA[简介
目前网上有各种服务器的压力测试工具，大多针对于支持http协议的web服务器。现在需要实现一个压力测试工具，能够实现对各种连接协议的服务器进行测试，包括但不限于http，tcp，websocket协议。
功能需求
1.能够实时获取服务器对客户端请求的最大最小以及平均响应时间，百分之九十响应时间，超时任务数，请求错误数，错误率和实时的QPS，并同步监控服务器的性能信息。
2.可以实现对不同类型...]]></description><category></category></item><item><title><![CDATA[错误：Only one usage of each socket address (protocol/network address/port) is normally permitted.]]></title><link>https://blog.youkuaiyun.com/MBuger/article/details/83088894</link><guid>https://blog.youkuaiyun.com/MBuger/article/details/83088894</guid><author>MBuger</author><pubDate>Tue, 16 Oct 2018 15:09:02 +0800</pubDate><description><![CDATA[说明
在windows中使用go实现了一个服务器压力测试工具，使用的TCP协议，在调试期间，出现问题如下
Only one usage of each socket address (protocol/network address/por
t) is normally permitted.

从字面上来看是告诉我们是socket被复用了。在网上查了原因之后发现是套接字用完了，也就是同时建立的TC...]]></description><category></category></item><item><title><![CDATA[如何获取一定范围内不重复的随机数]]></title><link>https://blog.youkuaiyun.com/MBuger/article/details/81450599</link><guid>https://blog.youkuaiyun.com/MBuger/article/details/81450599</guid><author>MBuger</author><pubDate>Mon, 06 Aug 2018 10:54:41 +0800</pubDate><description><![CDATA[简介

生成一个随机数是很多时候需要实现的，往往会采用时间种子的方式，如下所示。

#include &amp;amp;lt;iostream&amp;amp;gt;
using namespace std;

int main()
{
    int i = rand();
    printf(&amp;quot;%d&amp;quot;, i);
    return 0;
}

这种直接使用rand函数去获取随机数的方式由于使用了默认的随机种子，所以获得的...]]></description><category></category></item><item><title><![CDATA[go语言中空结构体的使用]]></title><link>https://blog.youkuaiyun.com/MBuger/article/details/79758831</link><guid>https://blog.youkuaiyun.com/MBuger/article/details/79758831</guid><author>MBuger</author><pubDate>Fri, 30 Mar 2018 15:49:41 +0800</pubDate><description><![CDATA[简介 
go语言中的struct是一种很重要的语法，里面可以存放各种字段，当然它里面也可以为空。这样可以用来单纯的做控制信息。 
示例



type Cli struct {
    Request *http.Request
    ReqBody []byte
    N int
    C int
    QPS float64
    M string
    Req *http.Req...]]></description><category></category></item><item><title><![CDATA[go语言中如何阻塞函数]]></title><link>https://blog.youkuaiyun.com/MBuger/article/details/79592345</link><guid>https://blog.youkuaiyun.com/MBuger/article/details/79592345</guid><author>MBuger</author><pubDate>Sat, 17 Mar 2018 15:34:13 +0800</pubDate><description><![CDATA[简介

在使用go的时候通常会使用到goroutine，但是往往例如下面的情形就会出现问题。

func main(){
    go dosomething()
    go dosomething()
}

上面这种写法通常会让程序一闪而过。这个时候可能需要阻塞住主函数让他不退出。有人会说能不能像c++里面一样使用一个空的for循环？这里是不行的，go不允许使用出现空的循环语句。

使用sel...]]></description><category></category></item><item><title><![CDATA[关于STL中string的拷贝问题]]></title><link>https://blog.youkuaiyun.com/MBuger/article/details/77914767</link><guid>https://blog.youkuaiyun.com/MBuger/article/details/77914767</guid><author>MBuger</author><pubDate>Sat, 09 Sep 2017 13:46:57 +0800</pubDate><description><![CDATA[简介在不同版本的STL中string类实现拷贝的方式也是不一样的。大致分为三种方式 
eager copy（贪婪拷贝）：这种情况是最简单粗暴的拷贝方式，也就是每个对象都是相互独立的，每次拷贝都是深拷贝。这种拷贝方式的缺点就是浪费空间，但是保证了每个对象的独立互不干扰。SSO（small string optimization，小字符串直接放在对象的栈空间中）：这种拷贝方式对小字符串的处理很高效，一般]]></description><category></category></item><item><title><![CDATA[关于服务器的负载均衡问题]]></title><link>https://blog.youkuaiyun.com/MBuger/article/details/76285848</link><guid>https://blog.youkuaiyun.com/MBuger/article/details/76285848</guid><author>MBuger</author><pubDate>Sat, 29 Jul 2017 03:11:29 +0800</pubDate><description><![CDATA[简介当前的网络web服务器都面对着访问量大，并发量高的问题，例如百度这种搜索引擎，每天都会收到数百万的访问请求，这就会导致服务器的CPU，I/O处理能力成为瓶颈。 
而最开始人们处理这个问题的方法是把服务器的业务进行分割，把不同的请求分离到不同服务器进行处理。比如用一台服务器处理新闻的请求，一台服务器处理图片请求等等。但是这样并不能有效的解觉问题，因为网络访问具有突发性，很难确定哪些请求会造成服务器]]></description><category></category></item><item><title><![CDATA[一致性哈希算法的两种优化方案]]></title><link>https://blog.youkuaiyun.com/MBuger/article/details/76189561</link><guid>https://blog.youkuaiyun.com/MBuger/article/details/76189561</guid><author>MBuger</author><pubDate>Thu, 27 Jul 2017 16:12:45 +0800</pubDate><description><![CDATA[简介上一篇博客我简单的介绍了一致性哈希算法的基本思想。但是一致性哈希算法的提出当然也同样伴随着新的问题出现，那就是当某一个服务器结点挂掉之后，它的任务就会分配到它的下一个服务器结点，那么这就有悖于分布式系统中需要满足平衡性的要求。问题雪崩效应在服务器上会有一些数据会经常被访问，这些数据的访问次数远远高于其他数据，那么这些数据就被称为热点数据，理所当然在分布式服务器中承载这些热点数据的服务器的负载就要]]></description><category></category></item><item><title><![CDATA[分布式服务器中一致性哈希算法的简介]]></title><link>https://blog.youkuaiyun.com/MBuger/article/details/76167794</link><guid>https://blog.youkuaiyun.com/MBuger/article/details/76167794</guid><author>MBuger</author><pubDate>Thu, 27 Jul 2017 01:10:53 +0800</pubDate><description><![CDATA[简介首先我们需要知道什么是哈希，哈希一般都是将一个大数字取模然后分散到不同的容器里面，在一个分布式的服务器系统之中，通常会使用哈希的算法来处理服务器的负载均衡问题，每一个服务器就是一个容器，我们把数据按照哈希算法分布在不同的服务器，这样就可以减小服务器的负载，增大服务器的处理能力。一致性哈希和普通哈希那么，一致性哈希和普通哈希有什么区别呢？其实一般的哈希都是不一致的。例如这里有6个数字，123456]]></description><category></category></item><item><title><![CDATA[关于如何理解TCP的三次握手与四次挥手]]></title><link>https://blog.youkuaiyun.com/MBuger/article/details/74098552</link><guid>https://blog.youkuaiyun.com/MBuger/article/details/74098552</guid><author>MBuger</author><pubDate>Sun, 02 Jul 2017 13:41:49 +0800</pubDate><description><![CDATA[简介TCP协议中的的三次挥手和四次挥手简单来说就是TCP连接建立的过程和断开的过程，三次握手第一次握手即client端发送一个带有SYN标志位的同步TCP报文段向server端，表示请求连接。同时，该报文段包含一个序号。 
第二次握手即server端发送一个TCP报文到client端表示确认连接，这个TCP报文也带有SYN标志位，同时发送自己的序号，并对第一个报文中的序号加一表示确认收到。 
第三次]]></description><category></category></item><item><title><![CDATA[TCP协议以及其报头结构分析]]></title><link>https://blog.youkuaiyun.com/MBuger/article/details/74078777</link><guid>https://blog.youkuaiyun.com/MBuger/article/details/74078777</guid><author>MBuger</author><pubDate>Sat, 01 Jul 2017 22:42:09 +0800</pubDate><description><![CDATA[简介TCP协议是TCP/IP协议族中的一个重要协议，与IP协议相比，TCP协议更靠近应用层，属于传输层协议，因此在应用程序中具有更强的可操作性。一些重要的socket选项都和TCP协议相关。TCP协议的特点传输层的主要协议有两个：TCP和UDP，总的来说TCP协议相对于UDP协议的特点是：面向连接，字节流和可靠性。1.使用TCP协议通信的双方必须先建立连接，然后才能开始数据的读写。 
2.双方都必须]]></description><category></category></item><item><title><![CDATA[形象理解计算机网络里的各种抽象概念]]></title><link>https://blog.youkuaiyun.com/MBuger/article/details/74039700</link><guid>https://blog.youkuaiyun.com/MBuger/article/details/74039700</guid><author>MBuger</author><pubDate>Sat, 01 Jul 2017 12:02:11 +0800</pubDate><description><![CDATA[简介在计算机网络里有很多抽象的概念难以理解，还有一些相似的概念很容易混淆。比如什么是IP地址，什么又是MAC地址，他们之间又有什么区别和联系；再比如什么是路由器，什么又是路由表，它们又是用来干什么的？诸如此类的问题我相信很多初学者都很难真正的理解清楚。名词解释在形象的解释这些名词之前，我们先来看一看书面上对这些名词的解释。路由器：是连接因特网中各局域网、广域网的设备，它会根据信道的情况自动选择和设定]]></description><category></category></item><item><title><![CDATA[抓包分析IP报文结构]]></title><link>https://blog.youkuaiyun.com/MBuger/article/details/73991779</link><guid>https://blog.youkuaiyun.com/MBuger/article/details/73991779</guid><author>MBuger</author><pubDate>Fri, 30 Jun 2017 15:45:17 +0800</pubDate><description><![CDATA[IP报头结构IPv4的头部结构如图所示。其长度通常为20字节，除非含有可变长的选项部分 
·4位版本号：指定的IP协议的版本。对IPv4来说，其值是4。·4位头部长度：标识该IP头部有多少个32bit字。因为4位最大能表示15，所以IP头部长度最长是60字节。·8位服务类型：包括一个三位的优先权字段（现在已经被忽略），4位的服务类型（TOS）字段和一个保留字段（必须置0）。4位TOS字段分别表示：最]]></description><category></category></item></channel></rss>