操作系统概述
覆盖了操作系统概述、运行机制、中断、异常、操作系统的五大结构、虚拟机。
借鉴:王道、我的好朋友杨某、我的笔记。
一、操作系统概念
概念
1.操作系统体现了封装思想
由于底层硬件只接受二进制的指令不方便用户操作,所以操作系统把这些封装成简易的服务,
用户无需关心底层原理,只需要对操作系统发出命令即可。
2.操作系统是资源的管理者
2.1.处理机管理(CPU)
2.2.存储器管理
2.3.文件管理
2.4.设备管理
比如说以软件QQ为例子,我们在文件夹找到QQ,这些文件夹中的文件就是操作系统在管理,
体现了文件管理功能,在打开QQ程序时,操作系统需要把相关的数据都放入内存,
这体现了操作系统的存储器管理功能,在运行QQ程序时,处理机(CPU)何时运行程序,
也由操作系统来管理,这体现了处理机管理,在视频聊天时,
需要操作系统调用摄像头麦克风等等一些设备,这体现了操作系统的设备管理。
3.操作系统所处的位置
- 操作系统关系图解1:
- 操作系统图解2
==================================================================
————-GUI(图形界面)
直接给用户使用的——————| ————联机命令接口(说一句做一句)
————-命令接口———-|
————脱机命令接口(说一堆做一堆)
给软件/程序员使用的———— 程序接口————-即系统调用
==================================================================
我们通过图解1,2可以看见用户在某些情况可以直接使用操作系统(相接触的部分),比如通过GUI图形界面和命令接口(比如黑窗口命令行)或者程序员使用程序接口(也叫系统调用),应用程序通过系统调用(类似函数调用)也可以使用操作系统。
操作系统的层次:
操作系统知识点
特征:
1.并发性
并发:指的是两个或者多个事件在同一时间间隔内发生,
这些事情是在宏观上同时发生的,在微观上却是交替发生的。
并行:指两个或多个事件在同一时刻发生。
2.共享
共享指的是资源的共享,系统的资源可以供多个并发的进程共同使用,
共享的方式有两种:
1.互斥共享方式:
在一个时间段只允许一个进程访问,
qq和微信,同一时刻摄像头只能给一个进程使用。
2.同时共享方式:
在一个时间段允许多个进程“同时”对他们进行访问,
这个同时可能是微观上交替的,比如两个进程访问磁盘,会交替访问,但是在宏观上是同时的,
这个同时可能是微观上同时的,比如扬声器会同时播放游戏进程和音乐进程的声音。
注意:并发性和共享性互为存在条件,有并发性才有共享性,有共享性才有并发性。
3.虚拟
虚拟的实现主要有两种方式:
1.空分复用技术(如虚拟存储技术)
把空间划分成许多小空间,程序需要多少空间就划分多少空间,程序运行的空间相互独立。
单纯的空分复用技术只可以提高利用率,在逻辑上扩大内存,需要虚拟存储技术,
即对内存空间的分时复用,比如把一个程序所需内存较大,先运行一部分程序,另外一部分在外存,
运行完这部分再调入另外一部分到内存中去。
2.时分复用技术(如虚拟处理器技术)
把时间划分成许多小的时间片,cpu每次都执行这段时间片。
4.异步
多个程序并发执行,但是由于资源有限,进程的执行不是一贯到底的,
而是走走停停,以不可预知的速度向前推进。
如果失去了并发性,系统只能串行的运行各个程序,每个程序都会一贯到底,
只有系统拥有并发性,才可能导致异步性。
操作系统特征:
二、知识总览(操作系统的运行机制)
操作系统是如何运行的?--指令
应用程序and内核程序
特权指令 v.s. 非特权指令
内核态 v.s. 用户态
内核态、用户态 的切换
知识回顾与重要考点
中断是 “特权通行证”:只有内核态有权限处理中断,就像只有 CEO 能接见超级大客户。
切换代价:从用户态→内核态需要保存 / 恢复上下文,就像员工跑去 CEO 办公室要浪费时间,但为了处理紧急事务必须这么做。
安全隔离:用户程序不能直接操作内核资源,就像普通员工不能随便进 CEO 办公室,避免搞破坏。
三、中断与异常
中断作用:
在一些情况下,内核程序会主动让出cpu的权限,让应用程序使用cpu,
但是如果没有一些干预(中断),应用程序会一直使用cpu运行下去,
我们在前面写过操作系统有并发的特性,但是这样并发就不存在了,
所以中断就产生了,中断是让操作系统夺回cpu使用权的唯一途径。
中断的种类:
1.内中断:
内中断与当前的执行的指令有关系,中断信号来源于cpu的内部。
1.1.内中断案例:
当前试图执行特权指令,但是却在用户态。
执行当前的除法指令,但是除数却是零。
这些中断信号都与当前执行的指令有关。
2.外中断:
外中断的中断信号来源于cpu的外部,与当前的指令无关。
2.1.外中断案例:
时钟中断:由时钟部件发出来的中断信号,
时钟部件每隔一个时间片就会给cpu发送时钟中断信号,
用于处理程序的并发执行。
I/O中断:有输入输出设备发出来的中断信号,
当设备输入输出的任务完成是,I/O设备会向cpu发送中断信号。
中断的处理:
不同的中断信号需要不同的中断处理程序去处理,
中断信号根据中断向量表,找到相应的中断处理程序在内存中存放的位置。
中断向量表:
四、操作系统结构
作系统的包括内核功能和非内核功能,但是其主要的功能包括:与硬件关系紧密的模块,对数据结构操作不涉及硬件的模块,其中与硬件关系紧密的有时钟管理、中断处理、原语,对数据结构操作的有进程管理、存储器管理、设备管理等。
在众多操作系统设计结构有两种设计大内核与微内核:
将对数据结构有关操作和与硬件有关操作一并列入内核程序的叫做大内核,
将对数据结构有关操作列入非内核、硬件有关操作列入内核程序的叫做微内核,
当操作系统执行进程管理、存储器管理、设备管理等操作时,由于大内核中这些都属于内核程序,所以执行时切换两次状态,切换为内核态时执行完这三个操作,再切换为用户态,但是如果是微内核,那么执行进程管理时,此时在用户态,需要获取系统调用,切换状态,之后再回复用户态,再执行存储器管理再切换状态需要六次切换状态,比较影响系统性能。
操作系统结构设计的种类:
操作系统内核的分布:
大内核与小内核的区别:
大内核与微内核切换状态的比较:
大内核与微内核优缺点比较:
操作系统内核功能举例:
操作系统的内核设计有5种:大内核、微内核、分层结构、模块化、外核。
对于微内核来说,像一些非内核的功能请求另外一些非内核的功能,
在切换模式状态的同时,也需要进行消息传递来执行下去。
对于分层结构来说,优点是设计的层次分明,易于维护和测试,并且设计之后接口都确定了,易于拓展新的功能,但是,由于不能夸层调用,所以性能比较低。
对于模块化的结构来说,将操作系统划分为若干个有一定独立性的模块,优点是模块之间的逻辑清晰,易于维护,确定接口之后可以同时开发多个模块,并且支持动态增加新的模块,可拓展性强,并且不同模块之间可以直接相互调用,性能较高。但是由于模块之间可以相互调用,所以模块之间相互依赖,难以调试。
对于外核的结构来说,内核负责进程调度、进程通讯等功能,外核负责为用户进程分配未经抽象的硬件资源,优点是减少了虚拟硬件资源的映射层,提高了效率,缺点是:某些程序仍然需要通过虚拟的映射层,降低了系统的一致性,让系统变的更加复杂。
分层结构:
5大操作系统结构:
模块化结构:
宏内核、微内核设计结构:
5大设计结构:
五、虚拟机
传统计算机
虚拟机
两类虚拟机管理程序(VMM)的对比
支持虚拟机的CPU通常分更多指令等级
借鉴:
1、王道
2、【有道云笔记】第一章操作系统概述 -- 我的笔记
3、我的好朋友杨某,只不过我每他的链接
相关文章:
操作系统概述
覆盖了操作系统概述、运行机制、中断、异常、操作系统的五大结构、虚拟机。 借鉴:王道、我的好朋友杨某、我的笔记。 一、操作系统概念 概念 1.操作系统体现了封装思想 由于底层硬件只接受二进制的指令不方便用户操作,所以操作系统把这些封装成简易的…...
探索数据的力量:Elasticsearch中指定链表字段的统计查询记录
目录 一、基本的数据结构说明 二、基本的统计记录 (一)统计当前索引中sellingProducts的所有类型 (二)检索指定文档中sellingProducts的数据总量 (三)检索指定文档中sellingProducts指定类型的数量统计…...
【Datawhale组队学习202506】YOLO-Master task03 IOU总结
系列文章目录 task01 导学课程 task02 YOLO系列发展线 文章目录 系列文章目录前言1 功能分块1.1 骨干网络 Backbone1.2 颈部网络 Neck1.3 头部网络 Head1.3.1 边界框回归头1.3.2 分类头 2 关键概念3 典型算法3.1 NMS3.2 IoU 总结 前言 Datawhale是一个专注于AI与数据科学的开…...
C/C++数据结构之静态数组
概述 静态数组是C/C中一种基础的数据结构,它允许用户在编译时便确定数组的大小,并分配固定数量的连续存储空间来存放相同类型的元素。静态数组的主要特点是:其大小在声明时就必须指定,且在其生命周期内保持不变。这也意味着&#…...
pyqt f-string
文章目录 一、f-string的基本语法二、代码中的具体应用拼接效果 三、f-string的核心优势四、与其他字符串格式化方式的对比五、在Qt程序中的实际作用六、扩展用法:在f-string中添加格式说明 Python的 f-string(格式化字符串字面值) 特性&…...
夏普 AR-2348SV 打印机信息
基本信息:这是一款黑白 A3 激光多功能数码复合机,可实现打印、复印、扫描功能。性能参数 打印 / 复印速度:23 张 / 分钟。分辨率:600x600dpi,能确保文字和图像清晰。最大打印 / 复印尺寸:A3。纸张支持&…...
跨个体预训练与轻量化Transformer在手势识别中的应用:Bioformer
目录 一、从深度学习到边缘部署,手势识别的新突破 (一)可穿戴设备 边缘计算 个性化医疗新可能 (二)肌电信号(sEMG):手势识别的关键媒介 (三)挑战&#…...
探索常识性概念图谱:构建智能生活的知识桥梁
目录 一、知识图谱背景介绍 (一)基本背景 (二)与NLP的关系 (三)常识性概念图谱的引入对比 二、常识性概念图谱介绍 (一)常识性概念图谱关系图示例 (二)…...
人人都是音乐家?腾讯开源音乐生成大模型SongGeneration
目录 前言 一、SongGeneration 带来了什么? 1.1 文本控制与风格跟随:你的想法,AI 精准实现 1.2 多轨生成:从“成品”到“半成品”的巨大飞跃 1.3 开源:推倒“高墙”,共建生态 二、3B 参数如何媲美商业…...
一,python语法教程.内置API
一,字符串相关API string.strip([chars])方法:移除字符串开头和结尾的空白字符(如空格、制表符、换行符等),它不会修改原始字符串,而是返回一个新的处理后的字符串 chars(可选)&…...
python中学物理实验模拟:凸透镜成像和凹透镜成像
python中学物理实验模拟:凸透镜成像和凹透镜成像 凸透镜成像 凸透镜是指中间厚、边缘薄的透镜。它对光线有会聚作用,即光线通过凸透镜后会向主光轴方向偏折。 成像原理 基于光的折射,平行于主光轴的光线经凸透镜折射后会聚于焦点ÿ…...
【AGI】突破感知-决策边界:VLA-具身智能2.0
突破感知-决策边界:VLA-具身智能2.0 (一)技术架构核心(二)OpenVLA:开源先锋与性能标杆(三)应用场景:从实验室走向真实世界(四)挑战与未来方向&…...
2D曲线点云平滑去噪
2D曲线点云,含许多噪声,采用类似移动最小二乘的方法(MLS)分段拟合抛物线并投影至抛物线,进行点云平滑去噪。 更通俗的说法是让有一定宽度的曲线点云,变成一条细曲线上的点。 分两种情况进行讨论: 1&#…...
靶场(二十一)---小白心得靶场体会---DVR4
先看端口,看到了一个dvr的服务,老规矩只要有服务就先去看看 PORT STATE SERVICE VERSION 22/tcp open ssh Bitvise WinSSHD 8.48 (FlowSsh 8.48; protocol 2.0; non-commercial use) | ssh-hostkey: | 3072 21:25:f0:53:b4…...
Qt + C++ 入门2(界面的知识点)
补充前面没有说到的一点就是,qt的页面你可以用qt自带的也就是前面所说的自动生成.UI文件生成前端所谓的界面,然后往里面拖控件就可以了,这个UI界面非常的适合用于新手,以及某些软件少量的界面应用 。但是有一个难点就是后期这个UI…...
计算机网络第九章——数据链路层《流量控制和可靠传输》
一、回顾概念 前面上一章讲了数据链路层的《差错控制》,那么回顾一下差错控制和可靠传输的区别: 差错控制:发现一个帧里的【位错(比特错)】 检错(奇偶校验码、CRC循环冗余校验码):接…...
Zephyr 调试实用指南:日志系统、Shell CLI 与 GDB 全面解析
本文深入讲解 Zephyr 的调试利器,包括统一日志系统(logging subsystem)、内置命令行(Shell CLI)、与 GDB 调试集成方法,帮助开发者快速定位问题、分析运行时行为,实现高效开发与排障。 一、日志…...
【知识图谱提取】【阶段总结】【LLM4KGC】LLM4KGC项目提取知识图谱推理部分
文章目录 前言LLM4KGC的三个部分显卡使用效果前言 之前在学习基于大模型的知识图谱提取,就找到了LLM4KGC这个项目: 项目地址: https://github.com/ChristopheCruz/LLM4KGC/ 总体来说,这个项目没有什么比较高深的idea,年份也比较古老,但确实挺适合入手的。主要是绝对简…...
基于YOLO的智能车辆检测与记录系统
基于YOLO的智能车辆检测与记录系统 摘要 本报告总结了智能车辆检测系统的开发工作,主要包括车辆数据标注、YOLO模型训练及QT交互系统搭建三部分。通过使用专业标注工具完成车辆目标数据集的标注与预处理,基于YOLO模型构建车辆检测算法并优化训练流程&a…...
5.2 Qt Creator 使用FFmpeg库
一、目录结构 ├─3rdparty # 第三方依赖库 │ └─ffmpeg-4.4.3 # ffmpeg库 │ ├─mingw # 用MinGW64编译的库 │ │ ├─bin │ │ ├─include │ │ └─lib │ └─msvc # 用MSVC编译的库 │ ├─bin │ …...
C++基础练习 sort函数,用于排序函数
题目: https://acm.hdu.edu.cn/showproblem.php?pid2039 解答: #include <iostream> #include <cmath> #include <algorithm> using namespace std;double a[3]; int main(){int n;cin>>n;while(n--){cin>>a[0]>>…...
【Docker 08】Compose - 容器编排
🌈 一、Docker Compose 介绍 ⭐ 1. Docker Compose 是什么 Docker Compose 是由 Docker 官方提供的一个用于定义和运行多容器应用的工具,它让用户可以通过一个 YAML 文件(通常是 docker-compose.yml)来配置应用所需要的服务&…...
docker执行yum报错Could not resolve host: mirrorlist.centos.org
解决办法: -- 依次执行以下命令cd /etc/yum.repos.d/sed -i s|#baseurlhttp://mirror.centos.org|baseurlhttp://vault.centos.org|g /etc/yum.repos.d/CentOS-*sed -i s/mirrorlist/#mirrorlist/g /etc/yum.repos.d/CentOS-*yum update -yecho "export LC_ALL…...
信贷域——信贷授信业务
摘要 本文详细介绍了信贷授信业务,包括其核心目标、典型流程、不同机构授信流程的对比、授信业务的其他类型以及授信模块的技术实现。信贷授信是金融机构在放贷前对客户信用额度的评估与审批流程,旨在控制风险、合理设定额度和期限、确保合规࿰…...
python的校园兼职系统
目录 技术栈介绍具体实现截图系统设计研究方法:设计步骤设计流程核心代码部分展示研究方法详细视频演示试验方案论文大纲源码获取/详细视频演示 技术栈介绍 Django-SpringBoot-php-Node.js-flask 本课题的研究方法和研究步骤基本合理,难度适中…...
深度剖析 PACK_SESSIONID 实现原理与安全突破机制
🌐 深度剖析 PACK_SESSIONID 实现原理与安全突破机制 🖼️ 1. 完整数据处理流程 #mermaid-svg-TW7jVIcz81hCZVS9 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-TW7jVIcz81hCZVS9 .error-ico…...
从0开始学习计算机视觉--Day02--数据驱动
上次我们在课程里了解到,亚马逊网站在当时构建了一个在那时候最大的供AI训练的数据集,为了推广这个测试,他们举办了比赛邀请了许多的参赛者,识别图片的标准是输出的类别中只要在前面五个里包含了正确答案就算识别成功。在这个过程…...
【LeetCode#第198题】打家劫舍(一维dp)
198. 打家劫舍 - 力扣(LeetCode) 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入&#…...
stm32串口(uart)2转发到串口(uart)3实现
今天博主在用kelil5写stm32的程序时遇到了一个全局变量因为在中断和任务切换时没有加 volatile 修饰,导致任务检测不到标志位变化,无法实现效果的问题。 全部代码: /* USER CODE BEGIN Header */ /***************************************…...
数据结构——函数填空题
链队出队入队 入队:新指针p赋给队尾的下一个,再赋给队尾 出队:队首指针赋给p,后移 p的下一个赋给队首指向的下一个 若队尾p,则证明首尾相连为1个 字符串匹配算法 二叉树 统计二叉树度为1的节点 树T为空࿰…...
什么是跨域问题?后端如何解决跨域问题?
跨域问题是指浏览器为了安全,对不同域(包含不同协议、不同端口或不同主机名)的请求进行限制,从而导致请求无法正常访问后端接口。 跨域问题的产生源于浏览器的同源策略(Same-Origin Policy),这…...
使用ccs生成bin
CCS12.6 编译生成BIN文件正确方法_ccs生成bin文件-CSDN博客...
Python 邻接表详细实现指南
邻接表是图数据结构的一种高效表示方法,特别适合表示稀疏图。下面我将用 Python 详细讲解邻接表的多种实现方式、操作方法和实际应用。 一、邻接表基础概念 邻接表的核心思想是为图中的每个顶点维护一个列表,存储与该顶点直接相连的所有邻接顶点。 邻…...
FVISION 未来视界工作室:AI驱动的创新与智能外包平台
大家好,今天给大家介绍一个非常有意思的AI创新平台——FVISION 未来视界工作室。如果你正在寻找高效、智能、前沿的数字化工具和服务,这里一定有你想要的答案! 🌟 平台简介 FVISION 未来视界工作室专注于AI驱动的创新应用开发&am…...
领域驱动设计(DDD)【3】之事件风暴
文章目录 说明一 事件风暴理论知识1.1 事件风暴的核心目标1.2事件风暴的关键步骤1.2.1 准备工作1.2.2 核心流程1.2.3 事件风暴的输出 1.3 事件风暴的优势1.4 常见问题Q1:事件风暴适合所有项目吗?Q2:事件风暴后如何落地?Q3…...
3.10 坐标导航
1.编写代码 新建文件nav_clienr.cpp编写代码 #include<ros/ros.h> #include<move_base_msgs/MoveBaseAction.h> #include<actionlib/client/simple_action_client.h>typedef actionlib::SimpleActionClient<move_base_msgs::MoveBaseAction> MoveBas…...
TensorFlow 安装与 GPU 驱动兼容(h800)
环境说明TensorFlow 安装与 GPU 驱动兼容CUDA/H800 特殊注意事项PyCharm 和终端环境变量设置方法测试 GPU 是否可用的 Python 脚本 # 使用 TensorFlow 2.13 在 NVIDIA H800 上启用 GPU 加速完整指南在使用 TensorFlow 进行深度学习训练时,充分利用 GPU 能力至关重要…...
WPF调试三种工具介绍:Live Visual Tree、Live Property Explorer与Snoop
WPF调试工具详解:Live Visual Tree、Live Property Explorer与Snoop 1. Live Visual Tree (实时可视化树) 简介 Live Visual Tree是Visual Studio内置的WPF调试工具,允许开发者在应用程序运行时检查可视化树结构,查看控件的层次关系及其状态。…...
用OBS Studio录制WAV音频,玩转语音克隆和文本转语音!
言简意赅的讲解OBS Studio解决的痛点 随着AI技术的快速发展,语音克隆与文本生成语音技术越来越受欢迎。无论你想要制作个人虚拟主播,还是给自媒体视频配音,拥有高质量的原始音频都是关键。本文详细教你使用免费且功能强大的软件——OBS Stud…...
5.3 VSCode使用FFmpeg库
一、VSCMake 1.1 使用ffmpeg动态库 项目目录结构: ./ ├── 3rdparty # 第三方依赖库 │ └── ffmpeg_4.4.1 │ ├── include # 头文件 │ ├── lib # 静态库库 │ └── share ├── build # 编译目…...
【Datawhale组队学习202506】零基础学爬虫 02 数据解析与提取
系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 文章目录 系列文章目录前言2.1 概述2.2 re 解析2.3 bs4 解析2.4 xpath 解析总结 前言 Datawhale是一个专注于…...
[muduo] ThreadPool | TcpClient | 异步任务 | 通信测试
第九章:线程池(ThreadPool) 在第八章《TcpServer》中,我们了解到muduo::net::TcpServer通过EventLoop线程池处理入站连接。 这些EventLoop线程主要负责网络I/O:套接字读写和定时器处理,由Poller和Channel…...
探索 Vue 替代方案
Vue vs React vs Angular 在快速迭代的前端世界,Vue、React和Angular三大框架的竞争从未停止。2025年的今天,它们各自进化出了怎样的面貌?让我们深入剖析它们的核心差异,助你做出明智的技术选型。 Vue.js 完整的基于组件的UI框…...
大模型的开发应用(十二):RAG 与 LlamaIndex基础
这里写目录标题 1 LlamaIndex 简要介绍1.1 核心价值1.2 核心组件1.3 核心流程1.4 为什么要用 LlamaIndex?1.5 典型应用场景1.6 与类似工具对比1.7 安装1.8 学习资源 2 文档解析与 Document 对象2.1 示例文件与代码2.2 Document 对象的核心特性2.3 在 RAG 工作流程中…...
Java面试题025:一文深入了解数据库Redis(1)
欢迎大家关注我的JAVA面试题专栏,该专栏会持续更新,从原理角度覆盖Java知识体系的方方面面。 一文吃透JAVA知识体系(面试题)https://blog.csdn.net/wuxinyan123/category_7521898.html?fromshareblogcolumn&sharetypeblogco…...
Web攻防-XSS跨站Cookie盗取数据包提交网络钓鱼BEEF项目XSS平台危害利用
知识点: 1、Web攻防-XSS跨站-手工代码&框架工具&在线平台 2、Web攻防-XSS跨站-Cookie盗取&数据提交&网络钓鱼 演示案例-WEB攻防-XSS跨站-Cookie盗取&数据提交&网络钓鱼&Beef工具 1、XSS跨站-攻击利用-凭据盗取 条件:无防…...
(LeetCode 面试经典 150 题) 169. 多数元素(哈希表 || 二分查找)
题目:169. 多数元素 方法一:二分法,最坏的时间复杂度0(nlogn),但平均0(n)即可。空间复杂度为0(1)。 C版本: int nnums.size();int l0,rn-1;while(l<r){int mid(lr)/2;int ans0;for(auto x:nums){if(xnums[mid]) a…...
71、单元测试-Junit5简介
71、单元测试-Junit5简介 # JUnit 5 简介 JUnit 5 是 Java 平台上最流行的单元测试框架之一,是 JUnit 的重大升级版本,引入了许多新特性和改进,旨在提供更现代化、灵活和强大的测试体验。 ## 主要组成部分 JUnit 5 由三个模块组成:…...
IEC61850 一致性测试中的 UCA 测试
一、IEC61850 与 UCA 的关系背景 标准演进:IEC61850 是电力系统自动化领域的国际通信标准,其发展与美国 UCA(User Communications Architecture)标准密切相关。2001 年,UCA 国际用户组织与 IEC 合作,将 UC…...
ProtoBuf:proto3 语法详解
🌈 个人主页:Zfox_ 🔥 系列专栏:ProtoBuf 在语法详解部分,依旧使⽤项⽬推进的⽅式完成讲解。这个部分会对通讯录进⾏多次升级,使⽤2.x表⽰升级的版本,最终将会升级如下内容: 不再打…...