<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[abk921的专栏]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/abk921</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; abk921]]></copyright><item><title><![CDATA[git常用使用命令个人总结]]></title><link>https://blog.youkuaiyun.com/abk921/article/details/123184778</link><guid>https://blog.youkuaiyun.com/abk921/article/details/123184778</guid><author>abk921</author><pubDate>Mon, 28 Feb 2022 16:09:40 +0800</pubDate><description><![CDATA[git pull 用于从远程获取代码并合并本地的版本，其实就是 git fetch 和 git merge FETCH_HEAD 的简写

git stash 所有未提交的修改（工作区和暂存区）保存至堆栈中，用于后续恢复当前工作目录

git stash list 查看当前stash中的内容

git stash pop 将当前stash中的内容弹出，并应用到当前分支对应的工作目录上。该命令将堆栈中最近保存的内容删除（栈是先进后出）

git branch -r 查看远程所有分支
git branch -a]]></description><category></category></item><item><title><![CDATA[Linux命令netstat 查询端口和进程信息命令总结]]></title><link>https://blog.youkuaiyun.com/abk921/article/details/120656503</link><guid>https://blog.youkuaiyun.com/abk921/article/details/120656503</guid><author>abk921</author><pubDate>Fri, 08 Oct 2021 17:57:55 +0800</pubDate><description><![CDATA[在linux中，netstat命令用于显示网络相关信息

网络连接，路由表，接口状态(Interface Statistics)，masquerade 连接，多播成员 (Multicast Memberships)

其中比较常用的操作：查看端口占用、显示核心路由信息、找出指定程序的端口信息等等

常见参数：

-a (all) 显示所有选项，默认不显示LISTEN相关

-t (tcp)仅显示tcp相关选项

-u (udp)仅显示udp相关选项

-x(unix)仅显示unix域相关选项

-n 拒..]]></description><category></category></item><item><title><![CDATA[1字节表示范围-128到127理解总结]]></title><link>https://blog.youkuaiyun.com/abk921/article/details/120339655</link><guid>https://blog.youkuaiyun.com/abk921/article/details/120339655</guid><author>abk921</author><pubDate>Thu, 16 Sep 2021 23:22:38 +0800</pubDate><description><![CDATA[一个字节8位，如果是原码方式表示正整数包含0，是0-255范围，2^8共256个，从0000 0000 到1111 1111的排列组合。

如果表示负数，符号位（最高位需要占1位）1表示负数，0表示整数，绝对值范围是0-127，2^7=128；一共正负各128个；

但是这种情况下0占用了2个编码（1000 0000和 0000 0000），数据表示范围-127~-0和 +0~+127

这样总共有256个；实际0占用了正0和负0；这种0占用正0和负0情况，人们想到了另一种编码把负0利用起来，当遇到负数时，]]></description><category></category></item><item><title><![CDATA[SNMP简单网络管理协议总结，支持多种认证和加密方式]]></title><link>https://blog.youkuaiyun.com/abk921/article/details/119489719</link><guid>https://blog.youkuaiyun.com/abk921/article/details/119489719</guid><author>abk921</author><pubDate>Sat, 07 Aug 2021 17:31:13 +0800</pubDate><description><![CDATA[简单网络管理协议（SNMP）是设计用于IP网路管理网络节点的一种标准协议，它是应用层协议

SNMP协议目前在用的有3个版本，分别是V1，V2C，V3版本

认证方式有SHA，MD5

加密方式有DES，AES

需要支持版本、认证、加密不同的方式功能

自己也是各种找资料，但是很多资料都是复制粘贴，也不全；

所以就把自己的部分实现贴出来，仅供参考：


/*
*@author: 赵秋然
*@date:2021年8月7日
*@description:snmp.h
*/
#ifndef __SNMP_H__]]></description><category></category></item><item><title><![CDATA[linux pthread_join与pthread_detach总结]]></title><link>https://blog.youkuaiyun.com/abk921/article/details/116997924</link><guid>https://blog.youkuaiyun.com/abk921/article/details/116997924</guid><author>abk921</author><pubDate>Tue, 18 May 2021 18:17:40 +0800</pubDate><description><![CDATA[pthread有2种状态：joinable和unjoinable状态

1.linux线程默认是joinable状态，通过pthread_attr_getdetachstate获取

通过线程内部pthread_detach(pthread_self()),修改状态为unjoinable，

也可通过外部主线程调用pthread_detach(tid)

2.如果线程是joinable状态，当线程函数自己返回退出时或pthread_exit时，均不会释放线程所占用的堆栈和

线程描述符（8k多）资源；当调用]]></description><category></category></item><item><title><![CDATA[二分查找实现方法总结]]></title><link>https://blog.youkuaiyun.com/abk921/article/details/116717035</link><guid>https://blog.youkuaiyun.com/abk921/article/details/116717035</guid><author>abk921</author><pubDate>Wed, 12 May 2021 18:14:38 +0800</pubDate><description><![CDATA[二分查找也成折半查找，它是一种效率较高的查找方法；实际查找线性表必须采用顺序存储结构，而且表种元素需要有序排列

在实际实现中，总是会有到底是&lt;还是&lt;=的写法，到底是end-1,还是end呢？

在起始和结束位置范围是分为2种情况：左闭右闭，左闭右开

这里需要区分 闭和开的范围，就能控制好到底是&lt; 还是&lt;=

1.以左闭右闭为方式



L = 0, R = 6, 左闭右闭 即[0,6] ,当判断下标3之后，值3小于值4，需要判断左侧信息；因为是右闭包含原则，

所以不需要在判断下]]></description><category></category></item><item><title><![CDATA[c++单例模式总结]]></title><link>https://blog.youkuaiyun.com/abk921/article/details/115474032</link><guid>https://blog.youkuaiyun.com/abk921/article/details/115474032</guid><author>abk921</author><pubDate>Sat, 10 Apr 2021 22:28:32 +0800</pubDate><description><![CDATA[方法
]]></description><category></category></item><item><title><![CDATA[tcp通信TIME_WAIT状态问题]]></title><link>https://blog.youkuaiyun.com/abk921/article/details/114676496</link><guid>https://blog.youkuaiyun.com/abk921/article/details/114676496</guid><author>abk921</author><pubDate>Thu, 11 Mar 2021 18:57:04 +0800</pubDate><description><![CDATA[1 为什么TIME_WAIT状态需要经过2MSL(最大报文段生存时间)才能返回到CLOSE状态？





MSL是最大报文生存时间，如果报文超过这个时间，就认为这个报文丢掉了

比如客户端A到B进行通讯，对于4次断开（挥手）;

如果客户A在最后一次发送ack给B,如果中途丢失，客户B会重新向A发送FIN=1,ACK=1,即4次断开第3步骤，如何判断ack是否丢了呢？就是通过MSL(最大报文生存时间)来决定的；

如果B发送FIN=1,ACK=1,B会等待2MSL时间，因为B向A发送需要1MSL时间，A.]]></description><category></category></item><item><title><![CDATA[计算机原码、反码、补码理解]]></title><link>https://blog.youkuaiyun.com/abk921/article/details/114337300</link><guid>https://blog.youkuaiyun.com/abk921/article/details/114337300</guid><author>abk921</author><pubDate>Wed, 03 Mar 2021 22:46:03 +0800</pubDate><description><![CDATA[计算机使用一定的编码方式进行存储，原码、反码、补码是机器存储一个具体数字的编码方式

1 原码

第一位表示符号 正数第一位为0，负数第一位为1，其余位表示值；以8位二进制表示

+1 原码 0000 0001

-1 原码 1000 0001

第一位为符号位（正负数符号位），所以8位二进制原码范围为

1111 1111 ，0111 1111 即 -127，127

原码是人容易理解的计算表示方式

2 反码

正数的反码就是其本身

负数的反码是在原数基础，符号位不变（第一位不变），其余各个位...]]></description><category></category></item><item><title><![CDATA[一棵树的中序遍历与后序遍历构造二叉树 c++实现]]></title><link>https://blog.youkuaiyun.com/abk921/article/details/113879453</link><guid>https://blog.youkuaiyun.com/abk921/article/details/113879453</guid><author>abk921</author><pubDate>Sat, 20 Feb 2021 11:20:16 +0800</pubDate><description><![CDATA[思路：

二叉树后序遍历和中序遍历 可以确定一个二叉树，如果是已知后序和前序遍历不可以确定二叉树，

提供的遍历元素中不能有重复元素

后序遍历的最后元素是二叉树根节点，通过中序遍历，确定根节点下左右子树，如果有重复元素，

就无法在中序遍历元素中确定左右子树了

后序遍历元素需要从最后元素，向前进行遍历，再根据中序，确定左右子树分布位置


/*
*@author: 赵秋然
*@date:2021年2月20日
*@description:中序与后序遍历序列构造二叉树
*/

#include&lt;ios]]></description><category></category></item><item><title><![CDATA[用队列实现栈，用栈实现队列，c++写法]]></title><link>https://blog.youkuaiyun.com/abk921/article/details/113820136</link><guid>https://blog.youkuaiyun.com/abk921/article/details/113820136</guid><author>abk921</author><pubDate>Mon, 15 Feb 2021 22:23:03 +0800</pubDate><description><![CDATA[用队列实现栈

在C++ stl queue中是头部移除元素，结尾添加数据,通过临时队列作为转换就可以实现队列效果

代码如下：


/*
*@author: 赵秋然
*@date:2021年2月15日
*@description:队列实现栈
*/

#include&lt;queue&gt;
class MyStack
{
  public:
    MyStack()
    {

    }

    /** Push element x onto stack. */
    void push(in]]></description><category></category></item><item><title><![CDATA[设计模式的一些总结记录]]></title><link>https://blog.youkuaiyun.com/abk921/article/details/113816561</link><guid>https://blog.youkuaiyun.com/abk921/article/details/113816561</guid><author>abk921</author><pubDate>Mon, 15 Feb 2021 16:36:58 +0800</pubDate><description><![CDATA[在程序设计中，尤其是面向对象编程时，就会涉及到设计模式思想，使用设计模式会令程序更容易扩展，更易于理解，模块功能之间更独立等等好处

设计模式属于抽象思维，抽象一些业务需求

抽象原则是 封装稳定点，如果没有稳定点那么就无法使用设计原则

我们必须对当前代码业务非常熟悉，那些是稳定的，那些不是稳定的，对稳定的进行抽象

如果为了设计模式而设计模式，那还是不推荐的

对设计模式的理解更多需要掌握设计原则，而不是设计模式

模式设计原则总结如下：

依赖倒置原则
高层模块不应该依赖低层模块，二者都应该依赖抽象；]]></description><category></category></item><item><title><![CDATA[makefile与cmake部分总结]]></title><link>https://blog.youkuaiyun.com/abk921/article/details/113771289</link><guid>https://blog.youkuaiyun.com/abk921/article/details/113771289</guid><author>abk921</author><pubDate>Tue, 09 Feb 2021 16:29:11 +0800</pubDate><description><![CDATA[makefile

在程序编译工作中，Makefile是一个指示make程序，在软件项目的编译环境，最为重要的是掌握目标和依赖；目标是指要干什么，运行make后生成什么；依赖是告诉make如何实现目标；

在makefile中，目标和依赖是通过规则（rule）来表达的。

准备环境，需要linux环境，make -v 命令验证是否安装make工具

基本命令：


all:
    @echo "hello world"
test:
    @echo "make test"

@echo是tab键不是空格]]></description><category></category></item><item><title><![CDATA[网络通信与reactor原理总结]]></title><link>https://blog.youkuaiyun.com/abk921/article/details/113759577</link><guid>https://blog.youkuaiyun.com/abk921/article/details/113759577</guid><author>abk921</author><pubDate>Mon, 08 Feb 2021 17:12:49 +0800</pubDate><description><![CDATA[网络编程基本流程图如下：



在网络通信中io会有阻塞和非阻塞形式，阻塞一般出现在网络线程中，可以通过fcntl将网络套接字设置成非阻塞模式，默认创建的套接字为阻塞模式

如果套接字设置成非阻塞模式，在解析力啊read write就会表现出非阻塞模式

非阻塞和阻塞io主要差异，在数据未到达时，非阻塞体现在当有数据是立刻返回，反之阻塞

具体如下图所示：





阻塞io模型+多线程方式：

每一个线程处理一个fd连接

优势：处理及时； 缺陷：线程利用率低，线程的数量有限的

io多路复用（网络线程）]]></description><category></category></item><item><title><![CDATA[redis相关数据结构基础总结]]></title><link>https://blog.youkuaiyun.com/abk921/article/details/113714211</link><guid>https://blog.youkuaiyun.com/abk921/article/details/113714211</guid><author>abk921</author><pubDate>Sat, 06 Feb 2021 13:49:00 +0800</pubDate><description><![CDATA[redis支持五种数据结构 string(字符串)， hash(哈希），list(列表），set(集合），zset(有序集合）

key-value形式存储内存数据库，操作redis相当于操作unordered_map，unordered_map内部实现了哈希表，查找速度非常快

redis存储key没有采用map 红黑树平衡二叉搜索树形式，Olog（N）时间负责度查询速度很快的，redis对key数据进行存储或者查找时候，key需要对每一个

节点进行字符比较速度会很慢的；使用hash(即unorde..]]></description><category></category></item><item><title><![CDATA[自己实现的一种简单线程池]]></title><link>https://blog.youkuaiyun.com/abk921/article/details/113560112</link><guid>https://blog.youkuaiyun.com/abk921/article/details/113560112</guid><author>abk921</author><pubDate>Tue, 02 Feb 2021 15:49:06 +0800</pubDate><description><![CDATA[线程池有很多种不同的理解认识，自己总结是一种方式

主要目的：并行处理，加快程序处理速度

比如一张图片40MB，需要对图片进行处理，可以分成4份，分配给4个线程分别处理，同一时间4份同时处理完成了

但是实际运行场景会有各式各样的情况，就需要对不同场景，进行调整适配了

具体线程数并不是越多越好，是有一个限定最事宜的

实现的方式：是通过链表将数据关联起来，从头部插入数据，线程从尾部进行取出数据的思路，这样的目的是可以将最早的数据进行先行处理了

只是一个雏形，还需要很多改进


#include&lt;]]></description><category></category></item><item><title><![CDATA[布隆过滤器的一些总结理解]]></title><link>https://blog.youkuaiyun.com/abk921/article/details/113359037</link><guid>https://blog.youkuaiyun.com/abk921/article/details/113359037</guid><author>abk921</author><pubDate>Thu, 28 Jan 2021 22:41:23 +0800</pubDate><description><![CDATA[应用背景：

在内容中，查找某个单词是否存在

网络爬虫url程序，判断去爬的url是否访问过

垃圾邮件（短信）过滤算法设计

公共安全，判断嫌疑人是否在网逃名单中

以上的应用背景都是在很多数据中，判断是否存在其中

需求：

在海量数据中查询某条信息是否在

解决思路：

c++ 中常见stl容器结构set和map结构，都是采用红黑树实现方式，增删改查的时间复杂度o(log⑵N)

红黑树是可以存储相同key可以信息，map存储key和value信息，set只存储key信息不可重复

优势：存储效率高]]></description><category></category></item><item><title><![CDATA[linux系统常用网络调试命令]]></title><link>https://blog.youkuaiyun.com/abk921/article/details/113243424</link><guid>https://blog.youkuaiyun.com/abk921/article/details/113243424</guid><author>abk921</author><pubDate>Wed, 27 Jan 2021 11:50:56 +0800</pubDate><description><![CDATA[1 ifconfig查看和设置网络设备

显示网络设备信息：ifconfig

启动指定网卡 ifconfig eth0 up 关闭指定网卡 ifconfig eth0 down

配置临时ip地址

ifconfig eth0 192.168.1.22 eth0网卡设置ip地址

ifconfig eth0 192.168.1.22 netmask 255.255.255.0 配置ip地址，并配上子掩码

ifconfig eth0 192.168.1.22 netmask 255.255.255...]]></description><category></category></item><item><title><![CDATA[linux系统常用调试监控命令总结]]></title><link>https://blog.youkuaiyun.com/abk921/article/details/113239246</link><guid>https://blog.youkuaiyun.com/abk921/article/details/113239246</guid><author>abk921</author><pubDate>Wed, 27 Jan 2021 10:53:46 +0800</pubDate><description><![CDATA[1 grep搜索字符

grep在文件中执行搜索关键词搜索，显示匹配的效果

-c 仅显示找到的行数

-i 忽略大消息

-n 显示行号

-r 递归搜索文件目录

示例：

grep new_capacity string_buffer.c 查找new_capacity关键字，string_buffer.c文件中查找

grep new_capacity *.c 查找new_capacity关键字，在当前目录下所有已.c文件中查找

grep new_capacity *.c src/ -...]]></description><category></category></item><item><title><![CDATA[关于插入排序和希尔排序的总结]]></title><link>https://blog.youkuaiyun.com/abk921/article/details/113182291</link><guid>https://blog.youkuaiyun.com/abk921/article/details/113182291</guid><author>abk921</author><pubDate>Tue, 26 Jan 2021 16:17:19 +0800</pubDate><description><![CDATA[平时提到希尔排序搞不懂到底是啥，看了些资料介绍希尔排序是插入排序的更高效版本，进行简略总结一下吧

先总结一下插入排序是稳定排序，主要思想是通过2次循环

先取外部元素a，

在内部循环中从后边向前边比较，在内部元素序列寻找合适的位置，将a放置到该的位置上

外部循环再次向后偏移，直至元素结尾，排序完成

代码如下：


/*
*@author: 赵秋然
*@date:2021年1月26日
*@description:插入排序
*@param arr:整形数组
*@param len:数组
*@return]]></description><category></category></item></channel></rss>