自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 迭代器的失效问题

同理再看这段代码,在所有偶数元素位置前插入一个该偶遇元素减去1的元素。

2024-08-24 21:01:27 176

原创 c++简易vector实现

观察构造函数的实现,我们发现。

2024-08-13 18:04:16 279

原创 模版函数与模版函数的特例化

我们知道,使用c++时必须对数据进行数据类型的定义,但是有时候这种类型的定义会显得不必要且繁琐,比如观察上述代码,我们要实现的是比较两个参数a和b的大小,而对于参数a参数b,由于不同的数据类型,因此我们需要重载两个数据类型的函数以满足不同的需要那么,有没有一种办法,可以让形参的类型也可以参数化呢?这就是模版函数的作用再次观看以上代码,我们首先定义了一个模版类型参数T,这个T代表了某个类型当我们在调用bigger函数的时候,我们可以显示指定T,当然也可以不指定,让编译器进行自动推导。

2024-08-12 16:16:41 333

原创 Google C++编程规范总结(Google C++ Style Guide)

参考一张图总结Google C++编程规范(Google C++ Style Guide)_c++ 代码风格-CSDN博客C++ 风格指南 - 内容目录 — Google 开源项目风格指南。

2024-08-08 14:09:58 203

原创 ubuntu安装docker

注,由于docker前端时间被国外禁了,因此国内的一些常见源可能无法起作用。上述配置中的镜像源可自行在网上进行搜索,如。安装必要的一些系统工具。

2024-08-07 20:10:18 323

转载 ubuntu虚拟机磁盘扩容

VMware中Ubuntu拓展磁盘容量的两种方式 &图形化方式&命令行磁盘分区方式(亲测有效&简单且详细)&linux磁盘分区_ubuntu磁盘扩容-CSDN博客VMware扩展磁盘空间_vmware扩展硬盘空间-CSDN博客

2024-08-06 22:14:10 32

转载 TCP数据粘包问题

我们进行已经例子进行问题说明。软件琛琛是属于应用层上的。而"李东","亚健康终结者"这两条消息在进入传输层时使用的是传输层上的 TCP 协议。消息在进入传输层(TCP)时会被切片为一个个数据包。这个数据包的长度是MSS。那么当李东在手机上键入"李东""亚健康终结者"的时候,在 TCP 中把消息分成 MSS 大小后,消息顺着网线顺利发出。网络稳得很,将消息分片传到了对端手机 B 上。经过 TCP 层消息重组。变成"李东亚健康终结者"这样的字节流(stream)。但由于聊天软件琛琛。

2024-08-04 12:06:17 29

原创 自动驾驶行业知识汇总

一文详解智能驾驶的功能与场景体系_腾讯新闻 (qq.com)两万字详解自动驾驶开发工具链的现状与趋势 (qq.com)九章智驾 - 2023年度文章大合集 (qq.com)九章 - 2022年度文章大合集 (qq.com)

2024-08-03 18:58:15 651

转载 CMake入门教程

第1行的cmake_minimum_required表示CMake要求的最低版本号,如果你的CMake用到了高版本特有的功能,需要指定版本号要求用户升级才可以使用。如果编译链接成功,会自动在当前目录生成名为a.out的可执行文件,运行时直接./a.out即可,也可以使用-o指定生成可执行文件的名字。那如果程序复杂点,在另一个单独的头文件func.h中声明func,同时在另一个源文件中定义它的实现,这种程序怎么编译?应该在编译时指定源文件中引用的头文件所在的目录,比如func.h在目录funch中,

2024-08-03 12:19:48 42

原创 基于c++11的简易线程池实现(支持任意类型和任意个数参数的任务)

【代码】基于c++11的简易线程池实现(支持任意类型和任意个数参数的任务)

2024-07-28 12:56:08 335

原创 C++中 cin、cin.get()、cin.getline()、getline() 的区别

cin.get() 和 cin.getline() 是输入流中的,使用之前需要包含头文件。cin 是输入输出流中的,使用之前需要包含头文件。getline() 是字符串流的,使用之前需要包含头文件。从标准输入读取单个或者是多个变量(以空格、制表符、换行符隔开),尤其是整型变量,或者从多行读取整型变量到数组,使用 cin。从标准输入读取单个字符,推荐使用输入流中的 cin.get()。从标准输入读取单行字符串、多行字符串的,推荐使用字符串流中的 getline()。

2024-07-28 11:52:52 742

原创 shell脚本实现长短项参数设置

【代码】shell脚本实现长短项参数设置。

2024-07-22 19:35:58 102

原创 c++11信号量简单实现

【代码】c++11信号量简单实现。

2024-07-21 22:43:58 126

原创 c++11实现将任意类型数据与Any类型之间的相互转换

这样就实现了将任意数据转换为Any类型。

2024-07-21 22:11:35 153

原创 CLIP包安装以及如何安装github上的python包

在此之前我还踩坑一个clip旧版本的包 我使用pip install clip-by-opoenai 安装,但是只支持torch版本为1.7.1~1.7.2版本!!!不要去安装呢!!!

2024-07-19 17:12:45 254

转载 如何在Linux服务器上安装Anaconda(超详细)

https://blog.csdn.net/wyf2017/article/details/118676765

2024-07-19 16:03:14 34

原创 《操作系统真象还原》第八章——实现断言函数

在上节开中断的实现文件里添加开关中断的函数功能:由于断言函数的目的是当错误发生时打印错误信息,因而此时不应该有其他中断信号来打扰,需要关闭中断。

2024-06-20 23:37:35 358

转载 git\repo

常用git和repo命令文章收集了最近使用的一些repo和git命令,下图是个人理解的git文件状态转换图。相关概念 名称 意义 repo 谷歌用Python脚本写的调用git的一个脚本,把git仓库统一管理起来的工具 Gerrit 基于web的代码review及权限控制系统,面向基于 Git 版本控制系统 snapshot ..._repo git。常用git和repo命令_repo git-CSDN博客。

2024-06-18 21:08:52 57

原创 《操作系统真象还原》第七章——改进中断

在上一节中,我们在kernel.S中定义了33个中断处理程序,并简单的对其进行了实现(打印字符串),但很显然,使用这种方式定义中断处理程序是很不方便的,一方面我们的中断处理程序都是用汇编语言写的,这增加了我们编写代码的难度,因为后期我们要对每个中断处理程序都要单独定义。另一方面,我们将中断处理程序的声明和定义放在了同一个文件中,不符合代码的高耦合低内聚原则。

2024-06-17 23:29:51 378

原创 《操作系统真象还原》第七章——启用中断

即。

2024-06-16 23:48:53 285

转载 PyCharm连接远程服务器详细教程

PyCharm连接远程服务器详细教程-CSDN博客

2024-06-12 16:20:19 86

原创 汇编入门快速版(非常详细)

给出下面的汇编程序段DATA ENDS变量的定义:X和Y称为变量名,表示程序员定义了两个变量X和Y。与高级语言不同,汇编语言中的变量实际上是后面第一个数据的地址,变量名代表了后面的若干个数据;字节数据的定义:DB表示定义的数据类型都是字节类型。DB可以用于定义整数(包括正数和负数,可以使用十进制、十六进制或二进制)以及字符;求值表达式:定义数据时可以出现简单的求值表达式的结果。如上方的DB 3+2相当于 DB 5;未知值的定义:用问号表示一个暂时还不确定的值,一般先用0进行这个单元的填充;多个字符的定义。

2024-06-08 16:07:52 869

原创 在x86机器上运行arm64架构的docker容器

注意:由于qemu本质上是使用x86指令对arm64指令集进行仿真(虚拟机),因此实际运行性能会比真机差很多 (可能耗时差几十甚至上百倍)1.下载qemu-aarch64-static.tar.gz。2.解压、移动到/usr/bin/下、修改权限。4.测试arm64容器是否可以启动。3.注册qemu解释器。

2024-06-08 15:56:06 256

原创 vim使用技巧

在编辑系统文件或者受权限保护的文件的时候,很容易会忘记在 vim 编辑之前添加 sudo,这样将会以只读模式打开文件,也就是编辑后不能保存。我们都知道,在正常模式(normal mode)下,可以使用 d 和 x 键删除文本,那么在插入模式下如何执行相同的操作(比如 dd)呢?我们都喜欢使用制表符(tab)或者空格,但是,如果我们正在编辑的文本其缩进使用的符号正好与我们的习惯相反,该怎么办?如果要编辑的文件使用制表符缩进,并且要将制表符转换为空格,则需要运行如下4个 vim 命令:​​​​​​​。

2024-06-01 10:03:23 731

原创 dockerfile关键字

将宿主机目录下的文件拷贝进镜像,且会自动处理URL和解压tar压缩包,如下所示,该命令表示从cmake网站上下载对应的sh文件,并将其放入容器的根目录下。注,假如有多个CMD命令,则后边的CMD命令会覆盖掉前者的命令,并且docker run之后的参数会替换掉最后一个CMD指令。:只有拷贝作用,将宿主机中的文件拷贝进镜像中,如下,表示将宿主机下的~/.ssh/config文件拷贝进config文件夹中。,即在这个基础镜像上构建新镜像,如下所示,表示在ubuntu20.04镜像的基础上构建新镜像。

2024-05-29 22:38:52 878

原创 阻塞、非阻塞、同步与异步IO的区别

如图所示,进程的过程主要分为两个步骤1.内核将数据准备好到内核缓冲区2.内核将数据拷贝到用户态在上述这两个过程里,

2024-05-28 21:43:27 258

原创 使用docker commit创建新镜像

我们知道,从docker-hub上拉取的镜像所创建的容器是最小版本的,比如ubuntu内部是没有vim编辑器的,我们需要自己手动安装,但是当我们安装后假如有人把我们的容器误删了,那么我们再次根据原始镜像创建的容器就没有了我们配的环境,在这种情况下,我们就需要在原来镜像的基础上创建属于自己的镜像一般情况下,我们有两种方法制作自己的镜像今天我们介绍如何使用docker commit命令制作镜像。

2024-05-25 21:40:44 509

原创 docker常用命令

强制删除容器,由于使用docker rm命令删除容器不能删除正在运行的容器,需要首先停止容器的运行才能删除,如果需要删除一个正在运行的容器可加上-f选项强制删除,但不推荐。容器导入就是指将打包归档为tar文件的备份容器进行“解包”,并重新导入为镜像。容器导出就是指将容器进行打包归档为tar文件以备份,防止有人误删容器。注:如果不写版本号,默认下载最新版本。

2024-05-25 18:34:54 1191

原创 《操作系统真象还原》第六章——完善内核之打印字符串

在print.S文件内添加。

2024-05-23 23:59:06 241

原创 《操作系统真象还原》第六章——完善内核之实现单字符打印

【代码】《操作系统真象还原》第六章——完善内核之实现单字符打印。

2024-05-23 22:01:30 460

原创 docker内安装并激活conda

dockerfile文件。进入docker后,执行。

2024-05-13 21:30:04 225

原创 《操作系统真象还原》第五章——加载内核

一个程序文件需要有程序头来说明程序的入口地址及其相关信息,如下所示程序是由段(如代码段、数据段)和节组成的,因此在程序头中要有一个段头表(程序头表)和节头表来描述程序中各种段及节的信息,故由于程序头(段头)和节头的数量不固定,因此。

2024-05-07 00:05:28 970 1

原创 《操作系统真象还原》第五章——开启分页机制

有了上述概念之后,我们知道,在32位地址空间下如果不采用二级页表机制,由于一个物理页的大小为4KB,因此页表的大小为2^(32-12)*4B=4MB,这意味着每加载一个进程就需要首先将一个4MB的页表加载进来,这显然违背了我们分页的初衷而如果采用二级页表机制,一个页表和一个页目录表的大小都为1k*4B=4KB,而我们每加载一个进程只需要加载一个页目录表和一个一级页表,因此只需要4KB+4KB=8KB即可。

2024-05-05 20:10:27 711

原创 《操作系统真象还原》第五章——获取内存容量

由于os需要管理硬件,因此os首先需要知道一下硬件信息,而物理内存容量就是一个重要的信息。本节的主要任务是在正式写内核之前,首先对物理内存进行检测,并获取最大的物理内存容量。整体思路是使用BIOS中断来获取每一个段的ards内存结构体,再遍历这些结构体获取以获取内存容量。

2024-05-05 09:34:32 703

原创 几种序列化和反序列化工具的对比

XML JSON protobuf 数据结构 结构一般比较复杂 结构简单 结构比较复杂 传输效率 慢 一般 快 数据存储方式 文本 文本 二进制 数据存储大小 大 一般 小 跨语言支持 非常多 多 一般 开发成本 繁琐 简单 一般 学习成本 一般 低 一般

2024-04-27 18:00:44 134

原创 select、poll、epoll三种IO多路复用的原理及其区别

参考。

2024-04-27 00:46:23 983

原创 protobuf的优缺点

相比于json的灵活格式,protobuf的消息类型需要在编译时静态定义,不支持动态添加和删除字段。,但如果是json这种直接以文本文件进行传输,跨平台之后就可能用不了,因此。:json可以任何语言都支持,但是protobuf需要专门的解析库。高效性:protobuf使用二进制进行数据编码,,如c++、java、python等,,可以在编译时捕获类型错误。

2024-04-25 19:39:11 400 1

原创 c++完美转发是如何实现的

关于引用,我们知道有如下分类如下所示但是,但是,,如下所示,t3左值引用了b,我们想通过修改t3的值来同时改变b的值,但是它报错了那么,这时候万能引用就出现了,先给出定义,万能引用就是下边这个样子,其他T是待被推导的类型,也就是说,万能引用是建立在模板上的概念T &&我们看下边这段代码我们直接查看代码的运行结果可以看到,在test()函数里,这就是万能引用 ,而如果我们想通过fun函数内形参parm的改变来同步外部实参的改变,也是可以实现的,如下所示另外,需要说明的是。

2024-04-25 19:33:47 1280

原创 为什么指针类型的形参可以直接修改实参

,并且也无法得到我们想要的结果,但是有时候我们确实在外部需要这个指针的返回值,怎么办呢?很明显,由于形参存储的地址的副本,因此形参如果地址发生了变换,那么对实参将不会有影响。那么问题来了,如果修改的是形参指针值(也就是形参指针变量里存储的地址)呢?为什么要强调这个副本,接下来会有实验进行说明。我们知道,为了避免程序隐藏问题的存在,一般情况下,我们。这是不安全的(原因涉及到函数堆栈的调用过程,具体可参考。鉴于指针的特性,我们第一个想到的就是。仔细观察以下代码的区别,其中。为什么要强调这一点?

2024-04-25 10:58:57 447

原创 cpu性能分析工具

功能:查看进程cpu的统计信息,其中-u选项表示显示用户级别的cpu使用情况,当然-s选项表示显示系统级别的cpu使用情况。:用户级别CPU使用率,表示进程在用户空间执行代码所占的CPU时间百分比。:系统级别CPU使用率,表示进程在内核空间执行代码所占的CPU时间百分比。:总CPU使用率,表示进程在所有CPU上的总体CPU使用情况百分比。:等待CPU的时间百分比,表示进程等待CPU时间所占的百分比。:虚拟CPU使用率,表示进程在虚拟CPU上运行的时间百分比。: CPU运行虚拟机的时间百分比。

2024-04-25 09:05:28 813

空空如也

空空如也

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

TA关注的人

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