<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[qq_21996745的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/qq_21996745</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; qq_21996745]]></copyright><item><title><![CDATA[组件1.线程池与性能分析]]></title><link>https://blog.youkuaiyun.com/qq_21996745/article/details/123799305</link><guid>https://blog.youkuaiyun.com/qq_21996745/article/details/123799305</guid><author>qq_21996745</author><pubDate>Mon, 28 Mar 2022 16:41:10 +0800</pubDate><description><![CDATA[一个线程池模板的实现
采用了信号量sem_t 原子操作唤醒线程
任务队列采用了链表]]></description><category></category></item><item><title><![CDATA[系统检测工具]]></title><link>https://blog.youkuaiyun.com/qq_21996745/article/details/123767948</link><guid>https://blog.youkuaiyun.com/qq_21996745/article/details/123767948</guid><author>qq_21996745</author><pubDate>Sun, 27 Mar 2022 08:52:35 +0800</pubDate><description><![CDATA[Linux平台
以下总结常用的几个工具,tcpdump、nc、strace、lsof、netstat、vsmstat、ifstat、和mpstat
tcpdump
一款经典的抓包工具，给使用者提供了大量的选项，用以过滤数据包或者定制输出格式。常见的选项总结如下：
口-n，使用IP地址表示主机，而不是主机名：使用数字表示端口号，而不是服务名称。
口i，指定要监听的网卡接口。“iany”表示抓取所有网卡接口上的数据包。
口-v，输出一个稍微详细的信息，例如，显示IP数据包中的TTL和TOS信息。
口-t，不打印]]></description><category></category></item><item><title><![CDATA[网络编程常用总结]]></title><link>https://blog.youkuaiyun.com/qq_21996745/article/details/122240410</link><guid>https://blog.youkuaiyun.com/qq_21996745/article/details/122240410</guid><author>qq_21996745</author><pubDate>Thu, 30 Dec 2021 17:08:41 +0800</pubDate><description><![CDATA[TPC UDP SOCKET IO复用 编程知识
1.socket
    int port = atoi(argv[1]);
    int sockfd = socket(AF_INET,SOCK_STREAM,0);
    if(sockfd&lt;0)
        return -1;
	struct sockaddr_in addr;
	memset(&amp;addr, 0, sizeof(struct sockaddr_in));
    addr.sin_family = AF_INE]]></description><category></category></item><item><title><![CDATA[DPDK的虚拟交换机OVs笔记]]></title><link>https://blog.youkuaiyun.com/qq_21996745/article/details/120173577</link><guid>https://blog.youkuaiyun.com/qq_21996745/article/details/120173577</guid><author>qq_21996745</author><pubDate>Wed, 08 Sep 2021 16:38:55 +0800</pubDate><description><![CDATA[多队列网卡

1.网卡硬件支持
队列会通过PCI总线通知CPU（中断）
vmxnet3是通过软件代码虚拟出来的硬件

2.内核支持多队列
网卡本身就支持多队列
多队列网卡的接收与发送
NAPI和QDisc
NAPI
接收数据之前，得知道有数据可以接收（通过网卡中断 硬中断，有数据会触发）
问题：当触发特别频繁时候如 1s几千次
解决方式：（类似epoll用来接收）就是不是来数据就触发去读，而是去通知，收到通知就一直读
调用发送函数（send）
网卡把数据发送出去是两个过程，中间有个东西叫做队列，这个发送se]]></description><category></category></item><item><title><![CDATA[GoogleTest]]></title><link>https://blog.youkuaiyun.com/qq_21996745/article/details/119936077</link><guid>https://blog.youkuaiyun.com/qq_21996745/article/details/119936077</guid><author>qq_21996745</author><pubDate>Thu, 26 Aug 2021 17:14:25 +0800</pubDate><description><![CDATA[g++ sample1_unittest.cc sample1.cc -o sample -I ./ -lgtest -lpthread -lgtest_main
Googlemock
libgtest.a  API实现
Googlemock依赖Googletest

]]></description><category></category></item><item><title><![CDATA[Tcp服务器epoll+select+poll多线程多种实现]]></title><link>https://blog.youkuaiyun.com/qq_21996745/article/details/118567006</link><guid>https://blog.youkuaiyun.com/qq_21996745/article/details/118567006</guid><author>qq_21996745</author><pubDate>Thu, 08 Jul 2021 10:01:51 +0800</pubDate><description><![CDATA[#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#include &lt;string.h&gt;

#include &lt;netinet/tcp.h&gt;
#include &lt;arpa/inet.h&gt;
#include &lt;pthread.h&gt;

#include &lt;errno.h&gt;
#include &lt;fcntl.h&gt;
#include &lt;sys/epoll.h&gt;
#include &l]]></description><category></category></item><item><title><![CDATA[CMake使用总结]]></title><link>https://blog.youkuaiyun.com/qq_21996745/article/details/118441902</link><guid>https://blog.youkuaiyun.com/qq_21996745/article/details/118441902</guid><author>qq_21996745</author><pubDate>Sat, 03 Jul 2021 17:42:44 +0800</pubDate><description><![CDATA[CMake简介
CMake 安装教程
Linux最新安装方式
1.Centos8 为例子
最新版本也可以直接去官网下载
CMake官网：
CMakeV.3.21版本：

Windows 选择安装版 Linux则选择已经编译好的压缩包
方法一：比较快 但是有些Linux不行
Linux解压cmake-3.21.0
tar zxvf cmake-3.21.0-rc2-linux-x86_64.tar.gz
拷贝到一个安全的目录存放如/usr/local/cmake
sudo mv cmake-3.21.0-rc]]></description><category></category></item><item><title><![CDATA[锁和原子操作CAS的底层实现]]></title><link>https://blog.youkuaiyun.com/qq_21996745/article/details/118439811</link><guid>https://blog.youkuaiyun.com/qq_21996745/article/details/118439811</guid><author>qq_21996745</author><pubDate>Sat, 03 Jul 2021 16:09:10 +0800</pubDate><description><![CDATA[锁的由来
在多线程或多进程下，有些变量需要共享使用就会产生资源竞争，这个资源称为临界资源
然后在CPU切换线程的时候，这个变量会保存在
互斥锁
自旋锁
原子操作
#include &lt;stdio.h&gt;
#include &lt;pthread.h&gt;
#include &lt;unistd.h&gt;
#include &lt;sys/mman.h&gt;
#define THREAD_SIZE     10

int count = 0;
pthread_mutex_t mutex;//互斥]]></description><category></category></item><item><title><![CDATA[Linux Select用法总结]]></title><link>https://blog.youkuaiyun.com/qq_21996745/article/details/118100686</link><guid>https://blog.youkuaiyun.com/qq_21996745/article/details/118100686</guid><author>qq_21996745</author><pubDate>Sun, 27 Jun 2021 14:41:12 +0800</pubDate><description><![CDATA[网络 IO，会涉及到两个系统对象，一个是用户空间调用 IO 的进程或者线程，另一个是内核空间的内核系统，比如发生 IO 操作 read 时，它会经历两个阶段：

等待数据准备就绪
将数据从内核拷贝到进程或者线程中。 因为在以上两个阶段上各有不同的情况，所以出现了多种网络 IO 模型

阻塞IO模型


...]]></description><category></category></item><item><title><![CDATA[设计模式1]]></title><link>https://blog.youkuaiyun.com/qq_21996745/article/details/117284135</link><guid>https://blog.youkuaiyun.com/qq_21996745/article/details/117284135</guid><author>qq_21996745</author><pubDate>Wed, 26 May 2021 14:41:54 +0800</pubDate><description><![CDATA[学习设计模式更重要的是学习模式设计的原则
模式设计原则：
依赖倒置原则
高层模块不应该依赖底层模块，二者都应该依赖抽象 	
抽象不应该依赖具体实现，具体实现应该依赖抽象 	
开放封闭原则
⼀个类应该对扩展开放，对修改关闭
面向接口编程
不将变量类型声明为某个特定的具体类，⽽是声明为某个接⼝
客户程序⽆需获知对象的具体类型，只需要知道对象所具有的接⼝
减少系统中各部分的依赖关系，从⽽实现“⾼内聚、松耦合”的类型设计⽅案
封装变化点
将稳定点和变化点分离，扩展修改变化点；让稳定点与变化点的实现层次分离
单⼀职责]]></description><category></category></item><item><title><![CDATA[海量数据去重hash和布隆过滤器]]></title><link>https://blog.youkuaiyun.com/qq_21996745/article/details/117017365</link><guid>https://blog.youkuaiyun.com/qq_21996745/article/details/117017365</guid><author>qq_21996745</author><pubDate>Wed, 19 May 2021 15:17:32 +0800</pubDate><description><![CDATA[类似缓存雪崩和缓存击穿问题参考这篇作者的博客
缓存击穿和缓存雪崩等问题
一般来说可以使用红黑树来解决问题，但是红黑色对于字符串比较存在缺陷，当字符串过长时红黑树
还要匹配字符串，这样效率就会非常慢
其中c++标准库（STL）中的set和map结构都是采⽤红⿊树实现的，它增删改查的时间复杂度是O(logn)

// 这个是截取 nginx 的红⿊树的实现，这段代码是 insert 操作中的⼀部分，执⾏完这个函数还
需要检测插⼊节点后是否平衡（主要是看他的⽗节点是否也是红⾊节点）
// 调⽤ ngx_rbtr.]]></description><category></category></item><item><title><![CDATA[B-树与B+树]]></title><link>https://blog.youkuaiyun.com/qq_21996745/article/details/116858005</link><guid>https://blog.youkuaiyun.com/qq_21996745/article/details/116858005</guid><author>qq_21996745</author><pubDate>Sat, 15 May 2021 18:09:59 +0800</pubDate><description><![CDATA[B-树与B+树
性质
一颗M阶B树T，满足以下条件

每个结点至多拥有M课子树
根结点至少拥有两颗子树
除了根结点以外，其余每个分支结点至少拥有M/2课子树
所有的叶结点都在同一层上
有k课子树的分支结点则存在k-1个关键字，关键字按照递增顺序进行排序
关键字数量满足ceil(M/2)-1 &lt;= n &lt;= M-1
一般用度数degree定义B树 ， 最大度数为t 则为2t阶B树

#include &lt;stdio.h&gt;
#include &lt;stdlib.h&gt;
#includ]]></description><category></category></item><item><title><![CDATA[二叉树与红黑树]]></title><link>https://blog.youkuaiyun.com/qq_21996745/article/details/116808944</link><guid>https://blog.youkuaiyun.com/qq_21996745/article/details/116808944</guid><author>qq_21996745</author><pubDate>Sat, 15 May 2021 12:58:51 +0800</pubDate><description><![CDATA[二叉排序树（Binary Sort Tree）
又称二叉查找树（Binary Search Tree），亦称二叉搜索树。是数据结构中的一类。
优点：在一般情况下，查询效率比链表结构要高
一棵空树，或者是具有下列性质的二叉树：
（1）若左子树不空，则左子树上所有结点的值均小于它的根结点的值；
（2）若右子树不空，则右子树上所有结点的值均大于它的根结点的值；
（3）左、右子树也分别为二叉排序树；
（4）没有键值相等的结点。
缺点：
插入数据可能会不平衡 一直在左或右子树插入，导致深度很高，这样效率变低
节点在左]]></description><category></category></item><item><title><![CDATA[链表算法操作]]></title><link>https://blog.youkuaiyun.com/qq_21996745/article/details/116595865</link><guid>https://blog.youkuaiyun.com/qq_21996745/article/details/116595865</guid><author>qq_21996745</author><pubDate>Mon, 10 May 2021 22:23:21 +0800</pubDate><description><![CDATA[这里10个问题参考即可这位作者博客即可，因为有些代码是java ，在这里改成C++版本
作者：辰砂
出处：https://www.cnblogs.com/tojian/p/10055036.html
//链表结构体
struct ListNode ｛
    int val;
    ListNode *next = nullptr;
｝

1.链表的倒数第K个结点
问题描述：
输入一个链表，输出该链表中倒数第k个结点。为了符合大多数人的习惯，本题从1开始计数，即链表的尾结点是倒数第1个结点。例如一个链表有]]></description><category></category></item><item><title><![CDATA[查找与排序]]></title><link>https://blog.youkuaiyun.com/qq_21996745/article/details/116561189</link><guid>https://blog.youkuaiyun.com/qq_21996745/article/details/116561189</guid><author>qq_21996745</author><pubDate>Sun, 09 May 2021 14:59:42 +0800</pubDate><description><![CDATA[1.重要的排序算法
总共11种排序

但以下的排序用的较多，需要掌握，手撕代码
希尔排序
1.一种充分利用插入排序的特点的排序
1.元素少，排序效率高
2.数组接近有序效率高
流程
1.先取增量（增量递减）
2.根据增量分组
样本N个进行，根据gap分成多组 一层for循环
a[0],a[0+gap],a[0+2gap] +…
a[1],a[1+gap],a[1+2gap] +…
a[2],a[2+gap]
3.对每组进行，组内使用插入排序（两层for）
4.重复上述步骤 直到gap=1 （gap=1其实就]]></description><category></category></item></channel></rss>