笔记
文章平均质量分 58
带着你的名字
这个作者很懒,什么都没留下…
展开
-
Ubuntu 安装 mdtest
Ubuntu 安装 mdtest原创 2023-10-31 11:51:41 · 211 阅读 · 0 评论 -
Linux 计算器 bc
bc 是 Linux 上一个用于数学运算的使用工具,可以借助它在 Linux 上进行浮点数运算并使用一些高级的数学函数原创 2023-01-04 14:47:24 · 306 阅读 · 0 评论 -
vim显示缩进对齐线
vim显示缩进对齐线工作中使用 vim 较多,但是在 vim 的默认设置中并没有缩进线,代码看起来会比较费劲,不过可以通过安装 indentLine 插件来实现此功能。1. 安装插件可以通过 vim-plug 直接进行安装:使用 vim ~/.vimrc 编辑 .vimrc 文件,添加语句Plug 'Yggdroot/indentLine'随后使用 vim 的命令行模式执行 :PlugInstall 进行安装显示安装成功服务器不能顺利下载插件的,也可以先通过 git clone htt原创 2021-11-30 18:02:26 · 5195 阅读 · 7 评论 -
GlusterFS源码分析——dht_create
GlusterFS源码分析——dht_create1、简介GlusterFS的分布式哈希表(DIstributed Hash Table,简称DHT)机制是数据分布的核心机制,以目录作为文件分布的基本单位。当用户在客户端创建目录的时候,会在所有brick进行创建,但是创建目录的时候,会根据哈希算法确定文件具体存放在哪个brick上。也就是说,所有brick都有相同的目录结构,但是文件只会存储于特定的brick上,根据文件所在目录的gfid和文件名寻找实际存储文件的brick。我们知道,在Gluster原创 2021-08-26 21:04:17 · 727 阅读 · 1 评论 -
GlusterFS源码学习——函数指针数组的妙用
GlusterFS使用C编写,源码中使用了大量的函数指针来实现模块化编程(是我自己以前没有接触过的编写方式),这样的方式可以很方便的实现功能扩展以及调用。今天学习的是函数指针数组,也就是把相同系列的函数的函数指针存放到一个数组中,通过这个数组和对应于函数操作的编号来进行调用。源码中代码很多,而且跳来跳去的很麻烦,所以自己照葫芦画瓢写了一个小的demo来加深印象,用来学习和记忆该方法。本文前面部分是自己的小demo,后面是GlusterFS的部分源码。demo/* 用来练习函数指针数组的的小demo原创 2021-08-24 19:36:18 · 212 阅读 · 0 评论 -
分布式存储学习(一)相关概念
1.1 什么是网络存储?是数据存储的一种方法,指通过网络存储设备(包括专用数据交换设备、磁盘阵列或磁盘库等存储介质,以及专用的存储软件),利用原有网络,构建一个存储专用网络为用户提供信息存取和共享服务。开放系统的外挂存储根据连接方式的不同,分为直连式存储和网络化存储,网络化存储根据传输协议有分为NAS和SAN,所以现在的存储解决方案主要大致分为三种:直接附加存储DAS(Direct Attached Storage)、网络附加存储NAS(Network Attached Storage)、存储区域网原创 2021-07-22 21:06:09 · 252 阅读 · 0 评论 -
STL空间配置器之 allocate
我们知道new和delete管理对象时其实都内含两阶段操作,一个是对内存空间的操作,使用operator new和operator delete来申请和释放内存空间,一个是调用构造函数和析构函数来构造和销毁对象。类似的STL也需要两阶段的操作,不过为了精密分工,STL把两个阶段拆开了。对于内存的管理,STL会使用空间配置器(allocator)的**allocate()函数来分配足够大、原始的、未命名的内存;调用deallocate()**函数来回收内存,其中比较复杂的是allocate()函数,为了解原创 2021-06-08 13:51:47 · 341 阅读 · 0 评论 -
c++primer第五版 文本查询程序再探
1. 项目需求书上内容的实现,支持多种查询方式,包括:单词查询,用于得到包含给定单词的所有行逻辑非查询,使用~运算符,得到不包含给定单词的所有行逻辑或查询,使用|运算符,返回匹配两个条件中任意一个的行逻辑与查询,使用&运算符,返回匹配两个条件的行组合查询,可以混合使用上面的运算符以及圆括号,符号优先级按照C++通用的优先级对复杂表达式求值输出内容:输入的查询语句,圆括号来表示查询被解释和执行的先后次序;按照查询结果中行号的升序来打印行号和结果,并且每一行只显示一次2. 主原创 2021-05-28 19:32:15 · 401 阅读 · 0 评论 -
TinyXML2的基本使用之遍历和文本提取
XML是一种标记语言,被广泛用来作为跨平台之间交互数据的形式,主要针对数据的内容,通过不同的格式化描述手段(XSLT,CSS等)可以完成最终的形式表达(生成对应的HTML,PDF或者其他的文件格式)。而TinyXML2是一个开源、简单、小巧、高效的C++ XML解析器,由于XML是由节点组成的,节点之间是树形结构,有根节点、父节点、子节点、兄弟节点等。所以可以把其当做树来处理和使用。下面我们来看一下在C++中使用TinyXML2对XML文件进行遍历和提取信息的方法。1.TinyXML2的相关数据类型原创 2021-05-21 22:53:44 · 1625 阅读 · 0 评论 -
C++ 单例模式的自动释放
单例模式是为了确保某个类只能创建一个对象而设计的。当一个程序的某个类型只允许有一个实例的时候使用。一般采用动态分配的方式来生成单例对象,这个时候C++程序员就需要考虑内存回收的问题了,所以为了避免在使用单例模式时忘记回收资源而造成内存泄漏的问题,在实现单例模式的时候就使其可以自动被回收。不带自动释放的单例模式的实现与销毁我们先来复习一下没有自动回收机制的单例模式的实现和销毁。单例模式的实现:将构造函数私有化在类中定义一个静态的指向本类型的指针变量定义一个返回值为该类的指针的静态成员函数,在类原创 2021-05-20 23:25:19 · 1014 阅读 · 1 评论 -
自己实现 写时复制(cow)模式 的c++ string类型 使用了设计模式之代理模式
实现COW(写时复制)模式的String,让其operator[]能够区分出读写操作,从而避免只读时也修改引用计数。使用了设计模式中的 代理模式 来实现下标运算符和赋值运算符的重载,从而完整的实现COW(写时复制)。代码实现如下:my_string.h#ifndef __MY_STRING_H__#define __MY_STRING_H__#include <string.h>#include <iostream>using namespace std;cl原创 2021-05-19 23:14:03 · 1076 阅读 · 2 评论 -
Golang map类型 复杂map类型
Golang中的map(映射)是一种无序的基于 key-value 的数据结构,类似Python中的字典,内部使用散列表(hash表)实现。除了常规的类型之外,还有两种较为复杂的类型:元素为map的slice元素为slice的map其中,在使用元素为map的slice时应当注意,完成slice的初始化之后,还是不能直接对其元素进行赋值等操作,因为此时的map元素还未进行初始化,所以无法赋值。应当先用make函数初始化map,然后才可以赋值。例如:package mainimport "fmt原创 2021-01-16 21:30:09 · 1172 阅读 · 3 评论 -
Golang切片 slice类型
Golang 的 slice 是一个引用类型,内部结构包含 地址、长度和容量,一般用于快速地操作一块数据集合。使用上来说 slice 是一个拥有相同类型元素的可变长度的序列,具有灵活、可自动扩容等优点。本质上,slice 是一个指向 array 的指针,当拷贝 slice 给另一个变量时,两个引用会指向同一个 array,类似Python中的深拷贝,从任何一个变量里修改,其他变量包括底层数组都会跟着改变。相关的操作如下所示:// 定义一个切片 var s1 []int // 定义一个存放in原创 2021-01-14 20:59:00 · 870 阅读 · 0 评论 -
Golang rune类型 和 byte类型
最近在学习Golang,这篇文章的主要目的是讨论在学习过程中遇到的一些关于Golang字符串的小问题。由于Golang中字符的存储方式较为特殊,所以单独拿来讨论一下。1. Golang中字符的定义首先我们都知道,字符串由一个或多个字符构成,字符串中的每一个元素叫做字符,在遍历或者单个获取字符串元素时可以获得字符。继承于C,在Golang中,字符串用双引号表示,字符用单引号表示,和python不同,这是要严格遵循的。而和C不同的是,Golang中的字符有以下两种类型:一种是 byte 类型,或者叫原创 2021-01-13 22:09:37 · 323 阅读 · 0 评论