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

【2023】从事务的特征以及解决方式上分析MySQL是如何保证事务的

----以MySQL的InnoDB介绍

目录

  • 前言
    • 事务,事务到底是什么?
  • 一、事务的特征:
  • 二、事务特征具体保证
    • 1、Redo Log(重做日志) ---保证事务的持久性
      • 1.1、🟡刷盘时机
      • 1.2、redo log记录形式
      • 1.3、redo log日志的好处
    • 2、undo log(回滚日志)---保证事物的原子性
      • 2.1、undo log格式
    • 3、MVCC(多版本并发控制)---保证事务的隔离性
      • 3.1、隔离级别
        • 问题概述
      • 3.2、MVCC概述
      • 3.3、ReadView
      • 3.4、undo log 版本链
      • 3.5、举例演示:
      • 引用

前言

事务,事务到底是什么?

事务其实就是以一组访问或者更新数据库的各种数据项的一个执行单元,可以是一条也可以是多条执行操作。

  • 在针对查询时,只要是在本事务内执行的查询操作,不管数据库被如何被其他事务修改了,只要本事务内没修改,事务内查询的结果都会返回一致的结果.
  • 针对修改操作时,不管多少条修改语句,在执行过程中会出现三种情况,执行成功提交事务,数据库全部修改成功;系统中断,全部回滚,全部回退到事务开启之前的结果;一条执行失败,全部回滚,全部回退到事务开启之前的结果(可以通过设置事务保存点让只回退到指定保存点,可以避免语句过多时全部回退);

理论上说,事务有着极其严格的定义,它必须同时满足四个特性,即通常所说的事务的ACID特性。值得注意的是,虽然理论上定义了严格的事务要求,但是数据库厂商出于各种目的,并没有严格去满足事务的ACID标准。例如,对于MySQL的NDB Cluster引擎来说,虽然其支持事务,但是不满足D的要求,即持久性的要求。对于Oracle数据库来说,其默认的事务隔离级别为READ COMMITTED,不满足I的要求,即隔离性的要求。虽然在大多数的情况下,这并不会导致严重的结果,甚至可能还会带来性能的提升,但是用户首先需要知道严谨的事务标准,并在实际的生产应用中避免可能存在的潜在问题。对于InnoDB存储引擎而言,其默认的事务隔离级别为READ REPEATABLE,完全遵循和满足事务的ACID特性。

一、事务的特征:

事务四个典型特性,即ACID,原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability

  • 原子性:
    事务作为一个整体被执行,包含在其中的对数据库的操作要么全部都执行,要么都不执行。
    • ——原子性的实现主要是通过undo log日志进行实现的,如果事务中一个SQL语句执行失败,则已执行的语句也必须回滚,数据库退回到事务前的状态。事务的原子性表明事务就是一个整体,当事务无法成功执行的时候,需要将事务中已经执行过的语句全部回滚,使得数据库回归到最初未开始事务的状态。
  • 一致性:
    指在事务开始之前和事务结束以后,数据不会被破坏,假如A账户给B账户转10块钱,不管成功与否,A和B的总金额是不变的。
    • ——其他三个特性保证的数据的一致性。换句话说,ACID里的AID都是数据库的特征,也就是依赖数据库的具体实现。而唯独这个C,实际上它依赖于应用层,也就是依赖于开发者。这里的一致性是指系统从一个正确的状态,迁移到另一个正确的状态。什么叫正确的状态呢?就是当前的状态满足预定的约束就叫做正确的状态。而事务具备ACID里C的特性是说通过事务的AID来保证我们的一致性。
  • 隔离性:
    多个事务并发访问时,事务之间是相互隔离的,一个事务不应该被其他事务干扰,多个并发事务之间要相互隔离。
    • ——隔离性主要通过锁机制进行保证,事务之间的隔离,是通过锁机制实现的。当一个事务需要对数据库中的某行数据进行修改时,需要先给数据加锁。加了锁的数据,其它事务是不运行操作的,只能等待当前事务提交或回滚将锁释放。
    • 通过悲观锁、乐观锁(MVCC)
  • 持久性:
    表示事务完成提交后,该事务对数据库所作的操作更改,将持久地保存在数据库之中。
    • ——redo log是实现持久性的关键,通过redo log一直写入磁盘保证数据的持久性

二、事务特征具体保证

1、Redo Log(重做日志) —保证事务的持久性

物理级别——只针对InnoDB

重做日志用来实现事务的持久性,即事务ACID中的D。其由两部分组成:一是内存中的重做日志缓冲(redo log buffer),其是易失的;二是重做日志文件(redo log file),其是持久的;而通过执行操作时一直往redo log buffer中记录数据,然后再写入到redo log file中去,使得数据库可以在数据丢失或系统崩溃时,通过重新执行日志中的操作来还原数据,从而保证数据的持久性。

因为在计算机操作系统中,用户空间(user space)下的缓冲区数据一般情况下是无法直接写入磁盘的,中间必须经过操作系统内核空间(kernel space)缓冲区(OS Buffer)。因此,redo log buffer写入redo log file实际上是先写入OS Buffer,然后再通过系统调用fsync()将其刷到redo log file中,因此redo log file包括写入的数据和写入的位置。过程如下:

1.1、🟡刷盘时机

理想情况下,事务一提交就会进行刷盘操作,但是实际上是刷盘的时机是根据策略来决定的。

InnoDB存储引擎为redo log的刷盘策略提供了innodb_flush_log_at_trx_commit参数,它支持三种策略:

  • 0:设置为0的时候,事务提交时不会将redo log buffer(缓存)中日志写入到os buffer,而是每秒写入os buffer(page cache)并调用fsync()写入到redo log file(文件)中。也就是说设置为0时是(大约)每秒刷新写入到磁盘中的,
    • 当mysql服务崩溃时,会丢失1秒钟的数据。
  • 1:设置为1的时候,事务每次提交都会将redo log buffer中的日志写入os buffer并调用fsync()刷到redo log file中,
    • 这种方式即使系统崩溃也不会丢失任何数据,但是因为每次提交都写入磁盘,1O的性能较差。
  • 2:设置为2的时候,每次提交事务时都只把redo log buffer写入os buffer,然后是每秒调用fsync()os buffer中的日志写入到redo log file,这就是说如果mysql挂了,
    • 因为事务一提交已经写到系统缓存了,所以不会出现数据丢失,但如果操作系统挂了的话就会出现1秒的数据丢失

1秒写入是通过Innodb存储引擎后台的一个线程进行实现的,他会每秒去把redo log buffer中的内容写入到文件系统缓存os buffer,然后调用fsync刷盘

在这里插入图片描述

1.2、redo log记录形式

redo log是固定大小的,所以只能循环写,从头开始写,写到末尾就又回到开头,相当于一个环形。当日志写满了,就需要对旧的记录进行擦除,但在擦除之前,需要确保这些要被擦除记录对应在内存中的数据页都已经刷到磁盘中了。在redo log满了到擦除旧记录腾出新空间这段期间,是不能再接收新的更新请求,所以有可能会导致MySQL卡顿。(所以针对并发量大的系统,适当设置redo log的文件大小非常重要!!!)

1.3、redo log日志的好处

  • redo日志降低了刷盘频率;
  • redo日志占用的空间非常小;

存储表空间ID、页号、偏移量以及更新的值,所需的存储空间是很小的,刷盘快。

特点:

  • redo日志是顺序写入磁盘的
    • 在执行事物的过程中,每执行一条语句,就可能产生若千条redo日志,这些日志是按照产生的顺序写入磁盘的,也就是顺序IO,效率比直接写表的随机IO快,
  • 事务执行过程中,redo log不断记录
    • redo log跟bin log的区别,redo log是存储引擎层产生的,而bin log是数据库层产生的。假设一个事务,对表做10万行的记录插入,在这个过程中,一直不断的往redo log顺序记录,而bin
      log不会记录,直到这个事务提交才一次写入bin log文件中。

2、undo log(回滚日志)—保证事物的原子性

逻辑级别——只针对InnoDB

重做日志记录了事务的行为,可以很好地通过其对页进行“重做”操作。但是事务有时还需要进行回滚操作,这时就需要undo。因此在对数据库进行修改时,InnoDB存储引擎不但会产生redo,还会产生一定量的undo。这样如果用户执行的事务或语句由于某种原因失败了,又或者用户用一条ROLLBACK 语句请求回滚,就可以利用这些undo信息将数据回滚到修改之前的样子。

undo是逻辑日志,因此只是将数据库逻辑地恢复到原来的样子。所有修改都被逻辑地取消了,但是数据结构和页本身在回滚之后可能大不相同。这是因为在多用户并发系统中,可能会有数十、数百甚至数千个并发事务。数据库的主要任务就是协调对数据记录的并发访问。比如,一个事务在修改
当前一个页中某几条记录,同时还有别的事务在对同一个页中另几条记录进行修改。因此,不能将一个页回滚到事务开始的样子,因为这样会影响其他事务正在进行的工作(也就是会把原来执行的操作撤销,而不是单纯的回退到之前那个时间节点去)。

事务提交后并不能马上删除undo logundo log所在的页。这是因为可能还有其他事务需要通过undo log来得到行记录之前的版本。故事务提交时将undo log放入一个链表中,是否可以最终删除undo log及undo log所在页由purge线程来判断。

存放位置
undo存放在数据库内部的一个特殊段(segment)中,这个段称为undo段(undosegment)。undo段位于共享表空间内。可以通py_innodb_page_info.py工具来查看当前共享表空间中undo的数量。

2.1、undo log格式

  • insert undo log

    • insert undo log是指在insert操作中产生的undo log, 仅用于事务回滚. 因为insert操作的记录, 只对事务本身可见, 对其它事务不可见, 所以该日志可以在事务commit后直接删除. 不需要进行purge(后台清除线程)操作
      在这里插入图片描述
  • update undo log

    • update undo log是对delete和update操作产生的的undo log. 该undo log可能需要提供MVCC机制, 因此不能在事务commit后就进行删除,等待purge线程(后台清除线程)进行最后的删除
      在这里插入图片描述

3、MVCC(多版本并发控制)—保证事务的隔离性

3.1、隔离级别

先了解MVCC之前我们得先知道事务的隔离级别,才好知道方便是如何解决事务的隔离性问题的!
在mysql中事务一共分为了四个隔离级别,并且分别可以依次排除掉不同的问题

隔离级别允许脏读允许不可重复读允许幻影读并发性性能
READ UNCOMMITTED(未提交读)
READ COMMITTED(已提交读)
REPEATABLE READ(可重复读)是(InnoDB不会出现)
SERIALIZABLE(串行化)
问题概述
  • 脏读:

    • 脏读指的是读到了其他事务未提交的数据,未提交意味着这些数据可能会回滚,也就是可能最终不会存到数据库中,也就是不存在的数据。读到了并一定最终存在的数据,这就是脏读。

    • 解决方案:

      • 通过把隔离级别设置为READ COMMITTED,实现在读取数据时,避免了去读取未提交的事务的数据,有效的解决了脏读的问题。
  • 不可重复读:

    • 对比可重复读,不可重复读指的是在同一事务内,不同的时刻读到的同一批数据可能是不一样的,可能会受到其他事务的影响,比如其他事务改了这批数据并提交了。通常针对数据更新(UPDATE)操作。

      在这里插入图片描述

    • 解决方案:

      • 通过把隔离级别设置为REPEATABLE READ,通过mvcc具体实现,为每个事务创建一个数据快照,并在事务提交时释放旧的数据快照,从而解决了不可重复读的问题。这确保了事务之间的隔离性和数据一致性,使得每个事务都可以在不受其他事务干扰的情况下进行读取和修改数据。
  • 幻影读:

    • 幻读是针对数据**插入(INSERT)**操作来说的。假设事务A对某些行的内容作了更改,但是还未提交,此时事务B插入了与事务A更改前的记录相同的记录行,并且在事务A提交之前先提交了,而这时,在事务A中查询,会发现好像刚刚的更改对于某些数据未起作用,但其实是事务B刚插入进来的,让用户感觉很魔幻,感觉出现了幻觉,这就叫幻读。

      在这里插入图片描述

    • 解决方案:

      • InnoDB中,把隔离级别设置为REPEATABLE READ,也会解决掉幻影读的问题,在生成快照的基础上,事务会对读取的数据通过加锁的方式,以防止其他事务对这些行进行修改。这意味着当一个事务正在读取某一行时,其他事务不能修改该行,从而避免了幻读问题。
      • 而如果是范围查询时也会通过加间隙锁(Next-Key Locking)的方式,对查询范围内的间隙(不存在的数据)进行锁定,以防止其他事务在该范围内插入新数据,从而避免了幻读。
      • 如果是SERIALIZABLE,则是每个事务对一个数据进行查询等操作时,其他的事务不会进行等待,等待该事务执行完后在执行,以串行的方式执行操作.

在数据库中读取的方式主要有两种方式:

  • 当前读:官方叫做Locking Reads(锁定读取),读取数据的最新版本. 常见的update/insert/delete、还有 select … for update、select … lock in share mode 都是当前读.
  • 快照读:官方叫做 Consistent Nonlocking Reads(一致性非锁定读取), 也就是 MVCC 生成的 ReadView, 用于普通的 select 的语句.

3.2、MVCC概述

MVCC的工作原理是使用数据在某个时间点的快照来实现的。这意味着,无论事务运行多长时间,都可以看到数据的一致视图,实现方式主要是通过ReadView 和undo log版本链实现。也意味着不同的事务可以在同一时间看到同一张表中的不同数据!如果你之前没有这方面的概念,这句话听起来可能有点让人迷惑,熟悉了以后你会发现还是很容易理解的

3.3、ReadView

ReadView 的主要作用是为每个事务提供一致性的数据视图—-该视图存储的主要是:readview[m_ids], m_low_limit_id 格式存放,m_ids存放的是事务id的list集合

读以提交可重复读的时候都提到了一个词,叫做快照,学名叫做一致性视图,说的就是ReadView,这也是可重复读和不可重复读的关键,可重复读是在事务开始执行第一次查询的时候生成一个当前事务全局性的快照,而读提交则是每次执行语句的时候都重新生成一次快照。

它主要包括:

  • m_ids:当前有哪些事务正在执行,且还没提交,这些事务的id就会存在这里
    • min_trx_id(**m_up_limit_id**),是指 m_ids 里最小的值(当前未提交事务列表中的第一个);
  • max_trx _id(m_low_limit_id):是指下一个要生成的事务 id。下一个要生成的事务 id 肯定比现在所有事务的 id 都大;
  • creator_trx_id:每开启一个事务都会生成一个 ReadView,而 creator_trx_id 就是这个开启的事务的 id。

对于一个快照来说,它能够读到那些版本数据,要遵循以下规则:

  1. 当前事务内的更新,可以读到;
  2. 版本未提交,不能读到;
  3. 版本已提交,但是却在快照创建后提交的,不能读到;
  4. 版本已提交,且是在快照创建前提交的,可以读到;

3.4、undo log 版本链

  • undo log 版本链是基于 undo log 实现的。MySQL可从 undo log 日志中,读取到原插入、修改、删除之前的值,最终把值重新变回去,这就是回滚操作。

    • undo log 中主要保存了数据的基本信息,比如说日志开始的位置、结束的位置,主键的长度、表id,日志编号、日志类型

    在这里插入图片描述

  • undo log 还包含两个隐藏字段 trx_id(事务id) 和 roll_pointer(回滚指针)。trx_id 表示当前这个事务的 id,MySQL 会为每个事务分配一个 id,这个 id 是递增的。roll_pointer 是一个指针,指向这个事务之前的 undo log。

🔔 undo log日志(只有在更新聚集索引记录时,才写undo log)

举例:每当一个事务修改了数据行,他执行的修改记录会先保持到undo buffer中,然后在持久化到磁盘的undo log文件中,直到该事务提交,并且该事务的undo log没有被别的事物引用到(当一个新的事物对该数据进行操作时就会生成一个快照引用)

  • 多个日志会根据生成时间组成一条undo log链表

在这里插入图片描述

  • purge线程:

    purge 线程是一个周期运行的垃圾收集线程, 对于没有事务引用的undo log进行清除, 但当purge线程发现undo log没有事务引用时将自动清除, 因为insert undo log在事务完成时直接删除, 所以需要清除的都是update undo log,

3.5、举例演示:

实现在InnoDB下的repeatable read隔离级别下ReadView 和undo log如何
在这里插入图片描述

  1. 事务100 对user表执行 insert + 提交

说明:这步就是为了构建原始记录

begin;
insert into user(id,name) values(1,'张三');
commit;
  1. 然后, 事务101 对user表执行 update + 提交
  2. 同时, 事务102事务101提交前, 查询了该记录:说明:有事务使用的undo log, purge线程不会清除这条记录
begin;
update user set name = '李四' where id = 1;commit;
begin;
-- 读到的name为张三
select * from user where id = 1;

在这里插入图片描述

  1. 然后,事务103 对user表执行 update 未提交
  2. 同时,事务102 再次读取: 在RR级别, 后面所做的更改依然不可见:
  3. 同时, 事务104 执行了查询, 读取到了事务101提交的“李四”(因为事务103尚未提交),然后事务103提交:

在这里插入图片描述

  1. 然后, 事务105来了, 它读取到的却是“王五”,然后三个查询等都提交,由此发现3个事务分别看到了3个版本
    在这里插入图片描述

引用

https://zhuanlan.zhihu.com/p/190886874
https://blog.csdn.net/scm_2008/article/details/127985117
MySQL技术内幕:InnoDB存储引擎(第2版)_姜承尧

相关文章:

【2023】从事务的特征以及解决方式上分析MySQL是如何保证事务的

----以MySQL的InnoDB介绍 目录 前言事务,事务到底是什么? 一、事务的特征:二、事务特征具体保证1、Redo Log(重做日志) ---保证事务的持久性1.1、🟡刷盘时机1.2、redo log记录形式1.3、redo log日志的好处 2、undo log(回滚日志)…...

MTR 网络连通性测试工具 基础入门 整理

MTR MTR的全称是 my traceroute,是一个集合了 ping 与 traceroute 功能的网络诊断工具,广泛应用于链路测试。相对于 traceroute 只会做一次链路跟踪测试,mtr会对链路上的相关节点做持续探测并给出相应的统计信息。因此,mtr能避免…...

Linux安装mysql数据库并实现主从搭建

一.环境说明 【环境说明】: 192.168.110.161 mysql-master ##网络配置到位,防火墙关闭,selinux关闭 192.168.110.162 mysql-slave ##网络配置到位,防火墙关闭,selinux关闭 两台主机,操作系统是centos7…...

windows使用小技巧之windows照片查看器无法显示此图片

碰到过好几次了,以前没有理会,今天特意去查了一下解决方法,不然确实不太方便。 1、打开“颜色管理”-“高级”: 2、将“设备配置文件”选择为“Agfa:Swop Standard” 3、关闭,重新打开图片,好…...

ez_pz_hackover_2016

ez_pz_hackover_2016 Arch: i386-32-little RELRO: Full RELRO Stack: No canary found NX: NX disabled PIE: No PIE (0x8048000) RWX: Has RWX segments32位,保护全关 int chall() {size_t v0; // eaxint result; // eaxchar s[1024]…...

解决方案| anyRTC远程检修应用场景

背景 在这个科技飞速发展的时代,各行各业都要求高效运转。然而,当出现问题时,我们却常常因为无法及时解决而感到困扰,传统解决问题的方式是邀请技术人员现场解决问题,如果技术人员解决不了,还要邀请专家从…...

IC芯片测试:如何对芯片静态功耗进行测试?

静态功耗也叫静态电流,是指芯片在静止状态下的电流或者是指芯片在不受外界因素影响下自身所消耗的电流。静态功耗对于芯片来说是衡量一款芯片的功耗与效率非常重要的指标。 传统手动测试静态功耗只需在芯片的输入端串上一台万用表,然后对芯片各个端口添加…...

Redis面试二“缓存击穿是什么”

条件 缓存击穿是应为Redis某个缓存数据设置了过期时间,而刚好有大并发数据请求这个数据,导致DB有大量请求,引发DB崩溃。 第一种方法就是设置互称锁 当缓存失效时不立即删除缓存而是用setnx设置一个互斥锁,当操作完成后在load db…...

python使用apscheduler每隔一段时间自动化运行程序

apscheduler使用比较简单,每隔一段时间自动化运行的步骤是: 创建调度器scheduler BlockingScheduler()添加任务scheduler.add_job(函数名, interval, minutes30) # 每隔30分钟运行一次直接执行:scheduler.start()示例代码 from datetime i…...

2023 Sui Builder House全球之旅圆满收官

2023年的最后一场Builder House于上周在新加坡举行,包括主题演讲、小组讨论和研讨会等聚焦Sui的现在和未来的活动。其中,zkLogin是本次活动的最大亮点。作为一种新的Sui原语,zkLogin允许用户使用Web2身份验证创建帐户,有望推动大规…...

OpenCV自学笔记二十三:K近邻算法

K近邻算法(K-Nearest Neighbors,简称KNN)是一种常用的监督学习算法,可以用于分类和回归问题。在OpenCV中,KNN算法有相应的函数实现,主要包含在ml模块中。 KNN算法的原理很简单,它基于样本之间的…...

ChatGLM-中英对话大模型-6B试用说明

ChatGLM-中英对话大模型-6B试用说明 搭建环境下载模型测试模型结果 搭建环境 pip install modelscope1.4.3 -f https://modelscope.oss-cn-beijing.aliyuncs.com/releases/repo.html pip install protobuf3.20.0 transformers4.27.1 icetk cpm_kernels下载模型 from modelsco…...

小白入门pytorch(一)

本文为小白入门Pytorch中的学习记录博客 小白入门pytorch 基础知识 导入torch,查看torch版本 import torch print(torch.__version__)输出结果: 1.12.1cu113张量 在pytorch中,张量(tensor)是最基本的数据结构。 …...

【STM32笔记】HAL库I2C通信配置、读写操作及通用函数定义

【STM32笔记】HAL库I2C通信配置、读写操作及通用函数定义 文章目录 I2C协议I2C配置I2C操作判断I2C是否响应I2C读写 附录:Cortex-M架构的SysTick系统定时器精准延时和MCU位带操作SysTick系统定时器精准延时延时函数阻塞延时非阻塞延时 位带操作位带代码位带宏定义总…...

Direct3D模板缓存

模板缓存是一个用于获得某种特效的离屏缓存,模板缓存的分辨率与后台缓存和深度缓存的分辨率完全相同,所以像素也是一一对应的,模板缓存允许我们动态的,有针对性的决定是否将某个像素写入后台缓存中。 例如实现镜面效果时&#xf…...

在windows上执行ssh-keygen报错Bad permissions

在windows上执行ssh-keygen报错Bad permissions:如下 C:\Users\xiaoming>ssh-keygen -p -m PEM -f C:\mywork\id_rsa Bad permissions. Try removing permissions for user: BUILTIN\\Users (S-1-6-92-143) on file C:/mywork/id_rsa.WARNING: UNPROTECTED PRIV…...

给Proxmox VE 虚拟机分配巨大分区惹麻烦

由于缺乏良好的规划,有开发人员直接在公有云采购一个容量超过100TB的NAS存储,使用过程中,数据的存储也没有规划,业务数据一股脑的写入到同一个目录,下边的子目录没有规律,用用户的图片、视频、访问日志、甚…...

数学建模——统计回归模型

一、基本知识 1、基本统计量 总体:研究对象的某个感兴趣的指标。样本:从总体中随机抽取的独立个体X1,X2,…,Xn,一般称(X1,…,Xn)为一个样本,可以看成一个n维随机向量,它的每一取组值(x1,…,xn)称为样本的观测值。统计…...

C++【个人笔记1】

1.C的初识 1.1 简单入门 #include<iostream> using namespace std; int main() {cout << "hello world" << endl;return 0; } #include<iostream>; 预编译指令&#xff0c;引入头文件iostream.using namespace std; 使用标准命名空间cout …...

博通强迫三星签不平等长约,被韩处罚1亿元 | 百能云芯

近日&#xff0c;博通&#xff08;Broadcom&#xff09;这家国际知名的半导体公司因其市场主导地位的滥用&#xff0c;遭到了韩国公平贸易委员会&#xff08;FTC&#xff09;的严厉制裁&#xff0c;罚款高达191亿韩元&#xff0c;约合人民币1.04亿元。这一惩罚背后的故事揭示了…...

版本控制 Sourcetree

Sourcetree软件做版本控制&#xff0c;小程序的代码和springboot项目的代码放到同一个文件夹下&#xff0c; 无脑安装就行 命名就用项目名bkd表示springboot项目名 项目命名xcx表示小程序 每次上传代码&#xff0c;一定要先拉下代码不然代码冲突处理起来比较麻烦...

题目 1059: 二级C语言-等差数列

题目描述 sum2581114…&#xff0c;输入正整数n&#xff0c;求sum的前n项和。样例输入 2样例输出 7 根据题目我们得知&#xff0c;求一个等差数列的和。 等差数列的下一项前一项d。d是等差。 根据这个直接求每一项&#xff0c;再加进sum的和&#xff0c;最后输出即可。 在本题中…...

HarmonyOS 如何使用异步并发能力进行开发

一、并发概述 并发是指在同一时间段内&#xff0c;能够处理多个任务的能力。为了提升应用的响应速度与帧率&#xff0c;以及防止耗时任务对主线程的干扰&#xff0c;HarmonyOS 系统提供了异步并发和多线程并发两种处理策略。 ● 异步并发是指异步代码在执行到一定程度后会被暂…...

时间格式化时候HH和hh的区别

SimpleDateFormat simpleDateFormatnew SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); simpleDateFormat.format(new Date()) HH&#xff08;大写&#xff09;&#xff1a;表示使用24小时制&#xff08;也称为军用时间制&#xff09;来表示小时。它的范围是从00到23。例…...

aliyunoss上传图片

依赖 <dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.8.1</version></dependency>配置文件 config:alioss:endpoint: oss-cn-shanghai.aliyuncs.com&#xff08;节点名 我…...

动手吧,vue数字动画

数字动画&#xff0c;有数字的地方都能用上&#xff0c;拿去吧&#xff01; 效果&#xff1a; 1、template部分 <template><div class"v-count-up">{{ dispVlaue }}</div> </template> 2、js部分 export default {data() {return {timer…...

Android12之仿Codec2.0实现传递编解码器组件本质(四十六)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药. 更多原创,欢迎关注:Android…...

MongoDB【部署 04】Windows系统实现MongoDB多磁盘存储

Windows系统实现多磁盘存储 1.为什么2.多磁盘存储2.1 数据库配置2.2 文件夹磁盘映射2.3 创建新的数据集 3.总结 1.为什么 这里仅针对只有一台Windows系统服务器的情景&#xff1a; 当服务器存储不足时&#xff0c;或者要接入更多的数据&#xff0c;就会挂载新磁盘&#xff0c…...

ruoyi框架使用自定义用户表登录

背景 有的时候我们做框架升级或改造的时候&#xff0c;需要用到原来的部分表&#xff0c;比如只是用ruoyi的框架&#xff0c;然后登录的用户逻辑还是想用自己的表&#xff0c;那么接下来这边文章将介绍修改逻辑。 修改教程 1、SysLoginController.java 大家找到这个login方…...

计算机视觉与深度学习-卷积神经网络-卷积图像去噪边缘提取-卷积-[北邮鲁鹏]

目录标题 参考学习链接卷积的定义卷积的性质叠加性平移不变性交换律结合律分配律标量 边界填充边界填充方法 - 常数填充最常用常数填充零填充&#xff08;zero padding&#xff09;拉伸镜像 卷积示例单位脉冲核无变化平移平滑锐化 卷积核平均卷积核高斯卷积核高斯卷积核定义高斯…...

网站开发软件启动/网络销售技巧

原文&#xff1a; Testing Controller Logic 作者&#xff1a; Steve Smith 翻译&#xff1a; 姚阿勇&#xff08;Dr.Yao&#xff09; 校对&#xff1a; 高嵩(Jack) ASP.NET MVC 应用程序的控制器应当小巧并专注于用户界面。涉及了非 UI 事务的大控制器更难于测试和维护。 章节…...

城市建设网站设计/百度ai智能写作工具

在一个类中创建另外一个类&#xff0c;叫做成员内部类。这个成员内部类可以静态的&#xff08;利用static关键字修饰&#xff09;&#xff0c;也可以是非静态的。由于静态的内部类在定义、使用的时候会有种种的限制。所以在实际工作中用到的并不多。   在开发过程中&#xff…...

行业门户网站的优化怎么做yps行业门户系统/软文台

为实现负载平衡,我们可能会使用多个WEB服务器,也就会需要给多个IIS配置同样的站点和应用程序池.那么我们需要一个一个的重新建吗?当然不用,我们只需要一些简单的命令就可以在IIS7(Windows Server 2008)或IIS7.5(Windows Server 2008 R2)上来导出导入这些配置了. 当我们在IIS7或…...

wordpress电视剧采集解析/百度手机助手app下载并安装

Linux下命令安装DB2 9.7 express免费版数据库的步骤&#xff08;已经实践过并补充有关问题&#xff09; 可以使用图形界面&#xff0c;也可以使用手工安装的方式。我们先介绍最简单的安装方法。 1.从IBM网站下载DB2 9.7 express C版本&#xff1a;文件名db2exc_971_LNX_x86.ta…...

网站建设 上海网站建设/设计网站排行

问题描述 利用 XShell 登录远程 Unix 服务器&#xff0c;启动后台进程&#xff0c;如下所示。 $ command & 当关闭 XShell 后&#xff0c;后台进程就会一起终止。 问题原因 在查看 Bash 的使用手册后&#xff0c;发现如下一段描述&#xff1a; The shell exits by de…...

长沙优化网站价格/如何创建自己的网址

2019独角兽企业重金招聘Python工程师标准>>> http://blog.csdn.net/lzy_lizhiyang/article/details/45056703 转载于:https://my.oschina.net/u/3045515/blog/895074...