MySQL(事物上)
目录
示例:
一 引入事物
1. 概念
2. 事物的4大特性
3. 为什么要有事物?
二 事物操作
1. 查看存储引擎支持的事物
2. 事物的提交方式
2.1 查看事物的默认提交方式
2.2 设置事物的默认提交方式
2.3 查看事物的全局隔离级别
2.4 验证事物的回滚性(在事物执行过程中进行回滚)
1. 启动事物/手动提交事务
2. 设置保存点/回滚到保存点/回滚到最开始状态
总结:
三 事物的隔离性
1. 为什么要有隔离性?
2. 隔离级别
1. 查看隔离级别/修改隔离级别
2. 验证读未提交
3. 验证读提交
4. 验证可重复读
5. 验证串行化
总结:
示例:
假设增删查改语句不加控制会有什么问题?
假设票数还有一张,线程A判断成功进入执行SQL语句(一组SQL语句/单SQL语句)被切走,票数没变,B线程判断也成功执行SQL语句票数--,A回来继续执行SQL语句,票数就变成-1了,显然是不合理的,在这些CURD操作不加控制的情况下有问题。
那么增删查改需要满足什么条件才能解决多线程并发带来的问题呢?
1. 上述买票的过程要是原子的吧?也就是要么买完,要么就不买,不存在中间过程,如果中间出问题,就回溯到最开始的状态。
2. 多个线程买票之间不能互相影响吧?比如上述的买票买成负数的情况。
3. 买票完成之后的数据应该是永久有效的吧?不能买到一半或者买完,比如服务崩溃了,网络出问题了,导致数据没更新。
4. 买票前和买票后应该有确定的状态吧?不能买完票之后的状态还是买票前的状态或者是其他的状态。
一 引入事物
1. 概念
事物就是一组或单个DML(增删查改操作)语句的组合,他们之间的关系紧密,比如买票,要进行--票数,然后把买票的人的状态改成已买状态,虽然在程序员看来是2组SQL语句,但他们是有关系的,也就是组合起来有某种意义,这些组合起来的语句看成一个整体,要么全部执行成功,要么全部执行失败,不应该有中间的状态,也就是要是原子的,如果有多条事物并发运行,不能一个事物查询到的结果每次都不一样吧?他们互相之间不能被影响,或者一个事物执行到一半由于某种原因不能向后执行,应该回到最开始的状态,事物结束影响到的数据应该是永久有效的吧,不应该存在执行完了,数据不变等影响,基于这些情况MySQL给事物定义了4大特性。
2. 事物的4大特性
- 原子性:事物要么执行全部完,要么不执行,不应该存在中间状态,如果出现错误或其他问题,那么就应该回到最开始的状态,也就是回滚操作。
- 持久性:事物处理后的结果应该永久有效,不存在数据丢失或处理之后的结果无效。
- 一致性:从一个合法的状态转换到另一个合法的状态,如果转换中有问题,应该初始状态,不能出现不确定的状态(原子性),转换后的状态要是永久有效的((持久性)),不能转换后的状态跟没转换的状态是一样的,换句话说就是转换后的状态要是符合预期的,多个事物读写并发互相转换可能会互相影响,从而造成的结果不符合预期等(隔离性),站在应用层角度来看,假设用户乱操作造成的状态也是不符合预期的,比如转账逻辑出现问题,买票买成负数等问题,所以一致性是由其他3个特性和应用层共同维护的。
- 隔离性:事物之间不能相互影响,也就是让他们隔离起来,事物之间的到来有先后顺序,哪些是应该看的数据,哪些是不应该看到的数据。
上面四个属性,可以简称为 ACID 。原子性( A tomicity ,或称不可分割性)一致性( C onsistency )隔离性( I solation ,又称独立性)持久性( D urability )
3. 为什么要有事物?
- 在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务 。
二 事物操作
1. 查看存储引擎支持的事物
show engines;
show variables like 'autocommit';
只有InnoDB存储引擎支持事物。
2. 事物的提交方式
- 自动提交
- 默认提交
2.1 查看事物的默认提交方式
show variables like 'autocommit';
2.2 设置事物的默认提交方式
set autocommit=0/1;
2.3 查看事物的全局隔离级别
//查看MySQL版本
select version();// 5.0以上版本
select @@tx_isolation;// 8.0以上版本
select @@transaction_isolation;
需要重启客户端生效。
2.4 验证事物的回滚性(在事物执行过程中进行回滚)
需要设置默认隔离级别为最低隔离级别测试
set global transaction isolation level read uncommitted;
// 创建测试表
create table if not exists account(
id int primary key,
name varchar(50) not null default '',
blance decimal(10,2) not null default 0.0
)ENGINE=InnoDB DEFAULT CHARSET=UTF8;
1. 启动事物/手动提交事务
// 第一种
start transaction;// 第二种
begin;// 手动提交事物
commit;
2. 设置保存点/回滚到保存点/回滚到最开始状态
// 设置保存点
savepoint 保存点名称;// 回到保存点
rollback to 保存点名称;// 回到初始状态
rollback;
首先启动2个事物,验证回滚。
验证提交后的结果
验证异常的结果
当MySQL事物执行中异常,则会自动回滚到最开始的状态。
全局的默认提交的开启和关闭对单SQL的影响,也就是不手动启动事物,只执行普通的SQL语句。
当全局的默认提交为0,当普通事物被执行,然后异常,也会被回滚到最开始的状态,换句话说普通的单SQL也是事物,如果全局的默认提交为0,则执行只会不会提交,直到手动commit,否则异常自动回滚,如果全局的默认提交为1,执行当SQL会自动提交。
总结:
- 只要输入 begin/start transaction ,事物就需要手动commit,与是否是自动提交没有关系
- 执行事物的时候异常,MySQL会自动回滚到最开始的状态
- 普通的单条SQL也是事物,如果全局提交为0,则需要手动commit,为1执行完自动提交, select 除外
- 上述的操作验证了原子性(回滚),持久性(手动提交(commit)/自动提交(set auto commit=1)) 数据永久有效
事物使用注意事项:
- 事物执行中可以回滚,可以回滚(rollback to 保存点名 / rollback回到最开始状态)到保存点(savepoint 名称)/没有则回滚到最开始状态,如果commit回滚无效
- 只有Innodb支持事物
那么隔离性?一致性体现在哪?
三 事物的隔离性
1. 为什么要有隔离性?
假设你正在学习,在学习的过程中可能受到影响,影响的程度不同,或者没收到影响,对你最终的结果造成影响,就好比事物在执行过程中应不应该被其他事物影响到?受什么程度的影响?事物的到来总会有先后顺序,哪些能看到前面先到的事物的操作?哪些能看到正在执行的?哪些能看到提交之后的?如果这些不加以控制,事物在执行过程中必定会受到影响。MYSQLD是网络服务,势必会被多个客户端,比如命令行,语言,图形化界面版的MYSQL客户端进行访问,这么多的客户端打包执行的事物也必须加以控制,所以有了隔离性的概念。
2. 隔离级别
- 在并发读写的情况下:
- READ UNCOMMITTED(读未提交):事物在执行中可以看到其他事物的操作结果
- READ COMMITTED(读提交):事物在执行中可以看到其他事物的提交后的操作结果
- REPEATABLE READ(可重复读):事物在执行中看不到其他事物的操作结果,即使是提交后
- SERIALIZABLE(串行化):所有事物必须串行执行,先来的先执行
1. 为什么上述都跟读有关?
因为在MySQL的大多数场景下都跟读有关,而写写操作 事物之间必定会互相影响,必定会保护串行跑,读读都不修改数据(不考虑),读写,虽然读不会修改数据,但读可能会读到其他事物修改后的数据,可能读到垃圾数据等问题,不同的隔离级别对读的影响程度不同。
上述图表示不同隔离级别带来的效率和安全的影响。
1. 查看隔离级别/修改隔离级别
// 查看全局隔离级别/当前会话隔离级别// 5.0以上版本
select @@session/global.tx_isolation;
// 8.0Y以上版本
select @@session/global.transaction_isolation;// 设置全局/当前会话隔离级别
set global/session transaction isolation level READ UNCOMMITTED/READ COMMITTED/REPEATABLE READ/SERIALIZABLE
当登录客户端当前的会话隔离级别会默认继承全局隔离级别,修改全局隔离级别需重新启动客户端。
2. 验证读未提交
当多个事物并发读写,读事物读到另一个事物的修改,称为脏读,因为写事物相对于读事物是原子的,读事物要么读到写事物一开始的状态要么是结束的状态,读到中间状态是不合理的,也就是读到写事物未提交的结果。
3. 验证读提交
当读事物重复读取相同的内容,可能会读到不同的结果,也就是读到写事物提交后的结果,那么这种隔离级别下有问题吗?
假设表有工资字段:1000~2000,2001~3000,要筛出这2个区间的人,假设1000~2000有个人是张三,正准备读取2001~3000的时候,写事物把张三的薪资加到2001~3000这个范围为内,并且提交,读事物然后在读取2001~3000内的人,就会又读到张三,显然是有问题的,也就是相同的读取读到同一个数据可能不一样,也就是不可重复读。
4. 验证可重复读
读事物不会读到写事物提交后的结果或者执行的结果,也就是可重复读取同样的数据。
5. 验证串行化
每个事物必须串行的执行,一旦有事物进行增删改,就会锁住,等另一个事物结束才能继续执行,读读例外,也就是每个事物必须按照先后到来顺序进行排队。
- 脏读:读事物读到写事物修改并未提交的数据
- 不可重复读:读事物读到写事物提交后的数据
- 幻读:因为不同的隔离级别是通过加锁完成的,但插入数据,这个数据之前是没有的,但上述的MySQL可重复读是解决了幻读问题,如果可重复读出现了幻读问题,也可以归类与不可重复读问题
总结:
1. 隔离级别越高安全越好,多事物并发效率越低,隔离级别越低安全越低,多事物并发效率越高。
2. 不可重复读重点在于修改和删除,同样的查询读到的结果不一样,幻读重点在于新增。
3. 上面的例子可以看出来不同的隔离级别相互之间的影响,特别是长或短事物需要谨慎选择合适的隔离级别,MySQL默认的隔离级别(可重复读)。
隔离级别 脏读 不可重复读 幻读 加锁读
- 读未提交 √ √ √ ×
- 读提交 × √ √ ×
- 可重复读 × × × ×
- 串行化 × × × √
相关文章:
MySQL(事物上)
目录 示例: 一 引入事物 1. 概念 2. 事物的4大特性 3. 为什么要有事物? 二 事物操作 1. 查看存储引擎支持的事物 2. 事物的提交方式 2.1 查看事物的默认提交方式 2.2 设置事物的默认提交方式 2.3 查看事物的全局隔离级别 2.4 验证事物的回滚…...
人工智能 Day06 pandas库进阶
1.处理缺失数据 总体流程是这样的, 归根在于如何处理NAN,接下来详细赘述 1.1. 处理缺失值的相关函数 判断缺失值 pd.isnull(df):用于判断 DataFrame df 中的元素是否为缺失值(NaN ),返回一个与df 形状相同…...
C# --- LINQ
C# --- LINQ 什么是LINQFluent Syntax 和 SQL-Like QueryLINQ Operations 什么是LINQ LINQ的全称为Language Integrated Query, 为各种查询(包括对象查询,数据库查询,XML查询) 提供了统一模型.LINQ源于SQL,但比SQL更加强大,更加灵…...
C语言之 条件编译和预处理指令
条件编译 在编译⼀个程序的时候我们如果要将⼀条语句(⼀组语句)编译或者放弃是很⽅便的。因为我们有条件编译指令。 ⽐如说: 调试性的代码删除可惜,保留⼜碍事,所以我们可以选择性的编译。 #define M 1 int main() …...
JVM常用概念之锁省略
问题 synchronized(同步-重量级锁)会解除所有编译器优化吗? 基础知识 使用当前的 Java 内存模型,未观察到的锁不一定会产生任何内存效应。除其他情况外,这意味着对非共享对象进行同步是徒劳的,因此运行时不必在那里做任何事情。这给编译优…...
[网络][tcp协议]:tcp报头
tcp(传输控制协议)是一种面向字节流的传输层协议,相较于udp协议,tcp能保证传输数据的可靠性与准确性,tcp也是目前最常见的传输层协议 本文主要介绍tcp报头各个字段的含义与用途 注:保留6位和6位标记位是目前最普遍的写法,在我查资料时,发现有一些拓展情况,会在后文细说 最简单的…...
传输层自学
传输实体:完成传输层任务的硬件或软件 可能位于: 操作系统内核独立的用户进程绑定在网络应用中的链接库网络接口卡 1.功能: 网络层与传输层作用范围比较? 网络层负责把数据从源机送达到目的机 传输层负责把数据送达到具体的应…...
FFmpeg —— 各系统下ffmpeg硬件加速和API支持情况(文内表格形式详细阐述)
介绍 FFmpeg 作为一款功能强大的多媒体处理工具,支持多种硬件加速技术,能够显著提升视频编解码的效率,尤其是在处理高分辨率、高码率视频时表现尤为突出。不同操作系统下,FFmpeg 的硬件加速实现方式和支持的 API 各有特点。 在 Windows 系统上,FFmpeg 主要依赖 DirectX Vi…...
RUOYI框架在实际项目中的应用二:Ruoyi前后端分离版本
如需观看Ruoyi框架的整体介绍,请移步:RUOYI框架在实际项目中的应用一:ruoyi简介 一、Ruoyi前后端分离版本-RuoYi-Vue 1、官方资料 1:代码地址:https://gitee.com/y_project/RuoYi-Vue.git 2:文档介绍地址…...
2.12[A]distribute sys
在分布式训练中,特别是使用3D并行(数据并行、流水线并行和模型并行)时,不同阶段的GPU可能因为通信或数据依赖而出现空闲时间,这些空闲时间就是所谓的“气泡”。这些气泡会降低整体的训练效率,导致GPU资源的…...
R语言的移动应用开发
R语言的移动应用开发 在数据科学和统计分析的大潮中,R语言因其强大的数据处理和可视化能力而备受青睐。然而,R语言对移动应用开发的适用性并未得到广泛关注。本文将探讨R语言在移动应用开发中的潜力及其工具,并提供一些实践示例,…...
解决 Redis 后台持久化失败的问题:内存不足导致 fork 失败
文章目录 解决 Redis 后台持久化失败的问题:内存不足导致 fork 失败问题背景与成因解决方案修改内核参数 vm.overcommit_memory增加系统内存或 Swap 空间调整 Redis 配置 stop-writes-on-bgsave-error 在 Docker 环境中的注意事项总结 解决 Redis 后台持久化失败的问…...
交换机控制软件的实现步骤猜测
一、主要目的 提出对交换机软件控制逻辑的猜测。 二、交换机控制软件的组成 (一)背景 1、交换机有很多的RJ45水晶头端口。 2、每个端口支持同时发送和接收字节数据。 3、每个端口接收的数据需要查表后才能转发给目标端口。 (二)端口状态扫描线程 负责扫描每个端口的状态&#x…...
100.HarmonyOS NEXT跑马灯组件教程:实际应用与场景示例
温馨提示:本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦! HarmonyOS NEXT跑马灯组件教程:实际应用与场景示例 文章目录 HarmonyOS NEXT跑马灯组件教程:实际应用与场景示例1. 跑马灯组…...
【计算机网络】2物理层
物理层任务:实现相邻节点之间比特(或)的传输 1.通信基础 1.1.基本概念 1.1.1.信源,信宿,信道,数据,信号 数据通信系统主要划分为信源、信道、信宿三部分。 信源:产生和发送数据的源头。 信宿:接收数据的终点。 信道:信号的传输介质。 数据和信号都有模拟或数字…...
2.3 滑动窗口专题:最大连续1的个数 III(LeetCode 1004)
1. 题目链接 1004. 最大连续1的个数 III - 力扣(LeetCode)https://leetcode.cn/problems/max-consecutive-ones-iii/ 2. 题目描述 给定一个二进制数组 nums 和一个整数 k,允许将最多 k 个 0 翻转为 1,求翻转后最长的连续 1 …...
怎么解决在Mac上每次打开文件夹都会弹出一个新窗口的问题
在Mac上每次打开文件夹都会弹出一个新窗口的问题,可以通过以下方法解决 调整Finder设置: 打开Finder,点击“Finder”菜单,选择“偏好设置”。在偏好设置中,选择“通用”标签。取消勾选“在标签页中打开文件夹”或…...
Python异常处理
异常处理 概述 在Python中,在处理可能会引发异常的代码块时,使用try和except语句。可以帮助我们捕获并处理异常, 而不是让程序因为一个未处理的异常而完全崩溃。 try-except try-except-finally try-finally try-except-else try-except-…...
VSTO(C#)Excel开发8:打包发布安装卸载
初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github:codetoys,所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的,可以在任何平台上使用。 源码指引:github源…...
ImportError: cannot import name ‘genai‘ from ‘google‘ (unknown location) 问题如何处理
这个错误通常发生在没有正确安装Google的生成式AI库。需要安装官方的google-generativeai库: pip install google-generativeai如果代码中使用的导入方式与新版SDK不兼容,可能需要调整导入语句。根据当前代码上下文,正确的导入方式应该是&am…...
Advanced Intelligent Systems 软体机器手助力截肢者玩转鼠标
随着科技的不断进步,假肢技术在改善截肢者生活质量方面取得了显著成就。然而,截肢群体在就业方面仍面临巨大困难,适龄截肢群体的就业率仅为健全群体的一半。现有的肌电控制假肢手在与计算机交互时存在诸多挑战,特别是截肢者在使用…...
kubernetes对于一个nginx服务的增删改查
1、创建 Nginx 服务 1.1、创建 Deployment Deployment 用于管理 Pod 副本和更新策略。 方式一:命令式创建 kubectl create deployment nginx-deployment --imagenginx:latest --replicas3 --port80--replicas3:指定副本数为 3 --port80:容…...
我的世界1.20.1forge模组进阶开发教程生物篇(1)——生成
生物生成 生物生成Alexmob介绍:**1. 核心功能与技术实现****2. 项目结构与代码质量****3. 社区协作与维护****4. 扩展性与开发挑战****5. 开发者学习价值**食蚁兽一、实体属性与行为控制(`EntityAnteater`类)二、实体注册与生成规则(`AMEntityRegistry`类)三、全局生成逻辑…...
1.5 Spring Boot项目打包和运行
本文介绍了如何使用Spring Boot进行项目打包和运行。首先,讲解了如何将Spring Boot项目打包为可执行的JAR包,并直接运行,无需部署到外部Web服务器。接着,介绍了如何将项目打包为WAR包,以便部署到Web容器中,…...
287. 寻找重复数
由于题目规定数组中的数的范围是1-n,因此可以构造出下标n和值nums[n]的映射f(n),然后构成一个链表,当有重复数字时,链表存在环,找到重复数字即找到链表环的入口,参考142. 环形链表II。 class Solution {pu…...
如何高效解决 Java 内存泄漏问题方法论
目录 一、系统化的诊断与优化方法论 二、获取内存快照:内存泄漏的第一步 (一)自动生成 Heap Dump (二)手动生成 Heap Dump 三、导入分析工具:MAT 和 JProfiler (一)MAT (Memor…...
【Agent】OpenManus 项目架构分析
这是我录制的一个视频,主要是描述我理解的 OpenManus 的思维逻辑,通过这个小的思维逻辑的复现,为后面要再分析其他 Agent 的实现做一个准备。 1. 项目概述 OpenManus 是一个基于大语言模型的智能体框架,旨在提供一个无需邀请码的…...
hive-进阶版-1
第6章 hive内部表与外部表的区别 Hive 是一个基于 Hadoop 的数据仓库工具,用于对大规模数据集进行数据存储、查询和分析。Hive 支持内部表(Managed Table)和外部表(External Table)两种表类型,它们在数据…...
规模效应的三重边界:大白话解读-deepseek为例
前言:当Scaling Laws遇见边际递减效应 在人工智能的狂飙突进中,大语言模型如同不断膨胀的星体,吞噬着海量算力与数据。OpenAI于2020年揭开的Scaling Laws,曾为这场盛宴指明方向:模型性能随参数规模(N&…...
考研系列-408真题计算机网络篇(18-23)
写在前面 此文章是本人在备考过程中408真题计算机网络部分(2018年-2023年)的易错题及相应的知识点整理,后期复习也常常用到,对于知识提炼归纳理解起到了很大的作用,分享出来希望帮助到大家~ # 2018 1.停止-等待协议的…...
windows协议不再续签,华为再无windows可用,将于四月发布鸿蒙PC
大家好,我是国货系创始人张云泽,最近不少小伙伴在后台问:“听说Windows协议要到期了?我的电脑会不会变砖?”还有人说:“华为笔记本以后用不了Windows了?鸿蒙系统能用吗?”今天咱们就…...
【二分算法】-- 点名
文章目录 1. 题目2. 题目解析3. 代码 1. 题目 在线oj 2. 题目解析 前四种解决方法: 哈希表直接遍历找结果位运算数学(高斯求和公式) 这四种方法的时间复杂度都是0(N) 第五种解决方法: 【二段性】&…...
强化学习 - PPO控制无人机
PPO(Proximal Policy Optimization,近端策略优化)是一种强化学习算法,用于训练智能体(无人机)如何在环境中做出决策。它本质上是 策略梯度(Policy Gradient)方法 的一种改进…...
【AHE数据集】 NCAR Anthropogenic Heat Flux (AHF) 数据集
数据概述 数据集由 美国国家大气研究中心(NCAR, National Center for Atmospheric Research) 的 气候与全球动力学实验室(CGD, Climate & Global Dynamics Laboratory) 提供。NCAR 由 美国国家科学基金会(NSF, National Science Foundation) 资助,并由 大学大气研究…...
Part1:基于国内源完成Kubernetes集群部署
集群规划 操作系统:CentOS7 内核版本:5.4(需升级) 组件版本说明操作系统内核5.4RPM方式升级docker26.1.4yum安装cri-docker0.3.16二进制安装kubeadm1.30.11yum安装kubealet1.30.11yum安装kubectl1.30.11yum安装kubectl1.30.11yu…...
强化学习的一些概念
目录 强化学习 打个比方 核心要素 State Action Reward 几个代码demo 学习目标 强化学习 强化学习(Reinforcement Learning, RL)是机器学习的一个分支,旨在让智能体(Agent)通过与环境的交互学习最优策略,以…...
花生好车:重构汽车新零售生态的破局者
在传统汽车零售行业面临消费升级与渠道变革的双重压力下,花生好车以颠覆性的商业模式在短短九年内崛起为行业独角兽。这家成立于2015年的汽车新零售平台,通过重构供应链体系、创新融资租赁模式、深耕下沉市场三大战略维度,正在重塑中国汽车消…...
K8S下nodelocaldns crash问题导致域名请求响应缓慢
前言 最近做项目,有业务出现偶发的部署导致响应很慢的情况,据了解,业务使用域名访问,相同的nginx代理,唯一的区别就是K8S重新部署了。那么问题大概率出现在容器平台,毕竟业务是重启几次正常,偶…...
实现悬浮按钮拖动,兼容h5和微信小程序
h5用js写,微信小程序用 代码里面没有完全实现吸附边缘的功能,需要吸附边缘的话还得自己再完善下(h5的吸附边缘是可以的,小程序的还有点问题) 主要功能是:图片上写文字的悬浮按钮,文字使用的是…...
SLC跨头协作机制
SLC跨头协作机制 SLC(Self-attention with Local Communication,或类似跨头协作机制)在Transformer架构中通过以下逻辑帮助注意力头优化分布: 1. 多头注意力的「独立-协作」平衡 传统多头注意力中,每个头独立计算注意力(如Query/Key/Value的线性变换),捕捉不同语义模…...
全国医院数据可视化分析系统
【大数据】全国医院数据可视化分析系统 (完整系统源码开发笔记详细部署教程)✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 🏥 项目名:医疗导航神器!——《基于大数据的微医挂号网医院数据可视…...
Flash Attention原理讲解
目录 前言0. 简述1. self-attention2. roofline model3. 矩阵分块4. softmax分块5. FlashAttention结语参考 前言 看了几个视频和几篇文章学习了下 Flash Attention,记录下个人学习笔记,仅供自己参考😄 refer1:Flash Attention 为…...
python二级复习(1)
临近计算机二级考试了,开始python的复习 python语言基础: 1.用缩进表示代码块:一般用四个空格或者一个tab 2.代码的注释方法: 单行注释用“#”表示注释开始;多行注释是用三个英文的单引号“‘’”或双引号““”"”作为注释的开始和结束符号。 03. 标识符命…...
基于cat1的贵重物品的状态和位置小型监控系统特色解析
一 项目需求 团队研发出来一款搭载多传感器的无线cat1定位和状态监控的设备。该设备主要面对的贵重物品运输过程中的状态监控,比如,是否被打开过,有没有激烈碰撞,位置信息等。主要应用场景是医疗,安防等贵重物品的状态…...
Python 魔法方法介绍
在 Python 中,魔法方法(Magic Methods)是一类特殊的内置方法,它们通常以双下划线开头和结尾(例如 __init__、__str__、__add__ 等)。这些方法通常用于实现特定的语法或操作符行为,或者用于定义对象的行为。它们是 Python 面向对象编程中的一个重要特性,可以让类的行为更…...
golang time包和日期函数
1.简介 在程序中日期和时间是我们经常会用到的,在go中time包提供了时间的显示和测量函数。 2.获取当前时间 通过time.Now()函数获取当前时间对象,然后获取时间对象的年月日时分秒等值。 now : time.Now()fmt.Printf("now%v type%T\n", now…...
第7章 站在对象模型的尖端2: 异常处理
1.异常处理(Exception Handling) C的异常处理由三个主要组成部分构成:throw表达式、catch子句和try块。当异常被抛出时,程序控制权会转移,并且会沿着调用堆栈回溯,直到找到匹配的catch子句。在此过程中,局部对象的析构…...
不同路径——2
给定一个 m x n 的整数数组 grid。一个机器人初始位于 左上角(即 grid[0][0])。机器人尝试移动到 右下角(即 grid[m - 1][n - 1])。机器人每次只能向下或者向右移动一步。 网格中的障碍物和空位置分别用 1 和 0 来表示。机器人的…...
电子招采软件系统,如何实现10年可追溯审计
一、在当前经济环境下,中小企业面临着巨大的生存压力,传统产业的数字化转型迫在眉睫。AI技术为企业的低成本高效发展提供了新机会,混合办公成为新常态,数据安全法的深入落实则进一步推动企业重视数据安全。区块链存证技术凭借独特…...
TS常见内置映射类型的实现及应用场景
以下是 TypeScript 在前端项目中 常用的映射类型(Mapped Types),结合具体场景和代码示例,帮助开发者高效处理复杂类型: 一、基础映射类型 1. Partial<T> 作用:将对象类型 T 的所有属性变为可选。 实…...