自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 操作系统:进程同步问题(一)

整型信号量是最简单的信号量形式,它被定义为一个整型变量,通常用S来表示。物理意义S >= 0:表示当前可用资源的数量。S < 0:其绝对值表示正在等待该资源的进程数量。但请注意:在经典的、最基础的整型信号量实现中,我们只关心S是否大于0,而不严格区分其值的具体含义。等待机制是通过“忙等待”实现的。

2025-10-19 15:33:46 816 1

原创 操作系统:进程的短程调度

一旦进程获得CPU,除非它。

2025-10-19 15:33:16 1212 1

原创 操作系统:进程间的通信(IPC机制)

共享内存是一种允许两个或多个进程共享同一块物理内存区域的IPC机制。一旦这块内存被映射到进程的地址空间,这些进程就可以直接通过读写该内存来交换数据,而无需内核的额外介入(如数据拷贝)。类比一下:操作系统是一栋楼的物业。共享内存就是物业在楼里开辟的一个公共储藏室。进程A和进程B都拿到了这个储藏室的钥匙。A可以把数据放进储藏室,B可以直接进去取。整个过程不需要物业(内核)在中间来回传递物品(数据)。

2025-09-28 19:39:31 920 1

原创 操作系统:进程调度,创建和终止

特征I/O密集型进程 (I/O-Bound)CPU密集型进程 (CPU-Bound)主要时间花费等待I/O操作完成(磁盘、网络、用户输入)执行CPU计算CPU使用率低高(甚至渴望100%占用)行为特点频繁放弃CPU,进入阻塞长期占用CPU,不主动放弃核心需求低响应延迟(快速被调度)高吞吐量(大块CPU时间)典型例子浏览器、文本编辑器、Web服务器视频编码、科学计算、编译器行为子进程先终止父进程先终止触发事件子调用exit()父调用exit()子进程状态僵尸 (Zombie)

2025-09-28 19:39:09 1067

原创 操作系统:进程的状态与转换、进程的组织方式

操作系统对进程的组织是一个多层次、多维度个体层面:每个进程由一个PCB完整描述。状态层面:PCB按状态组织成就绪队列、阻塞队列等,服务于调度和事件处理。关系层面:通过父子关系形成进程树,支持进程的创建、管理和资源继承。查找层面:使用哈希表、索引表等数据结构,实现快速定位和查询。这些组织方式协同工作,使得操作系统能够高效、稳定地管理并发执行的多个进程,实现多任务处理。

2025-09-27 10:57:43 1115

原创 操作系统:线程

线程是进程内部的一个独立执行流,是CPU调度和执行的基本单位。它属于进程:线程不能独立存在,必须寄生在一个进程里。它是执行流:线程有自己独立的程序计数器、寄存器和栈,用来跟踪它执行到哪了。它是调度单位:操作系统调度器真正看到和管理的,是一个个“就绪”的线程,而不是整个进程。比喻:一个进程就是一个QQ(或Chrome浏览器)程序,而线程就是在这个程序内同时运行的多个任务:一个线程负责接收你的消息,一个线程负责渲染聊天窗口,一个线程在后台传输文件,还有一个线程在扫描安全链接。特性单线程进程多线程进程。

2025-09-27 10:57:13 777

原创 C++:模板

我们可以思考一下,如果我们要写函数实现交换功能,那针对不同的数据类型,比如说int,float,插入等类型,我们是不是要写3份函数,而这些函数的内部实现逻辑其实是类似的:上面我们使用函数重载实现不同类型的交换函数,但是有一下几个不好的地方:1. 重载的函数仅仅是类型不同,代码复用率比较低,只要有新类型出现时,就需要用户自己增加对应的函数2. 代码的可维护性比较低,一个出错可能所有的重载均出错那能否告诉编译器一个模子,让编译器根据不同的类型利用该模子来生成代码呢?这就引入了我们这一小节的主题——模板。函

2025-09-22 08:52:58 1096 16

原创 C++中的内存管理

其实刚才我们可以体会到,new和delete操作内置类型与C语言中的malloc、calloc、free等除了用法上没啥太大区别,其实,C++中引入这两个关键字是为了操作自定义类型。int _month;int _day;int main()//如果像C语言那样使用malloc进行动态内存开辟//如果使用C++中的newreturn 0;以上两种写法有啥区别呢?

2025-09-22 08:52:42 694 7

原创 操作系统:进程的概念与组成

在进程模型中,计算机上所有可运行的软件,通常也包括操作系统,被组织成若干顺序进程,简称进程。一个进程就是一个正在执行程序的实例。简单地说,在一个操作系统中,一个正在运行的程序称为一个。作为初学者,我们经常容易混淆“进程”和“程序”的概念,接下来我们将用例子来弄清这两个名词。如图,小编打开了自己的任务管理器,此时QQ就是当前在运行的一个进程。如果我想要再登录多个QQ号,就可以多次点击桌面上QQ的图标,此时进程栏里就会出现多个关于QQ的进程:也就是说,当前系统有3个关于QQ的进程在运行。

2025-09-18 07:34:38 1180 8

原创 C++从零开始搞定类与对象:友元函数,内部类,匿名对象

friendfunc是全局函数,理论上我们不可以在类外使用类中的私有成员变量,但是我们将func声明成了类A的友元函数就可以在func函数中使用私有成员变量一个全局函数可以声明为多个类的友元函数,就像上面的代码,但是,上面的代码是有一些小问题的:我们可以看见出现了一堆报错。这里小编就直接给出报错的原因:由于友元函数func在A类中的声明中包含类B,那么编译器在进行编译时就会向上搜索B类的声明或定义,但是B的定义在A的后面,所以搜索不到就会报错。

2025-09-18 07:34:10 631

原创 从零开始搞定C++类和对象(下)

静态局部对象只在第一次执行到其定义时初始化构造顺序结论。

2025-09-15 23:35:19 904 12

原创 从零开始搞定C++类和对象:深入探索构造函数

,我们之前就讲过,我们在类中写的都是成员变量的声明,只有当创建对象进行实例化的时候吗、,内存才为成员变量分配内存空间,而对象在创建的时候编译器会自动调用构造函数,我们可以将构造函数中初始化列表的部分看成是成员变量进行定义初始化的地方(成员变量的定义在初始化列表部分就已经完成了,不管你是否在初始化列表部分对成员变量进行了显式初始化),而我们在学初始化列表之前,我们写构造函数都是在函数体的大括号内部进行的,在函数体大括号内部我们写的内容就是成员变量的赋值而非初始化了。

2025-09-15 12:53:44 1277 7

原创 从零开始搞定C++类和对象:取地址运算符重载

看一下运行结果:可以看到没有问题,我们再来看一下下面这一个代码:可以看到下面这一个代码发生了报错,我们现在来分析一下报错的原因:我们知道,当我们调用类里面的成员函数时,成员函数的第一个形参是this指针,实参就是调用函数的对象的地址,this指针的类型是Date *const this,this被const修饰,表示不能改变this指针的指向,但是还是可以通过this指针改变它所指向的对象中的成员的内容,比如我们可以通过this指针改变对象d1中的成员变量。

2025-09-14 22:55:48 804 7

原创 计算机网络概述

互联网是一种计算机网络。计算机网络(简称网络)由若干节点和连接这些节点的链路组成。网络中的节点可以是路由器、计算机等,如图a中就是一个简单的网络。有多个网络通过一些路由器相互连接,构成一个覆盖范围更大的计算机网络,这样的网络称为为“互连网”,互连网是网络的网络实际上,我们总是用一朵云来表示网络,如图,用云来表示网络的好处是可以先不考虑每一个网络中的细节,而是讨论与这个互联网相关的一些问题。网络把许多计算机连接在一起互连网则把许多网络通过路由器连接在一起。

2025-09-14 10:10:49 1625 21

原创 每日算法题推送

我们知道,体积是由宽度和高度共同决定的,当我们缩小宽度时,如果还想让体积变大,就一定要让高度变大,所以对于区间的两个端点,我们需要舍弃对应高度较小的那一个端点来缩小宽度。,而这个数小于9999999999,在经过题目所说的变化以后,一定会变成小于(9^2)*10=810的数x,所以这个数经过相应的又会进入新一轮的循环,所以我们一开始的假设(即非快乐数的变化不是循环的)是错误的,所以一个非快乐数,他经过相应的变化以后会进入一个循环的序列。反之就让right--欢迎小伙伴们在评论区提出问题和讨论!

2025-09-13 21:45:17 1129 12

原创 简单概述操作系统的发展

特性第二代:单道批处理系统第三代:多道批处理系统第三代:分时系统核心技术监控程序,自动化作业流多道程序设计多道程序设计+ 时间片轮转主要目标减少人工干预提高CPU利用率和系统吞吐量提供用户交互性和快速响应内存中的作业数1个多个多个作业切换时机作业完成后作业因I/O而阻塞时固定时间片用完或阻塞时用户体验无交互,等待时间长无交互,等待响应时间长有交互,即时响应核心指标自动化程度吞吐量响应时间多道程序设计技术是操作系统从第二代演进到第三代的关键催化剂。它最初是为了解决。

2025-09-13 19:23:18 795 8

原创 用简单的日期类巩固C++类与对象基本知识

1。

2025-09-12 22:48:22 1187 12

原创 每日算法题推送-->今日专题——双指针法

小编刚看到这道题的时候,想到的第一个方法就是建立一个与原数组等大的新的数组,然后遍历原数组,如果遇到元素值不为0的元素,就将这个元素放到新数组中,直到遍历完整个数组,那么当遍历完整个数组以后,新数组的剩余位置就应该都存放0,直接通过循环存放0即可,最后将新数组中的元素依次赋值给原数组即可。进行一下操作:如果pcur指向的元素不等于0,那就让dest先往前走一步,然后再让dest位置的元素赋值为pcur所指向的元素,如果pcur指向的元素等于0,那直接让pcur往前走一步即可。能不能一次就搞定啊?

2025-09-12 22:47:57 925 7

原创 C语言强化训练(16)

前言:截止现在,我们C语言的大部分基础内容就已经讲完了,但是,光掌握基础只是还是不够的,所以小编会将自己写过的一些题整理起来,不定期更新刷题博客,希望能扩展大家的思路。话不多说,现在就开始我们这一节的刷题博客吧!!

2025-09-07 02:30:00 757 6

原创 C语言强化训练(15)

前言:截止现在,我们C语言的大部分基础内容就已经讲完了,但是,光掌握基础只是还是不够的,所以小编会将自己写过的一些题整理起来,不定期更新刷题博客,希望能扩展大家的思路。话不多说,现在就开始我们这一节的刷题博客吧!!

2025-09-07 01:00:00 785 2

原创 C语言强化训练(14)

前言:截止现在,我们C语言的大部分基础内容就已经讲完了,但是,光掌握基础只是还是不够的,所以小编会将自己写过的一些题整理起来,不定期更新刷题博客,希望能扩展大家的思路。话不多说,现在就开始我们这一节的刷题博客吧!!

2025-09-06 02:45:00 1190 13

原创 C语言强化训练(13)

前言:截止现在,我们C语言的大部分基础内容就已经讲完了,但是,光掌握基础只是还是不够的,所以小编会将自己写过的一些题整理起来,不定期更新刷题博客,希望能扩展大家的思路。话不多说,现在就开始我们这一节的刷题博客吧!!

2025-09-06 01:00:00 880 6

原创 C语言强化训练(12)

前言:截止现在,我们C语言的大部分基础内容就已经讲完了,但是,光掌握基础只是还是不够的,所以小编会将自己写过的一些题整理起来,不定期更新刷题博客,希望能扩展大家的思路。话不多说,现在就开始我们这一节的刷题博客吧!!

2025-09-05 02:00:00 1630 17

原创 C语言强化训练(11)

前言:截止现在,我们C语言的大部分基础内容就已经讲完了,但是,光掌握基础只是还是不够的,所以小编会将自己写过的一些题整理起来,不定期更新刷题博客,希望能扩展大家的思路。话不多说,现在就开始我们这一节的刷题博客吧!!

2025-09-05 01:00:00 557 14

原创 C语言强化训练(10)

前言:截止现在,我们C语言的大部分基础内容就已经讲完了,但是,光掌握基础只是还是不够的,所以小编会将自己写过的一些题整理起来,不定期更新刷题博客,希望能扩展大家的思路。话不多说,现在就开始我们这一节的刷题博客吧!!

2025-09-04 02:00:00 912 10

原创 C语言强化训练(9)

前言:截止现在,我们C语言的大部分基础内容就已经讲完了,但是,光掌握基础只是还是不够的,所以小编会将自己写过的一些题整理起来,不定期更新刷题博客,希望能扩展大家的思路。话不多说,现在就开始我们这一节的刷题博客吧!!

2025-09-04 01:45:00 736 8

原创 C语言强化训练(8)

前言:截止现在,我们C语言的大部分基础内容就已经讲完了,但是,光掌握基础只是还是不够的,所以小编会将自己写过的一些题整理起来,不定期更新刷题博客,希望能扩展大家的思路。话不多说,现在就开始我们这一节的刷题博客吧!!

2025-09-03 02:45:00 823 13

原创 C语言强化训练(7)

前言:截止现在,我们C语言的大部分基础内容就已经讲完了,但是,光掌握基础只是还是不够的,所以小编会将自己写过的一些题整理起来,不定期更新刷题博客,希望能扩展大家的思路。话不多说,现在就开始我们这一节的刷题博客吧!!

2025-09-03 02:30:00 1299 8

原创 C语言强化训练(5)

截止现在,我们C语言的大部分基础内容就已经讲完了,但是,光掌握基础只是还是不够的,所以小编会将自己写过的一些题整理起来,不定期更新刷题博客,希望能扩展大家的思路。话不多说,现在就开始我们的这一节刷题博客吧!!

2025-09-02 05:00:00 752 13

原创 C语言强化训练(6)

前言:截止现在,我们C语言的大部分基础内容就已经讲完了,但是,光掌握基础只是还是不够的,所以小编会将自己写过的一些题整理起来,不定期更新刷题博客,希望能扩展大家的思路。话不多说,现在就开始我们这一节的刷题博客吧!!

2025-09-02 02:30:00 1671 4

原创 C语言强化训练(3)

有些表达式的结果是不确定的int i = 0;// 未定义行为。

2025-09-01 06:45:00 1798 12

原创 C语言强化训练(4)

截止现在,我们C语言的大部分基础内容就已经讲完了,但是,光掌握基础只是还是不够的,所以小编会将自己写过的一些题整理起来,不定期更新刷题博客,希望能扩展大家的思路。话不多说,现在就开始我们这一节的刷题博客吧!!

2025-09-01 05:00:00 692 5

原创 C语言强化训练(1)

前言:截止现在,我们C语言的大部分基础内容就已经讲完了,但是,光掌握基础只是还是不够的,所以小编会将自己写过的一些题整理起来,不定期更新刷题博客,希望能扩展大家的思路。话不多说,现在就开始我们的第一篇刷题博客吧!!

2025-08-31 08:49:34 949 13

原创 C语言强化训练(2)

截止现在,我们C语言的大部分基础内容就已经讲完了,但是,光掌握基础只是还是不够的,所以小编会将自己写过的一些题整理起来,不定期更新刷题博客,希望能扩展大家的思路。话不多说,现在就开始我们的第一篇刷题博客吧!!

2025-08-31 08:48:43 843 13

原创 数据结构之深入探索归并排序

现在为止,我们就已经讲完了初阶数据结构中排序算法的所有内容啦!!!完结撒花!!!但是我们还是需要总结一下排序的内容。数据结构之排序大全(1)-CSDN博客数据结构之排序大全(1)-CSDN博客数据结构之排序大全(3)-CSDN博客数据结构之排序大全(4)-CSDN博客数据结构之深入探索快速排序-CSDN博客。

2025-08-22 21:00:44 974 6

原创 数据结构之深入探索快速排序

那我们既然已经学习了这么多种方法,为什么还要继续探索快速排序呢?那是因为我们之前写的排序算法虽然在大部分情况下可以高效率地解决排序问题(效率较高的情况下,递归产生的递归树形状是完全二叉树的结构),时间复杂度是O(n*logN)但是在一些极端的情况下,算法的时间复杂度会退化成O(N^2)。这是咋回事呢?我们在上面的博客中已经举过一个例子:当数组已经处于排好序的状态时,形成的递归深度h=n,这句会导致时间复杂度退化成O(N^2)。

2025-08-22 20:48:29 1077 10

原创 数据结构之排序大全(4)

归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。

2025-08-21 21:05:43 1010 4

原创 数据结构之排序大全(3)

今天我们的主角是交换排序。

2025-08-21 21:05:17 805 4

原创 数据结构之排序大全(2)

每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。直接选择排序的思路很简单:我们先从数组中找到最小的元素,它应该放在数组中的第一个位置,然后再从剩下的元素中找到最小的元素,把它放到第二个位置,以此类推,最后整个数组就是从小到大进行排列的了。我们可以很快的得出直接选择排序的时间复杂度是O(N^2)。我们上面是每次找到最小值并将它往前面放,那有没有什么方法对这个代码进行优化呢?是有的。

2025-08-20 18:16:33 594 3

原创 数据结构之排序大全(1)

所谓排序,就是使一串记录,按照其中的某个或者某些关键字的大小,递增或递减地排序起来的操作。今天我们的主角是插入排序。

2025-08-20 16:16:52 767 4

空空如也

空空如也

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

TA关注的人

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