gaoZhuanMing
码龄4年
关注
提问 私信
  • 博客:106,280
    社区:1
    106,281
    总访问量
  • 84
    原创
  • 2,345,630
    排名
  • 55
    粉丝
  • 0
    铁粉
IP属地以运营商信息为准,境内显示到省(区、市),境外显示到国家(地区)
IP 属地:广东省
  • 加入CSDN时间: 2021-02-17
博客简介:

gaoZhuanMing的博客

查看详细资料
个人成就
  • 获得44次点赞
  • 内容获得3次评论
  • 获得256次收藏
  • 代码片获得375次分享
创作历程
  • 4篇
    2022年
  • 80篇
    2021年
成就勋章
TA的专栏
  • C++
    14篇
  • 数据结构与算法
    6篇
  • 操作系统
    3篇
  • 数据库
    7篇
  • Go
    3篇
  • Linux
    24篇
  • 云计算
    18篇
  • 计算机网络
    2篇
  • 深度学习
    2篇
  • Python
    4篇
创作活动更多

如何做好一份技术文档?

无论你是技术大神还是初涉此领域的新手,都欢迎分享你的宝贵经验、独到见解与创新方法,为技术传播之路点亮明灯!

183人参与 去创作
  • 最近
  • 文章
  • 代码仓
  • 资源
  • 问答
  • 帖子
  • 视频
  • 课程
  • 关注/订阅/互动
  • 收藏
搜TA的内容
搜索 取消

Linux系统编程—零拷贝

“零拷贝”指的是:不在内核态和用户态之间拷贝数据。正常情况下,拷贝一个文件的步骤是:通过 read() 读取文件:磁盘 -> 内核缓冲区 -> 用户缓冲区;通过 write() 写数据:用户缓冲区 -> 内核缓冲区 -> 磁盘。可见,数据在用户态缓冲区和内核态缓冲区之间来回拷贝了两次。使用零拷贝技术之后,数据流方向为:磁盘 -> 内核缓冲区 -> 磁盘。#define _GNU_SOURCE#include <fcntl.h>ssize_
原创
发布博客 2022.01.17 ·
780 阅读 ·
1 点赞 ·
0 评论 ·
1 收藏

AT&T 汇编

1. 基础x86 的寄存器为32位,x64 的寄存器为64位。寄存器间对应关系:64位寄存器 低32位 低16位 低8位rax eax ax alrbx ebx bx blrcx ecx cx clrdx edx dx dlrsi esi si silrdi edi di dilrbp ebp bp bplrsp esp sp splr8 r8d r8w r8br9 r9d r9w r9br10
原创
发布博客 2022.01.12 ·
3509 阅读 ·
1 点赞 ·
0 评论 ·
8 收藏

intel 汇编

1. 基础8086 CPU 的所有寄存器都是16位的。通用寄存器:ax, bx, cx, dx;为了兼容上一代 CPU,每个通用寄存器都可以分为两个8位的寄存器来使用,如,ax 可分为 ah, al,ah 为 ax 的高8位,al 为 ax 的低8位,其他寄存器类似。段寄存器:cs, ds, ss, es,分别表示代码段、数据段、栈段和附加段。8086 CPU 有20位的地址总线,可寻址1MB的内存。物理地址 = 段地址左移4位 + 偏移地址;物理地址为20位,其他均为16位。
原创
发布博客 2022.01.12 ·
1067 阅读 ·
0 点赞 ·
0 评论 ·
2 收藏

C++20 协程

1. 简介协程就是一个可以挂起执行,稍后再恢复执行的函数。协程是无栈式的(stackless),协程挂起时会返回到调用者,且恢复执行所需的数据会分开存储,而不放在栈上。只要一个函数包含 co_await、co_yield 或 co_return 关键字,则它就是协程。一个协程关联有如下多个对象:promise 对象:在协程内部操作此对象,协程通过它提交返回值或异常;协程句柄:在协程外部操作此对象,用于恢复协程的执行或销毁协程帧;协程状态:在堆上分配的内部状态。2. co_await 操
原创
发布博客 2022.01.01 ·
3109 阅读 ·
1 点赞 ·
0 评论 ·
14 收藏

Linux系统编程—信号

1. 简介信号有时也称为软件中断。一个进程能够向另一个进程发送信号,因此信号也可作为一种同步技术。传统或标准信号的编号范围是 1~31,其余信号为实时信号。 $ kill -l 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR111) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM
原创
发布博客 2021.12.08 ·
913 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

数据结构—完全二叉堆

1. 简介完全二叉堆可用于实现优先队列。当然,使用数组或列表也可以实现优先队列,但通常需要先将其中的所有数据进行排序才可,即首先维护一种全序关系。但事实上,优先队列只要能够确定全局优先级最高的 entry 即可,而不要求全局先有序。完全二叉堆无需先对所有数据进行排序即可确定全局优先级最高的 entry,因此更加适用于优先队列的实现。2. 定义完全二叉堆的逻辑结构就是一棵完全二叉树,但堆可以使用数组来实现。对于最小堆来说,堆中每个父节点都要小于等于其子节点;对于最大堆
原创
发布博客 2021.12.07 ·
436 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

数据结构—跳跃表

1. 简介对于数组来说:如果数组是有序的,则搜索操作可以使用二分搜索法,其时间复杂度为 O(log⁡n)O(\log n)O(logn);但插入和删除操作的时间复杂度则需要 O(n)O(n)O(n)。对于链表来说:即使链表是有序的,其搜索操作也无法使用二分搜索法,只能进行顺序查找,时间复杂度为 O(n)O(n)O(n);但其插入和删除操作具有 O(1)O(1)O(1) 的时间复杂度。为了兼顾搜索、插入和删除操作的效率,平衡搜索树被提出。但无论是 AVL 树还是红黑树,其实现都较为复杂。
原创
发布博客 2021.12.07 ·
1249 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

数据结构—红黑树

1. 简介AVL 树在删除节点之后可能需要多达 O(log⁡n)O(\log n)O(logn) 次的旋转才能够使整棵树恢复平衡,但也因此导致了全树拓扑结构频繁地发生大幅度的变化。红黑树主要是针对上述不足所做的改进,它也是一棵平衡二叉搜索树,且可以保证每次插入、删除操作之后的重平衡过程中,全树拓扑结构的更新仅涉及常数个节点。红黑树的搜索、插入和删除操作的时间复杂度也为 O(log⁡n)O(\log n)O(logn)。2. 约束红黑树具有如下约束:(1)每个节点要么为红色,要么为黑色;(2)树
原创
发布博客 2021.12.05 ·
676 阅读 ·
0 点赞 ·
0 评论 ·
2 收藏

数据结构—AVL树

1. 约束对于节点 vvv,我们定义其平衡因子为:vvv 的左、右子树的高度差。AVL 树是一棵二叉搜索树,但其引入了额外的约束:树中各节点的平衡因子的绝对值不得超过 111。设一共有 nnn 个节点,AVL 树始终可以将树的高度控制在 O(log⁡n)O(\log n)O(logn) 以内,且每次搜索、插入和删除操作均可在 O(log⁡n)O(\log n)O(logn) 时间内完成。2. 插入往 AVL 树中插入新节点可能会增加树的高度,从而导致其所在的子树失衡。(1)首先按
原创
发布博客 2021.12.05 ·
504 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

数据结构—B+树

1. 约束B+ 树的约束与 B 树类似,一棵 mmm 阶 B+ 树具有如下特点:(1)根节点约束:根节点要么是一个叶节点,要么至少具有两个孩子节点;(2)内部节点约束:除根节点以外,每个内部节点都具有 [⌈m/2⌉,m][\lceil m/2\rceil, m][⌈m/2⌉,m] 个孩子节点,因此具有 [⌈m/2⌉−1,m−1][\lceil m/2\rceil -1, m-1][⌈m/2⌉−1,m−1] 个关键码;(有些定义中,要求关键码个数与指针个数相同)(3)叶节点约束:所有叶节点都处在树的同
原创
发布博客 2021.12.04 ·
878 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

数据结构—B树

1. 简介如果数据太多导致内存装不下,则必须把数据结构存放到磁盘上,此时大 OOO 模型不再适用。磁盘的访问代价相比于 CPU 计算和内存访问来说实在是太高了,因此宁愿执行大量的计算,也要减少磁盘 I/O。不平衡二叉树在最坏的情况下具有线性的深度,因此如果将其作为一种磁盘数据结构,则最坏情况下仍需进行大量的磁盘 I/O。2. 约束一棵 mmm 阶 B 树具有如下特点:(1)根节点约束:根节点要么是一个叶节点,要么至少具有两个孩子节点;(2)内部节点约束:除根节点以外,每个内部节点都具有 [
原创
发布博客 2021.12.04 ·
342 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

一致性哈希算法

1. 传统的哈希算法假设存储集群中一共有 mmm 个节点,且已使用 0,1,..,m−10,1,..,m-10,1,..,m−1 进行编号,现要将对象 ooo 存到集群上。如果使用传统的哈希算法来确定 ooo 的存储位置,则 ooo 应存储在编号为 hash(o.id)%m\text{hash}(o.id)\%mhash(o.id)%m 的节点上。(o.ido.ido.id 表示对象 ooo 的 ID)传统哈希算法的不足是可扩展性差,当集群增删节点时,mmm 便会改变,所有数据的存储位置都得重新计算,
原创
发布博客 2021.12.03 ·
1039 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

CRUSH 算法

1. 简介CRUSH 算法能够根据每个存储设备的权重来分布数据对象,使得这个分布近似于均匀分布。数据分布是由具有层级结构的 cluster map 来控制的,其表示了可用的存储资源,以及一些逻辑元素。数据分布策略是根据放置规则来定义的,其指定了要从集群中选出多少个存储设备以存储数据副本,以及数据副本的存放限制(如,故障域隔离)。输入一个整数 xxx(通常是对象的 ID),CRUSH 算法会输出一个大小为 nnn 的有序列表 R→\mathop{R} \limits ^{\righta
原创
发布博客 2021.12.03 ·
2991 阅读 ·
4 点赞 ·
0 评论 ·
10 收藏

Go 同步机制

1. 互斥量import "sync"var mutex sync.Mutexmutex.Lock()// ...mutex.Unlock()2. 读写锁import "sync"var mutex sync.RWMutex读者:mutex.RLock()// ...mutex.RUnlock()写者:mutex.Lock()// ...mutex.Unlock()3. 条件变量import "sync"var mutex sync.Mutexvar
原创
发布博客 2021.12.01 ·
327 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Raft 算法—集群配置变更、Log压缩、客户端交互

1. 配置变更集群的配置会包含在 log entries (使用特殊的 entries)中,并复制到其他节点上。设集群的旧配置为 ColdC_{old}Cold​,新配置为 CnewC_{new}Cnew​(如,CnewC_{new}Cnew​ 中添加或移除了某些节点)。Raft 在新旧配置之间引入了一个中间状态,称为 joint consensus,其包含了新旧配置,即其配置为 Cold,newC_{old,new}Cold,new​,也就是说,此阶段的集群成员为 ColdC_{old}Cold​
原创
发布博客 2021.12.01 ·
330 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Raft 算法—Leader选举、Log复制

1. 复制状态机(1)客户端向服务器发送一条命令;(2)服务器上的共识模块将接收到的命令添加到自己的 log 中,然后和其他服务器上的共识模块通信,以复制该命令到其他服务器上;(3)一旦命令被成功复制到大多数服务器上之后,每个服务器上的状态机将按序执行 log 中的命令;(4)状态机输出并返回命令的执行结果。2. Raft基础集群角色Raft 集群中的节点按角色可划分为:leader、follower 和 candidate。(1)正常情况下,集群中只存在一个 leader,并由 leade
原创
发布博客 2021.11.30 ·
1624 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏

Ceph架构

1. 简介Ceph 能够同时提供对象存储、块存储和文件存储。(1)对象存储提供 RESTful 接口;提供与 S3 和 Swift 兼容的 API;对象条带化;多站点部署和复制;(2)块存储精简配置,即能够按需分配;镜像最大可达16EB;可配置条带化;内存缓存;快照;写时复制的克隆;支持 KVM 和 libvirt;内核驱动程序支持;灾难恢复;(3)文件存储提供与 POSIX 兼容的语义;数据与元数据分离;可配置条带化;内核驱动程序支持;子目录快照;
原创
发布博客 2021.11.29 ·
509 阅读 ·
0 点赞 ·
0 评论 ·
2 收藏

Ceph问题及解决办法

问题1创建存储池之后出现 100.000% pgs not active,导致后续 rbd 命令执行时卡住不返回?解决办法:cd /etc/ceph/ceph osd getcrushmap -o /etc/ceph/crushmapcrushtool -d /etc/ceph/crushmap -o /etc/ceph/crushmap.txtsed -i 's/step chooseleaf firstn 0 type host/step chooseleaf firstn 0 type o
原创
发布博客 2021.11.28 ·
903 阅读 ·
0 点赞 ·
0 评论 ·
1 收藏

Ceph基本操作—存储池、块设备

1. 存储池创建存储池:$ ceph osd pool create data-pool 8 8pool 'data-pool' created列出存储池:$ ceph osd pool lsdata-pool设置/获取对象副本数:$ ceph osd pool set data-pool size 1set pool 1 size to 1$ ceph osd pool get data-pool sizesize: 1查看存储池的统计信息:$ rados dfPOOL
原创
发布博客 2021.11.28 ·
2335 阅读 ·
0 点赞 ·
0 评论 ·
3 收藏

Ceph单节点安装

1. 前置配置(1)配置主机名ceph0X 主机上:hostnamectl set-hostname ceph0XX 为具体的主机编号,如,1、2…。在所有节点上配置主机名解析:192.168.122.132 ceph01192.168.122.181 ceph02(2)关闭firewal和selinuxsystemctl stop firewalld && systemctl disable firewalldsetenforce 0(3)配置免密登录配置
原创
发布博客 2021.11.28 ·
799 阅读 ·
0 点赞 ·
0 评论 ·
0 收藏
加载更多