摘要: AVL树简介 AVL树的名字来源于发明作者G.M. Adelson-Velsky 和 E.M. Landis的缩写。AVL树是最先发明的自平衡二叉查找树(Self-Balancing Binary Search Tree,简称平衡二叉树)。 平衡二叉树定义(AVL):它或者是一颗空树,或者具有以下性 阅读全文
posted @ 2018-09-30 10:47 苏格拉底的落泪 阅读(789) 评论(0) 推荐(0)
摘要: 二叉排序树简介 二叉排序树,又叫二叉查找树,它或者是一棵空树;或者是具有以下性质的二叉树: 若它的左子树不空,则左子树上所有节点的值均小于它的根节点的值; 若它的右子树不空,则右子树上所有节点的值均大于它的根节点的值; 它的左右子树也分别为二叉排序树。 二叉排序树的创建 假设我们要为数组 {62, 阅读全文
posted @ 2018-09-30 09:39 苏格拉底的落泪 阅读(1089) 评论(0) 推荐(0)
摘要: ASCII表 每个要插入到侵入式容器中的类都需要包含一个 hook,该 hook 将提供可插入容器中的必要数据和资源(比如前后指针),Boost.Intrusive 提供了三种 hook: base hooks member hooks function hooks base hooks 所谓 ba 阅读全文
posted @ 2018-09-26 15:59 苏格拉底的落泪 阅读(247) 评论(0) 推荐(0)
摘要: 配置nfs-ganesha基于ctdb的高可用配置 参考资料 1. 配置nfs-ganesha基于ctdb的高可用配置 阅读全文
posted @ 2018-09-25 17:19 苏格拉底的落泪 阅读(314) 评论(0) 推荐(0)
摘要: 实验3:由遍历序列构造二叉树 二叉树构造定理: 定理7.1:任何n(n>0)个不同结点的二又树,都可由它的中序序列和先序序列唯一地确定。 定理7.2:任何n(n>0)个不同结点的二又树,都可由它的中序序列和后序序列唯一地确定。 题目: 已知先序序列为ABDGCEF,中序序列为DGBAECF,则构造二 阅读全文
posted @ 2018-09-19 16:32 苏格拉底的落泪 阅读(1971) 评论(0) 推荐(0)
摘要: 1) public继承方式 基类中所有 public 成员在派生类中为 public 属性; 基类中所有 protected 成员在派生类中为 protected 属性; 基类中所有 private 成员在派生类中不能使用。 2) protected继承方式 基类中的所有 public 成员在派生类 阅读全文
posted @ 2018-09-18 21:56 苏格拉底的落泪 阅读(634) 评论(0) 推荐(0)
摘要: 哈夫曼树定义 (01) 路径和路径长度 定义:在一棵树中,从一个结点往下可以达到的孩子或孙子结点之间的通路,称为路径。通路中分支的数目称为路径长度。若规定根结点的层数为1,则从根结点到第L层结点的路径长度为L-1。 例子:100和80的路径长度是1,50和30的路径长度是2,20和10的路径长度是3 阅读全文
posted @ 2018-09-18 21:01 苏格拉底的落泪 阅读(944) 评论(0) 推荐(0)
摘要: 模板嵌套 1.模板模板参数:允许将一个“模板”作为另一个模板的参数传入。 template<template<typename> class Container, typename T> class Wrapper { public: Container<T> data; }; 使用示例: Wrap 阅读全文
posted @ 2018-09-12 20:52 苏格拉底的落泪 阅读(170) 评论(0) 推荐(0)
摘要: 参考资料 1. 红黑树 2. Red–black tree【wikipedia】 3. 维基百科红黑树 阅读全文
posted @ 2018-09-10 21:47 苏格拉底的落泪 阅读(180) 评论(0) 推荐(0)
摘要: 默认构造函数的构造操作、拷贝构造函数额构造操作 注意:默认构造函数和拷贝构造函数在必要时的时候由编译器产生出来。 参考资料 关于默认构造函数的几个错误认识(四种情况下,编译器会生成默认构造函数) 阅读全文
posted @ 2018-09-02 21:07 苏格拉底的落泪 阅读(281) 评论(0) 推荐(0)
摘要: 函数fork 博文链接: 1. 代码示例: #include "apue.h" int glob = 6; char buf[] = "a write to stdout\n"; int main(void) { int var; int pid; var = 88; if (write(STDOU 阅读全文
posted @ 2018-09-02 16:34 苏格拉底的落泪 阅读(187) 评论(0) 推荐(0)
摘要: 嵌套类 例子: #include <iostream> using namespace std; class c1 { public: int a; void foo(); class c2 { public: int a; void foo(); } b; }; void c1::foo() { 阅读全文
posted @ 2018-08-27 17:47 苏格拉底的落泪 阅读(213) 评论(0) 推荐(0)
摘要: 运行类型识别 一、使用RTTI dynamic_cast运算符的调用形式如下所示: dynamic_cast<type*>(e) //e是指针 dynamic_cast<type&>(e) //e是左值 dynamic_cast<type&&>(e) //e是右值 e能成功转换为type*类型的情况 阅读全文
posted @ 2018-08-25 21:28 苏格拉底的落泪 阅读(219) 评论(0) 推荐(0)
摘要: 命令形参 命令行参数是使用main()函数参数来处理的,其中,argc是指传入参数的个数,argv[]是一个指针数组,指向传递给程序的每个参数。 应当指出的是, argv[0]存储程序的名称,argv[1]是一个指向第一个命令行参数的指针,argv[n]是最后一个参数。 如果没有提供任何参数,arg 阅读全文
posted @ 2018-08-13 18:39 苏格拉底的落泪 阅读(199) 评论(0) 推荐(0)
摘要: 函数signal 函数signal介绍 typedef void (*sighandler_t)(int); sighandler_t signal(int signum, sighandler_t handler); signal函数 作用1:站在应用程序的角度,注册一个信号处理函数 作用2:忽略 阅读全文
posted @ 2018-08-13 10:23 苏格拉底的落泪 阅读(386) 评论(0) 推荐(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 苏格拉底的落泪 阅读(545) 评论(0) 推荐(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 苏格拉底的落泪 阅读(498) 评论(0) 推荐(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 苏格拉底的落泪 阅读(371) 评论(0) 推荐(0)
摘要: 合成拷贝控制与继承 1. 例子 #include <iostream> using namespace std; class Base { public: Base() { cout << "Base contruction" << endl; } virtual ~Base() { cout << 阅读全文
posted @ 2018-08-02 10:49 苏格拉底的落泪 阅读(481) 评论(0) 推荐(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 苏格拉底的落泪 阅读(143) 评论(0) 推荐(0)
摘要: 链接 类里的static cosnt 和 const static成员初始化 这两种写法的作用一样,为了便于记忆,在此值说明一种通用的初始化方法: class Test { public: static const int mask1; const static int mask2; }; cons 阅读全文
posted @ 2018-07-31 12:52 苏格拉底的落泪 阅读(127) 评论(0) 推荐(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 苏格拉底的落泪 阅读(324) 评论(0) 推荐(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 苏格拉底的落泪 阅读(219) 评论(0) 推荐(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 苏格拉底的落泪 阅读(280) 评论(0) 推荐(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 苏格拉底的落泪 阅读(251) 评论(0) 推荐(0)
摘要: 数据对齐 1)平台原因(移植原因):不是所有的硬件平台都能访问任意地址上的任意数据,某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异常2)硬件原因:经过内存对齐之后,CPU的内存访问速度大大提升。 1. 对齐原则: 【原则1】数据成员对齐规则:结构(struct)(或联合(union 阅读全文
posted @ 2018-07-03 12:29 苏格拉底的落泪 阅读(8754) 评论(0) 推荐(1)
摘要: 概要 程序执行过程中,一共经历了四步,最终生成可执行的目标文件hello,这四个步骤分别是:预处理,编译,汇编,链接。 预处理:预处理器(cpp)预处理就是把程序中引用文件,插入到当前文本文件中,比如开头的#include <stdio.h>,包含了stdio.h文件,预处理命令就会读取stdio. 阅读全文
posted @ 2018-06-28 10:54 苏格拉底的落泪 阅读(1213) 评论(0) 推荐(0)
摘要: 流量控制算法 令牌桶算法示意图: 令牌桶算法是一个存放固定容量令牌的桶,按照固定速率往桶里添加令牌。 令牌桶算法的描述如下: 假如用户配置的平均速率为r,则每隔1/r秒一个令牌被加入到桶中; 假设桶最多可以存b个令牌。如果令牌到达时令牌桶已经满了,那么这个令牌会被丢弃; 当一个n个字节大小的数据包到 阅读全文
posted @ 2018-06-27 20:21 苏格拉底的落泪 阅读(200) 评论(0) 推荐(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 苏格拉底的落泪 阅读(363) 评论(0) 推荐(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) 推荐(0)
摘要: 客户端与服务端mds交互过程 hand_client_reply() | insert_trace() | inert_readdr_results() 阅读全文
posted @ 2018-06-24 20:27 苏格拉底的落泪 阅读(218) 评论(0) 推荐(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 苏格拉底的落泪 阅读(170) 评论(0) 推荐(0)
摘要: 设置rpm打包完成后不删除BUILROOT 目录的文件 在RPM打包过程中,如果要保留BUILDROOT目录,你可以通过修改spec文件中的清理部分来实现。下面是具体的做法: 1. 在spec文件中找到或添加%clean部分: %clean # 注释掉原来的清理命令 # rm -rf $RPM_BU 阅读全文
posted @ 2018-06-24 15:17 苏格拉底的落泪 阅读(127) 评论(0) 推荐(0)
摘要: nmcli nmcli con show 关闭网卡: nmcli connection down <连接名或UUID> nmcli con down <连接名> 启用网卡: nmcli con up <连接名> 阅读全文
posted @ 2018-06-23 10:53 苏格拉底的落泪 阅读(550) 评论(0) 推荐(0)
摘要: 参考资料 1. ceph客户端条带化 阅读全文
posted @ 2018-06-22 22:34 苏格拉底的落泪 阅读(131) 评论(0) 推荐(0)
摘要: 虚基类 一、虚基类介绍 多继承时很容易产生命名冲突,即使我们很小心地将所有类中的成员变量和成员函数都命名为不同的名字,命名冲突依然有可能发生,比如非常经典的菱形继承层次。如下图所示: 类A派生出类B和类C,类D继承自类B和类C,这个时候类A中的成员变量和成员函数继承到类D中变成了两份,一份来自 A- 阅读全文
posted @ 2018-06-22 22:26 苏格拉底的落泪 阅读(2487) 评论(0) 推荐(1)
摘要: 普通继承中的构造函数与析构函数 【注意】定义一个对象时先调用基类的构造函数、然后调用派生类的构造函数;析构的时候恰好相反:先调用派生类的析构函数、然后调用基类的析构函数。 #include <iostream> using namespace std; class Base { public: Ba 阅读全文
posted @ 2018-06-22 20:53 苏格拉底的落泪 阅读(227) 评论(0) 推荐(0)
摘要: 学习资料 • 派生类的赋值运算符/赋值构造函数也必须处理它的基类成员的赋值 • C++ 基类构造函数带参数的继承方式及派生类的初始化 定义拷贝构造函数 【注意】对派生类进行拷贝构造时,如果想让基类的成员也同时拷贝,就一定要在派生类拷贝构造函数初始化列表中显示调用基类拷贝构造函数(当然在函数体内将基类 阅读全文
posted @ 2018-06-22 20:05 苏格拉底的落泪 阅读(2363) 评论(1) 推荐(0)
摘要: 虚析构函数 直接的讲,C++中基类采用virtual虚析构函数是为了防止内存泄漏。具体地说,如果派生类中申请了内存空间,并在其析构函数中对这些内存空间进行释放。 假设基类中采用的是非虚析构函数,当删除基类指针指向的派生类对象时就不会触发动态绑定,因而只会调用基类的析构函数,而不会调用派生类的析构函数 阅读全文
posted @ 2018-06-22 20:03 苏格拉底的落泪 阅读(562) 评论(0) 推荐(0)
摘要: 深度优先搜索(DFS) 广度优先搜索(BFS) 1、介绍 广度优先搜索(BFS)是图的另一种遍历方式,与DFS相对,是以广度优先进行搜索。简言之就是先访问图的顶点,然后广度优先访问其邻接点,然后再依次进行被访问点的邻接点,一层一层访问,直至访问完所有点,遍历结束。 2、无向图的广度优先搜索 下面是无 阅读全文
posted @ 2018-06-20 20:28 苏格拉底的落泪 阅读(1265) 评论(0) 推荐(0)