摘要:
函数signal 函数signal介绍 typedef void (*sighandler_t)(int); sighandler_t signal(int signum, sighandler_t handler); signal函数 作用1:站在应用程序的角度,注册一个信号处理函数 作用2:忽略
阅读全文
posted @ 2018-08-13 10:23
苏格拉底的落泪
阅读(377)
推荐(0)
摘要:
钻石型多重虚继承 钻石型-重复继承的源代码如下所示。其中,每个类都有两个变量,一个是整形(4字节),一个是字符(1字节): class B { public: int ib; char cb; public: B() :ib(0), cb('B') {} virtual void f() { cou
阅读全文
posted @ 2018-08-12 21:14
苏格拉底的落泪
阅读(544)
推荐(0)
摘要:
libfuse编译安装 Installation You can download libfuse from https://github.com/libfuse/libfuse/releases. To build and install, we recommend to use Meson an
阅读全文
posted @ 2018-08-10 15:15
苏格拉底的落泪
阅读(484)
推荐(0)
摘要:
centos stream 9操作系统安装教程 200 GiB 硬盘容量分区方案如下图: /boot 2 GiB ext4 /var 30 GiB ext4 / 150 GiB ext4 swap 18 GiB 不适用 250 GiB硬盘容量分区方案如下图: /boot 2 GiB ext4 /va
阅读全文
posted @ 2018-08-10 09:53
苏格拉底的落泪
阅读(363)
推荐(0)
摘要:
合成拷贝控制与继承 1. 例子 #include <iostream> using namespace std; class Base { public: Base() { cout << "Base contruction" << endl; } virtual ~Base() { cout <<
阅读全文
posted @ 2018-08-02 10:49
苏格拉底的落泪
阅读(479)
推荐(0)
摘要:
commit记录历史 1. 提交历史记录: 说明 网址 移除filestore模块 #49528 https://github.com/ceph/ceph/pull/49528 移除msg模块 2. msg: remove SimpleMessenger #27007 https://github.
阅读全文
posted @ 2018-08-01 22:09
苏格拉底的落泪
阅读(142)
推荐(0)
摘要:
链接 类里的static cosnt 和 const static成员初始化 这两种写法的作用一样,为了便于记忆,在此值说明一种通用的初始化方法: class Test { public: static const int mask1; const static int mask2; }; cons
阅读全文
posted @ 2018-07-31 12:52
苏格拉底的落泪
阅读(125)
推荐(0)
摘要:
重载new和delete 1. 测试代码: 1 #include<iostream> 2 #include<new> 3 using namespace std; 4 class A { 5 public: 6 A() { cout << "A constructor" << endl; } 7 8
阅读全文
posted @ 2018-07-27 19:22
苏格拉底的落泪
阅读(323)
推荐(0)
摘要:
模板实参推断 一、模板函数显示实参 情况1: template <typename T1, typename T2, typename T3> T1 sum(T2 a, T3 b) { return a + b; } 分析:调用的时候就需要指定T1的类型,如:sum<float>(1, 2); 于是
阅读全文
posted @ 2018-07-27 09:52
苏格拉底的落泪
阅读(217)
推荐(0)
摘要:
Blob类 1 #include<iostream> 2 #include<initializer_list> 3 #include<vector> 4 using namespace std; 5 6 template <typename T> 7 class Blob { 8 public: 9
阅读全文
posted @ 2018-07-25 19:31
苏格拉底的落泪
阅读(279)
推荐(0)
摘要:
ceph-deploy构建rpm包 可以借用从ceph-deploy-1.5.39-0.src.rpm的源码包进行二进制安装包的制作: 1. 下载ceph-deploy-1.5.39-0.src.rpm,下载链接:https://download.ceph.com/rpm-15.2.15/el7/S
阅读全文
posted @ 2018-07-19 22:57
苏格拉底的落泪
阅读(250)
推荐(0)
摘要:
数据对齐 1)平台原因(移植原因):不是所有的硬件平台都能访问任意地址上的任意数据,某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异常2)硬件原因:经过内存对齐之后,CPU的内存访问速度大大提升。 1. 对齐原则: 【原则1】数据成员对齐规则:结构(struct)(或联合(union
阅读全文
posted @ 2018-07-03 12:29
苏格拉底的落泪
阅读(8714)
推荐(1)
摘要:
概要 程序执行过程中,一共经历了四步,最终生成可执行的目标文件hello,这四个步骤分别是:预处理,编译,汇编,链接。 预处理:预处理器(cpp)预处理就是把程序中引用文件,插入到当前文本文件中,比如开头的#include <stdio.h>,包含了stdio.h文件,预处理命令就会读取stdio.
阅读全文
posted @ 2018-06-28 10:54
苏格拉底的落泪
阅读(1208)
推荐(0)
摘要:
流量控制算法 令牌桶算法示意图: 令牌桶算法是一个存放固定容量令牌的桶,按照固定速率往桶里添加令牌。 令牌桶算法的描述如下: 假如用户配置的平均速率为r,则每隔1/r秒一个令牌被加入到桶中; 假设桶最多可以存b个令牌。如果令牌到达时令牌桶已经满了,那么这个令牌会被丢弃; 当一个n个字节大小的数据包到
阅读全文
posted @ 2018-06-27 20:21
苏格拉底的落泪
阅读(198)
推荐(0)
摘要:
perl数组 返回数组长度: 1. 方法1: my @array = (1, 2, 3, 4, 5); my $length = scalar @array; print "数组长度为: $length\n"; 2. 方法2: my @array = (1, 2, 3, 4, 5); my $len
阅读全文
posted @ 2018-06-27 11:17
苏格拉底的落泪
阅读(362)
推荐(0)
摘要:
ceph+nfs-ganesha异步读写git历史记录 1. client: unlock client_lock when copying data and do more check for the client_lock 2. Client: C_Read_Async_Finisher sho
阅读全文
posted @ 2018-06-24 21:17
苏格拉底的落泪
阅读(480)
推荐(0)
摘要:
客户端与服务端mds交互过程 hand_client_reply() | insert_trace() | inert_readdr_results()
阅读全文
posted @ 2018-06-24 20:27
苏格拉底的落泪
阅读(215)
推荐(0)
摘要:
函数ceph_fsal_open2解析 定义说明: enum fsal_create_mode { FSAL_NO_CREATE = 0, FSAL_UNCHECKED = 1, FSAL_GUARDED = 2, FSAL_EXCLUSIVE = 3, FSAL_EXCLUSIVE_41 = 4,
阅读全文
posted @ 2018-06-24 15:57
苏格拉底的落泪
阅读(168)
推荐(0)
摘要:
设置rpm打包完成后不删除BUILROOT 目录的文件 在RPM打包过程中,如果要保留BUILDROOT目录,你可以通过修改spec文件中的清理部分来实现。下面是具体的做法: 1. 在spec文件中找到或添加%clean部分: %clean # 注释掉原来的清理命令 # rm -rf $RPM_BU
阅读全文
posted @ 2018-06-24 15:17
苏格拉底的落泪
阅读(124)
推荐(0)
摘要:
nmcli nmcli con show 关闭网卡: nmcli connection down <连接名或UUID> nmcli con down <连接名> 启用网卡: nmcli con up <连接名>
阅读全文
posted @ 2018-06-23 10:53
苏格拉底的落泪
阅读(544)
推荐(0)
摘要:
参考资料 1. ceph客户端条带化
阅读全文
posted @ 2018-06-22 22:34
苏格拉底的落泪
阅读(131)
推荐(0)
摘要:
虚基类 一、虚基类介绍 多继承时很容易产生命名冲突,即使我们很小心地将所有类中的成员变量和成员函数都命名为不同的名字,命名冲突依然有可能发生,比如非常经典的菱形继承层次。如下图所示: 类A派生出类B和类C,类D继承自类B和类C,这个时候类A中的成员变量和成员函数继承到类D中变成了两份,一份来自 A-
阅读全文
posted @ 2018-06-22 22:26
苏格拉底的落泪
阅读(2477)
推荐(1)
摘要:
普通继承中的构造函数与析构函数 【注意】定义一个对象时先调用基类的构造函数、然后调用派生类的构造函数;析构的时候恰好相反:先调用派生类的析构函数、然后调用基类的析构函数。 #include <iostream> using namespace std; class Base { public: Ba
阅读全文
posted @ 2018-06-22 20:53
苏格拉底的落泪
阅读(226)
推荐(0)
摘要:
学习资料 • 派生类的赋值运算符/赋值构造函数也必须处理它的基类成员的赋值 • C++ 基类构造函数带参数的继承方式及派生类的初始化 定义拷贝构造函数 【注意】对派生类进行拷贝构造时,如果想让基类的成员也同时拷贝,就一定要在派生类拷贝构造函数初始化列表中显示调用基类拷贝构造函数(当然在函数体内将基类
阅读全文
posted @ 2018-06-22 20:05
苏格拉底的落泪
阅读(2358)
推荐(0)
摘要:
虚析构函数 直接的讲,C++中基类采用virtual虚析构函数是为了防止内存泄漏。具体地说,如果派生类中申请了内存空间,并在其析构函数中对这些内存空间进行释放。 假设基类中采用的是非虚析构函数,当删除基类指针指向的派生类对象时就不会触发动态绑定,因而只会调用基类的析构函数,而不会调用派生类的析构函数
阅读全文
posted @ 2018-06-22 20:03
苏格拉底的落泪
阅读(559)
推荐(0)
摘要:
深度优先搜索(DFS) 广度优先搜索(BFS) 1、介绍 广度优先搜索(BFS)是图的另一种遍历方式,与DFS相对,是以广度优先进行搜索。简言之就是先访问图的顶点,然后广度优先访问其邻接点,然后再依次进行被访问点的邻接点,一层一层访问,直至访问完所有点,遍历结束。 2、无向图的广度优先搜索 下面是无
阅读全文
posted @ 2018-06-20 20:28
苏格拉底的落泪
阅读(1263)
推荐(0)
摘要:
参考资料 1. C++Primer #7 类 Sales_data类 Sales_data.h 1 #include<iostream> 2 #include<string> 3 4 class Sales_data 5 { 6 friend std::istream& operator >> (s
阅读全文
posted @ 2018-06-19 19:05
苏格拉底的落泪
阅读(427)
推荐(0)
摘要:
算法简介 折半插入排序(binary insertion sort)是对插入排序算法的一种改进,由于排序算法过程中,就是不断的依次将元素插入前面已排好序的序列中。由于前半部分为已排好序的数列,这样我们不用按顺序依次寻找插入点,可以采用折半查找的方法来加快寻找插入点的速度。 算法动态演示: 算法思想
阅读全文
posted @ 2018-06-09 10:34
苏格拉底的落泪
阅读(2054)
推荐(0)
摘要:
二分查找图解 第一类: 查找等于目标值的数 比如我们有数组 [2, 4, 5, 6, 9],target = 6,那么我们可以写出二分查找法的代码如下: int find(vector<int> &nums, int target) { int left = 0, right = nums.size
阅读全文
posted @ 2018-06-07 20:51
苏格拉底的落泪
阅读(239)
推荐(0)
摘要:
预备知识 堆排序 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。首先简单了解下堆结构。 堆 堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于
阅读全文
posted @ 2018-06-07 19:23
苏格拉底的落泪
阅读(141)
推荐(0)
摘要:
bash =~ 用法 在 Bash 中,=~ 是用来执行正则表达式匹配的操作符。它通常在 [[ ... ]] 双中括号测试中使用,用于判断一个字符串是否符合给定的正则表达式。 if [[ "$string" =~ regex ]]; then # 如果字符串匹配正则表达式 echo "匹配成功" e
阅读全文
posted @ 2018-06-06 20:01
苏格拉底的落泪
阅读(293)
推荐(0)
摘要:
vmware克隆独立虚拟机及初始配置 首先确保原型机为关机状态。鼠标右键“管理”->“克隆”,进入“克隆虚拟机向导”,点击“下一步”: 选择“克隆自-虚拟机中的当前状态(C)”->“创建完整克隆(F)”,然后设置克隆机的名称和存储位置,点击“完成”等待生成克隆机 首先我们在这介绍一下/etc/sys
阅读全文
posted @ 2018-06-03 22:06
苏格拉底的落泪
阅读(178)
推荐(0)
摘要:
重载 如果同一作用域内的几个函数名字相同但形参列表不同(参数个数不同,或者参数类型不同,或者参数个数和参数类型都不同),称之为C++的重载。 注意:c语言没有函数重载的机制; • 示例: #include<iostream> using namespace std; int Add(int a,in
阅读全文
posted @ 2018-06-03 19:29
苏格拉底的落泪
阅读(268)
推荐(0)
摘要:
创建子包 参考资料 1. 创建子包
阅读全文
posted @ 2018-06-03 17:22
苏格拉底的落泪
阅读(267)
推荐(0)
摘要:
概述 为了实现C++的多态,C++使用了一种动态绑定的技术。这个技术的核心是虚函数表(下文简称虚表)。本文介绍虚函数表是如何实现动态绑定的。 C++多态实现的原理: • 当类中声明虚函数时,编译器会在类中生成一个虚函数表 • 虚函数表是一个存储成员函数地址的数据结构 • 虚函数表是由编译器自动生成与
阅读全文
posted @ 2018-06-01 12:41
苏格拉底的落泪
阅读(1204)
推荐(0)
摘要:
iostream迭代器 标准库为iostream定义了可用于这些IO类型对象的迭代器。 istream_iterator读取输入流, ostream_iterator向一个输出流写数据。 1. istream_iterator操作 当创建一个流迭代器时,必须指定迭代器将要读写的对象类型。一个istr
阅读全文
posted @ 2018-05-30 16:28
苏格拉底的落泪
阅读(218)
推荐(0)
摘要:
目录 • iostream迭代器 • 反向迭代器 插入迭代器 插入迭代器,这些迭代器被绑定到一个容器上,可以向容器插入元素。 头文件为:#include<iterator it=t 在it指定的当前位置插入值t。假定c是it绑定的容器,依赖于插入迭代器的不同种类,此赋值分别调用c.push_back
阅读全文
posted @ 2018-05-30 14:50
苏格拉底的落泪
阅读(198)
推荐(0)
摘要:
反向迭代器 • 反向迭代器就是在容器中从尾元素向首元素反向移动的迭代器。对于反向迭代器,递增(以及递减)操作的含义会颠倒过来。 • 递增一个反向迭代器(++it)会移动到前一个元素;递减一迭代器(--it)会移动到下一个元素。 • 除了forward_list之外,其他容器都支持反向迭代器。我们可以
阅读全文
posted @ 2018-05-29 21:42
苏格拉底的落泪
阅读(184)
推荐(0)
摘要:
安装虚拟化rdma网络 参考资料 1. 安装虚拟化rdma网络 2. 基于 SoftRCoE 部署 DeepSeek Fire-Flyer File System (3FS)
阅读全文
posted @ 2018-05-28 22:38
苏格拉底的落泪
阅读(192)
推荐(0)
摘要:
2. 暴力匹配算法 【问题】假设现在我们面临这样一个问题:有一个文本串S,和一个模式串P,现在要查找P在S中的位置。 如果用暴力匹配的思路,并假设现在文本串S匹配到 i 位置,模式串P匹配到 j 位置,则有: • 如果当前字符匹配成功(即S[i] == P[j]),则i++,j++,继续匹配下一个字
阅读全文
posted @ 2018-05-26 21:09
苏格拉底的落泪
阅读(328)
推荐(0)