【C语言16天强化训练】从基础入门到进阶:Day 7


🔥个人主页:艾莉丝努力练剑

❄专栏传送门:《C语言》、《数据结构与算法》、C语言刷题12天IO强训、LeetCode代码强化刷题、洛谷刷题、C/C++基础知识知识强化补充、C/C++干货分享&学习过程记录

🍉学习方向:C/C++方向学习者

⭐️人生格言:为天地立心,为生民立命,为往圣继绝学,为万世开太平

前言:距离我们学完C语言已经过去一段时间了,在学习了初阶的数据结构之后,博主还要更新的内容就是【C语言16天强化训练】,之前博主更新过一个【C语言刷题12天IO强训】的专栏,那个只是从入门到进阶的IO模式真题的训练。【C语言16天强化训练】既有IO型,也有接口型。和前面一样,今天依然是训练五道选择题和两道编程算法题,希望大家能够有所收获!



目录

正文

一、五道选择题

1.1  题目1

1.2  题目2

1.3  题目3

1.4  题目4

1.5  题目5

二、两道算法题

2.1  图片整理

2.1.1 题目理解

2.1.2 思路

2.2  寻找数组的中心下标

2.2.1  尝试暴力写代码

2.2.2  加深题目理解

2.2.3  优化思路

2.2.4  优化方案实现

结尾


正文

一、五道选择题

1.1  题目1

题干:以下对C语言函数的有关描述中,正确的有( )【多选】

A. 在C语言中,一个函数一般由两个部分组成,它们是函数首部和函数体

B. 函数的实参和形参可以是相同的名字

C. 在main()中定义的变量都可以在其它被调函数中直接使用

D. 在C程序中,函数调用不能出现在表达式语句中

解析:正确选项是AB

A. 正确。函数首部包括函数返回类型、函数名和参数列表,函数体包括一对花括号内的语句序列。

B. 正确。实参和形参的作用域不同,实参是调用函数时的实际值,形参是函数定义中的变量,它们可以同名,但代表不同的实体。

C. 错误。在main函数中定义的变量是局部变量,只能在main函数内部使用,其他函数不能直接访问。除非这些变量是全局变量或通过参数传递。

D. 错误。函数调用可以出现在表达式语句中,例如:int result = add(a,b); 或 printf("Hello"); 都是表达式语句中包含函数调用。

1.2  题目2

题干:在C语言中,以下正确的说法是( )

A. 实参和与其对应的形参各占用独立的存储单元

B. 实参和与其对应的形参共占用一个存储单元

C. 只有当实参和与其对应的形参同名时才共占用存储单元

D. 形参是虚拟的,不占用存储单元

解析:正确选项是A选项。

A. 正确。实参和形参各占用独立的存储单元。

B. 错误。它们不共享存储单元,而是各自独立。

C. 错误。是否同名不影响存储单元的占用,即使同名也是不同的存储单元(因为作用域不同);

D. 错误。形参是函数内的局部变量,会占用存储单元(通常在栈上)。

在C语言中,函数参数的传递是值传递(pass by value)。这意味着:

(1)当函数被调用时,实参的值会被复制到形参中;

(2)因此,实参和形参占用不同的存储单元(即独立的内存空间);

(3)对形参的修改不会影响实参(除非通过指针间接修改)。

1.3  题目3

题干:在上下文及头文件均正常的情况下,下列代码的输出是( )(注:print 已经声明过了)

int main()
{char str[] = "Geneius";print(str);return 0;
}
print(char *s)
{if(*s){print(++s);printf("%c", *s);}
}

A. suiene     B. neius     C. run-time error     D. suieneG

解析:正确选项是A选项。

代码理解:

1、main函数定义了一个字符串 str = "Geneius",然后调用 print(str); 。

2、printf 函数是一个递归函数——

(1)如果当前字符 *s 不是空字符(即字符串未结束),则递归调用 print(++s)(注意:这里先递增 s,然后传入递归)。

(2)递归返回后,打印当前字符 *s(注意:此时 s 已经递增过一次,所以指向的是下一个字符)。

执行过程:
原始字符串: "Geneius"(注意:字符串以空字符 '\0' 结尾)。

递归调用过程(每次调用 print(++s),所以指针不断后移):

第一次调用:s指向"Geneius" -> 递归调用 print(++s)(现在s指向"eneius");

第二次调用:s指向"eneius" -> 递归调用 print(++s)(现在s指向"neius");

第三次调用:s指向"neius" -> 递归调用 print(++s)(现在s指向"eius");

第四次调用:s指向"eius" -> 递归调用 print(++s)(现在s指向"ius");

第五次调用:s指向"ius" -> 递归调用 print(++s)(现在s指向"us");

第六次调用:s指向"us" -> 递归调用 print(++s)(现在s指向"s");

第七次调用:s指向"s" -> 递归调用 print(++s)(现在s指向空字符'\0');

第八次调用:s指向'\0',条件if(*s)为假,递归终止并返回。

调用完然后开始回溯(从最深层的递归返回):

第七次调用:s原本指向"s",但调用时是print(++s),所以递归返回后,s现在指向空字符(即'\0'之后?实际上已经越界了)。但注意:在递归调用中,s的值已经被改变(因为++s是前置递增,修改了s本身)。所以每次递归返回后,s指向的是原来字符串的下一个字符(甚至最后是空字符之后)。

具体回溯时打印的字符:

从最深层的递归(第八次调用)返回第七次调用:此时s指向空字符(即'\0')之后?但实际第七次调用时,传入的s是递增后的(指向空字符),然后递归返回后,s仍然指向空字符(但字符串已经结束)。所以打印的是空字符(不显示),不过这里的代码实际上是有问题的。

关键错误:
在递归调用中,使用了 print(++s),这修改了指针s的值。当递归返回时,s已经指向下一个字符(而不是原来的字符)。因此——

(1)第一次递归调用后,s指向"eneius"(即第二个字符);

(2)当递归返回时,打印的是当前s指向的字符(即第二个字符'e'),而不是第一个字符'G'。

类似地,整个回溯过程打印的是字符串从第二个字符开始逆序 (但最后一个是空字符之后,未定义) ,实际上,字符串"Geneius"的长度为7 (加上空字符共8个字节)。递归调用直到遇到空字符(第八次调用时,s指向空字符,递归停止) 。然后回溯——

第七次调用:s原本指向"s"(最后一个字符),但调用print(++s)后,s指向空字符。然后递归返回后,打印*s(即空字符,不显示)。

第六次调用:s原本指向"us"(即字符'u'),调用print(++s)后,s指向"s"。递归返回后,打印*s(即's')。

第五次调用:s原本指向"ius"(即字符'l'),调用print(++s)后,s指向"us"。递归返回后,打印*s(即'u')。

第四次调用:s原本指向"eius"(即字符'e'),调用print(++s)后,s指向"lus"。递归返回后,打印*s(即'l')。

第三次调用:s原本指向"neius"(即字符'n'),调用print(++s)后,s指向"eius"。递归返回后,打印*s(即'e')。

第二次调用:s原本指向"eneius"(即字符'e'),调用print(++s)后,s指向"neius"。递归返回后,打印*s(即'n')。

第一次调用:s原本指向"Geneius"(即字符'G'),调用print(++s)后,s指向"eneius"。递归返回后,打印*s(即'e')。

所以打印的字符序列是(从最深回溯):' '(空字符,不显示)、's'、'u'、'i'、'e'、'n'、'e'。

即最终输出为:"suien"(但缺少第一个字符'G',并且似乎多打了一个'e')。

实际上,输出应该是:"suiene"(但注意第一个字符'e'是第二次调用打印的,而第一次调用打印的是'e'(第二个字符))。

观察字符串"Genelus":
索引0: 'G'
索引1: 'e'
索引2: 'n'
索引3: 'e'
索引4: 'i'
索引5: 'u'
索引6: 's'
索引7: '\0'

回溯打印:

递归深度7(s指向索引7): 打印*s(即'\0',不显示);

递归深度6(s指向索引6): 打印*s(即's');

递归深度5(s指向索引5): 打印*s(即'u');

递归深度4(s指向索引4): 打印*s(即'i');

递归深度3(s指向索引3): 打印*s(即'e');

递归深度2(s指向索引2): 打印*s(即'n');

递归深度1(s指向索引1): 打印*s(即'e')。

所以输出是:suiene(即"suiene")。

注意:原字符串是"Geneius",逆序应为"suieneG",但这里由于递归偏移,打印的是从第二个字符开始逆序(即"eneius"的逆序)为"suiene",而没有第一个'G',所以输出是"suiene"。

选项D是"suieneG"(多了一个G),实际上,代码不会打印第一个字符'G',因为第一次调用就递增了指针;另外,最后递归到空字符时,尝试打印空字符(不显示),所以没有额外输出。

我们来看这四个选项——

选项A正确;

选项B "neius" 是正序"Geneius"的一部分(错误);

选项C "run-time error":可能因为最后打印空字符(但不会错误,只是不显示),或者指针越界(但通常不会立即错误);

选项D "suieneG" 包含第一个字符'G',但实际没有。

所以正确答案就是A. suiene

1.4  题目4

题干:对于函数 void f(int x); ,下面调用正确的是( )

A. int y=f(9);     B. f(9);     C. f(f(9));     D. x=f();

解析:正确选项是B选项

于函数 void f(int x); ,这是一个返回类型为 void 的函数,即它不返回任何值。因此:

A. 错误,因为 f(9) 没有返回值,不能赋值给 int y。

B. 正确,直接调用函数,不需要使用返回值。

C. 错误,因为 f(9) 没有返回值,不能作为 f 的参数。

D. 错误,因为 f 需要一个 int 类型的参数,这里没有提供参数;而且 f 没有返回值,不能赋值给 x。

1.5  题目5

题干:给定 fun 函数如下,那么 fun(10) 的输出结果是( )

int fun(int x)
{return (x==1) ? 1 : (x + fun(x-1));
}

A. 0     B. 10     C. 55     D. 3628800

解析:正确选项是C选项

这道题很简单,函数 fun(int x) 是一个递归函数,其逻辑如下:

1)如果 x == 1,返回 1;

2)否则,返回 x + fun(x-1)。

因此,fun(10) 的计算过程如下所示:

fun(10) = 10 + fun(9)
fun(9) = 9 + fun(8)
fun(8) = 8 + fun(7)
fun(7) = 7 + fun(6)
fun(6) = 6 + fun(5)
fun(5) = 5 + fun(4)
fun(4) = 4 + fun(3)
fun(3) = 3 + fun(2)
fun(2) = 2 + fun(1)
fun(1) = 1

我们代入计算之后得到——

fun(2) = 2 + 1 = 3
fun(3) = 3 + 3 = 6
fun(4) = 4 + 6 = 10
fun(5) = 5 + 10 = 15
fun(6) = 6 + 15 = 21
fun(7) = 7 + 21 = 28
fun(8) = 8 + 28 = 36
fun(9) = 9 + 36 = 45
fun(10) = 10 + 45 = 55

所以,fun(10) 的结果是 55,正确答案选择C选项

选择题答案如下:

1.1  AB

1.2  A

1.3  A

1.4  B

1.5  C

校对一下,大家都做对了吗?

二、两道算法题

2.1  图片整理

牛客网链接:HJ34 图片整理

题目描述:

2.1.1 题目理解

我们根据题目要求,需要对输入的字符串按照ASCII码值进行排序

这道题是接口型的,下面是C语言的模版(如果是IO型就可以不用管它们了)——

2.1.2 思路

(1)使用scanf读取输入字符串;

(2)使用qsort函数进行排序,需要提供一个;

(3)比较函数compare比较函数直接通过字符的ASCII码值相减来确定顺序;

(4)最后使用printf输出排序后的字符串。

代码演示:

//C语言
#include <stdio.h>
#include <stdlib.h>
#include <string.h>int compare(const void* a, const void* b)
{return (*(char*)a - *(char*)b);
}int main()
{char s[1001];scanf("%s", s);int len = strlen(s);qsort(s, len, sizeof(char), compare);printf("%s", s);return 0;
}

时间复杂度O(1)

空间复杂度O(1)

我们学习了C++之后也可以尝试用C++来实现一下,看看自己前段时间C++学得怎么样——

代码演示:

//C++复盘
#include <iostream>
#include"string"
#include"algorithm"
using namespace std;int main()
{string s;cin >> s;sort(s.begin(), s.end());cout << s << endl;return 0;
}

时间复杂度:O(logn),空间复杂度:O(1)

我们目前要写出来C++的写法是非常考验前面C++的学习情况好不好的,大家可以尝试去写一写,优先掌握C语言的写法,博主还没有介绍C++的算法题,之后会涉及的,敬请期待!

2.2  寻找数组的中心下标

链接:724. 寻找数组的中心下标

力扣题解链接:前缀和优化法解决【寻找数组的中心下标】问题

题目描述:

2.2.1  尝试暴力写代码

我们先尝试用传统暴力方法:(循环)直接解题——

大致思路:

// 时间复杂度 O(n²)
for (int i = 0; i < n; i++) 
{int leftSum = 0, rightSum = 0;// 计算左侧和:O(i)for (int j = 0; j < i; j++) {leftSum += nums[j];}// 计算右侧和:O(n-i-1)for (int j = i + 1; j < n; j++) {rightSum += nums[j];}if (leftSum == rightSum) return i;
}

有了第一种思路,博主展示一下用【暴力方法】解题的代码:

//C语言实现——迭代暴力方法
int pivotIndex(int* nums, int numsSize)
{for (int i = 0; i < numsSize; i++){int leftsum = 0, rightsum = 0;for (int j = 0; j < i; j++){leftsum += nums[j];}for (int j = i + 1; j < numsSize; j++){rightsum += nums[j];}if (leftsum == rightsum){return i;}}return -1;
}

时间复杂度O(n^2)

空间复杂度O(1)

我们不推荐这种方法,时间复杂度不好,还能再优化一下。

2.2.2  加深题目理解

我们可以用前缀和优化法处理诸如【寻找数组的中心下标】这类"寻找平衡点"问题; 这种方法避免了每次计算左右两侧和的重复计算,通过数学关系直接判断,效率很高。

2.2.3  优化思路

(1)计算总和:首先遍历整个数组,计算所有元素的总和;

(2)遍历寻找中心下标:再次遍历数组,维护一个左侧和的变量;

(3)检查条件:对于每个位置i,检查 左侧和 == 总和 - 左侧和 - 当前元素

等价于检查 2 * 左侧和 == 总和 - 当前元素;

(4)返回结果:如果找到满足条件的位置,立即返回;如果遍历完都没找到,返回-1。

这道题是接口型的,下面是C语言的模版(如果是IO型就可以不用管它们了)——

2.2.4  优化方案实现

代码演示:

int pivotIndex(int* nums, int numsSize) {int total = 0;// 计算数组所有元素的总和for (int i = 0; i < numsSize; i++){total += nums[i];}int leftSum = 0;for (int i = 0; i < numsSize; i++){// 右侧元素之和 = 总和 - 左侧元素之和 - 当前元素if (leftSum == total - leftSum - nums[i]){return i;}leftSum += nums[i];}return -1;
}

时间复杂度O(1)

空间复杂度O(1)

我们学习了C++之后也可以尝试用C++来实现一下,看看自己前段时间C++学得怎么样——

代码演示:

//C++实现
#include<vector>
using namespace std;class Solution {
public:int pivotIndex(vector<int>& nums) {int total = 0;// 计算数组所有元素的总和for (int num : nums){total += num;}int leftSum = 0;for (int i = 0; i < nums.size(); i++){// 右侧元素之和 = 总和 - 左侧元素之和 - 当前元素if (leftSum == total - leftSum - nums[i]){return i;}leftSum += nums[i];}return -1;}
};

时间复杂度:O(n),空间复杂度:O(1)

我们目前要写出来C++的写法是非常考验前面C++的学习情况好不好的,大家可以尝试去写一写,优先掌握C语言的写法,博主还没有介绍C++的算法题,之后会涉及的,敬请期待!


结尾

本文内容到这里就全部结束了,希望大家练习一下这几道题目,这些基础题最好完全掌握!

往期回顾:

【C语言16天强化训练】从基础入门到进阶:Day 6

【C语言16天强化训练】从基础入门到进阶:Day 5

【C语言16天强化训练】从基础入门到进阶:Day 4

【C语言16天强化训练】从基础入门到进阶:Day 3

【C语言16天强化训练】从基础入门到进阶:Day 2

【C语言16天强化训练】从基础入门到进阶:Day 1

结语:感谢大家的阅读,记得给博主“一键四连”,感谢友友们的支持和鼓励!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/919834.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/919834.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【AI基础:神经网络】16、神经网络的生理学根基:从人脑结构到AI架构,揭秘道法自然的智能密码

“道法自然,久藏玄冥”——人工神经网络(ANN)的崛起并非偶然,而是对自然界最精妙的智能系统——人脑——的深度模仿与抽象。从单个神经元的信号处理到大脑皮层的层级组织,从突触可塑性的学习机制到全脑并行计算的高效能效,生物大脑的“玄冥”智慧为AI提供了源源不断的灵感…

容器安全实践(一):概念篇 - 从“想当然”到“真相”

在容器化技术日益普及的今天&#xff0c;许多开发者和运维人员都将应用部署在 Docker 或 Kubernetes 中。然而&#xff0c;一个普遍存在的误解是&#xff1a;“容器是完全隔离的&#xff0c;所以它是安全的。” 如果你也有同样的想法&#xff0c;那么你需要重新审视容器安全了。…

腾讯开源WeKnora:新一代文档理解与检索框架

引言&#xff1a;文档智能处理的新范式 在数字化时代&#xff0c;企业和个人每天都面临着海量文档的处理需求&#xff0c;从产品手册到学术论文&#xff0c;从合同条款到医疗报告&#xff0c;非结构化文档的高效处理一直是技术痛点。2025年8月&#xff0c;腾讯正式开源了基于大…

C++之list类的代码及其逻辑详解 (中)

接下来我会依照前面所说的一些接口以及list的结构来进行讲解。1. list_node的结构1.1 list_node结构体list由于其结构为双向循环链表&#xff0c;所以我们在这里要这么初始化_next&#xff1a;指向链表中下一个节点的指针_prev&#xff1a;指向链表中上一个节点的指针_val&…

新能源汽车热管理仿真:蒙特卡洛助力神经网络训练

研究背景在新能源汽车的热管理仿真研究中&#xff0c;神经网络训练技术常被应用于系统降阶建模。通过这一方法&#xff0c;可以构建出高效准确的代理模型&#xff0c;进而用于控制策略的优化、系统性能的预测与评估&#xff0c;以及实时仿真等任务&#xff0c;有效提升开发效率…

第十九讲:C++11第一部分

目录 1、C11简介 2、列表初始化 2.1、{}初始化 2.2、initializer_list 2.2.1、成员函数 2.2.2、应用 3、变量类型推导 3.1、auto 3.2、decltype 3.3、nullptr 4、范围for 5、智能指针 6、STL的一些变化 7、右值引用和移动语义 7.1、右值引用 7.2、右值与左值引…

书写本体论视域下的文字学理论重构

在符号学与哲学的交叉领域&#xff0c;文字学&#xff08;Grammatologie&#xff09;作为一门颠覆性学科始终处于理论风暴的中心。自德里达1967年发表《论文字学》以来&#xff0c;传统语言学中"语音中心主义"的霸权地位遭遇根本性动摇&#xff0c;文字不再被视为语言…

为什么要做架构设计?架构设计包含哪些内容?

大家好,我是IT孟德,You can call me Aman(阿瞒,阿弥陀佛的ē,Not阿门的ā),一个喜欢所有对象(热爱技术)的男人。我正在创作架构专栏,秉承ITer开源精神分享给志同道合(爱江山爱技术更爱美人)的朋友。专栏更新不求速度但求质量(曹大诗人传世作品必属精品,请脑补一下《…

Vue2封装Axios

一、介绍Axios 是一个基于 promise 的 HTTP 库&#xff0c;简单的讲就是可以发送get、post等请求。二、安装npm install axios --save二、axios不同请求方式axios(config)这是 Axios 的核心方法&#xff0c;用于发送自定义配置的 HTTP 请求。通过传入一个包含请求配置的对象&am…

DataAnalytics之Tool:Metabase的简介、安装和使用方法、案例应用之详细攻略

DataAnalytics之Tool&#xff1a;Metabase的简介、安装和使用方法、案例应用之详细攻略 目录 Metabase的简介 1、特点 Metabase的安装和使用方法 1、安装 快速设置&#xff1a;开发环境 前端快速设置 后端快速设置 2、使用方法 Metabase的案例应用 Metabase的简介 Met…

frp v0.64.0 更新:开源内网穿透工具,最简洁教程

frp是一款跨平台的内网穿透工具&#xff0c;支持 Windows、macOS 与 Linux&#xff0c;它需要你有一台拥有固定公网 IP 的电脑&#xff0c;VPS 最好&#xff0c;然后就能愉快的进行内网穿透了。还支持 https&#xff0c;甚至可以用它进行小程序开发。Appinn v0.64.0 新增token…

【数据结构】B+ 树——高度近似于菌丝网络——详细解说与其 C 代码实现

文章目录B 树的定义B 树组织数据的方法往 B 树中插入键值对数据从 B 树中删除键值对把 B 树看作是 “真菌网络”——我理解并记忆 B 树的方法B 树的 C 代码实现初始化节点、B 树B 树节点内的二分查找B 树的数据插入操作B 树的删除数据操作范围查询与全局遍历销毁 B 树测试代码&…

01、数据结构与算法--顺序表

正式进入数据结构的学习&#xff0c;先从预备知识学起&#xff0c;戒焦戒躁戒焦戒躁...一、泛型的引入1、为什么需要泛型&#xff1f;先来看一个题目&#xff1a;实现一个类&#xff0c;类中包含一个数组成员&#xff0c;使得数组中可以存放任何类型的数据&#xff0c;也可以根…

8.23打卡 DAY 50 预训练模型+CBAM模块

DAY 50: 预训练模型与 CBAM 模块的融合与微调 今天&#xff0c;我们将把之前学到的知识融会贯通&#xff0c;探讨如何将 CBAM 这样的注意力模块应用到强大的预训练模型&#xff08;如 ResNet&#xff09;中&#xff0c;并学习如何高效地对这些模型进行微调&#xff0c;以适应我…

北极圈边缘生态研究:从数据采集到分析的全流程解析

原文链接&#xff1a;https://onlinelibrary.wiley.com/doi/10.1111/1744-7917.70142?afR北极圈边缘生态研究&#xff1a;从数据采集到分析的全流程解析简介本教程基于一项在俄罗斯摩尔曼斯克州基洛夫斯克市开展的长期生态学研究&#xff0c;系统讲解如何对高纬度地区特定昆虫…

Excel处理控件Aspose.Cells教程:使用Python将 Excel 转换为 NumPy

使用 Python 处理 Excel 数据非常常见。这通常涉及将数据从 Excel 转换为可高效操作的形式。将 Excel 数据转换为可分析的格式可能非常棘手。在本篇教程中&#xff0c;您将学习借助强大Excel处理控件Aspose.Cells for Python&#xff0c;如何仅用几行代码将 Excel 转换为 NumPy…

python 字典有序性的实现和OrderedDict

文章目录 一、Python 3.7+ 字典有序性的验证 二、如何在字典头部插入键值对 方法 1:创建新字典(推荐) 方法 2:使用 `collections.OrderedDict`(适合频繁头部插入场景) 方法 3:转换为列表操作(不推荐,效率低) 底层核心结构:双数组哈希表 有序性的实现原理 与旧版本(…

JVM 调优全流程案例:从频繁 Full GC 到百万 QPS 的实战蜕变

&#x1f525; JVM 调优全流程案例&#xff1a;从频繁 Full GC 到百万 QPS 的实战蜕变 文章目录&#x1f525; JVM 调优全流程案例&#xff1a;从频繁 Full GC 到百万 QPS 的实战蜕变&#x1f9e9; 一、调优本质&#xff1a;性能瓶颈的破局之道&#x1f4a1; 为什么JVM调优如此…

基于TimeMixer现有脚本扩展的思路分析

文章目录1. 加入数据集到data_loader.py和data_factory.py2. 参照exp_classification.py写自定义分类任务脚本&#xff08;如exp_ADReSS.py&#xff09;3. 接一个MLP分类头4. 嵌入指标计算、绘图、保存训练历史的函数5. 开始训练总结**一、可行性分析****二、具体实现步骤****1…

技术演进中的开发沉思-75 Linux系列:中断和与windows中断的区分

作为一名从 2000 年走过来的老程序员&#xff0c;看着 IT 技术从桌面开发迭代到微服务时代&#xff0c;始终觉得好技术就像老故事 —— 得有骨架&#xff08;知识点&#xff09;&#xff0c;更得有血肉&#xff08;场景与感悟&#xff09;。我想正是我的经历也促成了我想写这个…