自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(115)
  • 收藏
  • 关注

原创 【存储基础】对象存储基础知识

对象存储摘要 对象存储是一种简化管理的非结构化数据存储方式,将数据视为独立对象(包含数据、元数据和唯一ID),摒弃传统目录层级,采用扁平命名空间和唯一标识符访问。核心概念包括对象、桶(逻辑容器)、帐户(资源归属)和用户(操作主体)。其关键特性涵盖:架构扁平化与自包含对象模型;EB级扩展性与高持久性(纠删码/多副本);RESTful API访问、可扩展元数据;按需付费、自动分层;端到端加密和多级访问控制(IAM/Bucket Policy/ACL)。适用于海量数据场景,兼具高可用、安全与成本效益。

2025-06-08 16:42:09 692

原创 【存储基础】NAS存储基础知识

NAS(网络附加存储)是一种通过网络提供文件级存储服务的专用设备,核心特性包括文件级访问、网络共享和多协议支持。其架构分为客户端层、网络层、控制层和存储层,支持NFS(Unix/Linux)和SMB/CIFS(Windows)等协议。关键技术涵盖配额管理、WORM数据保护、全局命名空间(GNS)、DNS负载均衡、审计日志和多租户隔离等。主流企业级产品包括NetApp、IBM和华为的NAS解决方案,广泛应用于文件共享、数据备份、虚拟化存储和多媒体服务等场景,满足不同环境的集中存储需求。

2025-06-03 03:19:04 995

原创 【存储基础】【VFS】inode&dentry&super_block以及它们之间的关系

本文介绍了Linux虚拟文件系统(VFS)的核心概念与数据结构。VFS作为内核抽象层,提供统一的文件访问接口,支持多种文件系统共存。文章重点解析了三个关键数据结构:super_block(文件系统元数据)、inode(文件元数据)和dentry(路径映射),阐述了它们的管理关系与协作机制。还探讨了目录树的组织特点及实现原理,说明VFS如何通过这三个组件构建完整的文件系统逻辑结构。最后用图书馆的比喻形象总结了各组件的作用:super_block是管理员,inode是书目卡,dentry是目录索引,共同完成高效

2025-06-02 23:37:59 962

原创 【存储基础】SAN存储基础知识

SAN存储系统通过高速专用网络为服务器提供块级存储访问,具有高性能、可扩展和高可用性特点。其架构包括HBA卡、光纤通道交换机和专用网络组件,支持多种协议如FC、iSCSI、FCoE等。关键技术包括精简配置(按需分配LUN空间)、分级存储(热/冷数据分层管理)、缓存加速、QoS流控、数据重删和压缩优化。这些技术共同提升存储效率、降低成本并确保服务质量,适用于企业级数据密集型应用场景。

2025-06-02 23:31:43 819

原创 【nm】nm命令的使用:查看.so中的符号信息

nm是GNU Binutils工具集中的符号查看工具,用于分析目标文件(.o)、共享库(.so)和可执行文件的符号表。其基本语法为nm [选项] <文件>,常用选项包括查看全局符号(-g)、未定义符号(-u)、反解析C++符号(-C)等。符号类型通过第二列字母标识,如T表示函数代码,U表示未定义符号,D表示初始化数据等。典型应用场景包括:检查特定符号是否存在、分析未定义符号依赖、查找函数符号、检测符号冲突以及定位符号来源文件。nm工具在程序调试和库文件分析中具有重要作用。

2025-06-02 22:17:12 299

原创 【存储基础】存储设备和服务器的关系和区别

服务器和存储设备在功能上有本质区别:服务器是数据处理中心,提供计算资源和运行业务逻辑,相当于"加工厂";存储设备则是数据仓库,专注于安全持久化保存数据。客户端访问数据通常需要经过服务器中转(如NAS、SAN存储),以实现安全控制、协议转换等功能。少数场景允许客户端直连存储设备(如对象存储),但需要特定授权配置。服务器作为关键中转站,承担着身份认证、数据处理、高可用保障等重要职责,确保数据访问的安全性和可靠性。

2025-06-02 17:47:16 637

原创 【存储基础】数据存储基础知识

本文系统介绍了数据存储的基础知识,包括存储介质、架构分类和关键技术。首先对比了HDD、SSD和SCM三种物理介质的特性与适用场景。其次详细解析了DAS、SAN、NAS和分布式存储四种架构的特点及区别,并以仓库为例形象说明了它们的差异。然后按照数据模型分类,阐述了块存储、文件存储和对象存储的核心特征。最后概述了冗余容错、数据保护、缓存、一致性模型等关键技术方案。全文通过多维度对比和实例说明,帮助读者全面理解数据存储系统的核心概念和实现机制。

2025-06-02 17:44:44 857

原创 【Linux命令】scp远程拷贝

SCP是基于SSH的安全文件传输工具,用于在本地和远程主机之间复制文件。基本语法为scp [选项] 源文件 目标路径,常用选项包括-P指定端口、-r递归复制等。主要使用场景包括上传本地文件到远程主机、从远程主机下载文件到本地,以及直接在两个远程主机间传输文件。使用时需注意权限、SSH服务、防火墙限制、路径特殊字符处理等问题,对于大文件传输建议采用支持断点续传的rsync工具。SCP提供了简单高效的安全文件传输方案。

2025-06-01 23:50:23 355

原创 【存储基础】NUMA架构

本文摘要: CPU架构基础:区分物理CPU(独立芯片)与CPU核心(计算单元),一个物理CPU可含多个核心,核心间共享L3缓存等资源。 NUMA架构解析: 采用非统一内存访问设计,将CPU和内存划分为多个节点 节点内内存访问快,跨节点访问延迟高 优势在于扩展性和本地化优化 可通过numactl命令查看拓扑信息 应用优化策略: 数据本地化存储 计算任务与存储协同调度 NUMA感知网络通信 内存池动态均衡 线程绑核技术:通过taskset/numactl工具将线程绑定特定核心,提升缓存命中率并降低NUMA延迟。

2025-06-01 23:49:01 1443

原创 【Linux】【内存管理】内存池管理机制

内存池是一种高效的内存管理机制,通过预分配和复用内存块减少系统调用、降低内存碎片。其核心思想包括预分配、对象复用和定制化管理。工作原理分为初始化阶段(预分配内存并划分块)、分配阶段(从空闲链表直接分配或动态扩展)和释放阶段(回收内存块或延迟释放)。Linux内核基于slab的内存池结合了slab分配器和预分配策略,通过预分配对象、空闲链表管理和应急机制提供稳定支持,工作流程包括初始化、对象分配与释放。使用步骤涉及创建slab缓存、定义分配释放函数、创建内存池及对象操作等。

2025-05-26 04:22:53 473

原创 【Linux】【内存管理】伙伴系统和slab分配器

Linux内核采用伙伴系统与slab分配器两级机制管理物理内存。伙伴系统以页为单位管理大块连续内存,通过分割合并策略减少外部碎片,适合分配大块内存。slab分配器在此基础上细分小对象,通过预分配、对象复用和缓存优化提升小内存分配效率。两者协同工作,伙伴系统提供底层页框支持,slab构建对象缓存层,共同实现高效内存管理。伙伴系统优势在于大块连续内存管理,而slab擅长高频小对象分配,但都存在一定内存开销和复杂度问题。这种层级设计平衡了内存利用率与分配性能的需求。

2025-05-26 04:21:39 729

原创 【vdbench】报错data validation时计算不一致数据的的真实地址

vdbench工具在测试时通过-v选项自动进行数据一致性校验,记录数据不一致的文件及file lba和sector lba。file lba表示数据在文件内部的逻辑块地址,sector lba表示数据在存储设备上的逻辑块地址。定位数据不一致问题时,需根据测试场景(裸盘或文件系统)计算真实地址。对于裸盘设备,真实地址即为sector lba;对于文件系统,需结合文件在设备上的起始扇区和file lba计算真实地址。最后,可通过dd和hexdump命令手动验证数据一致性。

2025-05-19 02:22:50 849

原创 【Linux】dd和hexdump命令的使用

本文介绍了Linux系统中的两个常用命令行工具:dd和hexdump。dd主要用于块级数据的复制和转换,支持磁盘克隆、创建镜像、生成空文件、覆盖写等操作,使用需谨慎以避免数据丢失。hexdump则用于查看和分析二进制文件内容,支持多种显示格式和控制显示范围。两者可以结合使用,先用dd操作数据,再用hexdump观察结果。在使用这些工具时,需注意参数设置和文件大小,以避免性能问题或数据损坏。

2025-05-19 01:38:10 521

原创 【C】C程序内存分配

C程序的内存布局从低地址到高地址依次为代码段、数据段、BSS段、堆区、栈区和内存映射段。代码段存放只读的机器指令,可被多个进程共享。数据段存储已初始化的全局和静态变量,程序启动时加载。BSS段包含未初始化的全局和静态变量,系统将其初始化为0。堆区用于动态内存分配,需手动管理,向高地址增长。栈区存储局部变量、函数参数和调用上下文,自动管理且向低地址增长。内存映射段则包含动态链接库和文件映射等内容。

2025-05-18 23:34:07 218

原创 【Git】查看tag

本文介绍了在Git中查看tag的三种常用方法: 查看当前提交是否有tag:使用 git tag --points-at HEAD 命令,可以检查当前提交是否关联了tag,若有则显示所有关联的tag。 查看最近的tag:通过 git describe --tags 命令,可以获取距离当前提交最近的tag,并显示相关信息,如提交数。 查看所有tag:使用 git tag 命令,可以列出本地仓库的所有tag。若需同步远程仓库的tag,需先执行 git fetch --tags。 这些命令帮助开发者快速获取与tag

2025-05-09 23:04:41 456

原创 【Git】【commit】查看未推送的提交&查看指定commit的修改内容&合并不连续的commit

本文介绍了Git中查看未推送提交、查看指定commit修改以及合并不连续提交的方法。首先,可以通过git status、git log、git cherry和git rev-list四种方式查看本地未推送的提交。其次,使用git show、git log -p和git diff可以查看指定commit的详细信息及修改内容。最后,通过交互式变基(git rebase -i)可以调整提交顺序并合并不连续的提交,具体步骤包括启动交互式变基、调整提交顺序、合并提交以及解决冲突并提交。这些操作有助于更好地管理Git提

2025-05-09 00:01:24 982

原创 【Linux命令】cp拷贝

最近在修改shell脚本的时候,使用到cp命令去执行目录的拷贝动作,但是由于少了一个号,导致除了问题,定位半天才发现是少写一个😭😭😭简单总结下cp命令的使用。

2025-05-08 01:01:18 316

原创 【SGL】Scatter-Gather List内存传输技术

再例如,文件数据在内存中可能分散在多个page cache页(例如大文件被拆分为多个4KB页):文件系统将文件的page cache页地址构建为sgl,存储设备通过sgl直接读取这些页,无需合并到连续内存。以分布式存储与对象存储为例,对象存储系统需要将大对象拆分为多个分片存储在不同节点:将对象分片的存储节点地址和偏移量写入sgl,客户端或服务端通过sgl并发读写多个分片。核心思想:通过一个链表或数组描述多个分散的内存块,使得硬件可以一次性完成对这些非连续内存区域的读写操作,无需CPU介入数据拷贝。

2025-05-08 00:17:02 1039

原创 【bazel】bazel简介及简单使用

bazel是一个开源的构建工具,它基于声明式构建语言和精确的依赖管理,一般大型项目的构建会使用bazel。:需要在WORKSPACE文件中声明,并在BUILD文件中使用外部依赖。首先需要划分项目结构,确定每个BUILD文件的位置。语法引用项目内目标;

2025-05-05 20:27:30 1122

原创 【C语言编译】编译原理和详细过程

重定位是链接器的。

2025-05-05 19:14:07 1473

原创 【perf】perf工具的使用&生成火焰图

perf是Linux系统中的一个性能分析工具,它基于事件采样原理,以性能事件为基础,支持针对处理器相关性能指标与操作系统相关性能指标的性能剖析,常用于性能瓶颈的查找和热点代码的定位。:对被检测对象进行采样,最简单的是根据tick中断进行采样,即在tick中断内触发采样点,在采样点中判断程序当时的上下文。perf diff用于比较两个或多个perf.data文件的性能分析结果,帮助开发者快速识别优化前后的性能差异。perf stat 可以查看程序的运行情况,执行该命令时收集性能统计信息.

2025-04-20 23:47:50 1848

原创 【Vim】vim的简单使用方法

由于有缓存的存在,vim会主动判断当前文件是否有问题,如果有问题则会提示用户。的文件,如果因一些原因导致编辑的内容未保存,则这个文件就可发挥恢复功能。在使用vim编辑时,vim会在被编辑文件所在目录下,建立一个名为。可以使用vim后接多个文件名,同时打开多个文件。可视区块,就是以区块为单位进行操作。在vim命令行环境下,使用。

2025-04-20 13:30:13 571

原创 【GDB】gdb的原理和使用

coredump,核心转储文件,程序运行过程中发生异常退出时,操作系统把程序当前的内存状态存储在core文件中,称为coredump。gdb符号表是gdb在调试过程中使用的一种数据结构,包含了程序中函数、变量等信息,用于在gdb调试过程中进行符号解析和地址定位。函数符号表:包含程序中定义的函数名称、参数、返回值等信息;变量符号表:包含程序中定义的变量名称、类型、作用域等信息;类型符号表:包含程序中定义的数据类型,例如结构体、枚举、类型别名等;地址映射表:将程序中的虚拟地址映射到物理地址。

2025-04-20 04:01:55 1421

原创 【GCC】gcc编译学习

对于方法1,当有文件修改时,编译时需要将所有的文件重新编译;方法2仅需重新编译修改的文件,未修改的文件不用重新编译。step4 : 链接,链接目标代码,生成可执行程序(链接器ld)方法2:分别编译各个源文件,然后对编译后得到的目标文件进行链接。step2 : 汇编,将预处理后的文件转换为汇编语言生成。step3 : 编译,生成目标文件。step1 : 预处理,生成。方法1:多个文件一起编译。文件(预处理器cpp)文件(编译器egcs)

2025-04-19 19:03:27 244

原创 【Linux】软件管理机制和软件安装

RPM:RedHat Package Manager,rpm是一种以数据库记录的方式,将所需的软件安装到Linux系统中的一套软件管理机制。RPM要求要将安装的软件先编译过,并打包为RPM机制的文件,并通过打包好的软件里默认的数据库,记录该软件要安装的时候必须具备的依赖属性软件。以CentOs为例,CentOS使用的数字签名系统为GnuPG(GPG),GPG通过哈希运算,算出独一无二的数字签名或专属密钥。,即若当有文件修改、或误删了某个文件,就可使用验证的功能来验证下原来的文件。路径下,文件的后缀为。

2025-04-19 17:49:02 843

原创 【Git】submodule的使用

git 的 submodule 功能,提供了单独管理子模块并建立当前项目与子模块之间的依赖关系的功能。在本地修改了子仓的内容,并希望将修改推到远端子仓,但此时我自己在主仓下,如果想要提交子仓的修改,则需进入子模块路径下,按照正常的提交流程提交并push即可,此时就能将修改推到远端子仓。提交、push完后,主仓的状态就是场景2,即主模块下子模块路径下的内容发生了版本变化。文件中的信息设置子模块的url、路径等,但不会下载子模块的内容,仅做初始化。然后进入子模块路径下就可看见子模块的文件了。

2025-04-17 01:59:54 1826

原创 【Git】git的简单使用

reset到commit1,reset的内容被放入本地仓(commit1的内容覆盖本地仓),而暂存区中依然是commit3的内容。hard:reset到commit1,reset的内容被放入工作区(即commit1的内容不仅覆盖了本地仓和暂存区,还覆盖了工作区的内容)main.c的内容直接被commit1的修改覆盖。reset到commit1,reset的内容被放入暂存区(commit1的内容覆盖本地仓和暂存区),而工作区中依然是commit3的内容。提交一次,表示引入了某个子模块。

2025-04-15 00:49:24 1195

原创 【Linux】what is pam?PAM模块学习笔记

PAM: Pluggable Authentication Modules, 插入式验证模块。可以将PAM理解为一套应用程序编程接口,PAM提供一系列的验证机制,用户将验证阶段的需求告知pam,pam给用户返回验证的结果。PAM以一个独立的API存在,任何程序都可以向PAM发送验证要求的通知,PAM经过一系列的验证后将验证结果返回给程序。

2025-04-13 22:57:22 847 1

原创 【Linux】【磁盘管理】学习笔记

磁盘和磁盘分区27.3 磁盘的分区、格式化、校验与挂载14.3逻辑卷管理器LVM磁盘配额 14.1。

2024-12-18 23:17:08 1263

原创 【Docker】Docker容器学习笔记

Linux容器是与系统其他部分隔离开的一个或一组进程,运行这些进程所需的文件都由另一个特定镜像提供,这意味着从开发、测试、再到生产的整个过程中,Linux容器都是可移植且一致的,相较于依赖重复传统测试环境的开发渠道,使用容器会快得多。相较于虚拟机VM,Linux容器在运行时占用的资源更少,使用的是标准接口(启动、停机、环境变量等),并会与应用隔离开,当作为大型应用(包含多个容器)的一部分时更加易于管理,而且这些多容器应用可以跨多个云环境进行编排。Linux容器有很好的可移植性,但前提是它们。

2024-12-18 01:05:51 1203

原创 【KMP算法】学习总结

因为不匹配的‘f’之前的子串——‘aabaa’的最长相同前后缀长度为2,即‘b’的下标。‘f’失配,但是‘aabaa’是和主串相匹配的,也就是说模式串中的“aa”(下标为3,4)与主串中的“aa”(下标为3,4)是相匹配的,而且子串“aabaa”中,后缀“aa”有最长相同的前缀“aa”(下标为0,1),也就是说这个前缀“aa”(下标0,1)和主串中的“aa”(下标为3,4)也是相匹配的,所以无需重复比较,直接将指针回退到模式串的‘b’位置继续比较即可。

2023-11-23 14:09:58 418

原创 【C++优先队列使用】问题总结

最后做个小实验,自定义比较逻辑,验证结果的正确性。int x,y;}A;//定义sort的比较逻辑if(a.x!//定义priority_queue的比较逻辑if(a.x!i++)while(!pq.pop();return 0;1 91 82 93 94 64 63 92 91 81 9其实关于sort和优先队列的自定义比较逻辑都是if(a.x!

2023-11-10 21:49:37 926

原创 【TopK问题】基于堆的方法&基于分治策略的方法

它利用数组中的一个元素作为pivot,将下标从left到right的元素分为两部分,并以pivot为枢轴将比pivot小的元素放在左边,比pivot大的元素放在右边,通过不断划分数组,最终获得整体的排序。在TopK问题中也利用了这种不断划分的分治策略,但是在快排中,每次要处理左右两部分,在TopK问题中对这一步骤做了简化,即每次只处理一边。因为要找的是最大/最小的k个元素,因此可以通过比较。问题要求得到最大的k个元素,就可以构建含有k个元素的小根堆(相应地,若是求最小的k个元素,就构建大根堆)。

2023-11-07 00:15:08 526

原创 【二叉树遍历总结】C++实现

1. 总结了二叉树的3种遍历方式(先序、中序、后序)的不同实现 - 递归方法实现 - 迭代方法实现2. 用不同的数据结构定义二叉树 - 结构体定义树结点 - 用数组定义二叉树3. 文章内容为个人的学习总结,如有错误,欢迎指正

2023-11-03 21:50:20 348

原创 【10种排序算法总结】C++实现

之后减小d的值,重复执行分组和排序操作,直至d大小为1,此时得到整体有序的序列。算法思想:桶排序是一种非基于比较的排序算法,通过构建多个映射数据的桶,将数据映射到桶内,对桶内数据进行排序,以空间换时间来实现排序的目的,相当于计数排序的升级。算法描述:依次划分序列直至所有子序列长度为1,依次归并前后相邻的两个子序列,使归并后的序列有序,直至所有的子序列归并完毕,得到整体有序的序列。算法描述:第i趟排序,序列L[0]~L[i-1]为有序子序列,将L[i]插入这个有序子序列中,经过n趟排序得到整体有序的序列。

2023-10-31 11:45:21 627 1

原创 【LeetCode刷题记录】数组专题

在暴力解法的最内层循环中,我们是固定指针i,j,移动指针k来寻找结果,能不能每次只固定一个指针,然后移动另外两个指针,这样就能减少一层循环。可以采用双指针法,一个指针从前向后移动,另一个指针从后向前移动,并记录移动过程中的最大水量,这样就可减少一层循环,降低时间复杂度。通过上面的的“使用额外空间”的方法,可以看到,最后有用的是最中间的一个值(或最中间的两个值),那么可以在遍历的过程中只保存中间的值,最后只利用最中间的值。此时计算结果就是7.5。首先想到的是暴力解法,嵌套循环寻找最大值,但是暴力解法超时了。

2023-04-27 18:48:17 938

原创 【DeepLizard】Pytorch神经网络编程学习笔记(第二部分)

视频地址(B站):适用于初学者的PyTorch神经网络编程教学课程官方博客地址:DEEPLIZARD个人笔记第一部分:DeepLizard:Pytorch神经网络编程教学(第一部分)说明:对应视频:P14∼P16P_{14}\sim P_{16}P14​∼P16​略。torchvision包,它可以使我们访问以下资源:Datasets;Models;Transforns;Utils如要使用torchvision获取FashionMNIST数据集,可以通过以下代码实现:参数说明roo

2023-04-04 00:16:11 936

原创 【DeepLizard】Pytorch神经网络编程学习笔记(第一部分)

1. 笔记为个人学习笔记,如有错误,欢迎指正!2. 本篇笔记整理的内容为课程的第一部分,对应视频为$P_1\sim P_{13}$3. DeepLizard课程为全英文授课,B站视频为中文字幕,且每个视频都有配套的博客与课后测试题。

2023-03-27 15:46:01 1527 1

原创 计算机网络——数据链路层(课程笔记)

当传输介质的带宽超过传输单个信号所需的带宽时,人们就通过在一条介质上同时携带多个传输信号的方法来提高传输系统的利用率,即多路复用,也是实现信道划分介质访问控制的途径多路复用技术将多个信号组合在一条物理信道上进行传输,使多个计算机或终端设备共享信道资源,提高了信道利用率信道划分的实质就是通过分时、分频、分码等方法将原来的一条广播信道,逻辑上分为几条用于两个结点之间通信的互不干扰的子信道,实际上就是把广播信道变为点对点信道。

2022-10-17 10:56:52 3729

原创 计算机网络:物理层 知识点汇总(简化版)

→编码→编码f采样​≥2f→调制→调制极限数据传输速率=2Wlog2​V(单位b/s)信道的极限传输速率=Wlog2​(1+S/N)(单位b/s)10log10​(S/N)

2022-10-16 21:29:29 416

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除