当前位置: 首页 > news >正文

音频基础概念

声音

物体在一定的振动频率下产生了声音。声音可以被分解为不同频率不同强度正弦波的叠加。

声音三要素

声调

音调: 由发声体振动的频率决定,频率越高(振动越快)则音调越高,听起来就越“刺耳”,反之音调越低、听起来就越低沉。

声音的音调,即音频频率或每秒的变化次数

响度

响度: 由发声体振动的幅度决定,当传播的距离相同时,振动幅度越大、则响度越大;相反,当振幅一定时,传播距离越远,响度越小。

音色

音色: 不同声音表现在波形方面与众不同的特性

声音的采集与量化

模拟信号

模拟信号:是一种连续变化的信号,可以表示为电压、电流或电荷的形式。这种信号的变化可以反应真实世界的物理量(如声音、温度、压力等)的变化。

在不同振幅、频率声波的影响下,振动膜会同步振动,并配合其他关联模块将振动转换为变化的电流。

数字信号

数字信号:是指自变量是离散的、因变量也是离散的信号,这种信号的自变量用整数表示,因变量用有限数字中的一个数字来表示。在计算机中,数字信号的大小常用有限位的二进制数表示。

将音频模拟信号转换为音频数字信号,这个过程称为音频模拟信号的数字化,整个过程主要包括采样、量化、编码等步骤
第一步,采样:以一定采样率,在时间轴上对模拟信号进行数字化。
第二步,量化:以一定精度,在幅度轴上对模拟信号进行数字化。
第三步,编码:按特定格式,记录采样/量化后的数据。

PCM

量化编码后的音频采样数据裸流,即为PCM音频数据(Pulse Code Modulation,脉冲编码调制),实际应用还会通过编码算法进行压缩封装

来自参考5

17447908008526.jpg

数字信号质量三要素

1.采样率

自然界的模拟信号声音转换成数字信号存储到计算机的过程中,一个是离散的,一个是连续的,就会有转换精度的描述。

采样率(sampleRate): 单位时间内(1s)对声音信号的采集次数,采样率越高,声音的还原越真实。采样率单位为Hz。

奈奎斯特采样定理:当采样频率大于信号中最高频率的2倍时,采样后的数字信号能够完整保留原始信号的信息。

因为人一般能够听到的声音范围:20Hz~20000Hz,所以很多采样率是基于这个区间而设计的。

来自参考5:

常见声音采样率:

采样率使用场景
8kHz在语聊、通话场景,满足基本的沟通目的,同时有效减少数据量、兼容各种传输/存储环境。人说话声音频率一般在300-700Hz之间,最大区间一般为60Hz-2000Hz
16kHz、32kHz在保证基本沟通的基础上,进一步提升音质,同时平衡带宽、存储的压力。某些音频处理算法会要求使用32KHz的采样率
44.1kHz、48kHz大多数的音视频应用场景。我们一般将 44.1kHz作为CD音质的采样标准
96kHz/192kHz更特殊的应用,比如需要对采集的音频进行后期加工、二次处理等。96KHz、192KHz等采样率对于人耳听感来说已无明显的提升,反而会增大存储、带宽的压力,对采集/播放设备也有较高要求,RTC场景一般不考虑
为什么是44.1kHz

找了些资料,技术 + 历史原因决定的

技术
  1. 奈奎斯特采样定理决定至少要满足40000Hz才能避免
  2. 工程选择:麦克风能接收,采集到的空气振动的频率范围远超过人耳听力。如果直接采集这样的信号,会导致出现混叠,所以必须要先使用一个低通滤波器,把高于阈值的信号过滤掉。高于40000Hz的部分实际是给低通滤波器留出空间,使得下降曲线可以落在20kHz以外,不影响音频效果
历史
  1. 在数字存储媒介被发明之前,早期的数字音频是要被录制在模拟录像带上的,因为只有VCR带能存储一定长度的数字音频信号。当年有两种标准NTSC/PAL
    NTSC每场扫描245线,每秒钟60场,每条扫描线只需要存储三个采样就可以达到44100Hz
    PAL每场扫描294线,每秒钟50场,每条扫描线也只需要存储三个采样就能达到44100Hz

人耳 20kHz 封顶,为什么数字音频都要记录和解析到更高的频率上去?

其它的说法

44.1 kHz 也允许CD格式的创作者在120毫米的唱片上记录至少80分钟的音乐(多于一个黑胶唱片的容量),在当时这被认为是一个极好的卖点。

Why 44.1 kHz

2.采样位数

前面的采样率是音频采集量化的频率,那每次采样得到值如何描述?

采样位数: 在音频采集量化过程中,每个采样点幅度值的取值精度,一般使用bit作为单位。

来自参考5:

常用的几种采样位数

采样位深描述
8bit早期常用的位深精度,可满足基础的通话音质需求
16bit被认为是达到专业音频质量的位深标准,足够完整地收录绝大多数音频场景的动态变化,适用范围广。和44.1KHz采样率一起,被作为CD音质的标准
24bit,32bit,64bit对于使用常见播放设备(手机、普通音箱)的用户来说,32bit与16bit的感官差异很细微,音质上的提升不明显,反而带来了更大的带宽、存储压力,更不用说64bit。并不需要盲目追求

3.声道数

因为音频的采集和播放时可以叠加的,因此可以同时从多个音频源采集声音,并分别输出到不同的扬声器。

声道数: 指声音在录制或播放时,在不同空间位置采集或回放的相互独立音频信号。声道数指在录音时的音源数量,或在播放时的扬声器数量。

常见的声道数
  1. 单声道(Mono): 只有一个声道,优点:数据量小,缺点:缺乏对声音位置定位
  2. 双/立体声道(Stereo): 由左声道,右声道组成,改善对声音位置定位的状态
  3. 四声环绕: 由左、前右、后左、后右组成,形成立体环绕。4.1声道是在四声环绕基础上,增加一个低音
  4. 5.1声道: 在4.1基础上,增加一个中场声道,就是电影院说的杜比音效

其它

采样数

采样数: 每帧采样的数量。

源码:libavutil > frame.h

typedef struct AVFrame {
.../*** number of audio samples (per channel) described by this frame*/int nb_samples;
...
}

ffmpeg中使用结构体AVFrame中的成员变量nb_samples来表示采样数

音频帧

因为音视频文件播放时,为了保证音视频同步,程序需要根据每帧的播放时间戳进行有序播放。但是每个音频采样数据太小,音频帧实际上就是把一小段时间的音频采样数据都打包。

这是根据需要人为抽象的概念。

帧时长

音频的帧时长 = 采样数 / 采样率。假设采样率为44.1k,采样数为1024。那么每帧时长约等于23ms。

采样格式

采样格式: 采样数据的保存格式

音频的采样格式分为大端存储和小端存储。按照符号划分有: 有符号与无符号。按照类型划分有:整形与浮点数。按照存储位数划分有:8位、16位、32位、64位,都是8的倍数。

enum AVSampleFormat {AV_SAMPLE_FMT_NONE = -1,AV_SAMPLE_FMT_U8,          ///< unsigned 8 bitsAV_SAMPLE_FMT_S16,         ///< signed 16 bitsAV_SAMPLE_FMT_S32,         ///< signed 32 bitsAV_SAMPLE_FMT_FLT,         ///< floatAV_SAMPLE_FMT_DBL,         ///< doubleAV_SAMPLE_FMT_U8P,         ///< unsigned 8 bits, planarAV_SAMPLE_FMT_S16P,        ///< signed 16 bits, planarAV_SAMPLE_FMT_S32P,        ///< signed 32 bits, planarAV_SAMPLE_FMT_FLTP,        ///< float, planarAV_SAMPLE_FMT_DBLP,        ///< double, planarAV_SAMPLE_FMT_S64,         ///< signed 64 bitsAV_SAMPLE_FMT_S64P,        ///< signed 64 bits, planarAV_SAMPLE_FMT_NB           ///< Number of sample formats. DO NOT USE if linking dynamically
};

源码:libavutil > samplefmt.h

封装格式与编码协议

封装: 将音频数据,元数据和其它多媒体内容组合在一起。它提供了一种标准化的方式来存储和传输音频数据,使得不同的设备和软件能够理解和处理这些数据。

封装格式由特定格式头,媒体信息,音频轨数据组成

常见的封装格式有:mp3、m4a、ogg、amr、wma、wav、flac、aac、ape等。

不同封装格式的区别

来自参考8

格式发布者年份编码器是否有损描述
wav微软1991pcm无损波形文件,直接存储声音波形
mp3MPEG-11992mp3有损压缩比1:10甚至1:12,占有存储空间小,有版权
aacMPEG-21997aac有损支持多声道,更高解析度,更高压缩率
m4aMPEG-41998aac有损MPEG-4的扩展名,由ipod采用m4a变得流行
wma微软1999wma有损支持证书加密,主要应用于VOIP视频通话

音频码率

音频码率: 又称比特率,指的是单位时间内(一般为1s)所包含的音频数据量。

原始码率 = 采样率 * 采样位深(bit) * 声道数 * 时长(1s)

比如采样率 44.1kHZ,位深16bit的双声道的PCM数据,它的原始码率为

44.1 * 1000 * 16 * 2 * 1 = 1411200bps ≈ 1.346 Mbps

传输一分钟的音频数据需要消耗带宽 60 * 1.346 = 80.75Mbps

因为 1MB/s = 8Mbps, 所以接收原始音频的PCM数据1分钟大约要10M的流量,这个有点大,所以也可见传输过程的压缩很有必要。

参考

  1. 音乐与数学(1) - 从正弦函数讲起
  2. 数字信号
  3. 语音识别入门01-基本概念
  4. 音频相关基础知识(采样率、位深度、通道数、PCM、AAC)
  5. 音视频开发基础入门|声音的采集与量化、音频数字信号质量、音频码率
  6. 音频帧如何理解,码率采样率、音频帧、位深度、声道编码介绍
  7. 视频和视频帧:视频和帧基础知识整理
  8. 走进音视频的世界——音频封装格式
  9. 一文看懂 Mbps、Mb / s、MB/s 有什么区别

相关文章:

音频基础概念

声音 物体在一定的振动频率下产生了声音。声音可以被分解为不同频率不同强度正弦波的叠加。 声音三要素 声调 音调: 由发声体振动的频率决定&#xff0c;频率越高&#xff08;振动越快&#xff09;则音调越高&#xff0c;听起来就越“刺耳”&#xff0c;反之音调越低、听起…...

rust编程学习(二):复合数据类型

复合数据类型是由其他类型组合而成的类型。Rust的复合数据类型有元组、数组、结构体、枚举等&#xff0c; 通过一些简单的例子帮助大家快速了解Rust复合类型。 1 元组类型 元组类型是由一个或多个类型的元素组合成的复合类型&#xff0c;使用小括号“()”把所有元素放在一起。…...

学习笔记十四——一文看懂 Rust 迭代器

&#x1f300; 一文看懂 Rust 迭代器 &#x1f4da; 目录导航 什么是迭代器&#xff1f;为什么 Rust 到处都在用它&#xff1f;Rust 迭代器的底层逻辑是什么&#xff1f;适配器 vs 消费者&#xff1a;谁是主角&#xff1f;常见适配器&#xff1a;加工数据的全能工厂常见消费者…...

H.265硬件视频编码器xk265代码阅读 - 帧内预测

源代码地址&#xff1a; https://github.com/openasic-org/xk265 帧内预测具体逻辑包含在代码xk265\rtl\rec\rec_intra\intra_pred.v 文件中。 module intra_pred() 看起来是每次计算某个4x4块的预测像素值。 以下代码用来算每个pred_angle的具体数值&#xff0c;每个mode_i对应…...

贪心算法学习C++

1&#xff0c;跳跃游戏II 题目连接&#xff1a;45. 跳跃游戏 II - 力扣&#xff08;LeetCode&#xff09; 【题目描述】 在给定的一个nums数组中&#xff0c;nums[i]表示从当前i位置最多可以向后跳跃nums[i]个位置。问跳跃到最后 数组最后一个元素的最少跳跃次数&#xff1f;…...

Go 语言实现的简单 CMS Web

Go 语言实现的简单 CMS Web 以下是一个使用 Go 语言实现的简单 CMS Web 演示代码示例&#xff0c; 包含基本的内容管理功能&#xff1a; 项目结构 ### 项目结构 cms-demo/ ├── main.go ├── handlers/ ├── models/ ├── views/ │ ├── home.html │ ├─…...

Zookeeper选举机制

一、选举机制的核心原理 ZooKeeper的选举机制基于ZAB协议&#xff08;ZooKeeper Atomic Broadcast&#xff09;&#xff0c;这是一种为分布式系统设计的原子广播协议。其核心目标是快速选举出Leader节点&#xff0c;并确保数据一致性。以下为关键原理&#xff1a; 1. 选举触发…...

安卓自定义build的apk文件名

android studio打包应用默认生成的apk名称是&#xff1a;app-release.apk 。 如果我们想修改生成的apk文件名&#xff0c;比如想放入版本号&#xff0c;比如想放入渠道号&#xff0c;又比如和打包时间有关联&#xff0c;那我们就需要能自动化生成可自定义的apk文件名&#xff…...

【Web APIs】JavaScript 操作多个元素 ④ ( 表格全选复选框案例 )

文章目录 一、核心要点解析 - 表格全选复选框案例1、案例需求2、复选框设置3、获取 全选复选框 和 普通复选框4、设置 全选复选框 逻辑5、设置 普通复选框 逻辑 二、完整代码示例1、代码示例2、执行结果 一、核心要点解析 - 表格全选复选框案例 1、案例需求 在表格中 , 设置 多…...

Lua 第6部分 函数

在 Lua 语言中&#xff0c;函数&#xff08; Function &#xff09;是对语句和表达式进行抽象的主要方式。 函数既可以用 于完成某种特定任务&#xff08;有时在其他语言中也称为过程 &#xff08; procedure &#xff09;或子例程 &#xff08; s ubroutine) ), 也可以只是进行…...

OpenCv高阶(五)——SIFT特征提取

目录 SIFT特征提取 一、原理核心步骤 1. 尺度空间极值检测 2. 关键点定位 3. 方向分配 4. 描述子生成 二、SIFT算法具有的特点 三、SIFT特征提取器的简单使用 1、特征检测器的创建 2、 检测图像中的关键点 3、绘制关键点 4、计算关键点描述符 四、SIFT 算法的优缺点…...

基于Spring MVC的客户端真实IP获取方案解析

文章目录 基于Spring MVC的客户端真实IP获取方案解析概述核心方法解析代码实现工作流程 IP获取优先级策略IP有效性验证异常处理与日志使用场景注意事项扩展建议 基于Spring MVC的客户端真实IP获取方案解析 概述 在Web应用开发中&#xff0c;准确获取客户端真实IP地址是常见的…...

JavaScript爬虫基础篇:HTTP 请求与响应

在互联网的世界里&#xff0c;数据无处不在。无论是新闻资讯、商品信息&#xff0c;还是社交媒体动态&#xff0c;这些数据都以各种形式存储在服务器上。而爬虫&#xff0c;就是我们获取这些数据的得力助手。今天&#xff0c;我们就来聊聊爬虫的基础——HTTP 请求与响应&#x…...

【Java基础】Java集合遍历方式

前言 在Java编程中&#xff0c;集合&#xff08;Collection&#xff09;是存储和操作对象的核心工具。遍历集合是开发者最频繁的操作之一&#xff0c;但不同场景下选择合适的遍历方式至关重要。 一、基础遍历方式 1. 基本for循环 适用场景&#xff1a;仅适用于List等有序集…...

KWDB创作者计划—深度解析:AIoT时代的分布式多模型数据库新标杆

在AIoT&#xff08;人工智能物联网&#xff09;快速发展的今天&#xff0c;数据的多样性、实时性和复杂性对数据库提出了前所未有的挑战。传统的数据库架构往往难以同时满足时间序列数据的高效处理、关系型数据的复杂查询以及多模型数据的无缝集成需求。而KWDB 2.2.0版本的发布…...

智慧城市大数据整体建设方案,数据中台方案(word)

第1章 总体说明 1.1 建设背景 1.2 建设目标 1.3 项目建设主要内容 1.4 设计原则 第2章 对项目的理解 2.1 现状分析 2.2 业务需求分析 2.3 功能需求分析 第3章 大数据平台建设方案 3.1 大数据平台总体设计 3.2 大数据平台功能设计 3.3 平台应用 第4章…...

Nginx:轻量级高性能的Web服务器与反向代理服务器

目录 一.引言 二.Nginx的核心特点 2.1高性能与高并发 2.2低资源消耗 2.3功能丰富 2.4高度扩展性 三.Nginx的应用场景 3.1静态资源服务器 3.2反向代理服务器 3.3API网关 3.4Nginx的配置与使用 四.总结 一.引言 在互联网高速发展的今天&#xff0c;Web服务器的性能与…...

【Pandas】pandas DataFrame pop

Pandas2.2 DataFrame Indexing, iteration 方法描述DataFrame.head([n])用于返回 DataFrame 的前几行DataFrame.at快速访问和修改 DataFrame 中单个值的方法DataFrame.iat快速访问和修改 DataFrame 中单个值的方法DataFrame.loc用于基于标签&#xff08;行标签和列标签&#…...

Spring Boot集成MinIO的详细步骤

1. 安装MinIO 使用Docker部署MinIO 拉取MinIO镜像&#xff1a; docker pull minio/minio 这将从Docker Hub中获取最新的MinIO镜像。 创建目录&#xff1a; mkdir -p /home/minio/config mkdir -p /home/minio/data 这些目录将用于持久化MinIO的数据和配置文件 创建MinIO…...

【文献笔记】SatLM: Satisfiability-Aided Language Models Using Declarative Prompting

SatLM: Satisfiability-Aided Language Models Using Declarative Prompting 原文代码 标题翻译&#xff1a;SATLM&#xff1a;使用声明式提示的语言模型SAT辅助 1. 简介 1.1. 研究问题 文章提出了SATLM方式&#xff0c;使用LLM生成声明性任务规范&#xff0c;而不是命令式…...

LRU算法

package LRU缓存;import java.util.Arrays; import java.util.HashMap;//建立一个双向队列 class MyQueueNode{int key;int value;MyQueueNode pre;MyQueueNode next;public MyQueueNode(int key,int value){this.key key;this.valuevalue;} } class MyQueue{MyQueueNode head…...

二进制和docker两种方式部署Apache pulsar(standalone)

#作者&#xff1a;闫乾苓 文章目录 1、二进制安装部署Pulsar(standalone)1.1 安装配置JDK1.2 下载解压pulsar安装包1.3 启动独立模式的Pulsar 集群1.4 创建主题测试1.5 向主题写入消息测试1.6 从主题中读取消息测试 2.docker安装部署Pulsar(standalone)2.1 使用docker 启动Pul…...

【物联网】基于LORA组网的远程环境监测系统设计

基于LORA组网的远程环境监测系统设计 演示视频: 简介: 1.本系统有一个主机,两个从机。 2.一主多从的LORA组网通信,主机和两个从机都配备了STM32F103单片机与 LoRa 模块,主机作为中心设备及WIFI网关,负责接收和发送数据到远程物联网平台和手机APP,两个从机则负责采集数…...

k8s+有状态nacos账户密码安全认证开启+springcloud 配置

nacos 账号密码登录&#xff0c;默认未开启验证权限&#xff0c;不登录也能访问nacos控制台配置文件,生产环境非常不安全。所以需要手动开启安全认证。本地启动nacos的 application.properties配置文件更改如下&#xff1a; ### The auth system to use, currently only nacos …...

《分布式软总线赋能老旧设备高效通信》

在数字化转型的浪潮中&#xff0c;分布式软总线技术成为实现设备互联互通的关键力量。然而&#xff0c;当面对大量老旧设备时&#xff0c;其性能受限的现状对分布式软总线提出了严峻挑战。如何在这些性能瓶颈下&#xff0c;让老旧设备实现高效连接与通信&#xff0c;是亟待解决…...

07-云原生安全深度剖析:从 Kubernetes 集群防护到微服务安全加固

云原生安全深度剖析&#xff1a;从 Kubernetes 集群防护到微服务安全加固 一、云原生时代的安全挑战 1.1 云原生架构的复杂性引入新风险 在云原生架构下&#xff0c;Kubernetes 集群管理着大量动态变化的容器化应用&#xff0c;微服务通过 API 频繁交互&#xff0c;传统安全…...

Object.create(null)`和`{}`创建的对象有什么区别?

在 JavaScript 中&#xff0c;使用 Object.create(null) 和 {} 创建的对象有以下核心区别&#xff1a; 1. 原型链的差异 创建方式原型链&#xff08;[[Prototype]]&#xff09;继承关系const obj {}继承自 Object.prototype拥有 Object 的原型方法const obj Object.create(n…...

Sherpa简介

Sherpa 是一个由 K2-FSA 团队 开发的 开源语音处理框架&#xff0c;旨在解决传统语音识别工具&#xff08;如 Kaldi&#xff09;在模型部署和跨平台适配中的复杂性问题。它通过整合现代深度学习技术和高效推理引擎&#xff0c;提供了从语音识别、合成到说话人识别的一站式解决方…...

【MySQL】索引事务

索引 1.索引概念 数据库使用select查询需要将表中所有的数据都遍历一遍筛选出满足where条件的&#xff0c;如果表中数据非常多&#xff0c;遍历一遍就需要O(n)复杂度是非常高的&#xff0c;为此就引入了索引的概念。 索引是查询的优化手段&#xff0c;避免对表进行遍历&…...

STL详解 - list

目录 一、List容器概述 1.1 什么是list&#xff1f; 1.2 核心特点 二、List的定义与初始化 三、List 的基本操作 3.1 插入操作 &#x1f335;头插和尾插 &#x1f335;指定位置插入 3.2 删除操作 &#x1f34b;头删和尾删 &#x1f34b;指定位置删除 四、List 的迭代…...

LinkedList<Integer> 常用方法通俗讲解

LinkedList<Integer> linkedList new LinkedList<>(); 创建了一个整数类型的链表。链表就像一列火车&#xff0c;每节车厢(节点)都连接着下一节车厢。下面我用通俗易懂的方式讲解它的主要方法&#xff1a; 1. 添加元素 add(5) - 在链表末尾添加数字5&#xff0c…...

[250416] GitHub Action 新升级,支持 Windows on Arm

目录 GitHub Actions 更新&#xff1a;Windows arm64 托管运行器现已推出公共预览版 GitHub Actions 更新&#xff1a;Windows arm64 托管运行器现已推出公共预览版 现在&#xff0c;GitHub 为公共代码仓库免费提供了基于 Windows arm64 架构的托管运行器&#xff08;Hosted R…...

Spring Boot 整合 Redis 实现点赞功能:从基础到实践

在当今互联网应用开发中&#xff0c;点赞功能几乎成为了各类内容平台的标配。它不仅能增加用户与内容之间的互动&#xff0c;还能直观地反映内容的受欢迎程度。本文将详细介绍如何使用 Spring Boot 整合 Redis 来实现一个简单的文章点赞功能&#xff0c;让你轻松掌握这一实用技…...

深入解析布尔注入:原理、实战与防御

目录 一、布尔注入的原理与核心逻辑 二、布尔注入的实战步骤 三、关键函数与绕过技巧 四、实战案例&#xff1a;获取数据库名称 五、防御策略与最佳实践 六、总结 一、布尔注入的原理与核心逻辑 布尔注入&#xff08;Boolean-Based Blind SQL Injection&#xff09;是一种…...

1.2 使用RawInputSharp来取得键盘硬件信息以及虚拟码

RawInputSharp 是一个 C# 库&#xff0c;用于处理 Windows 的原始输入(Raw Input) API&#xff0c;它允许开发者直接访问键盘、鼠标等输入设备的底层数据。 本例介绍如何读取键盘的虚拟码以及键盘硬件信息。效果如下图&#xff1a; 示例中&#xff1a;开始是1键的按下与抬起&am…...

C++23 中的可选扩展浮点类型:std::float{16|32|64|128}_t 和 std::bfloat16_t

文章目录 1. 扩展浮点类型概述2. 如何使用这些类型3. 编译器支持4. 特性测试宏5. 类型转换和重载决议6. 标准库支持7. 应用场景8. 总结 C23 引入了可选的扩展浮点类型&#xff0c;包括 std::float16_t、 std::float32_t、 std::float64_t、 std::float128_t 和 std::bfloa…...

JVM 内存调优

内存调优 内存泄漏&#xff08;Memory Leak&#xff09;和内存溢出&#xff08;Memory Overflow&#xff09;是两种常见的内存管理问题&#xff0c;它们都可能导致程序执行不正常或系统性能下降&#xff0c;但它们的原因和表现有所不同。 内存泄漏 内存泄漏&#xff08;Memo…...

数据结构(java)栈与队列

栈&#xff1a;&#xff08;先进后出&#xff09; 入栈: 1.普通栈一定要放、最小栈放的原则是: *如果最小栈是空的&#xff0c;那么放 *如果最小栈的栈顶元素没有当前的元素小&#xff0c;则放 2.如果要放的的元素小于等于最小栈栈顶元素可以放吗?放 出栈: 需要…...

医疗大模型落地方案:技术选型、部署策略与调优

医疗大模型的落地应用已成为推动医疗行业数字化转型的重要引擎。本文将从技术选型、部署策略和调优方案三大维度&#xff0c;系统性地解析医疗大模型落地的关键要素&#xff0c;为医疗机构提供可操作的落地指南。随着人工智能技术的快速发展&#xff0c;医疗大模型已在影像诊断…...

JVM:类加载子系统

一、类加载子系统概述 类加载子系统由多个类加载器组成&#xff0c;它们负责从文件系统或者网络中读取二进制形式的字节码&#xff08;.class&#xff09;文件&#xff0c;并将其加载进 JVM。字节码文件中关于类的定义、类中属性的定义、类中方法的定义以及类中方法的字节码等…...

独家!美团2025校招大数据题库

推荐阅读文章列表 2025最新大数据开发面试笔记V6.0——试读 我的大数据学习之路 面试聊数仓第一季 题库目录 Java 1.写一个多线程代码 2.写一个单例代码 3.LinkedBlockingQueue原理 4.模板设计模式 5.如何设计一个 生产者-消费者队列 6.堆内存和栈内存 7.ThreadLo…...

Angular 框架详解:从入门到进阶

Hi&#xff0c;我是布兰妮甜 &#xff01;在当今快速发展的 Web 开发领域&#xff0c;Angular 作为 Google 主导的企业级前端框架&#xff0c;以其完整的解决方案、强大的类型系统和丰富的生态系统&#xff0c;成为构建大型复杂应用的首选。不同于其他渐进式框架&#xff0c;An…...

使用Vue 3与.NET 8.0通过SignalR实现实时通信,并结合JWT身份验证

实时通信是一个非常重要的功能。SignalR是一个强大的库&#xff0c;能够帮助我们轻松实现客户端和服务器之间的实时数据传输。本文将结合你的代码示例&#xff0c;向你展示如何使用Vue 3作为前端框架&#xff0c;ASP.NET Core作为后端框架&#xff0c;通过SignalR实现实时消息通…...

Harmonyos-Navigation路由跳转

Harmonyos-Navigation路由跳转 概述Navigation路由跳转模块内页面路由系统路由表测试页代码创建并配置路由表文件配置创建好的路由表文件跳转页面 自定义路由表 跨模块路由封装库模块路由跳转工具类 概述 Navigation是路由容器组件&#xff0c;一般作为首页的根容器&#xff0…...

《人工智能应用创新》5天出审稿意见!

期刊简介 《人工智能应用创新&#xff08;Innovative Applications of AI&#xff09;》 &#xff08;ISSN&#xff1a;3078-2147&#xff09;是由香港修墨信息工程研究院举办&#xff0c;经国际同行评审后收录的学术期刊。本刊共分三个栏目&#xff1a;综述分析、应用示范、前…...

Excel数据自动填充到Word自定义表格

上一份工作在一家国企做软件测试&#xff0c;需求变来变去&#xff08;3天一小改&#xff0c;5天换版面&#xff09;&#xff0c;xmind要先整理一遍测试用例&#xff08;版本迭代&#xff0c;该废的废&#xff0c;该加的加&#xff09;&#xff0c;完了细节在禅道里补充&#x…...

Spring Boot一次接口请求涉及的完整执行链路

Spring Boot一次接口请求涉及的完整执行链路 &#x1f501; Spring 项目请求执行链路&#xff08;简化视图&#xff09; 客户端请求&#xff08;浏览器、Postman&#xff09;↓ Tomcat&#xff08;Servlet 容器&#xff09;↓ 【Listener 监听器】↓ 【Filter 过滤器】&#x…...

mapbox基础,加载视频到地图

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言1.1 ☘️mapboxgl.Map 地图对象1.2 ☘️mapboxgl.Map style属性1.3 ☘️raster 栅格图层 api二、🍀加载视频到…...

Android动态化技术优化

Android动态化技术优化 一、WebView优化基础 1.1 WebView性能瓶颈 初始化耗时内存占用高页面加载慢白屏问题 1.2 WebView基本配置 class OptimizedWebView : WebView {init {// 开启硬件加速setLayerType(LAYER_TYPE_HARDWARE, null)// 配置WebSettingssettings.apply {//…...

Spring Boot 自定义定时任务组件深度解析:Quartz 集成与设计模式实战

一、组件设计目标 解决痛点&#xff1a; 简化 Quartz 原生 API 的复杂性统一任务调度管理&#xff08;增删改查、日志、重试&#xff09;与 Spring Boot 生态无缝整合 二、实现步骤详解 1. 组件初始化配置 1.1 初始化 Quartz 表结构 下载 SQL 脚本 &#x1f517; 官方表…...