深入理解操作系统:从基础概念到核心管理
在计算机系统中,操作系统是至关重要的组成部分,它如同计算机的“大管家”,统筹协调着系统的各项资源与工作流程。接下来,就让我们深入了解操作系统的奥秘。
一、操作系统概述
操作系统能有效组织和管理系统中的软/硬件资源,合理安排计算机系统工作流程,控制程序执行,并为用户提供良好工作环境与友好接口。
它主要有两大作用:
一是通过资源管理提升计算机系统效率;
二是改善人机界面,提供友好的工作环境 。
操作系统具备并发性、共享性、虚拟性和不确定性4个特征
拥有进程管理、文件管理、存储管理、设备管理和作业管理五大功能。
同时,操作系统可分为批处理操作系统、分时操作系统、实时操作系统、网络操作系统、分布式操作系统和嵌入式操作系统等类型,其中分时、实时、网络、分布式和嵌入式操作系统在不同场景下发挥着重要作用。
- 分时操作系统:将CPU时间划分为时间片,轮流为多个终端用户服务,具有多路性、独立性、交互性和及时性特点。
- 实时操作系统:能快速处理外来信息并及时响应,分为实时控制系统和实时信息处理系统,与分时系统在设计目标、交互性和响应时间敏感程度上存在区别。
- 网络操作系统:方便联网计算机共享网络资源,提供多种服务,具有硬件独立性、多用户支持等特征,可分为集中模式、客户端/服务器模式和对等模式。
- 分布式操作系统:是网络操作系统的更高级形式,能对系统资源动态分配和调度,具有透明性、可靠性和高性能等特性。
- 嵌入式操作系统:运行在嵌入式智能芯片环境中,具有微型化、可定制、实时性、可靠性和易移植性等特点。
二、进程管理
进程管理即处理机管理,进程是资源分配和独立运行的基本单位,由程序、数据和**进程控制块(PCB)**组成,PCB是进程存在的唯一标志。
运行:当一个进程在处理机上运行时,则称该进程处于运行状态。
就绪:一个进程获得了除处理机外的一切所需资源,一旦得到处理机即可运行则称此进程处于就绪状态。
阻塞:也称等待或睡眠状态,一个进程正在等待某一事件发生而暂时停止运行
进程具有多种状态模型,如三态模型(运行、就绪、阻塞)、五态模型(新增新建态和终止态)以及具有挂起状态的模型(包括活跃就绪、静止就绪、活跃阻塞、静止阻塞) 。
进程是程序的一次执行。
进程是资源分配和独立运行的基本单位,进程两个基本属性:可拥有资源的独立单位;可独立调度和分配的基本单位。
进程间的同步与互斥
进程控制由操作系统内核中的原语实现,负责进程从创建到消亡的全过程控制。进程间通信涉及同步与互斥,同步是合作进程间的直接制约,互斥是申请临界资源进程间的间接制约,信号量机制和管程是实现进程同步与互斥的重要工具 。
进程调度
(1)高级调度:又称“长调度”“作业调度”或“接纳调度”,它决定处于输入池中的哪个后备作业可以调入主系统做好运行的准备,成为一个或一组就绪进程。
(2)中级调度:又称“中程调度”或“对换调度”,它决定于交换区中的哪个就绪进程可以调入内存以便直接参与对CPU的竞争。
(3)低级调度:又称“短程调度”或“进程调度”,它决定处于内存中的哪个就绪进程可以占用CPU。
低级调度是操作系统中最活跃、最重要的调度程序,对系统的影响很大。
4种常用的进程调度算法:
(1)先来先服务:有利于长作业,不利于短作业;有利于CPU繁忙的作业,不利于I/O繁忙的作业。主要用于宏观调度。
(2)时间片轮转:主要用于微观调度,通过时间片轮转提高进程并发性和响应时间特性,从而提高资源的利用率。
(3)优先级调度:让每一个进程都拥有一个优先数,数值大的表示优先级高,系统在调度时总选择优先数大的占用CPU。分为静态优先级和动态优先级两种
(4)多级反馈调度:是时间片轮转算法和优先级算法的综合与发展。优点有:第一,照顾了短进程以提高系统吞吐量,缩短了平均周转时间;第二,照顾I/O型进程以获得较好的I/O设备利用率和缩短响应时间;第三,不必估计进程的执行时间,动态调节优先级。
死锁
死锁:是指两个以上的进程互相都要求对方已经占有的资源导致无法继续运行下去的现象。
产生死锁的4个必要条件:互斥条件、请求保持条件、不可剥夺条件环路条件。
死锁的处理策略有:鸵鸟策略、预防策略、避免策略和检测与解除死锁。
死锁预防:采用某种策略限制并发进程对资源的请求。
死锁避免:如银行家算法。
死锁检测:系统定时地运行一个程序来检测是否发生死锁,若有,则设法加以解除。
死锁解除:有资源剥夺法和撤销进程法。
线程
进程两个基本属性:可拥有资源的独立单位;可独立调度和分配的基本单位。
引入线程后:线程作为调度和分配的基本单位,进程作为独立分配资源的单位。
-个进程中有多个线程,共享该进程的资源
线程分为用户级线程和内核支持线程
用户级线程不依赖于内核。该类线程的创建、撤销和切换都不利用系统调用来实现。
内核支持线程依赖于内核。该类线程的创建、撤销和切换都利用系统调用来实现。
线程是进程中的一个实体,是被系统独立分配和调度的基本单位,线程基本上不拥有资源,只拥有一点运行中必不可少的资源(如程序计数器、一组寄存器和栈),它可与同属一个进程的其他线程共享进程所拥有的全部资源
线程也具有就绪、运行和阻塞3种基本状态,由于线程具有传统进程所具有的特性,故称为’“轻型进程”传统进程称为“重型进程线o程可创建另一个线程,同一个进程中的多个线程可并发执行。
三、存储管理
基本概念
逻辑地址(虚拟地址、相对地址)程序员使用的地址只是用符号命名的一个地址,称为符号名地址,这个地址并不是主存中真实存在的地址。
物理地址(绝对地址)是主存中真实存在的地址。
设备管理是操作系统中繁杂且与硬件紧密相关的部分,不仅管理实际I/O操作设备,还管理相关支持设备,通过设备分配、缓冲区管理和物理I/O设备操作,提高设备利用率,方便用户使用 。
地址重定位
程序,没有运行时,存储在外存,程序运行时,需要装载到内存就需要把程序中的指令和数据的逻辑地址转换为对应的物理地址这个转换的过程称为地址重定位。静态重定位:在程序装入主存时已经完成了逻辑地址到物理地址的变化,在程序的执行期间不会再发生变化。
动态重定位:在程序运行期间完成逻辑地址到物理地址的变换
分区存储管理
把主存划分成若干个区域,每个区域分配给一个作业使用。这就是分区存储管理方式。分为固定分区、可变分区和可重定位分区
(1)固定分区:系统生成时已经分好区。
(2)可变分区:是一种动态分区方式,存储空间的划分是在作业装入时进行的,故分区的个数是可变的,分区的大小刚好等于作业的大小。
(3)可重定位分区:分配好的区域可以移动
分页存储管理
(1)分贡原理:将进程的地址空间划分成若干个大小相等的区域,称为页。将主存的空间也划分成与页相同大小的若干个物理块,称为块或页框在为进程分配主存时,将进程中若干页分别装入多个不相邻接的块中。
(3)页表:
·当进程的多个页面离散地分配到主存的多个物理块时,系统应能保证在主存中找到进程要访问的页面所对应的物理块,为此,系统为每个进程建立了一张页面映射表,简称页表。
分页存储管理
分段存储管理
分段存储管理
在分段存储管理中,将用户程序或作业的地址空间按内容划分为段,比如主程序一段,子程序一段,数据专门放一段,每个段的长度是不等的,但是每个段占用个连续的分区。进程中的各个段可以离散地分配到主存的不同分区中。在系统中为每个进程建立一张段映射表,简称为“段表”。
段页式存储管理
先将整个主存划分成大小相等的存储块(页框)将用户程序按程序的逻辑关系分为若干个段,然后再将段划分成页
段页式系统中同时有段表和页表:
段表:段号、页表始址、页表长度
页表:页号、物理块号。
逻辑地址:段号、段内页号、页内地址物理地址:块号、页内地址
虚拟存储管理
程序局部性原理:程序在执行时将呈现出局部性规律,即在一段时间内,程序的执行仅限于某个部分,它所访问的存储空间也局限于某个区域内。
(1)时间局限性:程序中的某条指令一旦执行,则不久的将来很有可能再次被访问;某个存储单元如果被访问,不久的将来它很可能再次被访问。
(2)空间局限性:一旦程序访问了某个存储单元,则不久的将来,其附近的存储单元也最有可能被访问。
如果我们运行程序的时候,允许将作业的一部分装入主存即可运行程序,而其余等需要的时候再装入主存。这样一来,一个小的主存部分可以暂时留在磁盘上,空间就可以运行比它大的一个作业。从用户角度看,系统具有的主存容量比实际的主存容量要大得多,称为虚拟存储器。
页面置换算法
(1)最佳置换算法:是一种理想化的算法,即选择那些是永不使用的或者是在最长时间内不再被访问的页面置换出去。
(2)先进先出置换算法(FIF0):优先淘汰最先进入主存的页面,也就是在内存中停留时间最长的页面。
(3)最近最少未使用算法(LRU):优先淘汰最近这段时间用得最少的页面。系统为每一个页面设置一个访问字段,记录这个页面自上次被访问以来所经历的时间T,当要淘汰一个页面时,选择T最大的页面。
(4)最近未用置换算法(NUR):优先淘汰最近一段时间未引用过的页面系统为每一个页面设置一个访问位,访问位为1代表访问过,为0代表没有被访问过,置换页面时选择访问位为0的置换出去。
四、设备管理
设备管理的目标主要是如何提高设备的利用率,即提高CPU与I/0设备之间的并行操作速度,并为用户提供方便、统一的界面。
为了提供设备的利用率,我们采用了“分层构造”的思想,即把设备管理软件组织成为一系列的层次。
主要分为4层:中断处理程序、设备驱动程序、与设备无关的系统软件和用户级软件
各层之间既相互独立,又彼此协作。
例:某用户进程现在需要读取硬盘中的数据。
① 与设备无关软件检査高速缓存中有没有要读的数据块,如果有,则直接从高速缓存中调取;如果没有,则调用设备驱动程序,向IO硬件发出一个请求。
②用户进程转为阻塞状态,等待磁盘操作的完成。磁盘操作完成时,硬件产生一个中断,转入中断处理程序
③ 中断处理程序检査中断的原因,认识到这时磁盘读取数据的操作已经完成,于是唤醒用户进程取回从磁盘读取的信息,此次I/0请求结束。
④用户进程得到了需要读取的数据内容,由阻塞转为就绪状态,继续运行。
设备管理采用的相关技术
1、通道技术
2、DMA技术
3、缓冲技术
4、Spooling技术
目的:缓和CPU的高速性和I/0设备的低速性之间的矛盾。
原理:Spooling技术引入了两个程序,分别实现脱机输入输出操作。预输入程序将输入设备上的数据通过输入缓冲区再传输到高速磁盘的输入井;缓输出程序将高速磁盘中输出井中的数据通过输出缓冲区传输到输出设备。CPU读写数据只需要在高速磁盘上进行,大大提高了工作效率。而且输入输出操作与CPU数据的处理同时进行,这种在联机情况下实现的输入输出与CPU工作并行的技术叫做Spooling或假脱机操作。
磁盘调度算法
磁盘调度分为移臂调度和旋转调度两类,先进行移臂调度,再进行旋转调度。磁盘调度的目标是使磁盘的平均寻道时间最少。读取磁盘数据的时间 =寻道时间 +旋转延迟 +数据传输时间
2、旋转调度算法:
(1)如果进程请求访问的是不同编号的扇区(无论是否在同一磁道则总是让首先到达磁头位置下的扇区先进行读写操作。
(2)如果进程请求访问的是相同编号的扇区(无论是否在同一磁道)旋转调度时可以任选一个扇区进行读写操作。
五、文件管理
文件的结构和组织
文件的逻辑结构:从用户角度看到的文件组织形式就是文件的逻辑行构,但实际上这些文件在内存上的存放方式可能并不是这样的。
(1)有结构的记录式文件
(2)无结构的流式文件
文件的物理结构:从实现的角度看,文件在存储器上的存放方式
(1)连续结构
(2)链接结构
(3)索引结构
(4)多个物理块的索引表
文件的目录结构
(1)一级目录结构:只有一张目录表,不允许重名,查找速度慢,不能实现文件共享。
(2)二级目录结构:由主文件目录和用户目录组成
(3)多级目录结构:我们熟悉的Windows系统,以及UNIX系统都采用这种多级目录结构。
绝对路径:是指从根目录“\”开始的完整文件名,即它是由从根目录开始的所有目录名以及文件名构成。
相对路径:是从当前工作目录下的路径名
文件存储空间的管理
在将文件保存到外存时,我们首先要知道哪些存储空间是“占用”的,哪些存储空间是“空闲”的。因此我们需要对磁盘空间进行管理
常用的空闲空间的管理方法有空闲区表、位示图、空闲块链和成组链接法。
(1)空闲区表。操作系统为磁盘的所有空闲区建立一张空闲表。它适用于连续文件结构。
(2)位示图:在外存上建立一张位示图(bitmap)记录文件存储器的使用情况。每一位对应文件存储器上的一个物理块,0表示空闲,1表示占用。
(3)空闲块链:每一个空闲物理块中设置一个指针,它指向下一个空闲物理块,所有空闲物理块构成一个链表,链表的头指针放在文件存储器的一个特定位置上(如管理块中)
(4)成组链接法。在系统中将空闲块分成若干个组,每100个空闲块为一组,每组的第一个空闲块登记了下一组空闲块的物理盘块号和空闲块总数。
六、作业管理
(1)先来先服务:按作业到达的先后顺序进行调度
(2)短作业优先:按作业运行时间的长短进行调度,即启动要求运行时间最短的作业。
(3)响应比高优先:响应比高的作业优先启动。
(4)优先级调度算法:按照系统设定的优先级或者用户指定的优先级优先级高的先调度。
(5)均衡调度算法:根据系统的运行情况和作业本身的特性对作业进行分类,力求均衡地使用系统的各种资源,即注意发挥系统效率,又使用户满意。
相关文章:
深入理解操作系统:从基础概念到核心管理
在计算机系统中,操作系统是至关重要的组成部分,它如同计算机的“大管家”,统筹协调着系统的各项资源与工作流程。接下来,就让我们深入了解操作系统的奥秘。 一、操作系统概述 操作系统能有效组织和管理系统中的软/硬件资源&…...
手撕基于AMQP协议的简易消息队列-1(项目介绍与开发环境的搭建)
项目绍 码云仓库:MessageQueues: 仿Rabbit实现消息队列 文章概要 本文将介绍从零搭建一个简易消息队列的方法,目的是了解并学习消息队列的底层原理与逻辑,编写一个独立的服务器程序。从搭建开发环境开始,到编写一些工作组件&am…...
C++ 模板方法模式详解与实例
模板方法模式概念 模板方法模式(Template Method Pattern)属于行为型设计模式,其核心思想是在一个抽象类中定义一个算法的骨架,而将一些步骤延迟到子类中实现。这样可以使得子类在不改变算法结构的情况下,重新定义算法中的某些步骤。它通过继承机制,实现代码复用和行为…...
北京丰台人和中医院,收费贵吗?
北京丰台人和中医院,收费贵吗? 北京丰台人和中医院属于平价医院,百姓医院,收费不贵,北京丰台人和中医院35年专业看肝病,之所以能够在肝病感染者中赢得广泛好评,离不开其严谨的医疗流程、专业的…...
21、魔法传送阵——React 19 文件上传优化
一、魔法传送阵的核心法则 1.量子切割术(分片上传) const sliceFile (file) > {const chunks [];let start 0;const CHUNK_SIZE 2 * 1024 * 1024; // 2MB分片while (start < file.size) {chunks.push({id: ${file.name}-${start},data: file.s…...
Windows命令行软件管理器:Chocolatey
文章目录 Windows命令行软件管理器:Chocolatey1.Chocolatey使用1.1 安装1.2 常用命令1.3 使用流程 2.常用shell命令汇总 Windows命令行软件管理器:Chocolatey Chocolatey 是一款强大的 Windows 命令行软件管理器,目前在 GitHub 上已斩获 10.…...
【MySQL】第二弹——MySQL表的增删改查(CRUD)
文章目录 🎓一. CRUD🎓二. 新增(Create)🎓三. 查询(Rertieve)📖1. 全列查询📖2. 指定列查询📖3. 查询带有表达式📖4. 起别名查询(as )📖 5. 去重查询(distinct)📖6. 排序…...
Windows环境,Python实现对本机处于监听状态的端口,打印出端口,进程ID,程序名称
1、pip install tabulate 2、代码实现 #!/usr/bin/env python # -*- coding: utf-8 -*-""" Windows端口监听程序 显示本机处于监听状态的端口,进程ID和程序名称 """import subprocess import re import os import sys from tabulat…...
什么是变量提升?
变量提升(Hoisting) 是 JavaScript 引擎在代码执行前的一个特殊行为,它会将变量声明和函数声明自动移动到当前作用域的顶部。但需要注意的是,只有声明会被提升,赋值操作不会提升。 核心概念 变量声明提升&…...
Java大师成长计划之第15天:Java线程基础
📢 友情提示: 本文由银河易创AI(https://ai.eaigx.com)平台gpt-4o-mini模型辅助创作完成,旨在提供灵感参考与技术分享,文中关键数据、代码与结论建议通过官方渠道验证。 在现代软件开发中,多线程…...
中小企业设备预测性维护:从技术原理到中讯烛龙实践落地指南
在工业 4.0 与智能制造浪潮的推动下,中小企业正面临设备管理模式的深刻变革。传统的事后维修与预防性维护策略,因缺乏数据驱动与智能决策能力,已难以满足企业降本增效的核心诉求。据 Gartner 统计,非计划停机导致的生产损失平均每…...
mysql 复习
mysql定义与架构 数据库是按照数据结构来组织、存储和管理数据的仓库,方便我们增删查改。MySQL有客户端和服务器端,基于网络服务的,3306端口处于监听状态。 数据库的存储介质有以下两种: 磁盘,比如MySQL就是一种磁盘…...
高低比率策略
本策略的核心在于运用技术指标结合基本规则进行交易决策,旨在通过高低比率策略捕捉市场的超买和超卖信号,以此指导交易行为。 一、交易逻辑思路 1. 指标计算: - 本策略首先通过EMA(指数移动平均)计算快线和慢线的值&am…...
python线上学习进度报告
一、mooc学习 二、python123学习...
深入剖析ThreadLocal:原理、应用与最佳实践
深入剖析ThreadLocal:原理、应用与最佳实践 一、ThreadLocal的本质与价值 1.1 什么是ThreadLocal? ThreadLocal是Java提供的线程本地变量机制,允许每个线程拥有独立的变量副本,实现线程间的数据隔离。它通过“空间换时间”的方式…...
nginx 配置后端健康检查模块
nginx自带的针对后端节点健康检查的功能比较简单,通过默认自带的ngx_http_proxy_module 模块和ngx_http_upstream_module模块中的参数来完成,当后端节点出现故障时,自动切换到健康节点来提供访问。但是nginx不能事先知道后端节点状态是否健康,后端即使有不健康节点,负载均…...
路由交换实验
案例一:实施和配置RIPV2 1.给AR1配置接口 查看R1接口配置情况 2.配置三台路由的RIP协议,版本为version2 ,关闭自动汇总,通告所有的直连接口 案例二:配置多区域的OSPF协议 1.配置R1的接口IP地址参数 2.配置r2,r3的接口参…...
主成分分析(PCA)是什么?简易理解版
文章目录 一、PCA的本质与核心价值二、数据中的"重要方向":理解变异性三、主成分的数学基础四、荷载向量的深入理解五、PCA的计算过程详解5.1 数据预处理5.2 计算协方差矩阵5.3 特征分解5.4 主成分得分计算 六、PCA的实际应用解读七、PCA的工具与实现7.1 …...
Linux常用命令34——uname显示系统内核信息
在使用Linux或macOS日常开发中,熟悉一些基本的命令有助于提高工作效率,uname命令来自英文词组UNIX name的缩写,其功能是查看系统主机名、内核及硬件架构等信息。如果不加任何参数,默认仅显示系统内核名称(相当于-s参数…...
Linux下使用openssh搭建sftp服务
创建 SFTP 用户组 为 SFTP 用户创建一个专用组: sudo groupadd sftpusers 创建 SFTP 用户 创建 SFTP 用户并将其添加到 sftpusers 组,同时指定用户的主目录和禁止 shell 访问: sudo useradd -g sftpusers -s /sbin/nologin username sud…...
C++ 复习(一)
命名空间 概念 : 命名空间的主要作用是创建一个新的作用域 里面可以放函数 变量 定义 为了防止命名冲突 实现 : 通过使用namespace 空间名 {} 在大括号中添加 内容 1. 这里命名空间允许嵌套 2. 在同一个工程中允许存在多个同名的命名空间 在最后编译…...
主备Smart Link + Monitor Link组网技术详细配置
1.实验拓扑 2.使用设备 eNSP模拟建议下行设备三台使用S3700模拟(全部使用S5700可能会出现流量丢失等异常问题。) 3.实验配置 [SW1]dis cu # sysname SW1 # vlan batch 100 110 # interface Ethernet0/0/1port link-type accessport default vlan 100 …...
【5G通信】redcap和bwp 随手记
在5G通信中,BWP(Bandwidth Part)是一种技术,允许终端设备在不同的带宽部分上进行通信,从而提高频谱效率和灵活性。BWP可以分为初始BWP(Initial BWP)、默认BWP(Default BWP࿰…...
第三天 车联网云架构
一、车联网技术演进与行业变革 1.1 从传统Telematics到智能网联汽车 当我们驾驶着搭载智能网联系统的汽车时,车辆每秒会产生超过1GB的数据流量。这些数据包括: 高精度地图的实时更新ADAS传感器采集的环境信息车载娱乐系统交互数据车辆状态监控信息 传…...
手撕基于AMQP协议的简易消息队列-7(客户端模块的编写)
在MQClient中编写客户端模块代码 在MQClient中编写makefile文件来编译客户端模块 .PHONY:all all:PublichClient ConsumeClient PublichClient : PublichClient.cpp ../MQCommon/request.pb.cc ../MQCommon/message.pb.cc ../ThirdLib/lib/include/muduo/protobuf/codec.ccg …...
Spring Security(笔记)
第一步: 首先使用Intellij IDEA创建一个Spring Boot项目,JDK选择自己安装的1.8。点击Next后,编辑项目信息。然后跳转到选择依赖页面。 第二步: 添加Spring Security、Spring Web、Thymeleaf三个依赖。完成后等待项目构建完成。…...
通义灵码编码插件支持MCP
通义灵码MCP功能集成概述 通义灵码已深度集成魔搭社区(ModelScope)的MCP(Model Context Protocol)服务,为开发者提供了在IDE中直接调用AI能力的便捷通道。MCP作为标准化协议,通过定义Resources、Prompts和…...
问题 | 当前计算机视觉迫切解决的问题
当前计算机视觉领域虽然在技术上取得了显著进展,但仍面临一系列关键挑战。结合最新研究与应用现状,以下是最迫切需要解决的几大问题: 1. 数据质量与多样性不足 高质量标注数据的获取:训练高效模型依赖大量精准标注的数据&#x…...
C++ STL入门:vecto容器
C STL 系列入门:vector 动态数组 一、vector 容器核心特性 vector 是 C 标准库提供的动态数组容器,具有以下显著优势: 自动扩容机制:当插入元素超出当前容量时,自动申请新内存并迁移数据随机访问效率:支持…...
Java 线程全面概述
Java 线程全面概述 线程是程序执行的最小单元,是操作系统能够调度的最小单位。Java 提供了完善的线程支持,下面从基础概念到高级特性进行全面解析。 一、线程基础概念 1. 线程 vs 进程 特性进程线程资源占用独立内存空间共享进程内存切换成本高&#…...
高效文件夹迁移工具,轻松实现批量文件管理
软件介绍 DirMapper是一款专注于文件夹迁移的工具,可以快速完成文件的批量整理与位置调整。 功能特点 这款文件夹迁移工具提供两种操作模式:复制模式和移动模式,用户可以根据需求自行选择。如果需要保留原文件,可以选择复…...
sherpa:介绍
更多内容:XiaoJ的知识星球 目录 1. sherpa 介绍 1. sherpa 介绍 sherpa是 Next-gen Kaldi 项目的部署框架。 sherpa 支持在各种平台上部署与语音相关的预训练模型,并提供多种语言绑定。 目前,sherpa 拥有以下子项目: k2-fsa/sh…...
Android Studio Gradle 中 只显示 Tasks 中没有 build 选项解决办法
一、问题描述 想把项目中某一个模块的代码单独打包成 aar ,之前是点击 AndroidStudio 右侧的 Gradle 选项,然后再点击需要打包的模块找到 build 进行打包,但是却发现没有 build 选项。 二、解决办法 1、设置中勾选 Configure all Gradle tasks… 选项 …...
手撕基于AMQP协议的简易消息队列-6(服务端模块的编写)
在MQServer中编写服务端模块代码 在MQServer中编写makefile文件来编译服务端模块 .PHONY: server CFLAG -I../ThirdLib/lib/include LFLAG -L../ThirdLib/lib/lib -lgtest -lprotobuf -lsqlite3 -pthread -lmuduo_net -lmuduo_base -lz server:server.cpp ../MQCommon/messag…...
面试实践AND面经热点题目总结
1、对于Rocketmq消息积压、丢失如何解决? 消息积压原因以及解决方案 🎯 产生原因: 消费者处理能力弱,消费速度远低于生产速度; 网络不稳定,消费者拉取消息失败; 消费端异常(如处理…...
MySQL基础关键_012_事务
目 录 一、概述 二、ACID 四大特性 三、MySQL 事务 四、事务隔离级别 1.说明 2.现象 (1)脏读 (2)不可重复读 (3)幻读 3.查看隔离级别 4.设置隔离级别 5.隔离级别 (1)初始…...
Missashe考研日记-day35
Missashe考研日记-day35 1 专业课408 学习时间:3h学习内容: 完结撒花!!今天把OS最后一节的内容学完了,操作系统也算是告一段落了,接下来是计网时间!不过计网我是上学期才学过的,当…...
如何添加二级域名
在 华为云 上添加二级域名(如 sub.example.com)主要涉及 DNS解析配置 和 服务器绑定 两个步骤。以下是详细操作指南: 一、前提条件 已拥有 主域名(如 example.com)并完成 ICP备案(若服务器在中国大陆&#…...
【数据结构】01Trie
什么是 01Trie? 01Trie是字典树的一种变种,其只有两种情况,即 0 和 1,实现方式其实和字典树是一样的 有什么用呢? 其一般用于解决异或问题,是一种快速的数据结构,某些情况下可以无脑套用 实现方式&#…...
使用 CDN 在国内加载本地 PDF 文件并处理批注:PDF.js 5.x 实战指南
PDF.js 是一个强大的开源 JavaScript 库,用于在 Web 浏览器中渲染 PDF 文件。它由 Mozilla 开发,能够将 PDF 文档绘制到 HTML5 Canvas 或 SVG 上,无需任何本机代码或浏览器插件。对于许多需要在网页中展示 PDF 内容的应用场景来说,…...
SpringBoot指定项目层日志记录
1、新建一个Springboot项目,添加Lombok依赖(注意:这里使用的Lombok下的Slf4j快速日志记录方式) <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependenc…...
使用Mathematica内置函数绘制Sierpinski地毯
除了SierpinskiCurve之外,Mathematica还内置了SierpinskiMesh这个函数,用来绘制地毯。 SierpinskiMesh[n] gives a mesh region representing the n-step Sierpiński triangle. SierpinskiMesh[n,d] gives the n-step Sierpiński sponge in dimension…...
CMake笔记(简易教程)
CMake笔记 概述(需要提前了解的知识) 一个c/c程序从代码到生成二进制文件,需要经历的几个关键步骤:预编译(预处理)、编译、汇编、连接 【编译链接的几个步骤】 编译器:目前市面常见的编译器有…...
现代健康养生新范式:多维度守护身心活力
在快节奏的现代生活中,健康养生是维持高品质生活的关键。从环境调节到生活习惯养成,多个维度的协同发力,才能为健康注入持久动力。 良好的生活环境是健康的基础。室内空气流通至关重要,每天开窗通风 2-3 次,每次 30…...
推测式思维树:让大模型快速完成复杂推理
论文标题 Accelerating Large Language Model Reasoning via Speculative Search 论文地址 https://www.arxiv.org/pdf/2505.02865 作者背景 中科大,华为诺亚方舟实验室,天津大学 ICML 2025接收 动机 之前介绍过多篇投机解码(推测式解…...
软考错题(三)
telnet协议是一种基于TCP的远程登录协议 占用辅助空间最多的是归并排序 直接插入,堆排,简单选择,冒泡的空间复杂度是O(1) 快排是O(logn) 归并是O(n) B树的叶子节点通过指针链接为有序表,不是b-树 python中切片语法[start,end,s…...
注解的定义
一、理论说明 1. 注解的定义 Java 注解是从 JDK 5.0 开始引入的一种元数据机制,它可以为代码添加额外的信息,这些信息不影响程序的运行逻辑,但可以在编译期、类加载期或运行期被读取和处理。注解本质上是一种特殊的接口,所有注解…...
企业微信自建消息推送应用
企业微信自建应用来推送消息 前言 最近有个给特定部门推送消息的需求,所以配置一个应用专门用来推送消息。实现过程大致为:服务器生成每天的报告,通过调用API来发送消息。以前一直都是发邮件,整个邮箱里全是报告文件,…...
swagger3融入springboot
标签: 放controller上面 Api(description "xxx") 放方法上面 Operation(summary "xxx") 引入: 我用的是swagger3.X 需要在yml配置文件中加上: spring:mvc:pathmatch:matching-strategy: ant_path_matcher 然后生…...
CH32V208GBU6沁恒绑定配对获取静态地址
从事嵌入式单片机的工作算是符合我个人兴趣爱好的,当面对一个新的芯片我即想把芯片尽快搞懂完成项目赚钱,也想着能够把自己遇到的坑和注意事项记录下来,即方便自己后面查阅也可以分享给大家,这是一种冲动,但是这个或许并不是原厂希望的,尽管这样有可能会牺牲一些时间也有哪天原…...