自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

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

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

2025-06-01 23:50:23 102

原创 【存储基础】NUMA架构

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

2025-06-01 23:49:01 737

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

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

2025-05-26 04:22:53 461

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

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

2025-05-26 04:21:39 712

原创 【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 836

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

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

2025-05-19 01:38:10 500

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

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

2025-05-18 23:34:07 210

原创 【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 393

原创 【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 943

原创 【Linux命令】cp拷贝

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

2025-05-08 01:01:18 302

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

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

2025-05-08 00:17:02 1024

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

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

2025-05-05 20:27:30 1051

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

重定位是链接器的。

2025-05-05 19:14:07 1395

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

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

2025-04-20 23:47:50 1714

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

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

2025-04-20 13:30:13 510

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

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

2025-04-20 04:01:55 1357

原创 【GCC】gcc编译学习

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

2025-04-19 19:03:27 230

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

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

2025-04-19 17:49:02 835

原创 【Git】submodule的使用

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

2025-04-17 01:59:54 1650

原创 【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 1191

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

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

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

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

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

2024-12-18 23:17:08 1260

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

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

2024-12-18 01:05:51 1200

原创 【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 417

原创 【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 918

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

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

2023-11-07 00:15:08 525

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

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

2023-11-03 21:50:20 346

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

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

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

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

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

2023-04-27 18:48:17 937

原创 【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 843

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

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

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

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

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

2022-10-17 10:56:52 3711

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

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

2022-10-16 21:29:29 414

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

×××IP地址={,,}IP::={,}A→IP数据报。

2022-10-15 16:42:15 856

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

Socket=(IP地址:端口号)发送窗口实际大小=min接收窗口rwnd,拥塞窗口cwnd。

2022-10-14 23:42:48 624

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

C/S模型工作特征客户程序必须知道服务器程序的地址;服务器程序无需知道客户程序的地址系统启动后服务器一直运行,被动等待并接收来自客户端的请求使用C/S模型的应用WebFTP远程登录电子邮件特点网络中各个计算机地位不平等客户机之间不直接通信可扩展型不佳

2022-10-14 22:41:17 1349 2

原创 计算机操作系统:输入输出管理知识点汇总(简化版)

【代码】计算机操作系统:输入输出管理知识点汇总(简化版)

2022-10-11 23:07:10 475

原创 计算机操作系统:文件管理知识点汇总(简化版)

【代码】计算机操作系统:文件管理知识点汇总(简化版)

2022-10-11 23:02:46 445

原创 计算机操作系统——概述(课程笔记)

1. 操作系统的概念计算机系统自下而上可分为4部分:硬件、操作系统、应用程序、用户硬件:提供最基本的计算资源。如CPU、内存、I/O设备等应用程序:规定按何种方式使用这些资源来解决用户的计算问题。如字处理程序、编译器、网络浏览器等操作系统:控制和协调各用户应用程序对硬件的分配和使用操作系统是指控制和管理整个计算机系统的硬件与软件资源,合理地组织、调度计算机的工作与资源分配,进而为用户和其他软件提供方便接口与环境的程序集合操作系统是计算机系统中最基本的系统软件2. 操作系统的特征操作系统的基本

2022-08-07 17:22:20 414

原创 计算机组成原理——中央处理器-多处理器(课程笔记)

- 多核处理器是指将多个处理单元集成到单个CPU中,每个处理单元称为一个核core- 每个核可以有自己的Cache,也可以共享同一个Cache- 所有核一般都是对称的,**并且共享主存储器**,因此多核属于共享存储的对称多处理器- 在多核计算机中,如要充分发挥硬件的性能,必须采用多线程(或多进程)执行,使得每个核在同一时刻都有线程在执行- 与单核上的多线程不同,多核上的多个线程是在物理上并行执行的,是真正意义上的并行执行,在同一时刻有多个线程在并行执行。而单核上的多线程是一种多线程交错执行,而在同一

2022-07-31 21:12:07 862

空空如也

空空如也

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

TA关注的人

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