
教程
文章平均质量分 59
zh_94
这个作者很懒,什么都没留下…
展开
-
几种排列生成算法的数学原理解析
对于有限数列:易知其共有 n! 个不同的排列。为了在枚举这些排列时不遗漏,需要定义一种遍历规则,这种遍历规则便称为计数法。计数法可分为两类:树图法、逆序法。中介数:中介数记录了一个排列的全部信息,根据中介数可以确定的写出一个排列,一个排列也对应一个独特的中介数。通过中介数的顺序遍历(+1)便可不遗漏地得到所有的排列。因为一个的数字的排列方式是唯一确定的,不需要中介数。...原创 2018-08-04 22:36:04 · 3597 阅读 · 0 评论 -
OpenvSwitch 流表查询详解
sw_flowstruct sw_flow { struct rcu_head rcu; struct { struct hlist_node node[2]; u32 hash; } flow_table, ufid_table; int stats_last_writer; /* CPU id of the last writer on * 'stats[0...原创 2018-08-22 09:46:53 · 2509 阅读 · 0 评论 -
generic netlink 编程快速入门
目录 一、generic netlink 消息结构二、接口搭建过程kernel端程序的准备1、定义想要传送的消息种类2、定义一组命令3、为每个命令定义一个响应函数4、将命令与相应函数关联起来5、创建一个命令族6、向内核注册新建的命令族7、将关联好的命令和响应函数绑定(注册)到命令族上用户端程序的使用:1、新建一个套接字,并绑定上 netlink ...原创 2018-08-24 17:35:24 · 1975 阅读 · 0 评论 -
C++ 可调用对象
在使用一些基于范围的模板函数时(如 sort()、all_of()、find_if() 等),常常需要我们传入一个可调用对象,以指明我们需要对范围中的每个元素进行怎样的处理。可调用对象可以是函数、函数指针、lambda表达式、bind创建的对象或者重载了函数调用运算符的类。函数bool cmp(const int &a, const int &b) { return a &l...原创 2019-03-13 14:53:17 · 2772 阅读 · 0 评论 -
C++ STL 之 deque
deque 是 C++ 对数据结构双端队列的实现。要使用 deque,请在程序头添加:#include <deque>using name space std;deque 对象的定义与初始化deque<int> dq; //定义一个空 deque 对象deque<int> dq(10); //定义一个具有 10 个元素的 deque 对象(int 型...原创 2019-03-13 14:59:31 · 452 阅读 · 0 评论 -
C++ STL 之 heap
C++ 中的 heap 并不是一个单独的 STL 容器,而是基于 vector 的一系列算法。需要引入头文件#include <algorithm>构造堆使用 make_heap(beg, end)将迭代器范围 [beg, end)内的元素调整为一个堆( beg 为堆顶)。vector<int> v {5, 3, 6, 4, 7, 2, 1};make_heap(...原创 2019-03-13 15:00:43 · 449 阅读 · 0 评论 -
C++ STL 之 multimap
阅读此篇前若有需要请先参看 C++ STL 容器 map 的介绍。map 中不允许存在相同的元素,而 multimap 允许。这一设计上改变也带来一些使用上的不同。访问 multimap 中的元素由于 multimap 中允许存在关键字值相同的元素。因此我们很难想象通过下标访问会发生什么,实际上 multimap 并不允许通过下标来访问其中的元素。由于 map 中的元素是依照 index 的...原创 2019-03-13 15:02:00 · 355 阅读 · 0 评论 -
C++ STL 之 vector
vector 是 C++ 对数据结构动态数组的实现。要使用 vector,请在程序头添加:#include &lt;vector&gt; using name space std; vector 对象的定义与初始化vector&lt;int&gt; v; //定义一个空 vector 对象vector&lt;int&gt; v(10); //定义一个具有 10 个元素的 vecto...原创 2019-03-13 15:04:52 · 585 阅读 · 0 评论 -
Linux 文件权限
由于在linux中的每个用户必须属于一个组,相应的每个文件也就有了所有者、所在组、其它组的概念。所有者:一般为文件的创建者文件所在组:所有者所在的组其他组:不是所有者,不属于文件所在组的其他用户均属于此文件的其他组。文件权限在任意目录下输入命令ls -l可看到当前目录下各文件,文件夹的的权限信息,例如:-rwxr-xr-x 1 root root ...原创 2019-03-30 13:14:14 · 239 阅读 · 0 评论 -
C++ STL 之 string
string 是 C++ 对数据结构字符动态数组的实现。要使用 string,请在程序头添加:#include <string>using name space std;string 对象的定义与初始化string<int> s; 定义一个空 string 对象string<int> s(3,'a'); s = “aaa”string<int...原创 2019-04-12 09:27:58 · 474 阅读 · 0 评论 -
ElasticSearch与Kibana简介及使用入门
Elasticsearch一款基于Apache Lucene™开源搜索引擎,其核心是迄今为止最先进、性能最好的、功能最全的搜索引擎库Lucene。Elasticsearch使用简单,具有非常强大的全文搜索功能:分布式的实时文件存储,每个字段都被索引并可被搜索分布式的实时分析搜索引擎可以扩展到上百台服务器,处理PB级结构化或非结构化数据ElasticSearch中使用到的概念准实时E...原创 2019-04-22 10:19:18 · 33267 阅读 · 1 评论 -
C++ STL 之 map
map 是“关键字——值”对的集合。即map<index, value>其中 index 和 value 可以是各种类型,如 int, char, string,甚至是 STL 容器对象。map 中的元素默认按 index 的增序进行排序,故要求 index 能够进行排序,这也意味着 map 中不存在两个元素拥有相同的 index。定义map<strin...原创 2018-08-27 21:17:11 · 329 阅读 · 0 评论 -
C++重载vector按行输入输出
重载vector的输入/输出符,使得:输入:读取一行输入,以空格分开各元素。输出:输出vector中的各元素,以空格分开,结尾不输出空格。#include<iostream>#include<vector>#include<string>#include<sstream>using namespace std;istrea...原创 2018-08-05 08:49:46 · 1945 阅读 · 0 评论 -
OpenvSwitch源码安装教程
OpenvSwitch是SDN网络架构中目前使用最为广泛的虚拟交换机。OpenvSwitch官网:www.openvswitch.org官方文档中有详尽的安装说明,但较为繁琐,这里给出一个精简的从源码编译安装步骤。实验环境:ubuntu 14.04一、安装依赖项:$ apt install make$ apt install gcc$ apt install build...原创 2018-07-28 11:57:06 · 2834 阅读 · 1 评论 -
ovs入门实验
ovs,全称OpenvSwitch,是SDN网络架构中目前使用的最为频繁的虚拟交换机。本实验教程带你完成一个基础的ovs入门实验。实验环境:VMware,3台Ubuntu14.04虚拟机,其中一台为装有ovs的服务器,另外两台作为客户机,通过此服务器完成局域网连接。 一、安装3台虚拟机 二、设置虚拟网络编辑à虚拟网络编...原创 2018-07-28 12:17:08 · 5331 阅读 · 12 评论 -
sendip 快速入门
sendip是linux下的命令行发包工具命令模式:sendip 网络层 传输层 数据 domain其中 domain 是目的主机,即此数据包的第一个路由目标,可使用网址和 ip。常用命令参数:-d 要携带的数据。使用参数 rN 来产生随机的 N 个字节。-f 从文件中读取要携带的数据。-p 指定要使用的网络协议。-v 打印整个发出的数据包。示例:sen...原创 2018-08-14 08:43:05 · 7880 阅读 · 0 评论 -
C++ 读取一行输入到数组
#include<iostream>#include<string>#include<sstream>#include<vector>using namespace std;int main() { string line; getline(cin, line); stringstream ss(line); vector&l...原创 2018-08-06 20:15:52 · 13488 阅读 · 1 评论 -
Ubuntu使用root用户登陆图形化界面
设置root账户密码sudo passwd root修改配置文件vim /usr/share/lightdm/lightdm.conf.d/50-ubuntu.conf添加新行greeter-show-manual-login=true修改配置文件vim /root/.profile注释掉 mesg n(在该行前面添加 # 字符)添加新行tty -s &am...原创 2018-08-07 09:47:25 · 1116 阅读 · 0 评论 -
ftrace 使用快速入门
ftrace默认的安装目录为 /sys/kernel/debug/tracing/ftrace的基本操作方式就是向此目录下的某些文件中写入值,打开此目录: ftrace的一般使用流程:设置跟踪器 ——》开启跟踪器 ——》关闭跟踪器设置function跟踪器function 跟踪器echo function > curren...原创 2018-08-14 23:20:07 · 1896 阅读 · 0 评论 -
带你深入理解矩阵乘法
为了不浪费大家宝贵的时间,开头我先简要说明一下这篇博文对哪些读者可能会有帮助1、你是正在学习矩阵的乘法运算,觉得矩阵的乘法掌握起来很困难2、你已经学会了矩阵乘法,但如果你在计算矩阵乘法时还在使用“一行乘一列得一数”的方法,那我强烈建议你看看后面的内容。因为,我将带你更加深刻地理解矩阵,与之而来是对矩阵乘法的全新计算方式。这不仅让你在计算矩阵乘法时更快,而且更省心。“矩阵就是数...原创 2018-08-11 19:46:34 · 79568 阅读 · 50 评论 -
OpenvSwitch key模块详解
struct sw_flow_key {/*ip隧道层------------------------------------------------------------------------------------------------------------------------------------------------------------*/ u8 tun_prot...原创 2018-08-18 20:58:30 · 2935 阅读 · 2 评论 -
C++ STL 之 set
set 是数学中“集合”概念的实现,故 set 中不会存在任意两个相同的元素。定义set<int> set_1初始化由于 set 中不允许有重复的元素,故 set 对象只接受列表初始化(C11 标准支持),如set<int> set_1={ 1, 2, 3 };如列表中有重复的值,set 对象中只会保留其中的一个set<int>...原创 2018-08-27 15:25:20 · 1158 阅读 · 0 评论 -
C++ 查找对象算法
C++ 的查找算法用于在一个指定序列中搜索一个指定值或者一个值序列。算法1:查找特定元素find (beg, end, val)查找由迭代器beg和end所指示的序列中第一个等于val的元素,返回该元素的迭代器。find_if (beg, end, unaryPred)查找由迭代器beg和end所指示的序列中第一个满足一元谓词 unaryPred 的元素,返回该元素的迭...原创 2018-08-20 15:38:03 · 769 阅读 · 0 评论 -
二叉树的非递归遍历
二叉树的遍历有三种经典方式:前序遍历、中序遍历、后序遍历。递归遍历递归的写法非常简单:前序遍历void preorder_traverse(tree_node* root) { if (root == nullptr) return; this->preorder.push_back(root->value); preorder_tr...原创 2019-09-01 12:14:32 · 355 阅读 · 0 评论