自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Linux下线程的互斥与同步详解

临界资源:多线程执行流共享的资源就叫做临界资源临界区:每个线程内部,访问临界资源的代码,就叫做临界区互斥:任何时刻,互斥保证有且只有一个执行流进入临界区,访问临界资源,通常对临界资源其保护作用原子性:不会被任何调度机制打断的操作,该操作只有两种状态,要么完成,要么未完成。

2024-06-08 18:23:09 1533 13

原创 Linux下多线程的相关概念

线程是进程中的一条执行流,它是被系统独立调度和分配的基本单位。在一个进程内的多个线程可以共享该进程所拥有的全部资源,并且这些线程可以并发执行。简而言之,线程是程序中一个单一的顺序执行流,允许在单个程序中同时运行多个线程以完成不同的工作,这种技术被称为多线程。举个例子,在一个工厂里面有很多的车间,每个车间里都有许多的工人,每个工人所做的工作也可能各不相同。因此这里的工人就可以想象成是线程,每个车间想象成是一个进程,而工厂想象成是一台计算机。

2024-05-29 15:51:49 1288 9

原创 【Linux】信号之信号的保存和处理详解

信号的时间线在上一篇《信号之信号的产生》中已将信号产生讲明白了,本篇就来讲讲信号的保存和处理吧。

2024-05-19 14:23:26 781 15

原创 【Linux】信号之信号的产生详解

所有信号的产生,最终都要有操作系统来进行执行,因为操作系统是进程的管理者信号不是立即被处理的,是在合适的时机,进程会执行处理信号不是被立即处理的,那么就需要被保存起来,信号会被保存在进程PCB中的信号位图上​。

2024-05-16 20:39:35 960 7

原创 【Linux】进程间通信之共享内存

一个进程在物理内存中申请一块空间,并且通过页表映射到自己的地址空间中的共享区不同的进程也将这块空间通过页表映射到各自的地址空间中的共享区,这就实现了不同的进程看到了同一块资源那么进程就可以找到自己的地址空间中的共享区访问共享内存,当一个进程往当一个进程往这块共享内存写入数据时,其它进程访问这块共享内存就可以读取到数据,从而实现了进程间的通信。

2024-05-10 18:05:30 1189 6

原创 【Linux】进程间通信方式之管道

要实现进程间通信本质是要让不同的进程看到同一块资源。命名管道其实是在磁盘上创建了一个管道文件,这个管道文件可以随意被命名,并且有对应的属性但是没有内容,当我们在一个进程中打开这个管道文件并且将数据写入这个文件中,另一个进程也就可以打开这个管道文件并且从这个文件中读取数据,不同的进程都能打开并使用这个管道文件,所以也就让不同的进程看到了同一块资源。并且在这读写过程中管道文件中的数据不会加载到磁盘中,所以管道文件的大小始终为0保持不变。

2024-05-09 21:12:58 1079 6

原创 一文带你真正搞懂C++异常处理机制

处理异常的关键字throw:当异常出现时,会通过throw关键字将异常抛出。catch:捕获并处理被throw抛出的异常,可以有多个catch进行捕获。try:try块中的代码标识将被激活的特定异常,和catch搭配使用。

2024-05-04 12:00:00 1004 12

原创 深入解析智能指针:从实践到原理

先看一下下面的代码分析上面的代码,我们会发现代码运行时可能会出现以下问题在上面代码中如果出现以上抛异常的情况则会导致资源得不到释放从而导致内存泄漏的问题,那么有什么好的办法可以解决吗?别说还真有一个好办法,那就是使用智能指针。

2024-05-01 12:16:31 74 9

原创 Linux下软硬链接和动静态库制作详解

软硬链接有什么本质区别:有没有独立的inode软链接有独立的inode,所以软链接是一个独立的文件硬链接没有独立的inode,所以硬链接不是一个独立的文件软链接就相当于你在windows下给一个应用创建了一个快捷方式。

2024-04-27 12:46:14 1104 7

原创 井字棋源码(网络线程池版)

井字棋网络线程池版——我不允许还有人没玩过

2024-04-24 17:16:41 200 3

原创 揭秘Linux文件系统

在上一篇中谈论的都是打开的文件,但是在我们的系统中不仅有打开的文件还有许多未打开的文件,那么这些未打开的文件又该如何呢。

2024-04-23 17:08:51 696 1

原创 读者必看!Linux文件描述符深度解析

知识点1当我们创建了一个空文件时,这个空文件是否会占空间呢?答案是:当然啦,因为文件 = 内容 + 属性,文件的属性也是数据当然会占空间啦因此我们对文件的操作无外乎是对文件的内容或者文件的属性做操作。知识点2文件在磁盘上存着,我们在C语言或者其它语言中通过编写代码并运行来访问文件,那么这本质是谁在访问文件呢?答:是进程通过C语言或者其它语言给我们提供的文件接口来访问的。知识点3。

2024-04-19 23:04:05 737 3

原创 【TCP】socket套接字——快速上手

TCP的主要特点:面向连接、可靠、全双工通信、字节流

2024-04-15 19:52:44 1118

原创 【STL】list的模拟实现

相较于vector,list就显得复杂许多,它的好处是每次插入或删除一个元素,就配置或释放一个元素空间。list的底层其实是一个双向链表的结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素,所以list是可以在常数范围内的任意位置进行插入和删除的序列式容器,并且可以前后迭代。但是list的最大的缺陷是不支持任意位置的随机访问。

2024-04-10 17:57:56 1201

原创 【LeetCode】排序数组——不一样的方式实现快排

我们可以将这个数组划分为三个区域,左边区域全是0也就是红色,中间区域全是1也就是白色,右边区域全是2也就是蓝色。因此我们可以用个变量i来遍历数组,变量left标记0(红色)区域的最右侧,变量right标记2(蓝色)区域的最左侧。和上面颜色分类的思想是一样的,将数组划分为三块区域,左边区域为小于key的,中间区域为等于key的,右边区域为大于key的。小优化:可以选择随机的方式来选择key值,至于为什么可以去看看算法导论这本书,里面给出了详细证明。原理和上面的排序数组一样,只是在最后要进行讨论一下k的大小。

2024-04-07 22:16:13 957 5

原创 【Linux】进程控制之进程程序替换

关于本文可以先去看看上一篇可以更好的理解这里的内容学完本片文章,你就可以自己设计一个mini版的shell解释器,还可以用你写自己的代码区执行其它语言的程序。

2024-04-05 20:46:05 750 4

原创 【Linux】进程控制详解

你想了解的都在这里,确定不来看看吗

2024-04-03 22:52:28 907 2

原创 【STL】vector的模拟实现

vector是表示可变大小数组的序列式容器,就像数组一样,vector也采用了连续的空间来存储元素。这也就意味着可以采用下标对元素进行访问。vector是动态空间,随着元素的插入,它的内部机制会自动扩充空间来存储新数据,而且扩充的空间比实际存储的空间会更大,这是出于一种位于绸缪的考虑。这种有效的动态增长方式与其它动态序列式容器相比,vector在访问元素时更加高效。

2024-03-31 17:57:34 958 1

原创 【STL】string的模拟实现

本文通过对STL中的string进行模拟实现来了解string的底层实现,我们模拟实现的目的并不是为了写出一个更好的string,而是为了学习这底层的基本实现,实际上库里面实现的细节比这复杂,还得是大佬。关于string的基本用法可以参考这个网站。

2024-03-27 17:19:39 809 2

原创 【UDP】socket套接字带你快速上手

UDP协议是一个面向数据报、无连接、不可靠的传输层协议。

2024-03-23 22:19:36 1027 2

原创 【Linux】进程地址空间详解

地址空间是一个进程可用于寻址内存的一套地址集合。每个进程都有一个自己的地址空间,并且这个地址空间是独立于其他进程的地址空间(除了在一些特殊情况下进程需要共享它们的地址空间外)。

2024-03-22 21:29:41 844

原创 C++继承和多态中常考到的笔试面试题

在C++面试中关于继承和多态常被问到的题目

2024-03-20 14:23:13 959

原创 C++多态详解——都是干货

被virtual修饰的类成员函数称为虚函数public:cout

2024-03-16 17:28:41 796 2

原创 深度解析C++继承

C++继承,干货很多,不容错过

2024-03-09 22:13:50 830

原创 Linux下的环境变量

环境变量一般是指在操作系统中用来指定操作系统运行环境的一些参数,例如:我们在编写C/C++代码时,在链接的时候,从来不知道我们要链接的动静态库在哪里,但是照样可以链接成功,生成可执行程序,原因就是有相关环境变量帮助编译器进行查找。

2024-03-06 20:34:26 1009

原创 Linux下进程相关概念详解

任何计算机系统都包含一个基本的程序集合,称为操作系统(OS)。

2024-03-02 18:17:54 941 1

原创 【C++版】排序算法详解

动图演示代码实现: 希尔排序代码实现: 选择排序动图演示代码实现: 代码上小优化,可以同时找最大和最小的数,使得排序更快 冒泡排序 动图演示代码实现: 堆排序 代码实现: 快速排序要实现快速排序可以有以下几种方法:代码实现: 挖坑法代码实现: 前后指针法代码实现: 非递归版本 递归的问题,在极端场景下如果深度太深,会出现栈溢出,所以我们要改成非递归版本我这里就用个栈来模拟递归过程,当然你用个队列来实现

2024-01-30 23:06:11 1323 3

原创 gdb调试工具详解

1、程序的发布方式有两种,debug模式和release模式2、gcc/g++形成的可执行程序默认是release模式3、要使用gdb调试,必须在源代码生成可执行程序的时候, 加上 -g 选项很明显可以看出debug模式下的文件比release模式下的文件要大对比release模式,很明显debug模式下多出来了许多调试信息。

2024-01-21 23:14:36 572 2

原创 gcc/g++工具详解

gcc工具详解

2024-01-12 13:38:16 1343 3

原创 C++的类和对象(一)

内容较长,但都是精华

2023-12-02 18:10:37 493 2

原创 【算法专题】滑动窗口—无重复字符的最长子串

结果的更新不一定是放在最后,这个要根据题目的要求进行相应的改变,而且判断条件是要循环一直判断,如果满足就出窗口,不满足条件循环才停止。每次移动指针的时候结果都在更新,所以结果不会出错。时间复杂度:虽然代码是两层循环,但是left指针和right指针都是不回退的,两者最多都往后移动n次。因此时间复杂度是O(N)。这个题最大的难度是怎么分析这个问题从而想到要用滑动窗口来解决。

2023-11-24 22:21:09 530 1

原创 【算法专题】双指针—三数之和

这里还有个小优化,当a大于0的话可以不用在往后找,因为后面都是大于0的数,再怎么找也不会满足条件的。找到一种结果后不要“停”(left++,right--),缩小区间,继续往后寻找。这题和上一篇文章的两数字和方法类似。代码就不写了,你们可以试着写一下。

2023-11-12 15:10:48 297

原创 【算法专题】双指针—和为s的两个数

只需在这个数组中找出两个数相加等于target即可。

2023-11-05 13:12:47 175

原创 【算法专题】双指针—有效三角形的个数

我们知道想要组成一个三角形那么其任意两边之和必定大于第三边,即但是如果我们知道这三条边的大小顺序,那么只需判断一次即可,假设c是最大的那条边,那么不等式②和③不用判断自然也就成立了。

2023-11-02 21:08:51 257

原创 【算法专题】双指针—盛最多水的容器

【算法专题】双指针—盛最多水的容器

2023-11-01 20:28:12 196

原创 【算法专题】双指针—快乐数

【算法专题】快乐数—双指针算法

2023-10-31 20:27:24 145

原创 vim工具的使用

vi和vim的区别简单点来说,它们都是多模式编辑器,不同的是vim是vi的升级版本,它不仅兼容vi的所有指令,而且还有一些新的特性在里面。大家打开的vim会发现你的vim和我的不一样,是因为我的vim做了相关的配置,你也可以去搜一下相关的配置教程,对你的vim进行配置。控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入插入模式,或者到底行模式。当你进入vim之后,此时是处于命令模式,你要切换到插入模式才能够进行输入。该模式是我们以后用的最频繁的编辑模式。命令模式->插入模式。

2023-10-14 11:24:49 736 3

原创 深入理解TCP的三次握手和四次挥手

TCP建立连接的过程叫作握手,握手需要在客户和服务器之间交换三个TCP报文现在A是客户端,B是服务器端,最初两端都处于状态,假设A主动打开连接,B被动打开连接。一开始B服务器端先创建(调用listen)后进入LISTEN状态,等待A客户端的连接请求。A的客户端也是首先创建传输控制块TCB,此时A客户端打算建立TCP连接(调用connect),向B服务器端发送了一个请求连接报文段(即),同时初始序号,而该报文不能携带任何数据,这时,A客户端进入状态。

2023-09-10 13:11:23 505 5

原创 C++入门必备基础知识(下篇)

C++入门必备基础知识(上篇)目录1、内联函数2、auto关键字 3、范围for4、指针空值nullptr用inline修饰的函数叫做内联函数,C++编译器在编译时会在调用内联函数的地方展开,没有函数压栈的开销,从而提升程序运行的效率。auto介绍 auto使用场景 auto不能推导的场景for循环后的括号由冒号“ :”分为两部分,第一部分是范围内用于迭代的变量,第二部分则表示被迭代的范围。注意:与普通循环类似,可以用continue来结束本次循环,也可以用break来跳出整个循环范围for的使用条件在良

2022-08-24 09:50:44 304 7

原创 C++入门必备基础知识(上篇)

干货内容,不容错过

2022-08-21 09:59:18 576 2

空空如也

空空如也

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

TA关注的人

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