自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Git 标签管理

标签 tag ,可以简单的理解为是对某次 commit 的一个标识,相当于起了一个别名。例如,在项目发布某个版本的时候,针对最后一次 commit 起一个v1.0 这样的标签来标识里程碑的意义。这有什么用呢 相较于难以记住的 commit id , tag 很好的解决这个问题,因为 tag 一定要给一个让人容易记住,且有意义的名字。那如何在指定的commit上打标签呢 方法是找到历史提交的commit id,然后打上就可以了。在Git中打标签非常简单,首先,切换到需要打标签的分支上。

2024-03-09 20:32:59 648

原创 Git 远程操作

可以简单理解为,我们每个人的电脑上都是一个完整的版本库,这样你工作的时候,就不需要联网了,因为版本库就在你自己的电脑上。比方说你在自己电脑上改了文件A,你的同事想看到最新的文件A,这时,你只需要把你的修改推送到远程然后让同事进行拉取,就可以看到对方的修改了。国内外都为我们提供了远程的Git仓库托管平台,国内的式Gitee,国外的式GitHub,github 是国外的网站,速度比较慢,所以我们使用gitee来托管代码。这里由于我们使用的是 SSH 协议,是不用每⼀次推送都输入密码的,方便了我们的推送操作。

2024-03-08 21:48:44 1109

原创 Git 分支管理

那在哪干活呢 干活都在dev分支上,也就是说,dev分支是不稳定的,到某个时候,比如1.0版本发布时,再把dev分支合并到master上,在master分支发布1.0版本;我们新增了一个分支dev3,但是,该分支并没有进行过merge 操作就要被删除了,这时我们在master分支上对 dev3 分支删除,git会对dev3分支进行保护,这时删除就需要 git branch -D 来删除dev3分支。在Git中,每个 bug 都可以通过一个新的临时分支来修复,修复后,合并分支,然后将临时分支删除。

2024-03-08 21:48:19 1167

原创 Git 撤销修改

如果我们在我们的工作区写了很长时间代码,发现出现错误,想回退到之前的版本,这时改怎么做呢?

2024-03-05 21:16:57 368

原创 Git 版本回退

值得说的是,Git 的版本回退速度非常快,因为 Git 在内部有个指向当前分支(此处是master的 HEAD 指针, refs/heads/master 文件里保存当前 master 分支的最新 commit id。之前我们也提到过,Git 能够管理文件的历史版本,这也是版本控制器重要的能力。如果有一天你发现之前前的工作做的出现了很大的问题,需要在某个特定的历史版本重新开始,这个时候,就需要版本回退的功能了。如果我们版本回退又后悔了,又想要回到之前的版本去 只需要找到想恢复版本的 commit id。

2024-03-05 21:16:34 580

原创 Git 基本操作 && ⼯作区、暂存区、版本库

比如你新增了一行,这就是⼀个修改,删除了一行,也是⼀个修改,更改了某些字符,也是⼀个修改,删了⼀些又加了⼀些,也是⼀个修改,甚至创建⼀个新文件,也算⼀个修改。当执行git add 命令时,暂存区的⽬录树被更新,同时工作区修改(或新增)的文件内容被写入到对象库中的⼀个新的对象中 ,就位于 ".git/objects" 目录下。我们发现,当前目录下多了⼀个 .git 的隐藏文件, .git 目录是 Git 来跟踪管理仓库的,不要手动修改这个目录里面的文件,不然改乱了,就把 Git 仓库给破坏了。

2024-03-04 21:54:21 1242

原创 Git 初试 && 安装

还需要再明确⼀点,所有的版本控制系统,Git也不例外,其实只能跟踪文本文件的改动,比如TXT文文件,网页,所有的程序代码等等。于是每次都是复制粘贴副本,产出的⽂件就越来越多,⽂件多不是问题,问题是:随着版本数量的不断增多,你还记得这些版本各⾃都是修改了什么吗?在生活和学习中,我们会遇到这样的问题,比如上交论文的时候,老师让你改了一遍又一遍,结果改到最后一版的时候,说你这个还不如你第一版的或者前几版的,老师又说,把你前几版的拿给我看看。输入一下代码,查看安装的版本,如果没有安装,则不会显示。

2024-03-04 21:53:50 758

原创 Linux 进程(十) 进程替换

多种进程替换函数。

2024-01-05 22:02:32 1199

原创 Linux 进程(九) 进程等待

status是一个整形,有三十二个bit位,前16个bit位不用,后十六个bit位的前八位表示进程退出时的退出码,后七位表示进程退出时收到的信号。该代码,总共运行十三秒,前五秒父进程子进程一起运行,前五秒过后子进程退出。中间五秒父进程等待回收子进程,这时会看到子进程僵尸的状态,中间五秒后,父进程回收子进程。非阻塞调用表示:父进程基于非阻塞的轮询访问子进程,访问一次子进程发现没有结果,然后就返回,不必等到子进程有结果才返回。子进程退出,父进程如果不管不顾,就可能造成‘僵尸进程’的问题,进而造成内存泄漏,

2024-01-04 21:36:29 499

原创 Linux 进程(八) 进程的退出码

函数也是有返回值的。而_exit是系统调用接口,exit是c语言提供的库函数,库函数是不能终止进程的,只有操作系统提供的系统调用才能够终止进程,那么他们的关系就比较明确了。他们两个的功能是一模一样的,exit是c语言给我们提供的接口,而_exit是linux系统给我们提供的接口,那么二者有什么区别呢?进程出现退出是进程收到了异常的信号,每个信号都有不同的编号,每个编号都有自己的异常原因。查看最近一个进程的退出状态,查看到的是0 表示的就是成功。exit是终止进程 其中status:是进程退出时候的退出码。

2024-01-04 21:36:07 2481

原创 Linux 进程(七) 进程地址空间

下面我们来看一段代码。

2024-01-03 21:46:18 3209

原创 Linux 进程(六) 环境变量

答案是可以的,bash在创建子进程时,同时创建了两张表,一张命令行参数表,一场环境变量表,都传递给了其创建的子进程。如:我们在编写C/C++代码的时候,在链接的时候,从来不知道我们的所链接的动态静态库在哪里,但是照样可以链接成功,生成可执行程序,原因就是有相关环境变量帮助编译器进行查找。bash 帮我们维护一个数组数组里面存储着我们输入的命令行参数的地址,bash读取命令行参数以空格为间隔,将这串字符传给main函数,也就造成了上面我们看见的情况。这是一个常见的main函数,那么main函数可以带参吗?

2024-01-03 21:45:41 503

原创 Linux 进程(五) 调度与切换

在只考虑一个CPU的情况下,这些进程“看起来像”同时运行的,实则是轮番穿插地运行,由于时间片通常很短(在Linux上为5ms-800ms),用户不会感觉到。在runqueue上还存在着两个指针,查看英文释义,一个是活跃的,一个是到期的。cpu寄存器只有一套,但是里面存储的进程的数据却可以有很多套,虽然数据存储在一个共享的cpu设备里,但是某个进程的数据,都是被某个进程所私有的!普通的运行队列都是FIFO的机制,Linux下的调度算法是考虑到优先级,考虑到效率和考虑到饥饿的问题。这两个指针是怎么切换的呢?

2024-01-02 22:04:27 1076

原创 Linux 进程(四) 优先级

这样,当nice值为负值的时候,那么该程序将会优先级值将变小,即其优先级会变高,则其越快被执行所以,调整进程优先级,在Linux下,就是调整进程nice值。需要强调一点的是,进程的nice值不是进程的优先级,他们不是一个概念,但是进程nice值会影响到进程的优先级变化。PRI也还是比较好理解的,即进程的优先级,或者通俗点说就是程序被CPU执行的先后顺序,此值越小进程的优先级别越高。还可以把进程运行到指定的CPU上,这样一来,把不重要的进程安排到某个CPU,可以大大改善系统整体性能。

2024-01-02 22:04:09 404

原创 Linux 进程(三)

状态查看,僵尸进程,孤儿进程

2023-12-02 21:45:13 1230

原创 Linux 进程(二)

Linux 下使用 ls /proc 查看程序中的进程,其中这些蓝色的数字代表的就是进程。 其中cwd(current working directory)就是当前工作目录,那么为什么cwd 和 exe 是在同一级目录下呢因为 进程需要依赖可执行程序,可执行程序需要依赖源代码,所以不管是进程和可执行程序都默认生成在跟源代码同一级的目录下。 怎么更改当前工作目录呢? chdir。 查看chdir的使用手册。 用法如下,更改完成后,再去查看cwd 就会发现

2023-11-29 22:23:51 1260

原创 Linux 进程(一)

校长需要c语言成绩最好的,谁跑步最快的,谁挂科最多,都可以在这张链表中查,当有田径会校长通过查链表就知道派谁去,当考试完成后校长通过查链表就知道,该让谁滚蛋(滚蛋后校长就把该同学的节点删除),这样通过管理数据管理链表,就能实现对学生的管理。

2023-11-29 22:23:32 1042

原创 C++ string类(二)

【代码】C++ string类(二)

2023-11-28 21:30:01 461

原创 冯诺依曼体系结构

我们平时用一些输入设备时候,比如键盘,话筒等,输入的速度很慢,与cpu运算速度相差了很大的量级,此时cpu会早早把输入的数据处理完成而处于闲置的状态,造成了资源的大大浪费,那么cpu就不需要做的这么高效与精细了。决定整个计算机的效率从cpu变成了某些硬件。内存出现的意义是的计算机的效率都变高了,把硬件之间拷贝效率的问题,转化成为软件的问题(软件问题就是操作系统写的怎么样,能不能预加载和缓存... ...)。数据信号的流动就是数据在计算器的各个硬件之间的之间的拷贝,拷贝速度越快,计算机工作的速度也就越快。

2023-11-28 21:29:30 477

原创 Linux调试器-gdb使用

disable ‘断点号’ 注意是断点号,而不是行号。从查看断点信息哪里可以知道断点号。然后一直按 enter 就可以显示全部代码了,enter 可以记住上一个我们的指令。要使用gdb调试,必须在源代码生成二进制程序的时候, 加上 -g 选项。Linux gcc/g++出来的二进制程序,默认是release模式。开始调试:直接gdb,我们生成的可执行程序就可以开始调试了。程序的发布方式有两种,debug模式和release模式。开始调试后只按 l 的话会出现部分行号,如果想要从头开始的话,需要按 l0。

2023-11-27 22:15:51 1005

原创 Linux git

Git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。但在此之前的⼯作都需要这些不同版本的报告,于是每次都是复制粘贴副本,产出的⽂件就越来越多,⽂件多不是问题,问题是:随着版本数量的不断增多,你还记得这些版本各⾃都是修改了什么吗?所谓的版本控制器,就是能让你了解到⼀个⽂件的历史,以及它的发展过程的系统。通俗的讲就是⼀个可以记录⼯程的每⼀次改动和版本迭代的⼀个管理系统,同时也⽅便多⼈协同作业。⽂档如此,我们写的项目代码,也是存在这个问题的!“报告-究极进化版”?

2023-11-27 22:15:35 1298

原创 C++ string类(一)

一些其他用法:C++内置提供了swap函数,以及string 提供了reverse;注意:1. size()与length()方法底层实现原理完全相同,引入size()的原因是为了与其他容器的接口保持一致,一般情况下基本都是用size()。2. reserve(size_t res_arg=0):为string预留空间,不改变有效元素个数,当reserve的参数小于string的底层空间总大小时,reserver不会改变容量大小。

2023-11-17 21:45:26 532

原创 C++ STL简介

是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。2. STL的版本原始版本Alexander Stepanov、Meng Lee 在惠普实验室完成的原始版本,本着开源精神,他们声明允许任何人任意运用、拷贝、修改、传播、商业使用这些代码,无需付费。唯一的条件就是也需要向原始版本一样做开源使用。HP 版本--所有STL实现版本的始祖。P. J. 版本。

2023-11-16 22:25:10 172

原创 C++ 模板 (一)

如何实现一个通用的交换函数呢?使用函数重载虽然可以实现,但是有一下几个不好的地方: 1. 重载的函数仅仅是类型不同,代码复用率比较低,只要有新类型出现时,就需要用户自己增加对应的函数 2. 代码的可维护性比较低,一个出错可能所有的重载均出错 那能否告诉编译器一个模子,让编译器根据不同的类型利用该模子来生成对应的函数呢? 如果在C++中,也能够存在这样一个模具,通过给这个模具中填充不同材料(类型),来获得不同材料的铸件(即生成具体类型的代码),

2023-11-16 22:24:50 385 1

原创 Linux 小程序-进度条

不是的,因为c对io函数提供了一个缓冲区,这段代码执行的结果先被保存在缓冲区中,之后等程序完成后才刷新到屏幕上。上面写的进度条并没有根据实际的下载进度来显示进度,而是以固定模式来显示进度。是先执行了sleep(3);我们可以根据当前的实际情况来显示进度,比如根据文件的传输速率来显示进度。以前的键盘会有一个这样的按键 ,这个键就是回车与换行。注意:在linux下 “\r” 是回车然后在打印。回车:从当前行回退到当前行的起始位置。这样就能在显示行打印出倒计时的感觉了。换行:从当前行切换到下一行的该位置。

2023-11-15 22:03:41 465

原创 Linux项目自动化构建工具-make/Makefile

会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了,一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。

2023-11-15 22:03:26 251

原创 C/C++内存管理

new/delete 和 malloc/free最大区别是 new/delete对于【自定义类型】除了开空间还会调用构造函数和析构函数class Apublic:: _a(a)~A()private:int _a;delete p2;// 内置类型是几乎是一样的// Cfree(p3);delete p4;free(p5);return 0;在vs2013版本编译器下:new多个对象时,系统会自动在对象前面加上。

2023-11-14 22:21:37 580

原创 Linux 函数库

最后的答案是:系统把这些函数实现都被做到名为 libc.so.6 的库文件中去了,在没有特别指定时,gcc 会到系统默认的搜索路径“/usr/lib”下进行查找,也就是链接到 libc.so.6 库函数中去,这样就能实现函数“printf”了,而这也就是链接的作用。我们的C程序中,并没有定义“printf”的函数实现,且在预编译中包含的“stdio.h”中也只有该函数的声明,而没有定义函数的实现,那么,是在哪里实“printf”函数的呢?通过静态链接所生成的可执行文件的属性和动态库还是不同的。

2023-11-14 22:21:11 217

原创 c++类和对象(八) static成员 && 友元

定义时不添加static关键字,

2023-11-05 21:28:35 439

原创 C++类和对象(七)const成员 && 及其初始化列表

3. 尽量使用初始化列表初始化,因为不管你是否使用初始化列表,对于自定义类型成员变量,一定会先使用初始化列表初始化。4. 成员变量在类中声明次序就是其在初始化列表中的初始化顺序,与其在初始化列表中的先后次序无关。这两个运算符一般不需要重载,使用编译器生成的默认取地址的重载即可,只有特殊情况,才需要重载,在创建对象时,编译器通过调用构造函数,给对象中各个成员变量一个合适的初始值。1.能定义成const的成员函数都应该定义成const,这样const对象。2.要修改成员变量的成员函数,不能定义成const。

2023-11-03 22:27:16 283

原创 预处理详解(二)

许多C 的编译器提供了一种能力,允许在命令行中定义符号。用于启动编译过程。例如:当我们根据同一个源文件要编译出一个程序的不同版本的时候,这个特性有点用处。(假定某个程序中声明了一个某个长度的数组,如果机器内存有限,我们需要一个很小的数组,但是另外一个机器内存大些,我们需要一个数组能够大些。for(i = 0;//linux 环境演示。

2023-11-03 22:27:06 129

原创 预处理详解(一)

define 机制包括了一个规定,允许把参数替换到文本中,这种实现通常称为宏(macro)或定义宏(define macro)。下面是宏的声明方式:其中的 parament-list 是一个由逗号隔开的符号表,它们可能出现在stuff中。参数列表的左括号必须与name紧邻。如果两者之间有任何空白存在,参数列表就会被解释为stuff的一部分。这个宏接收一个参数 x .如果在上述声明之后,你把5 * 5警告:这个宏存在一个问题:int a = 5;

2023-11-01 19:27:11 88

原创 linux下的程序环境和预处理(gcc演示)

在ANSI C的任何一种实现中,存在两个不同的环境。 第1种是翻译环境,在这个环境中源代码被转换为可执行的机器指令。 第2种是执行环境,它用于实际执行代码。 组成一个程序的每个源文件通过编译过程分别转换成目标代码(object code)。 每个目标文件由链接器(linker)捆绑在一起,形成一个单一而完整的可执行程序。 链接器同时也会引入标准C函数库中任何被该程序所用到的函数,而且它可以搜索程序员个人的程序库,将其需要的函数也链接

2023-11-01 19:26:40 278

原创 Linux编辑器-vim使用

三种模式正常模式插入模式底行模式vim操作打开,关闭,查看,查询,插入,删除,替换,撤销,复制等等操作。

2023-10-30 21:29:33 2267

原创 Linux 权限管理(二)

linux前都会有一串这个字符,第二字符到第九字符分别表示拥有者,所属组,和other所对应的权限。为什么我们创建的普通文件:默认权限不是777 而是664。为什么我们创建的目录文件:默认权限不是777 而是775。说明:只有文件的拥有者和root才可以改变文件的权限。常用选项:-R 递归修改文件或目录的所属组。+:向权限范围增加权限代号所表示的权限。-:向权限范围取消权限代号所表示的权限。=:向权限范围赋予权限代号所表示的权限。R -> 递归修改目录文件的权限。功能:修改文件或目录的所属组。

2023-10-30 21:29:14 148

原创 C++ 类和对象(六)赋值运算符重载

也具有其返回值类型,函数名字以及参数列表,其返回值类型与参数列表与普通的函数类似。函数名字为:关键字注意:不能通过连接其他符号来创建新的操作符:比如operator@重载操作符必须有一个类类型参数用于内置类型的运算符,其含义不能改变,例如:内置的整型+,不 能改变其含义作为类成员函数重载时,其形参看起来比操作数数目少1,因为成员函数的第一个参数为隐藏的this: . 注意以上5个运算符不能重载。这个经常在笔试选择题中出现。

2023-10-22 21:55:41 304

原创 C++类和对象(五) 拷贝构造函数

因此当我们创建形参的时候就要调用拷贝构造,调用拷贝构造的时候就会创建形参 ...... ........因此形成无穷递归调用。3.

2023-10-22 21:23:36 489

原创 C++类和对象(四) (构造函数 && 析构函数)

6. 关于编译器生成的默认成员函数,很多童鞋会有疑惑:不实现构造函数的情况下,编译器会生成默认的构造函数。但是看起来默认构造函数又没什么用?d对象调用了编译器生成的默认构造函数,但是d对象_year/_month/_day,依旧是随机值。也就说在。

2023-10-20 19:38:07 693

原创 C++类和对象(二)(类对象的存储方式)

问题:类中既可以有成员变量,又可以有成员函数,那么一个类的对象中包含了什么?如何计算一个类的大小?缺陷:每个对象中成员变量是不同的,但是调用同一份函数,如果按照此种方式存储,当一。个类创建多个对象时,每个对象中都会保存一份代码,相同代码保存多次,浪费空间。所以说符合第三种情况,每个类中的。对象中包含类的各个成员。

2023-10-20 16:34:41 96

原创 C++类和对象(三) (this指针)

Date类中有 Init 与 Print 两个成员函数,函数体中没有关于不同对象的区分,那当d1调用 Init 函数时,该函数是如何知道应该设置d1对象,而不是设置d2对象呢?2. 只能在“成员函数”的内部使用。我们先来定义一个日期类 Date。当对象调用成员函数时,将对象地址作为实参传递给。即成员函数中,不能给this指针赋值。

2023-10-20 16:31:49 171

空空如也

空空如也

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

TA关注的人

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