导航

2019年2月20日

摘要: 1.hashtable和hashmap [1]这两个结构都采用数组+链表实现,称作hashmap是因为它的每一个元素是一个key-value对。 [2]hashtable是线程安全的,它的每个方法中都加入了Synchronize方法,意思是多线程时可以直接调用提供的方法,而不用在外部进行加锁同步。 阅读全文

posted @ 2019-02-20 10:24 困或 阅读(213) 评论(0) 推荐(0) 编辑

2019年2月19日

摘要: 1.判断一个单链表是否有环,如果单链表有环,找出环的入口节点,计算环的长度 [1]判断是否有环: 第一种方法:用两个快慢指针,一个指针一次走一步,另一个指针一次走两步,如果存在环,则这两个指针会在环内相遇。 第二种方法:遍历链表时,记录节点的地址,每次访问一个节点,查找地址集合,如果找到表示有环。可 阅读全文

posted @ 2019-02-19 15:22 困或 阅读(174) 评论(0) 推荐(0) 编辑

摘要: 1.Linux进程内存分布 进程内存分布如上图: [1]Linux没有采用分段机制,逻辑地址和虚拟地址是一个概念。所谓虚拟地址,就是物理地址的映射。虚拟内存开始时不对应任何内存,直接使用会引发段错误,不进入内核就接触不到物理内存地址,只会接触到虚拟内存地址。虚拟内存地址必须映射物理内存(或者硬盘上的 阅读全文

posted @ 2019-02-19 14:36 困或 阅读(239) 评论(0) 推荐(0) 编辑

2018年12月2日

摘要: 1.iptables和netfilter说明 [1]netfilter/iptables组成Linux平台下的包过滤防火墙,iptables是用户空间的管理工具,netfilter是内核空间的包处理框架。 2.数据包处理流程 这个还是很简单的,首先数据包进入PREROUTING链,之后根据路由决策进 阅读全文

posted @ 2018-12-02 16:09 困或 阅读(536) 评论(0) 推荐(0) 编辑

2018年11月29日

摘要: 1.以太网帧 在以太网链路上的数据包称作以太帧,在802.3标准里,规定了一个以太帧的数据部分(Payload)的最大长度是1500个字节(MTU),再加上14字节链路头和4字节的FCS,所以以太网帧的最大长度为1518。另外,以太网帧的最小长度为64字节。 [1]4字节的FCS是网卡处理的,所以抓 阅读全文

posted @ 2018-11-29 17:00 困或 阅读(2106) 评论(0) 推荐(0) 编辑

2018年11月23日

摘要: 1. IP_TRANSPARENT [1]socket设置该选项后,可以处理发往非本机的数据包。 [2]使用流程: 配置防火墙和路由: 代码: 2.SO_REUSEADDR [1]这个选项表示复用地址,表示多个socket可以绑定到同一个地址。 [2]TCP协议时,设置该选项后,可以使用相同的地址去 阅读全文

posted @ 2018-11-23 11:41 困或 阅读(1559) 评论(0) 推荐(0) 编辑

摘要: 1.connect 阻塞socket connect时会等待返回结果,等于0表示成功,小于0表示失败。 非阻塞socket connect时会立刻返回结果,等于0表示成功,小于0且errno == EINPROGRESS时表示连接正在进行,此时应该等待该socket触发写信号,触发时获取该socke 阅读全文

posted @ 2018-11-23 11:24 困或 阅读(481) 评论(0) 推荐(0) 编辑

2018年11月5日

摘要: 1.TCP协议分析流程 [1]要分析整个TCP协议,需要从外向里去分析,首先就是分析af_inet.c,这个里面就是inet的接口函数,例如bind()、listen()等等,首先就是弄清楚这些函数(函数的参数)是要干什么,不过在这之前先要分析最基本的socket接口和AF、PF。 [2]之后继续分 阅读全文

posted @ 2018-11-05 16:40 困或 阅读(243) 评论(0) 推荐(0) 编辑

2018年10月24日

摘要: 1.创建socket sk = socket(int family, int type, int protocol); family:协议簇,PF_INET、PF_INET6、PF_PACKET等等。 type:类型,SOCK_DGRAM、SOCK_STREAM、SOCK_RAW等等。 protoc 阅读全文

posted @ 2018-10-24 16:07 困或 阅读(1178) 评论(0) 推荐(0) 编辑

2018年10月17日

摘要: 1.说明: [1]校验和覆盖的内容: IP校验和:IP首部。 ICMP校验和:ICMP首部+ICMP数据; UDP、TCP校验和:首部+数据+12个字节伪首部(源IP地址、目的IP地址、协议、TCP/UDP包长)。 2.计算校验和的步骤: [1]把校验和字段设置为0。 [2]把需要校验的数据看成以1 阅读全文

posted @ 2018-10-17 15:16 困或 阅读(20359) 评论(0) 推荐(0) 编辑

2018年8月24日

摘要: 1.冒泡法 冒泡法的思想:从头开始,一次比较两个相邻的元素,如果前面的大于后面的就交换,因此一轮结束后,最大的元素会放到最后。之后重复从头开始比较,进行剩下元素(此时最后一个元素已排序好)的排序。 2.选择法 选择排序法思想:每一趟从待排序的数据元素中选出最小的一个元素,顺序放在已排好序的数列的最后 阅读全文

posted @ 2018-08-24 10:04 困或 阅读(177) 评论(0) 推荐(0) 编辑

2018年8月23日

摘要: 1.快速排序的思想 给第一个元素找到在数组中的位置,这个位置就是这个元素最终在数组中的位置,然后给这个元素左右两侧进行递归排序。 2.代码 代码说明: [1]把第一个值作为key,并保存下来,此时数组第一个位置就空出来了。 [2]之后进入循环,每个循环:首先从后往前找,找到小于key的,放到空出的位 阅读全文

posted @ 2018-08-23 15:59 困或 阅读(174) 评论(0) 推荐(0) 编辑

2018年8月22日

摘要: 1.端口类型 [1]以太网的二层端口类型有两种,access和trunk,access只有一个VLAN,trunk可以有多个VLAN。 2.access口的报文收发规则 [1]access口只能收取不带VLAN标记的报文,如果带了VLAN标记,则直接丢弃。如果没有带,则加上该access口的PVID 阅读全文

posted @ 2018-08-22 14:07 困或 阅读(328) 评论(0) 推荐(0) 编辑

摘要: 1.算法说明 [1]归并算法,指的是将两个已经排序的序列合并成一个序列的操作。 [2]该算法采用的是分治法思想。 2.算法代码 [1]上面代码输出结果: [2]中间的7行是每次调用merge()函数之后的结果,dir表示排序的方向,-1表示排序左侧,0表示排序整个数组,1表示排序右侧。 [3]代码流 阅读全文

posted @ 2018-08-22 11:03 困或 阅读(183) 评论(0) 推荐(0) 编辑

2018年8月21日

摘要: 1.堆定义 堆的性质: [1]堆中某个节点的值总是不大于或不小于其父节点的值; [2]堆总是一棵完全二叉树。 [3]将根节点最大的堆叫做大根堆,根节点最小的堆叫做小根堆。 堆还是很简单的,父节点的值总是大于(或者总是小于)子节点的值,但是左右子节点没有大小顺序。由于是完全二叉树,所以可以用数组表示堆 阅读全文

posted @ 2018-08-21 16:08 困或 阅读(221) 评论(0) 推荐(0) 编辑

2018年8月17日

摘要: 1.算法说明 [1]深度优先搜索主要基于栈来操作,即把初始节点沿着一条路径直到终点入栈,然后再返回访问分叉,沿着分叉直到终点入栈,以此反复,所以使用递归比较方便。 2.例子 代码: 代码: 阅读全文

posted @ 2018-08-17 16:26 困或 阅读(191) 评论(0) 推荐(0) 编辑

摘要: 1.算法说明 [1]广度优先搜索算法(BFS)主要用于计算源点到目标点的最短路径。 [2]BFS的基本实现是使用队列,从源点开始入队列,访问后把临近节点入队列,之后出队列,再访问刚加进的临近节点,以此反复访问,知道达到目标点。 2.算法步骤 1. 首先将根节点放入队列中。 2. 从队列中取出第一个节 阅读全文

posted @ 2018-08-17 14:29 困或 阅读(330) 评论(0) 推荐(0) 编辑

2018年8月15日

摘要: 1.红黑树的意义 [1]二叉查找树在极端的插入情况下,操作时间复杂度会变为O(n),但是平衡二叉树可以一直维持在O(lg(n))。因此平衡二叉查找树的效率很高,红黑树是一种自平衡二叉查找树的实现方式,这便是红黑树的意义。 2.红黑树性质 [1]节点是红色或黑色。 [2]根节点是黑色。 [3]每个叶节 阅读全文

posted @ 2018-08-15 11:26 困或 阅读(296) 评论(0) 推荐(0) 编辑

2018年8月14日

摘要: 1.定义 二叉查找树或者是一棵空树,或者是具有下列性质的二叉树: 1)若左子树不空,则左子树上所有结点的值均小于或等于它的根节点的值; 2)若右子树不空,则右子树上所有结点的值均大于或等于它的根节点的值; 3)左、右子树也分别为二叉排序树; 2.操作 [1]查找,从根开始查找,小于根的查左子树,否则 阅读全文

posted @ 2018-08-14 10:15 困或 阅读(210) 评论(0) 推荐(0) 编辑

2018年7月30日

摘要: 1.配置流程 [1]修改/boot/grub2/grub.cfg,添加下列标记的配置项。 [2]修改/etc/profile文件,添加下列配置项: [3]重启设备。 [4]下载dpdk-16.11(http://static.dpdk.org/rel/dpdk-16.11.tar.gz),解压后放到 阅读全文

posted @ 2018-07-30 15:41 困或 阅读(1405) 评论(0) 推荐(0) 编辑

2018年7月11日

摘要: 1.配置流程 环境:centos 7.2.1511,内核版本3.10.0-327.el7.x86_64 [1]下载内核源码,https://buildlogs.cdn.centos.org/c7.1511.00/kernel/20151119220809/3.10.0-327.el7.x86_64/ 阅读全文

posted @ 2018-07-11 15:31 困或 阅读(2535) 评论(0) 推荐(0) 编辑

2018年6月29日

摘要: CDNI框架 摘要 本文档提出了CDNI的一个框架。框架的目的是提供对CDNI问题空间的总体描述,和描述CDN互连所需的各种组件之间的 关系。CDNI需要指定接口和机制解决诸如请求路由,分发交换元数据,和CDN之间交换日志信息。本文档的目的是概述 每个接口需要完成的工作,描述这些接口和机制如何适配在 阅读全文

posted @ 2018-06-29 09:59 困或 阅读(827) 评论(0) 推荐(0) 编辑

2018年6月25日

摘要: CDNI的相关问题陈述 概述 CDN对可缓存内容提供了许多好处:降低交付成本,提高终端用户体验,提高交付的鲁棒性。对于这些因素,CDN常 用于大规模的内容交付。因此,现有的CDN提供商正在扩大规模,许多网络服务提供商(NSP)也在部署他们自己的CDN。 一般来说,一个给定的内容项可以被分发给终端用户 阅读全文

posted @ 2018-06-25 09:24 困或 阅读(309) 评论(0) 推荐(0) 编辑

2018年4月2日

该文被密码保护。 阅读全文

posted @ 2018-04-02 10:54 困或 阅读(3) 评论(0) 推荐(0) 编辑

2018年3月23日

该文被密码保护。 阅读全文

posted @ 2018-03-23 14:22 困或 阅读(2) 评论(0) 推荐(0) 编辑

2018年1月15日

摘要: 1.extern关键字: extern的意思就是引用,extern后面可以是变量名或者函数名,表示引用一个变量或者函数,在链接的时候需要从外部符号表中查找这个变量的定义。 2.类的静态成员变量: [1]类的静态成员变量是属于类本身,而非某个实例。 [2]必须在类外初始化,意思就是说不能创建一个对象, 阅读全文

posted @ 2018-01-15 14:11 困或 阅读(191) 评论(0) 推荐(0) 编辑

摘要: 1.Selenium [1]Selenium包括了Selenium1.0 API和WebDriver API,可以使用这两种模块进行开发,不过基本用的是WebDriver,所以在项目中就是from selenium import webdriver。 [2]Selenium1.0 API和WebDr 阅读全文

posted @ 2018-01-15 14:10 困或 阅读(340) 评论(0) 推荐(0) 编辑

2018年1月5日

摘要: 1.守护进程 [1]使用runner这个模块直接创建守护进程,非常方便。 [2]运行方法:python xxx.py start|stop|restart [3]调用python xxx.py stop时,会给进程发送signal.SIGTERM信号,所以可以捕获此信号进行程序退出前的处理。 [4] 阅读全文

posted @ 2018-01-05 14:38 困或 阅读(470) 评论(0) 推荐(0) 编辑

摘要: 1.定时器用法 [1]需要注意的就是创建定时器后,会创建一个线程,程序退出之前需要调用cancel()函数关闭定时器,否则程序退不出。 阅读全文

posted @ 2018-01-05 14:27 困或 阅读(1125) 评论(0) 推荐(0) 编辑

2017年11月30日

摘要: 1.free -m命令 [1]第一行:total:总的物理内存。used:已经使用的物理内存。free:剩余的物理内存。buffers :buffers占用的物理内存。cached :cached占用的物理内存。 第二行:used:应用程序使用的物理内存。free:应用程序可用的物理内存。 第三行: 阅读全文

posted @ 2017-11-30 18:06 困或 阅读(413) 评论(0) 推荐(0) 编辑

摘要: 1.STL [1]STL容器是直接管理存储数据。 [2]STL适配器是在这些容器上面增加一些操作函数,封装成一个模板。 2.STL 容器 [1]容器类型: 1)array:数组。 2)bitset:二进制位操作。 3)deque:双向队列。 4)forward_list:单向链表。 5)list:双 阅读全文

posted @ 2017-11-30 10:51 困或 阅读(385) 评论(0) 推荐(0) 编辑

2017年11月28日

摘要: 1.说明 [1]重载运算符函数的参数个数,应该与参与这个运算符的运算对象数量一样多,但是如果是成员函数,则参数数量要少一个,因为第一个参数是this。例如: [2]运算符重载函数的参数至少要有一个类的成员(或者类类型)作为参数,而不能都是内置类型(会导致编译错误)。例如int operator+(i 阅读全文

posted @ 2017-11-28 19:21 困或 阅读(15664) 评论(0) 推荐(6) 编辑

2017年11月27日

摘要: 1.友元的作用 友元函数是指某些虽然不是类成员函数却能够访问类的所有成员的函数。用法就是在一个类中声明一个函数作为这个类的友元函数。 友元类的所有成员函数都是另一个类的友元函数,都可以访问另一个类中的所有成员(包括私有成员和保护成员)。当希望一个类可以存取另一个类的私有成员时,可以将该类声明为另一类 阅读全文

posted @ 2017-11-27 17:46 困或 阅读(281) 评论(0) 推荐(0) 编辑

2017年11月24日

摘要: 1.定义 泛型算法是STL库里面定义的一些算法,这些算法可以用一个接口操作各种数据类型,因此成为泛型算法。大多算法定义在头文件algorithm和numeric中。意思就是可以用一个接口操作各种类型的算法就是泛型算法。 记住一些泛型算法,还是很必要的,有时候自己写的超长函数功能,其实调用一个库里面自 阅读全文

posted @ 2017-11-24 15:38 困或 阅读(3805) 评论(0) 推荐(0) 编辑

2017年11月23日

摘要: 1.虚函数 [1]使用基类的指针和引用指向派生类对象时,调用的虚函数是动态绑定的,该绑定基类的函数还是派生类的函数是根据指向对象的真实类型决定的。这个要注意的就是基类的指针或引用,如果是非指针非引用,则就是静态绑定。例如某个函数返回的基类指针根据运行时输入参数不同返回各种派生类对象,然后再用这个基类 阅读全文

posted @ 2017-11-23 17:58 困或 阅读(306) 评论(0) 推荐(0) 编辑

摘要: 1.应用与原理 智能指针和普通指针的区别在于智能指针实际上是对普通指针加了一层封装机制,这样的一层封装机制的目的是为了使得智能指针可以方便的管理一个对象的生命期。c++通过new和delete来处理动态内存的申请和释放,但是new之后处理不好delete便会导致内存泄漏。但是智能指针的删除是智能指针 阅读全文

posted @ 2017-11-23 15:28 困或 阅读(862) 评论(0) 推荐(0) 编辑

2017年11月22日

摘要: 1.模板的作用 [1]模板分为函数模板和类模板,函数模版是用来生成函数的实例,类模版是用来生成类的实例。 [2]一个模版就是一个类或函数的蓝图或者说是公式。当我们调用template时,编译器会使用实参的类型来确定绑定到模版参数T上的类型,之后编译器利用推断出的模版参数来实例化一个特定版本的函数,这 阅读全文

posted @ 2017-11-22 19:57 困或 阅读(3738) 评论(0) 推荐(0) 编辑

2017年11月16日

摘要: 1.功能: 只能有一个实例的类,用于类似计数、内存池的情况。 2.实现方法: [1]构造函数设置为private,因此不能在外部创建实例。 [2]提供一个public方法访问实例。 [3]析构函数,析构函数是为了销毁这个类的成员变量,private和public都可以,但是析构函数里面不能delet 阅读全文

posted @ 2017-11-16 17:32 困或 阅读(278) 评论(0) 推荐(1) 编辑