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

记一次 .NET某旅行社酒店管理系统 卡死分析

一:背景

1. 讲故事

年初有位朋友找到我,说他们的管理系统不响应了,让我帮忙看下到底咋回事? 手上也有dump,那就来分析吧。

二:为什么没有响应

1. 线程池队列有积压吗?

朋友的系统是一个web系统,那web系统的无响应我们首先要关注的就是 线程池,使用 !sos tpq 命令,参考输出如下:


0:000> !sos tpq
global work item queue________________________________
0x00000004010774C0 Microsoft.AspNetCore.Server.IIS.Core.IISHttpContextOfT<Microsoft.AspNetCore.Hosting.HostingApplication+Context>
0x0000000401077808 Microsoft.AspNetCore.Server.IIS.Core.IISHttpContextOfT<Microsoft.AspNetCore.Hosting.HostingApplication+Context>
....
0x000000030239DD78 Microsoft.AspNetCore.Server.IIS.Core.IISHttpContextOfT<Microsoft.AspNetCore.Hosting.HostingApplication+Context>
0x000000030239E0C0 Microsoft.AspNetCore.Server.IIS.Core.IISHttpContextOfT<Microsoft.AspNetCore.Hosting.HostingApplication+Context>local per thread work items_____________________________________
0x0000000100A46410 System.Threading.Tasks.Task<System.Threading.Tasks.Task>
...
0x000000010133F8C0 System.Threading.Tasks.Task<System.Threading.Tasks.Task>2 Work  Microsoft.AspNetCore.Http.Connections.Internal.HttpConnectionContext+<>c.<WaitOnTasks>b__123_14 Work  Microsoft.AspNetCore.Http.Connections.Internal.HttpConnectionContext+<>c.<WaitOnTasks>b__123_0266 Work  Microsoft.AspNetCore.SignalR.HubConnectionContext.AbortConnection----272

从卦中可以看到确实存在线程池积压的情况,那为什么会有积压呢?条件反射告诉我,是不是因为锁的原因,使用 !syncblk 观察。


0:000> !syncblk
Index         SyncBlock MonitorHeld Recursion Owning Thread Info          SyncBlock Owner
-----------------------------
Total           468
CCW             0
RCW             0
ComClassFactory 0
Free            120

从卦中看和锁没半毛钱关系,那就只能深入各个消费线程,看看这些线程为什么这么不给力。。。。

2. 线程都在干什么

要想观察各个线程都在做什么,可以用 ~*e !clrstack 观察各个线程调用栈,输出的调用栈太长,但仔细观察之后,发现很多线程都停留在 TryGetConnnection 上,截图如下:

从卦中可以看到大概有143个线程卡在 TryGetConnection 上,不知道 Connection 为啥取不到了,接下来观察问题代码,简化后如下:

private bool TryGetConnection(DbConnection owningObject, uint waitForMultipleObjectsTimeout, bool allowCreate, bool onlyOneCheckConnection, DbConnectionOptions userOptions, out DbConnectionInternal connection){DbConnectionInternal dbConnectionInternal = null;Transaction transaction = null;if (HasTransactionAffinity){dbConnectionInternal = GetFromTransactedPool(out transaction);}if (dbConnectionInternal == null){Interlocked.Increment(ref _waitCount);do{num = WaitHandle.WaitAny(_waitHandles.GetHandles(allowCreate), (int)waitForMultipleObjectsTimeout);} while (dbConnectionInternal == null);}}private DbConnectionInternal GetFromTransactedPool(out Transaction transaction){transaction = ADP.GetCurrentTransaction();DbConnectionInternal dbConnectionInternal = null;if (null != transaction && _transactedConnectionPool != null){dbConnectionInternal = _transactedConnectionPool.GetTransactedObject(transaction);//....}return dbConnectionInternal;}internal DbConnectionInternal GetTransactedObject(Transaction transaction){lock (_transactedCxns){flag = _transactedCxns.TryGetValue(transaction, out value);}if (flag){lock (value){int num = value.Count - 1;if (0 <= num){dbConnectionInternal = value[num];value.RemoveAt(num);}}}return dbConnectionInternal;}

从卦中源码看是 _transactedCxns 返回 null 所致,看样子是_transactedCxns中的Conenction耗尽,接下来使用 !dso 从 DbConnectionPool 字段中去挖,输出如下:


0:298> !dso
OS Thread Id: 0x42c0 (298)SP/REG           Object Name0005c087d020     0003ffc79528 Microsoft.Data.ProviderBase.DbConnectionPool0:298> !do 0003ffc79528
Name:        Microsoft.Data.ProviderBase.DbConnectionPool
MethodTable: 000007fe8dd714c8
EEClass:     000007fe8dd65438
Tracked Type: false
Size:        176(0xb0) bytes
File:        D:\APP\EnergyDotNet\runtimes\win\lib\net6.0\Microsoft.Data.SqlClient.dll
Fields:MT    Field   Offset                 Type VT     Attr            Value Name
000007fe8dd71370  40001a7       8c         System.Int32  1 instance                1 _state
...
000007fe8cd994b0  40001ad       94         System.Int32  1 instance              143 _waitCount
000007fe8e012c68  40001b4       78 ...tedConnectionPool  0 instance 00000003ffc7a3e8 _transactedConnectionPool
...
000007fe8cd994b0  40001b6       9c         System.Int32  1 instance              100 _totalObjects
...0:298> !DumpObj /d 00000003ffc7a520
Name:        System.Collections.Generic.Dictionary`2[[System.Transactions.Transaction, System.Transactions.Local],[Microsoft.Data.ProviderBase.DbConnectionPool+TransactedConnectionList, Microsoft.Data.SqlClient]]
MethodTable: 000007fe8e0146a0
EEClass:     000007fe8cd8af30
Tracked Type: false
Size:        80(0x50) bytes
File:        C:\Program Files\dotnet\shared\Microsoft.NETCore.App\6.0.22\System.Private.CoreLib.dll
Fields:MT    Field   Offset                 Type VT     Attr            Value Name
000007fe8cda8480  4002065        8       System.Int32[]  0 instance 0000000000000000 _buckets
000007fe8e3255d8  4002066       10 ...ivate.CoreLib]][]  0 instance 0000000000000000 _entries
000007fe8cd9ca08  4002067       30        System.UInt64  1 instance                0 _fastModMultiplier
000007fe8cd994b0  4002068       38         System.Int32  1 instance                0 _count
000007fe8cd994b0  4002069       3c         System.Int32  1 instance                0 _freeList
000007fe8cd994b0  400206a       40         System.Int32  1 instance                0 _freeCount
000007fe8cd994b0  400206b       44         System.Int32  1 instance                0 _version
000007fe8cdb7900  400206c       18 ...Private.CoreLib]]  0 instance 0000000000000000 _comparer
000007fe8da70c90  400206d       20 ...Private.CoreLib]]  0 instance 0000000000000000 _keys
000007fe8d2a1c60  400206e       28 ...Private.CoreLib]]  0 instance 0000000000000000 _values

从上面的卦中数据可知三点信息:

  1. 100 _totalObjects 当前的线程池存着100个Connection。
  2. 0 _count 当前100个Connection全部耗尽。
  3. 143 _waitCount 表示当前有 143 个线程在获取 Connection 上进行等待。

3. 池中之物都去了哪里

要想找到这个答案,继续观察线程栈,比如搜索TDS传输层方法 Microsoft.Data.SqlClient.TdsParserStateObject.TryReadByte ,可以看到刚好是 100 个,上层大多是 xxxx.GetRoomNosInDltParams 方法,截图如下:

挖掘各个线程栈,大概都是下面的sql,格式化如下:


SELECT [HotelId],[RoomId],[SubRoomId],[SupplierId],[RoomNo],[RoomCategory],[SellPrice],[RoomNoState],[CheckInDate]
FROM [xxx]
WHERE ((((((([RoomId] IN (673,674)) AND( [SellPrice] > @SellPrice1 ))AND ( [CheckInDate] >= @CheckInDate2 ))AND ( [CheckInDate] <= @CheckInDate3 ))AND ( [RoomCategory] <=@constant5))AND ( [RoomNoState] =@constant7))AND NOT ([RoomNo] LIKE @MethodConst8+'%') )

反编译源码发现有一个 useCached 字段形同虚设,导致每次都是从 数据库 读取,截图如下:


到这里基本上就能推测出来的,程序的卡死主要是 Connection 耗尽,优化建议如下:

  1. SQL 加上 nolock,避免锁问题。
  2. GetRoomNosInDltParams 方法尽量使用缓存。
  3. 观察数据库层的锁和负载情况。
  4. 设置更大的数据库连接池。

三:总结

这次卡死的生产事故,是大量数据库的慢请求导致SDK侧的数据库连接池(100)耗尽所致,如果有数据库侧的监控工具,我想一眼就能找到答案。

相关文章:

记一次 .NET某旅行社酒店管理系统 卡死分析

一&#xff1a;背景 1. 讲故事 年初有位朋友找到我&#xff0c;说他们的管理系统不响应了&#xff0c;让我帮忙看下到底咋回事? 手上也有dump&#xff0c;那就来分析吧。 二&#xff1a;为什么没有响应 1. 线程池队列有积压吗&#xff1f; 朋友的系统是一个web系统&#…...

[预备知识]1. 线性代数基础

线性代数基础 线性代数是深度学习的重要基础&#xff0c;本章节将介绍深度学习中常用的线性代数概念和操作。 1. 标量、向量、矩阵与张量 1.1 标量&#xff08;Scalar&#xff09; 标量是单个数值&#xff0c;用 x ∈ R x \in \mathbb{R} x∈R 表示。在深度学习中常用于表…...

RESTful学习笔记(二)---简单网页前后端springboot项目搭建

新建项目&#xff1a; 项目结构 Pom.xml中添加依赖&#xff1a; 要有用于启动的父进程&#xff0c;有启动依赖&#xff0c;有lombok用于自动构建getter和setter方法等 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-…...

C++ AI模型部署优化实战:基于TensorRT的高效推理引擎开发

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家、CSDN平台优质创作者&#xff0c;高级开发工程师&#xff0c;数学专业&#xff0c;10年以上C/C, C#, Java等多种编程语言开发经验&#xff0c;拥有高级工程师证书&#xff1b;擅长C/C、C#等开发语言&#xff0c;熟悉Java常用开…...

[特殊字符] Prompt如何驱动大模型对本地文件实现自主变更:Cline技术深度解析

在AI技术快速发展的今天&#xff0c;编程方式正在经历一场革命性的变革。从传统的"人写代码"到"AI辅助编程"&#xff0c;再到"AI自主编程"&#xff0c;开发效率得到了质的提升。Cline作为一款基于VSCode的AI编程助手&#xff0c;通过其独特的pro…...

DevOps功能详解

DevOps 详解 1. 什么是 DevOps&#xff1f; DevOps 是 Development&#xff08;开发&#xff09; 和 Operations&#xff08;运维&#xff09; 的组合词&#xff0c;代表一种通过 自动化工具、协作文化 和 流程优化 来加速软件开发与交付的 方法论。其核心目标是打破开发与运维…...

忽略 CS8616 警告在 Visual Studio 2022 中【C# 8.0 】

CS8616 警告是 C# 8.0 引入的可空引用类型(NRT)相关警告&#xff0c;表示"由于可空引用类型的特性&#xff0c;某个不可为 null 的字段可能未被初始化"。 编辑项目csproj&#xff0c;直接删除<Nullable>enable</Nullable> 或者修改为disable或者annota…...

[架构之美]一键服务管理大师:Ubuntu智能服务停止与清理脚本深度解析

[架构之美]一键服务管理大师&#xff1a;Ubuntu智能服务停止与清理脚本深度解析 服务展示&#xff1a; 运行脚本&#xff1a; 剩余服务&#xff1a; 一、脚本设计背景与核心价值 在Linux服务器运维中&#xff0c;服务管理是日常操作的重要环节。本文介绍的智能服务管理脚本&a…...

23种设计模式-结构型模式之外观模式(Java版本)

Java 外观模式&#xff08;Facade Pattern&#xff09;详解 &#x1f9ed; 什么是外观模式&#xff1f; 外观模式是结构型设计模式之一&#xff0c;为子系统中的一组接口提供一个统一的高层接口&#xff0c;使得子系统更易使用。 就像是酒店前台&#xff0c;帮你处理入住、叫…...

《数据结构之美--双向链表》

引言 之前我们学习了单链表这一数据结构&#xff0c;虽然单链表的功能比较多&#xff0c;但是也存在着一些局限性&#xff0c;因为在单链表中节点的指向都是单向的&#xff0c;因此我们想从某个节点找到它的上一个节点比较困难&#xff0c;来不及再迷恋单链表了&#xff0c;接…...

如何判断设备是否支持带电插拔——从原理到实操的全面解析

点击下面图片带您领略全新的嵌入式学习路线 &#x1f525;爆款热榜 88万阅读 1.6万收藏 一、带电插拔的核心原理 带电插拔&#xff08;热插拔&#xff09;的本质是通过电气隔离设计和顺序通断控制&#xff0c;避免电流突变对设备造成损害。 • 触点分级设计&#xff1a;支持热…...

Google Store 如何利用 glTF 3D 模型改变产品教育

Google 为全球广大用户提供种类繁多、持续改进的硬件产品。Google 的智能手机、智能手表、耳机、平板电脑、智能家居设备等产品均通过 Google Store(谷歌商店) 以及遍布全球的实体和数字第三方零售商销售。作为一个以在人工智能、智能家居和个人设备体验方面不断开拓创新而闻名…...

Flutter 状态管理 Riverpod

Android Studio版本 Flutter SDK 版本 将依赖项添加到您的应用 flutter pub add flutter_riverpod flutter pub add riverpod_annotation flutter pub add dev:riverpod_generator flutter pub add dev:build_runner flutter pub add dev:custom_lint flutter pub add dev:riv…...

flutter 专题 六十六 Flutter Dio包网络请求抓包解决方案

在Flutter中进行网络请求时&#xff0c;我们可以使用的库有3个&#xff0c;即Http请求库、HttpClient请求库和Dio请求库&#xff08;详细介绍请参考&#xff1a;Flutter开发之Http网络请求&#xff09;&#xff0c;使用得最多的就是Dio请求库。因为相比Http请求库和HttpClient请…...

DSL(Domain Specific Language,领域特定语言)

DSL的定义和作用 DSL是为特定业务领域设计的专门语言&#xff0c;这里特指为欺诈检测场景设计的规则描述语言通过DSL&#xff0c;业务人员可以用接近自然语言的方式定义欺诈检测规则&#xff0c;而不需要编写复杂的代码DSL的具体实现&#xff1a;使用ANTLR4作为语法解析工具支…...

基于SpringBoot的心情疗愈平台-项目分享

基于SpringBoot的心情疗愈平台-项目分享 项目介绍项目摘要管理员功能图用户实体图心理咨询师功能图系统功能图项目预览情感树洞发布帖子讲座信息心理医生心理医生管理 最后 项目介绍 使用者&#xff1a;管理员、用户、心理咨询师 开发技术&#xff1a;MySQLJavaSpringBootVue …...

富文本图片过大问题

在做若依的项目&#xff0c;碰到了若依自带的公告功能的图片上传后&#xff0c;再显示会出现图片过大的问题。在修改若依代码无果后&#xff0c;退而求其次修改展示页面的代码。 问题描述&#xff1a; 在若依框架的打卡系统中&#xff0c;公告使用富文本上传图片后&#xff0…...

Python-Django系列—部件

部件是 Django 对 HTML 输入元素的表示。部件处理 HTML 的渲染&#xff0c;以及从对应于部件的 GET&#xff0f;POST 字典中提取数据。 内置部件生成的 HTML 使用 HTML5 语法&#xff0c;目标是 <!DOCTYPE html>。例如&#xff0c;它使用布尔属性&#xff0c;如 checked…...

开发者视角:轻量便捷的AI视觉训推一体机如何实现AI模型快速开发

一、行业背景 1&#xff09;数据与算力基础夯实&#xff1a;互联网、物联网和移动互联网的普及使得视觉数据呈爆发式增长&#xff0c;为AI视觉训推技术提供了丰富的“燃料”。同时&#xff0c;GPU、TPU等计算芯片的广泛使用&#xff0c;以及云计算的兴起&#xff0c;让计算能力…...

基于Python(Django)+SQLite实现(Web)校园助手

校园助手 本校园助手采用 B/S 架构。并已将其部署到服务器上。在网址上输入 db.uplei.com 即可访问。 使用说明 可使用如下账号体验&#xff1a; 学生界面: 账号1&#xff1a;123 密码1&#xff1a;123 账户2&#xff1a;201805301348 密码2&#xff1a;1 # --------------…...

Django 入门指南:构建强大的 Web 应用程序

什么是 Django&#xff1f; Django 是一个开源的高层次 Python Web 框架&#xff0c;旨在快速开发安全且可维护的网站。它通过简化常见的 Web 开发任务&#xff0c;帮助开发者专注于开发应用的核心功能。Django 实现了“快速开发”和“尽量少的重复”的理念&#xff0c;提供了…...

一文了解相位阵列天线中的真时延

本文要点 真时延是宽带带相位阵列天线的关键元素之一。 真时延透过在整个信号频谱上应用可变相移来消除波束斜视现象。 在相位阵列中使用时延单元或电路板&#xff0c;以提供波束控制和相移。 市场越来越需要更快、更可靠的通讯网络&#xff0c;而宽带通信系统正在努力满…...

LangChain实现PDF中图表文本多模态数据向量化及RAG应用实战指南

如何用LangChain实现PDF多模态数据向量化及RAG应用实战指南 在大模型应用中&#xff0c;PDF文档因包含文本、表格、图片等异构数据&#xff0c;成为RAG&#xff08;检索增强生成&#xff09;系统的核心挑战。本文基于LangChain框架&#xff0c;结合多模态处理技术&#xff0c;…...

OkHttp入门

OkHttp 简介与使用示例 OkHttp 是一个高效的 HTTP 客户端&#xff0c;用于 Android、Java 应用程序以及 Kotlin 应用程序。它支持同步阻塞调用和异步调用&#xff0c;同时提供了强大的拦截器和重定向处理功能。OkHttp 由 Square 公司开发&#xff0c;因其高性能和易用性而广受…...

在ARM Linux应用层下驱动MFRC522

文章目录 1、前言2、IC卡 和 IC卡读卡器3、MFRC5223.1、寄存器集3.2、命令集3.3、数据操作3.4、基础函数编写3.4.1、MFRC522接线3.4.2、编写SPI操作函数3.4.3、编写MFRC522基础函数3.4.3.1、完整的mfrc522.h3.4.3.2、写寄存器和读寄存器3.4.3.3、复位引脚操作3.4.3.4、天线操作…...

力扣第446场周赛

有事没赶上, 赛后模拟了一下, 分享一下我的解题思路和做题感受 1.执行指令后的得分 题目链接如下&#xff1a;力扣 给你两个数组&#xff1a;instructions 和 values&#xff0c;数组的长度均为 n。 你需要根据以下规则模拟一个过程&#xff1a; 从下标 i 0 的第一个指令开始…...

close和shutdown

1.shutdown() 控制 TCP 连接的读写方向&#xff0c;不会关闭文件描述符&#xff0c;也不会触发四次挥手。 shutdown(sockfd, SHUT_RD): 关闭套接字的读方向。套接字不能再接收数据。 shutdown(sockfd, SHUT_WR): 关闭套接字的写方向。套接字不能再发送数据。 shutdown(sockfd…...

LeetCode算法题(Go语言实现)_54

题目 给你两个正整数数组 spells 和 potions &#xff0c;长度分别为 n 和 m &#xff0c;其中 spells[i] 表示第 i 个咒语的能量强度&#xff0c;potions[j] 表示第 j 瓶药水的能量强度。 同时给你一个整数 success 。一个咒语和药水的能量强度 相乘 如果 大于等于 success &a…...

.NET应用UI框架DevExpress XAF v24.2新版亮点:支持.NET 9

DevExpress XAF是一款强大的现代应用程序框架&#xff0c;允许同时开发ASP.NET和WinForms。DevExpress XAF采用模块化设计&#xff0c;开发人员可以选择内建模块&#xff0c;也可以自行创建&#xff0c;从而以更快的速度和比开发人员当前更强有力的方式创建应用程序。 在DevEx…...

前端通过jenkins和docker打包部署流程

通过jenkins实现镜像打包和上传 1.在jenkins上创建流水线任务 点击新建任务 填写任务名称 选多分支流水线 增加分支源 选git 添加并选择凭据&#xff08;有项目权限的git账号密码&#xff09; 填写分支的正则表达式&#xff0c;多分支使用^(分支名|分支名)$ 保存 …...

SpringBoot自定义验证器:企业级参数校验架构设计与实践

一、需求分析与技术选型 在复杂业务场景中,标准校验注解(如@NotBlank、@Pattern)往往无法满足特殊业务规则验证需求。例如: 需要校验字段值在预定义的枚举范围内多字段之间存在关联性校验(如起始时间不能晚于结束时间)需要动态查询数据库进行业务规则校验架构设计原则:…...

4U带屏基于DSP/ARM+FPGA+AI的电力故障录波装置设计方案,支持全国产化

4U带屏DSP/ARMFPGAAI电力故障录波分析仪&#xff0c;支持国产化&#xff0c;含有CPU主控模块&#xff0c;96路模拟量采集&#xff0c;256路开关量&#xff0c;通讯扩展卡等#电力故障录波#4U带屏#新能源#电力监测 主要特点 1&#xff09;是采用嵌入式图形系统&#xff0c;以及…...

笔试题——第五周

目录 Day1 排序子序列 消减整数 最长上升子序列 Day2 爱吃素 相差不超过k的最多数 最长公共子序列(一) Day3 小红的口罩 春游 数位染色 Day4 素数回文 活动安排 合唱团 Day5 跳台阶扩展问题 包含不超过两种字符的最长子串 字符串的排列 Day6 ISBN号码 k…...

图论-Floyd算法

在搜索中bfs只适合无权图 若是碰到有权图最简单的方法就是用邻接矩阵-二维矩阵存储每个点对之间的权重,然后用floyd 并且邻接矩阵还可以处理重边的问题&#xff08;用min&#xff09; INFfloat(inf) ma[[INF]*n for _ in range(n)]for i in range(n):ma[i][i]0for i in rang…...

使用pyinstaller打包fastapi项目的问题记录

文章目录 PyInstaller 相关介绍作用使用方式Spec 文件介绍 FastAPI 相关介绍什么是 FastAPI&#xff1f;使用方式 使用 PyInstaller 打包 FastAPI 项目常见问题与解决方案 PyInstaller 相关介绍 作用 PyInstaller 是一个将 Python 程序打包成独立可执行文件的工具&#xff0c…...

Java秒杀功能-案例

数据库表设计 CREATE TABLE user (id bigint(20) NOT NULL AUTO_INCREMENT,name varchar(100) NOT NULL,password varchar(100) NOT NULL,PRIMARY KEY (id) ) ENGINEInnoDB DEFAULT CHARSETutf8;CREATE TABLE order_info (id bigint(20) NOT NULL AUTO_INCREMENT,user_id bigi…...

Abp发布订阅

在 ABP&#xff08;AspNet Boilerplate&#xff09;框架里运用发布 - 订阅模式&#xff0c;有着多方面重要目的&#xff0c;以下为你详细阐述&#xff1a; 实现组件间的解耦 减少直接依赖&#xff1a;在传统的编程方式中&#xff0c;不同组件之间可能存在紧密的耦合关系&…...

docker部署ruoyi-vue-pro前后端详细笔记

docker部署ruoyi-vue-pro前后端详细笔记 参考&#xff1a;YuDaoCloud&#xff1a;Docker 部署 - 那个码农 1.准备工作 1.1 需要准备服务器&#xff0c;安装bt面板方便操作 if [ -f /usr/bin/curl ];then curl -sSO https://download.bt.cn/install/install_panel.sh;else wg…...

软考中级数据库系统工程师学习资料分享

软考中级数据库系统工程师考试对于很多 IT 从业者和计算机专业的大学生来说&#xff0c;是一个重要的职业资格认证。它不仅能够提升个人的专业技能&#xff0c;还能为职业发展增添有力的砝码。今天&#xff0c;我将为大家分享一套全面且实用的学习资料&#xff0c;帮助大家更好…...

RESTful学习笔记(一)

Web发展 一、API 程序硬件接口&#xff08;Application Programming Interface&#xff09;&#xff0c;是预先定义好的逻辑函数&#xff0c;软件系统不同组成部分衔接的约定&#xff0c;直接调用函数&#xff0c;无序访问代码细节&#xff0c;分为SDK和Web应用接口两类 SDK…...

基于 FFmpeg 的音视频处理基础原理与实验探究

目录 1 基本知识1.1 解封装1.2 AAC和ADTS说明 1.3 H2641.3.1 H264编码结构解析1.3.2 NALU1.3.2 分类 2 实验1 探究音视频信息2.1 重要结构体介绍2.2 相关的API 3 实验二 提取AAC数据4 实验三 提取h264 1 基本知识 1.1 解封装 封装的逆向操作&#xff1a;封装是把音频流、视频流…...

spark和hadoop的区别

一、核心定位与架构差异 Hadoop • 定位&#xff1a;分布式存储与计算的基础框架&#xff0c;核心解决海量数据的存储&#xff08;HDFS&#xff09;和离线批处理计算&#xff08;MapReduce&#xff09;问题&#xff0c;适合对实时性要求不高的大规模数据离线处理场景。 • 架构…...

vue使用语音识别

vue使用语音识别 使用 Web Speech API 实现语音识别功能 语音转换的原理可以简单概括为以下几个步骤&#xff1a; 声音捕捉&#xff1a;将声波转化为数字信号。特征提取&#xff1a;分析声音中的关键特征。声学模型&#xff1a;将声音特征与音素匹配。语言模型&#xff1a;根据…...

代码随想录算法训练营day8(栈与队列)

华子目录 用栈实现队列思路 用栈实现队列 https://leetcode.cn/problems/implement-queue-using-stacks/description/ push(x) -- 将一个元素放入队列的尾部。 pop() -- 从队列首部移除元素。 peek() -- 返回队列首部的元素。 empty() -- 返回队列是否为空。思路 初始化两个栈…...

GPT,Genini, Claude Llama, DeepSeek,Qwen,Grok,选对LLM大模型真的可以事半功倍!

选对大模型真的可以事半功倍&#xff01; 基于公开的技术报告、基准测试结果、在线反馈及用户使用情况&#xff0c;深入探讨各模型的特点、擅长领域及典型应用场景&#xff0c;为用户和开发者选择和应用合适的模型提供参考。 1. 引言 大型语言模型&#xff08;Large Language…...

Unocss 类名基操, tailwindcss 类名

这里只列出 unocss 的可实现类名&#xff0c;tailwindcss 可以拿去试试用 1. 父元素移入&#xff0c;子元素改样式 <!-- 必须是 group 类名 --> <div class"group"><div class"group-hover:color-red">Text</div> </div>2…...

Flowable7.x学习笔记(十)分页查询已部署 BPMN XML 流程

前言 上一篇文章我们已经完成了流程的部署功能&#xff0c;那么下一步就是要激活流程了&#xff0c;但是我们要需要明确的指定具体要激活部署后的哪一条流程&#xff0c;所以我们先把已部署的基础信息以及具体定义信息分页查询出来&#xff0c;本文先把基础代码生成以及完成分页…...

【阿里云大模型高级工程师ACP学习笔记】2.1 用大模型构建新人答疑机器人

学习目标 在备考阿里云大模型高级工程师ACP认证时,学习《2.1用大模型构建新人答疑机器人》这部分内容,主要是为了掌握利用大模型技术构建高效答疑机器人的方法,提升在大模型应用开发领域的专业能力。具体目标如下: 掌握大模型API调用:学会通过API调用通义千问大模型,熟悉…...

设计模式深度总结:概念、实现与框架中的应用

【全网最全】23种设计模式思维导图详解 | 含React/Vue/Spring实战案例 导图概述 本文通过高清思维导图系统梳理了23种设计模式&#xff0c;分为创建型、结构型、行为型三大类&#xff0c;并标注了各模式在主流框架&#xff08;如React、Vue、Spring&#xff09;中的典型应用场…...

2025 活体识别+人脸认证工具类【阿里云api,需要先申请试用】

&#xff08;1&#xff09;获取活体检测的人脸URL地址和Token。 &#xff08;2&#xff09;活体检测成功后&#xff0c;使用Token验证人脸检测结果的一致性。 &#xff08;3&#xff09;对于检测结果一致的人脸照片&#xff0c;进行姓名、身份证号和照片的认证流程。 一、活…...