MySQL学习笔记7【InnoDB】
Innodb
1. 架构
1.1 内存部分
buffer pool
缓冲池是主存中的第一个区域,里面可以缓存磁盘上经常操作的真实数据,在执行增删查改操作时,先操作缓冲池中的数据,然后以一定频率刷新到磁盘,这样操作明显提升了速度。
缓冲池以page为单位,底层采取链表的数据结构管理page,这一点和xv6是一模一样的,根据状态,分为三类:
- 空闲页free page
- 干净页clean page,分配之后没有被修改过
- 脏页dirty page,数据被修改过,与磁盘中的数据不一致
change buffer
更改缓冲区,字面意思,主要针对于二级索引页,当我们在buffer pool执行数据变更操作(DML)的时候,如果没有找到这个数据,并不会直接读取磁盘数据,而是将其写入到change buffer,等未来读取数据的时候,直接将数据合并,恢复到buffer pool中,再将数据刷新到磁盘中,由于二级索引页插入删除相对随机,所以如果每次写入都会进行磁盘IO的话,性能太差,而使用change buffer,就减少了磁盘IO,提高了读写效率。
自适应哈希
自适应哈希索引,我们的InnoDB引擎默认是B+树索引,相对于哈希表慢一点,但是哈希表不支持范围查询,所以InnoDB为了提高查询效率,为buffer pool添加了一个自适应哈希索引,我们的InnoDB引擎会自己监控各个索引页上的索引,如果观察到hash索引可以提升查询速度,就会建立哈希索引,这个过程无需人工干预,但是我们需要知道这个参数是adaptive_hash_index
,默认开启。
log buffer
保存要写入到磁盘中的两份日志:redo log和undo log,默认大小16M,会定期刷新到磁盘,如果更新插入较频繁,增加缓冲区大小可以减少磁盘IO,参数:
- innodb_log_buffer:缓冲区大小。
- innodb_flush_log_trx_commit:刷新到磁盘的时机。
- 1:每次事务提交写入
- 0:每秒写入
- 2:两者结合
1.2 磁盘部分
系统表空间
主要处理非主键非唯一的二级索引的更改缓冲区,也就是change buffer,当然,这个和内存中的change buffer不一样,它主要用来存储我们的在真正写入表空间的变更操作,为啥不直接写入表空间?,原因是这样可以进一步避免频繁的磁盘IO,我们缓存的是变更操作,而不是整页的数据,并且在磁盘上,可以缓存大量变更。
文件表空间
我们建立的每一张表都有一个独立的表空间,文件表空间都包含单个InnoDB表的结构,数据和索引,并且存储在文件系统的单个数据文件中,参数:innodb_file_per_table
。
通用表空间
如果我们没有自己去创建,是没有这个通用表空间的,需要通过CREATE TABLESPACE
来创建,我们可以为表指定表空间
CREATE TABLE [name] (......
)TABLESPACE [spacename];
这样可以使得多个表共享一个ibd文件,避免ibd文件过多,当然,这些表依旧是独立的,我们可以将许多小型的表集中存储,可以减少磁盘碎片,简化管理,并且利于批量的备份恢复。
撤销表空间
在mysql实例初始化时会自动创建两个默认的undo表空间,初始大小16M,用于存储undo log日志,保证事务的原子性和一致性,主要用于支持事务的回滚操作。
临时表空间
用于存储用户创建的临时表,比如说多表查询时会创建一个临时表,我们在执行查询/排序/GROUP BY等等的复杂操作时,可能会产生一个临时表存储中间结果,而这个临时表就存储在临时表空间当中,查询结束后,就会自动清理。
双写缓冲区
InnoDB引擎将数据页从buffer pool刷新到磁盘前,先会将数据页写入到双写缓冲区文件,便于系统异常时恢复。
重做日志
redo log,用来实现事务的持久性,由重做日志缓冲区和重做日志文件两部分组成,前者位于内存,后者位于磁盘,当事务提交之后,会将所有修改信息都存到该日志中,用于在刷新脏页到磁盘发生错误时的数据恢复使用。
而我们的redo log是一个循环写的机制,这一点和redis的AOF很像。
1.3 后台线程
将内存中缓存池的数据在合适的时机刷新入磁盘中。
Master Thread
核心后台线程,负责调度其他线程,还负责将缓冲池中的数据异步刷新到磁盘中,保持数据一致性,包括脏页的刷新,合并插入缓存,undo页的回收等。
IO Thread
在innodb引擎中,采取了AIO,也就是异步非阻塞IO,极大地提高了数据库的性能,我们的IO Thread主要负责这些异步请求的回调。
- Read Thread:读操作
- Write Thread:写操作
- Log Thread:将日志缓冲区刷新到磁盘
- Insert Buffer Thread:将写缓冲区的数据刷新到磁盘
Purge Thread
回收事务已经提交的Undo Log,事务提交之后,之前记录的undo log不再使用,就用purge thread来回收
Page Cleaner Thread
协助Master Thread刷新脏页到磁盘的线程,减轻核心后台线程的压力。
2. 事务原理
2.1 事务
前文我们知道,事务是密不可分的集合,具有ACID的特性,原子性,一致性,隔离性,持久性。
其中,原子性,一致性和持久性是由我们的redo log和undo log支持实现的;而隔离性是由我们InnoDB的锁机制和MVCC(多版本并发控制)实现的。
2.2 redo log
重做日志,记录事务提交时的数据页的修改,用来实现持久性,由redo log buffer和redo log file两部分组成,前者内存,厚泽磁盘,事务提交之后,会把所有修改信息都存到该日志文件中,用于刷新脏页到磁盘,发生错误时进行数据恢复使用,大致流程如下:
- 客户端向mysql服务端发起update操作
- mysql查询buffer pool,发现没有我们需要更新的数据。
- 启动后台线程,从后台读取我们需要的信息,随后写入到缓冲区,此时就可以直接对缓冲区进行操作,并且会将增删改的数据写入到redo log buffer当中,此时磁盘和内存数据不一致,称之为脏页。
- 那么我们如果定期将内存的数据刷新到磁盘,此时出错了,如果没有redo log buffer,我们的事务已经提交,说明了无法得到数据持久性保证,但是我们有了redo log,我们的redo log buffer会直接将修改的数据刷新到磁盘中的redo log file,如果出错了,就会通过redo log file恢复数据,**为啥redo log buffer不直接刷新到真正的数据页?**因为我们真正的数据页刷新将会是随机的IO,而直接记录到日志上是顺序写,所以性能更高。
- 而我们的redo log日志是类似循环写的模式,每隔一段时间都会被清理。
2.3 undo log
undo log日志解决原子性问题,叫做回滚日志,记录数据被修改前的操作,它可以提供回滚和MVCC(多版本并发控制),undo log和redo log的记录物理日志不一样,他是逻辑日志,比如说我们insert一条信息,在undo log中就是delete的形式记录,当我们执行rollback,就可以读取到相应的内容进行回滚。
undo log在事务执行时产生,但是在事务提交时并不会立刻删除,因为这些日志还可能用于MVCC,并且undo log采取段的方式时机管理和记录,存在rollback段,内部包含1024个undo log。
3. MVCC(多版本并发控制)
3.1 当前读
读取的是记录最新版本的记录,会加锁保证其他并发事务不会修改,我们在事务隔离级别可重复读中使用事务,如果在进入事务之后,有数据被修改,那么我们读取到的数据并不是最新的,也就不是当前读,如果想要当前读,我们可以执行 SELECT ... LOCK IN SHARE MODE
,初次之外,还可以使用 SELECT FOR UPDATE/INSERT/DELETE
来实现当前读。
3.2 快照读
简单的selete就是我们的快照读,比如我们在可重复读的事务隔离级别中,就是典型的快照读,不加锁,是非阻塞读,当然,在我们的串行化的事务隔离级别中,快照读就会退化为当前读,在read committed中,每次select都会生成一个快照读。
3.3 MVCC
多版本并发控制,它会维护一个数据的多个版本,使得读写操作没有冲突,快照读为mysql实现mvcc提供了一个重要的非阻塞读功能,当,MVCC还依赖于数据库记录的三个隐式字段,undo log, readview。
隐式字段
当我们创建表的时候,会指定相应的表结构,包括id,name,age的字段,我们可以显式的看到这些字段,但是实际上,mysql还未我们隐藏了三个额外增加的字段:
DB_TRX_ID:最近修改事务ID,记录最后插入或修改这一行的事务ID。
DB_ROLL_PTR:回滚指针,指向这条记录的上一个版本,配合undo log。
DB_ROW_ID:隐藏主键,如果表结构没有主键,就会生成这个隐藏字段。
undo log
我们之前提过,undo log在一定情况下不会被立即删除,比如update和delete,产生的undo log不仅在回滚时需要,快照读的时候也需要,所以不会被立即删除,而insert只会在回滚的时候才需要,所以在事务提交的时候可以立即删除,下面来看看实例分析:
借用一下黑马程序员的图
以上的示例列举的进行修改操作时的MVCC的版本链的控制,而执行查询操作的时候,则涉及到了另一个组件readView
readview
读视图,是快照读SQL执行时MVCC提取数据的依据,记录并维护当前活跃的事务(未提交)的id,包含四个核心字段:
m_ids:当前活跃的事务ID的集合
min_trx_id:最小的活跃事务ID
max_trx_id:预分配事务ID,当前最大事务ID + 1
creator_trx_id:readview创建者的事务ID
版本链访问规则:
trx_id(当前事务ID) == creator_trx_id:ok,说明数据是当前事务更改的。
trx_id < min_trx_id:ok,说明数据已经提交。
trx_id > max_trx_id:no,该事务是在readview生成后才开启的。
min_trx_id <= trx_id <= max_trx_id && trx_id 不存在于m_ids中:ok,数据已经提交。
readview生成时机在不同隔离级别有所不同:
read committed:事务每次执行快照读时,都会生成。(这里建议去看看黑马的视频里面的分析)
repeatable read:在事务第一次执行快照读时生成readview,后续复用这个readview。
ax_trx_id && trx_id 不存在于m_ids中:ok,数据已经提交。
readview生成时机在不同隔离级别有所不同:
read committed:事务每次执行快照读时,都会生成。(这里建议去看看黑马的视频里面的分析)
repeatable read:在事务第一次执行快照读时生成readview,后续复用这个readview。
这样,原理就介绍完毕了。
下午把lab做完了,继续学可能效率不太高,就把之前欠的账补上了。
相关文章:
MySQL学习笔记7【InnoDB】
Innodb 1. 架构 1.1 内存部分 buffer pool 缓冲池是主存中的第一个区域,里面可以缓存磁盘上经常操作的真实数据,在执行增删查改操作时,先操作缓冲池中的数据,然后以一定频率刷新到磁盘,这样操作明显提升了速度。 …...
HTML应用指南:利用GET请求获取全国汉堡王门店位置信息
在当今快节奏的都市生活中,餐饮品牌的门店布局不仅反映了其市场策略,更折射出消费者对便捷、品质和品牌认同的追求。汉堡王(Burger King)作为全球知名的西式快餐品牌之一,在中国市场同样占据重要地位。自进入中国市场以…...
STM32+EC600E 4G模块 与华为云平台通信
前言 由于在STM32巡回研讨会上淘了一块EC600E4G模块以及刚办完电信卡多了两张副卡,副卡有流量刚好可以用一下,试想着以后画一块ESP32板子搭配这个4G模块做个随身WIFI,目前先用这个模块搭配STM32玩一下云平顺便记录一下。 实验目的 实现STM…...
【Spring】IoC详解:五大类注解、类Bean的存储(上)
1.IoC本质 IoC(Inversion of Control,控制反转) 是Spring框架的灵魂,它颠覆了传统编程中“谁用谁造”的逻辑。简单来说,IoC就是把对象创建和管理的控制权从程序员手中“反转”给一个外部容器,让代码更灵活…...
图片压缩后失真?3款工具还原高清细节
在当今,图片的使用无处不在。为了便于存储和传输,我们常常会对图片进行压缩。然而,不少人发现,压缩后的图片往往变得模糊,失去了原本的清晰度和细节。那么,当遇到这种情况时,我们该如何将模糊的…...
2025中国移动云智算大会|彩讯企业级AI应用产品引关注
2025中国移动以“由云向智,共绘算网新生态”为主题,精心打造了一场智能科技展。中国移动携手生态伙伴带来涵盖算力、工具、模型、应用等覆盖多样化场景的AI应用服务,赋能生产方式、生活方式、社会治理方式的数智化解决方案,充分释…...
在新一代人工智能技术引领下的,相互联系、层层递进的明厨亮灶开源了
明厨亮灶视频监控平台是一款功能强大且简单易用的实时算法视频监控系统。它的愿景是最底层打通各大芯片厂商相互间的壁垒,省去繁琐重复的适配流程,实现芯片、算法、应用的全流程组合,从而大大减少企业级应用约95%的开发成本。AI技术可以24小时…...
修图自由!自建IOPaint服务器,手机平板随时随地远程调用在线P图
前言:在这个人人都想当摄影师的时代,一张完美的照片简直比中彩票还难。但别担心,今天我来给大家揭秘一个超级神器——IOPaint!这款免费开源的AI工具不仅能一键移除照片中的杂物和路人,还能智能扩展图片内容,…...
PyTorch实现二维卷积与边缘检测:从原理到实战
本文通过PyTorch实现二维互相关运算、自定义卷积层,并演示如何通过卷积核检测图像边缘。同时,我们将训练一个卷积核参数,使其能够从数据中学习边缘特征。 1. 二维互相关运算的实现 互相关运算(Cross-Correlation)是卷…...
解决Server doesn‘t support Accept-Ranges问题
Cannot download differentially, fallback to full download: Error: Server doesnt support Accept-Ranges (response code 200) 解决方案 修改nginx配置文件支持Accept-Ranges(范围请求) server {...location ^~/ {default_type multipart/byterang…...
处理Excel表不等长时间序列用tsfresh提取时序特征
我原本的时间序列格式是excel表记录的,每一行是一条时间序列,时间序列不等长。 要把excel表数据读取出来之后转换成extract_features需要的格式。 1.读取excel表数据 import pandas as pd import numpy as np from tsfresh import extract_features mda…...
Linux __命令和权限
目录 一、几个指令 bc uname -r 指令 重要的几个热键 二、Shell命令以及运行原理 为什么有外壳 外壳是如何工作的 什么是操作系统,为什么要有操作系统 三、文件类型 1、Linux的文件类型 2、文件类型 四、用户 用户问题和切换问题 增加普通用户 root -&…...
IO流——字符输入输出流:FileReader FileWriter
一、文件字符输入流:FileReader 作用:以内存为基准,可以把文件中的数据以字符的形式读入到内存中去 public class Test5 {public static void main(String[] args) {try (Reader fr new FileReader("E:\\IDEA\\JavaCodeAll\\file-io-t…...
【大模型理论篇】DeepResearcher论文分析-通过在真实环境中的强化学习实现深度研究
1. 背景与问题 大模型(LLMs)配合网络搜索功能已经展现出在深度研究任务中的巨大潜力。然而,目前的方法主要依赖两种途径: 人工设计的提示工程(Prompt Engineering):这种方法依靠手动设计的工作流…...
大数据(7.5)Kafka Edge在5G边缘计算中的革新实践:解锁毫秒级实时处理的无限可能
目录 一、5G时代边缘计算的算力革命1.1 传统架构的延迟困境1.2 5G网络特性与Kafka适配 二、Kafka Edge核心架构设计2.1 分层处理架构2.2 关键技术创新点2.2.1 协议优化2.2.2 轻量化存储引擎 三、5G场景落地实践3.1 智能工厂预测性维护3.2 全息远程医疗会诊 四、性能优化深度实践…...
【基于开源insightface的人脸检测,人脸识别初步测试】
简介 InsightFace是一个基于深度学习的开源人脸识别项目,由蚂蚁金服的深度学习团队开发。该项目提供了人脸检测、人脸特征提取、人脸识别等功能,支持多种操作系统和深度学习框架。本文将详细介绍如何在Ubuntu系统上安装和实战InsightFace项目。 目前github有非常多的人脸识…...
kafka怎么保证消息不被重复消费
在 Kafka 中,要保证消息不被重复消费,可从消费者端和生产者端分别采取不同策略,下面为你详细介绍: 消费者端实现幂等消费 幂等消费是指对同一条消息,无论消费多少次,产生的业务结果都是一样的。 业务层面…...
一个批量文件Dos2Unix程序(Microsoft Store,开源)
这个程序可以把整个目录的文本文件改成UNIX格式,源码是用C#写的。 目录 一、从Microsoft Store安装 二、从github获取源码 三、功能介绍 3.1 运行 3.2 浏览 3.3 转换 3.4 转换(无列表) 3.5 取消 3.6 帮助 四、源码解读 五、讨论和…...
Python及Javascript的map 、 filter 、reduce类似函数的对比汇总
A. 在Python中,map 和 filter 是两个非常有用的内置函数,它们分别用于对可迭代对象中的每个元素执行某种操作,并返回结果。在JavaScript中,虽然没有内置的 map 和 filter 函数,但是可以使用数组的 map() 和 filter() …...
Linux中OS的管理和进程的概念
一、OS的管理 1.1操作系统宏观的理解 OS的本质是一款进行资源管理的软件 图示: 1.2OS存在的意义 1.2.1计算机的分层式管理结构 最底层的硬件部分遵循“冯诺依曼体系” ,每一种硬件都在驱动层中有着自己对应的“驱动程序” 在OS中,驱动管…...
Spring定时任务修仙指南:从@Scheduled到分布式调度的终极奥义
各位被Thread.sleep()和while(true)折磨的Spring道友们!今天要解锁的是Spring生态自带的定时任务三件套——Scheduled、TaskScheduler、Async定时组合技!无需引入外部依赖,轻松实现从简单定时到分布式调度的全场景覆盖!准备好抛弃…...
Node.js多版本共存管理工具NVM(最新版本)详细使用教程(附安装包教程)
目录 前言 一、Nvm下载 二、Nvm安装 三、配置nodeJS 前言 NVM(Node Version Manager)是一个用于管理多个Node.js版本的工具,主要帮助开发者在同一设备上轻松安装、切换和卸载不同版本的Node.js,解决项目间版本冲突问题。 一、…...
管道魔法木马利用Windows零日漏洞部署勒索软件
微软披露,一个现已修复的影响Windows通用日志文件系统(CLFS)的安全漏洞曾被作为零日漏洞用于针对少数目标的勒索软件攻击中。 01 攻击目标与漏洞详情 这家科技巨头表示:"受害者包括美国信息技术(IT)…...
Devops之Argo:Argo 是什么,和现在常用的Jenkins之间的区别
Argo CD(Argo Continuous Delivery 的缩写)是一款基于 GitOps 的声明式 Kubernetes 持续交付工具。它提供了一种以 Git 为中心的方法来管理和部署应用程序到 Kubernetes 集群。Argo CD 遵循 GitOps 的原则,即将应用程序的预期状态存储在 Git …...
从 60 FPS 掉帧到 7.6 倍提速Rust + WebAssembly 优化《生命游戏》的实战指南
一、构建 FPS 统计器:用 performance.now() 实时观察性能变化 要优化,就要先 测量。我们在 JavaScript 端添加一个 fps 对象,结合 performance.now() 来监控每一帧的耗时,并统计最近 100 帧的平均 FPS、最小 FPS、最大 FPS&#…...
jmeter 集成ZAP进行接口测试中的安全扫描 实现方案
以下是将 JMeter 集成 ZAP(OWASP Zed Attack Proxy)进行接口测试中安全扫描的实现方案: 1. 环境准备 JMeter 安装:从 JMeter 官方网站(https://jmeter.apache.org/download_jmeter.cgi)下载并安装 JMeter,确保其版本稳定。ZAP 安装:从 ZAP 官方网站(https://www.zapr…...
Hyperlane 文件分块上传服务端
Hyperlane 文件分块上传服务端:高效、可靠、易用的文件上传解决方案 引言 在现代 Web 开发中,文件上传是许多应用的核心功能之一。然而,随着文件大小的增加和网络环境的复杂性,传统的单次文件上传方式已经难以满足需求。Hyperla…...
BT面板docker搭建excalidraw遇到的问题
1.傻瓜式拉取镜像 2.点击创建容器 3.暴露端口 4.放行端口和服务器安全组,如果用的是轻量型服务器,那就关闭防火墙 下面放图...
Qt之OpenGL使用Qt封装好的着色器和编译器
代码 #include "sunopengl.h"sunOpengl::sunOpengl(QWidget *parent) {}unsigned int VBO,VAO; float vertices[]{0.5f,0.5f,0.0f,0.5f,-0.5f,0.0f,-0.5f,-0.5f,0.0f,-0.5f,0.5f,0.0f };unsigned int indices[]{0,1,3,1,2,3, }; unsigned int EBO; sunOpengl::~sunO…...
【仿Mudou库one thread per loop式并发服务器实现】项目介绍+前置技术知识点
HTTP协议模块实现 1. 项目实现的目标2. 项目储备知识2.1 HTTP服务器2.2 Reactor模型 3. 功能模块划分3.1 SERVER模块3.1.1 Buffer模块3.1.2 Socket模块3.1.3 Channel模块3.1.4 Poller模块3.1.5 EventLoop模块3.1.6 Connection模块3.1.7 7. Acceptor模块3.1.8 TimerQueue模块3.1…...
Open Interpreter:重新定义人机交互的开源革命
引言 在人工智能技术蓬勃发展的今天,人机交互的方式正经历着前所未有的变革。Open Interpreter,作为一个开源项目,正在重新定义我们与计算机的互动方式。它允许大型语言模型(LLMs)在本地运行代码,通过自然…...
Shell编程之条件语句
目录 一.条件测试操作 1.文件测试 2.整数值比较 3.字符串比较 4.逻辑测试 二:if条件语句 1.if语句的结构 (1)单分支if语句 (2)双分支if语句 (3)多分支if语句 2.if语句应用示例 &…...
Python编程快速上手 让繁琐工作自动化笔记
编程基础 字符串使用单引号...
高性能文件上传服务
高性能文件上传服务 —— 您业务升级的不二选择 在当今互联网数据量激增、文件体积日益庞大的背景下,高效、稳定的文件上传方案显得尤为重要。我们的文件分块上传服务端采用业界领先的 Rust HTTP 框架 Hyperlane 开发,凭借其轻量级、低延时和高并发的特…...
【从零开始学习JVM | 第二篇】HotSpot虚拟机对象探秘
对象的创建 1.类加载检查 虚拟机遇到一条new的指令,首先去检查这个指令的参数能否在常量池中定位到这个类的符号引用,并且检查这个符号引用代表的类是否已被加载过、解析和初始化过。如果没有,那必须先执行类的加载过程。 2.分配内存 在类…...
浅谈前端开发中的 npm、cnpm、pnpm、yarn各自特点
在前端开发中的 npm、cnpm、pnpm、yarn 等工具都是包管理器(Package Manager),用于安装/更新/卸载 JavaScript 项目的依赖。 下面我详细地给你梳理下这些包管理器的作用、特点和适用场景👇 一. npm(Node Package Mana…...
【数据结构】包装类和泛型
目录 1.包装类 1.1 基本数据类型和对应的包装类 1.2 装箱和拆箱 1.3 自动装箱和自动拆箱 2.泛型 2.1泛型的概念 2.2引出泛型 3.语法 4.泛型类的使用 5.泛型的上界 1.包装类 在Java中,由于基本类型不是继承自Object,为了在泛型代码中可以支持基…...
红帽9运行容器一
运行容器:容器概念,构建,存储和运行容器的核心技术(用户资源管理的控制组,进程隔离的命名空间,加强安全边界的SELinux和Seccomp) 软件运行需要环境,系统库,配置文件和服…...
使用poi+itextpdf把word转成pdf
使用 Apache POI 和 iTextPDF 将 Word 转换为 PDF 需要分两步操作:先用 POI 读取 Word 内容,再用 iText 生成 PDF。 apache poi官方文档:Apache POI™ - Javadocs 以下是详细的代码实现示例: 环境准备 在 pom.xml 中添加依赖: …...
民安智库:开启零售行业客户满意度提升新征程
在当今这个瞬息万变的商业世界中,零售市场的竞争愈发激烈,犹如一场没有硝烟的战争。各大零售企业为了抢占市场份额,纷纷使出浑身解数,从商品种类的丰富到店铺环境的优化,从价格策略的调整到服务质量的提升,…...
自行搭建一个Git仓库托管平台
1.安装Git sudo apt install git 2.Git本地仓库创建(自己选择一个文件夹) git init 这里我在 /home/test 下面初始化了代码仓库 1. 首先在仓库中新建一个txt文件,并输入一些内容 2. 将文件添加到仓库 git add test.txt 执行之后没有任何输…...
无锡无人机超视距驾驶证怎么考?
无锡无人机超视距驾驶证怎么考?在近年来,无人机技术的迅猛发展使得无人机的应用场景变得愈发广泛,其不仅在环境监测、农业喷洒、快递配送等领域展现出真金白银的价值,同时也推动了无人机驾驶证的需求。尤其是在无锡,随…...
pyautogui是什么:自动化鼠标和键盘操作
pyautogui是什么:自动化鼠标和键盘操作 目录 pyautogui是什么:自动化鼠标和键盘操作安装方法主要功能及使用示例1. 鼠标操作2. 键盘操作3. 获取屏幕信息应用场景注意事项pyautogui 是一个用于自动化鼠标和键盘操作的 Python 第三方库,它允许开发者通过编写 Python 代码来模拟…...
小白学习java第12天:IO流之缓冲流
1.IO缓冲流: 之前我们学习的都是原始流(FileInputStream字节输入流、FileOutputStream字节输出流、FIleReader字符输入流、FIleWriter字符输出流)其实我们可以知道对于这些其实性能都不是很好,要么太慢一个一个,要么就…...
智能导诊系统方案:人体画像导诊实现从症状到科室推荐及院内导航链路拆解(python示范 TensorFlow Embedding 层源码)
本文面向医院信息科负责人、医疗AI开发者、医院管理者,解决传统分诊依赖人工经验,效率低且易出错;患者跨科室就诊路径不清晰等痛点问题,实现症状到科室的精准推荐及动态导航链路优化。 如需获取智慧医院导航导诊系统解决方案请前往…...
声学测温度原理解释
已知声速,就可以得到温度。 不同温度下的胜诉不同。 25度的声速大约346m/s 绝对温度-273度 不同温度下的声速。 FPGA 通过测距雷达测温度,固定测量距离,或者可以测出当前距离。已知距离,然后雷达发出声波到接收到回波的时间&a…...
30天学Java第九天——线程
并行与并发的区别 并行是多核 CPU 上的多任务处理,多个任务在同一时间真正的同时执行并发是单核 CPU 上的多任务处理,多个任务在同一时间段内交替执行,通过时间片轮转实现交替执行,用于解决 IO 密集型任务的瓶颈 线程的创建方式…...
SaaS微服务架构的智慧工地源码,基于Spring Cloud +UniApp +MySql开发
基于微服务架构JavaSpring Cloud UniApp MySql技术开发,saas模式的一套智慧工地云平台源码,支持多端展示:PC端、大屏端、手机端、平板端。包含项目人员管理、视频监控管理、危大工程监管、绿色施工管理、现场物料管理、安全隐患排查等功能。 …...
Qt学习笔记——TableWidget的一些学习东西
TableWidget的一些学习东西 使用QtDesigner绘制表格,但是表格出现很多问题,烦死了,整理了一些内容。 在使用 Qt Designer 设置 QTableWidget 时,涉及大量属性选项,尤其是在初学阶段常常因为属性设置不当而导致表格显…...
《Uniapp-Vue 3-TS 实战开发》Pinia 及 Pinia 持久化
前言: 正文: 一、Pinia 基础用法 1. 安装与初始化 bash npm install pinia # 或 yarn add pinia 在 main.js/ts 中初始化: import { createApp } from vue import { createPinia } from pinia import App from ./App.vue const app = createApp(App) app.use(createPinia()…...