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

【MySQL】锁(黑马课程)

【MySQL】锁

  • 0. 锁的考察点
  • 1. 概述
  • 1. 锁的分类
    • 1.1 属性分类
    • 1.2 粒度分类
  • 2. 全局锁
    • 2.1 全局锁操作
      • 2.2.1 备份问题
  • 3. 表级锁
    • 3.1 表锁
    • 3.2 语法
    • 3.3 表共享读锁(读锁)
    • 3.4 表独占写锁(写锁)
    • 3.5 元数据锁(meta data lock, MDL)
    • 3.6 意向锁
      • 3.6.1 意向锁的种类
      • 3.6.2 兼容关系
      • 3.6.3 意向锁测试
  • 4. 行级锁
  • 附录

0. 锁的考察点

在这里插入图片描述

1. 概述

锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中,除传统的计算资源(CPU、RAM、I/O)的争用以外,数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题,锁冲突也是影响数据库并发访问性能的一个重要因素。从这个角度来说,锁对数据库而言显得尤其重要,也更加复杂。

1. 锁的分类

在这里插入图片描述

1.1 属性分类

InnoDB存储引擎实现了两种标准的行级锁:共享锁(S Lock)和排他锁(X Lock)。

共享锁(S Lock):允许事务读一行数据。
排他锁(X Lock):允许事务删除或更新一行数据。

1.2 粒度分类

按照锁的粒度来分,分为以下三类

  1. 全局锁:锁定数据库中的所有表。
  2. 表级锁:每次操作锁住整张表。
  3. 行级锁:每次操作,锁住对应的行数据。

2. 全局锁

全局锁就是对整个数据库实例加锁,加锁后整个实例就处于只读状态,后续的DML的写语句,DDL语句,已经更新操作的事务提交语句都将被阻塞。

其典型的使用场景是做全库的逻辑备份,对所有的表进行锁定,从而获取一致性视图,保证数据的完整性。

如果不上锁,边备份,业务还正常执行就会造成数据不一致的问题。
在这里插入图片描述

2.1 全局锁操作

mysql> flush tables with read lock;      // 加全局锁
Query OK, 0 rows affected (0.01 sec)mysql> insert into migrations values(7,'1231231',1);    // 插入数据的时候
ERROR 1223 (HY000): Can't execute the query because you have a conflicting read lockmysql> unlock tables;  // 销毁全局锁
Query OK, 0 rows affected (0.00 sec)mysql> insert into migrations values(7,'1231231',1);  // 可以正常插入了
Query OK, 1 row affected (0.01 sec)

备份数据库(newdb3)的数据

(base)~ mysqldump -u root -p  newdb3>/Users/fanzhen/Downloads/newdb3.sql
Enter password:

2.2.1 备份问题

全局锁特点

数据库中加全局锁,是一个比较重的操作,存在以下问题:

  1. 如果在主库上备份,那么在备份期间都不能执行更新,业务基本上就得停摆。

  2. 如果在从库上备份,那么在备份期间从库不能执行主库同步过来的二进制日志(binlog),会导致主从延迟。

在InnoDB引擎中,我们可以在备份时加上参数-single-transaction参数来完成不加锁的一致性数据备份。

在这里插入图片描述

3. 表级锁

表级锁,每次操作锁住整张表。锁定粒度大,发生锁冲突的概率最高,并发度最低。应用在MyISAM、InnoDB、BDB等存储引擎中。

对于表级锁,主要分为以下三类:

  1. 表锁
  2. 元数据锁(meta data lock, MDL)
  3. 意向锁

3.1 表锁

对于表锁,分为两类:

  1. 表共享读锁(read lock) 简称读锁
  2. 表独占写锁(write lock) 简称写锁

3.2 语法

1. 加锁: lock tables 表名 read/write
2. 释放锁:unlock tables; 或者 客户端断开连接

3.3 表共享读锁(读锁)

如下图,当对一张表加读锁,我们可以看到,不同的客户端都可以进行查询操作,但是进行DDL与DML都会阻塞,当进行unlock tables操作时,其他进行DML、DDL操作的客户端获取资源,操作阻塞的SQL语句。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

3.4 表独占写锁(写锁)

提示:排他锁,又称为写锁、独占锁
写锁在当前客户端既可以读也可以写,但是其他客户端既不能写也不能读。

mysql> unlock tables;
Query OK, 0 rows affected (0.00 sec)mysql> lock tables  migrations  write;
Query OK, 0 rows affected (0.01 sec)mysql> select * from migrations;
+----+-------------------------------------------------------+-------+
| id | migration                                             | batch |
+----+-------------------------------------------------------+-------+
|  1 | 2014_10_12_000000_create_users_table                  |     1 |
|  2 | 2014_10_12_100000_create_password_resets_table        |     1 |
|  3 | 2019_08_19_000000_create_failed_jobs_table            |     1 |
|  4 | 2019_12_14_000001_create_personal_access_tokens_table |     1 |
|  5 | 2024_03_31_143916_create_posts_table                  |     1 |
|  6 | 2024_04_01_143040_create_blogs_table                  |     1 |
|  7 | dagenihao                                             |     1 |
+----+-------------------------------------------------------+-------+
7 rows in set (0.00 sec)

在这里插入图片描述
在这里插入图片描述

3.5 元数据锁(meta data lock, MDL)

MDL加锁过程是系统自动控制,无需显式使用,在访问一张表的时候会自动加上。MDL锁主要作用是维护表元数据的数据一致性,在表上有活动事务的时候,不可以对元数据进行写入操作。为了避免DML与DDL冲突,保证读写的正确性。

在MySQL5.5中引入了MDL,当对一张表进行增删改查的时候,加MDL读锁(共享)当对表结构进行变更操作的时候,加MDL写锁(排他)。

在这里插入图片描述

// 客户端1
mysql> begin;
Query OK, 0 rows affected (0.00 sec)mysql> select * from migrations;
+----+-------------------------------------------------------+-------+
| id | migration                                             | batch |
+----+-------------------------------------------------------+-------+
|  1 | 2014_10_12_000000_create_users_table                  |     1 |
|  2 | 2014_10_12_100000_create_password_resets_table        |     1 |
|  3 | 2019_08_19_000000_create_failed_jobs_table            |     1 |
|  4 | 2019_12_14_000001_create_personal_access_tokens_table |     1 |
|  5 | 2024_03_31_143916_create_posts_table                  |     1 |
|  6 | 2024_04_01_143040_create_blogs_table                  |     1 |
|  7 | dagenihao                                             |     1 |
+----+-------------------------------------------------------+-------+
7 rows in set (0.00 sec)
// 当客户端2执行完 update migrations set migration =  'MDL' where id = 7;
mysql> select * from migrations;
+----+-------------------------------------------------------+-------+
| id | migration                                             | batch |
+----+-------------------------------------------------------+-------+
|  1 | 2014_10_12_000000_create_users_table                  |     1 |
|  2 | 2014_10_12_100000_create_password_resets_table        |     1 |
|  3 | 2019_08_19_000000_create_failed_jobs_table            |     1 |
|  4 | 2019_12_14_000001_create_personal_access_tokens_table |     1 |
|  5 | 2024_03_31_143916_create_posts_table                  |     1 |
|  6 | 2024_04_01_143040_create_blogs_table                  |     1 |
|  7 | dagenihao                                             |     1 |
+----+-------------------------------------------------------+-------+
7 rows in set (0.00 sec)
mysql> commit-> ;
Query OK, 0 rows affected (0.00 sec)------------------------第二个例子-----------------------------------
mysql> bagin;
mysql> select * from migrations;
+----+-------------------------------------------------------+-------+
| id | migration                                             | batch |
+----+-------------------------------------------------------+-------+
|  1 | 2014_10_12_000000_create_users_table                  |     1 |
|  2 | 2014_10_12_100000_create_password_resets_table        |     1 |
|  3 | 2019_08_19_000000_create_failed_jobs_table            |     1 |
|  4 | 2019_12_14_000001_create_personal_access_tokens_table |     1 |
|  5 | 2024_03_31_143916_create_posts_table                  |     1 |
|  6 | 2024_04_01_143040_create_blogs_table                  |     1 |
|  7 | MDL                                                   |     1 |
+----+-------------------------------------------------------+-------+
7 rows in set (0.00 sec)
// 客户端2
mysql> begin;
Query OK, 0 rows affected (0.00 sec)mysql> select * from migrations;
+----+-------------------------------------------------------+-------+
| id | migration                                             | batch |
+----+-------------------------------------------------------+-------+
|  1 | 2014_10_12_000000_create_users_table                  |     1 |
|  2 | 2014_10_12_100000_create_password_resets_table        |     1 |
|  3 | 2019_08_19_000000_create_failed_jobs_table            |     1 |
|  4 | 2019_12_14_000001_create_personal_access_tokens_table |     1 |
|  5 | 2024_03_31_143916_create_posts_table                  |     1 |
|  6 | 2024_04_01_143040_create_blogs_table                  |     1 |
|  7 | dagenihao                                             |     1 |
+----+-------------------------------------------------------+-------+
7 rows in set (0.00 sec)
mysql>  update migrations set migration =  'MDL' where id = 7;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0mysql> commit;
Query OK, 0 rows affected (0.00 sec)------------------------第二个例子-----------------------------------
mysql> alter table migrations add column java int; // 不能进行修改会一直阻塞

查看元数据锁

select object_type,object_schema,object_name,lock_type,lock_duration from performance_schema.metadata_locks;
+-------------------+--------------------+----------------+---------------------+---------------+
| object_type       | object_schema      | object_name    | lock_type           | lock_duration |
+-------------------+--------------------+----------------+---------------------+---------------+
| COLUMN STATISTICS | performance_schema | metadata_locks | SHARED_READ         | STATEMENT     |
| COLUMN STATISTICS | performance_schema | metadata_locks | SHARED_READ         | STATEMENT     |
| COLUMN STATISTICS | performance_schema | metadata_locks | SHARED_READ         | STATEMENT     |
| COLUMN STATISTICS | performance_schema | metadata_locks | SHARED_READ         | STATEMENT     |
| COLUMN STATISTICS | performance_schema | metadata_locks | SHARED_READ         | STATEMENT     |
| COLUMN STATISTICS | performance_schema | metadata_locks | SHARED_READ         | STATEMENT     |
| COLUMN STATISTICS | performance_schema | metadata_locks | SHARED_READ         | STATEMENT     |
| COLUMN STATISTICS | performance_schema | metadata_locks | SHARED_READ         | STATEMENT     |
| COLUMN STATISTICS | performance_schema | metadata_locks | SHARED_READ         | STATEMENT     |
| COLUMN STATISTICS | performance_schema | metadata_locks | SHARED_READ         | STATEMENT     |
| COLUMN STATISTICS | performance_schema | metadata_locks | SHARED_READ         | STATEMENT     |
| TABLE             | performance_schema | metadata_locks | SHARED_READ         | TRANSACTION   |
| SCHEMA            | performance_schema | NULL           | INTENTION_EXCLUSIVE | TRANSACTION   |
+-------------------+--------------------+----------------+---------------------+---------------+
13 rows in set (0.01 sec)

3.6 意向锁

为了避免DML在执行时,加的行锁与表锁的冲突,在InnoDB中引入了意向锁,使得表锁不用检查每行数据是否加锁,使用意向锁来减少表锁的检查。

说明:左侧线程A在执行的时候,先开启事物,然后执行update并会在这一行加上行锁,然后对该表加上意向锁,线程B要对这个表加上表锁,线程B要通过意向锁来决定能不能加表锁。
在这里插入图片描述

3.6.1 意向锁的种类

1.意向共享锁(IS):由语句select...lock in share mode添加
2.意向排他锁(IX):由insert、update、delete、select.. for update 添加

3.6.2 兼容关系

  1. 意向共享锁(IS):与表锁共享锁(read)兼容,与表锁排它锁(write)互斥。
  2. 意向排他锁(IX):与表锁共享锁(read)及排它锁(write)都互斥。意向锁之间不会互斥。

可以通过以下SQL查看意向锁及行锁的加锁情况。

select object_schema,object_name,index_name,lock_type,lock_mode,lock_data from performance_schema.data_locks;

3.6.3 意向锁测试

// TODO

4. 行级锁

行级锁,每次操作锁住对应的行数据。锁定粒度最小,发生锁冲突的概率最低,并发度最高。应用在InnoDB存储引擎中。

InnoDB的数据是基于索引组织的,行锁是通过对索引上的索引项加锁来实现的,而不是对记录加的锁。

对于行级锁,主要分为以下三类:

  1. 行锁(Record Lock):锁定单个行记录的锁,防止其他事务对此行进行update和delete。在RC、RR隔离级别下都支持。
  2. 间隙锁(Gap Lock):锁定索引记录间隙(不含该记录),确保索引记录间隙不变,防止其他事务在这个间隙进行insert,产生幻读。在RR隔离级别下都支持
  3. 临键锁(Next-Key Lock):行锁和间隙锁组合,同时锁住数据,并锁住数据前面的间隙Gap。在RR隔离级别下支持。

// TODO

附录

  1. 徐庶MySQL锁 https://blog.csdn.net/bjjx123456/article/details/136180761
  2. 黑马讲解MySQL锁部分

相关文章:

【MySQL】锁(黑马课程)

【MySQL】锁 0. 锁的考察点1. 概述1. 锁的分类1.1 属性分类1.2 粒度分类 2. 全局锁2.1 全局锁操作2.2.1 备份问题 3. 表级锁3.1 表锁3.2 语法3.3 表共享读锁(读锁)3.4 表独占写锁(写锁)3.5 元数据锁(meta data lock, MDL)3.6 意向…...

1.10编程基础之简单排序--02:奇数单增序列

OpenJudge - 02:奇数单增序列http://noi.openjudge.cn/ch0110/02/ 描述 给定一个长度为N(不大于500)的正整数序列,请将其中的所有奇数取出,并按升序输出。 输入 共2行: 第1行为 N; 第2行为 N 个正整数,其间用空格间隔。 输出 增序输出的奇数序列,数据之间以逗号间隔。数…...

【leetcode78-81贪心算法、技巧96-100】

贪心算法【78-81】 121.买卖股票的最佳时机 class Solution:def maxProfit(self, prices: List[int]) -> int:dp[[0,0] for _ in range(len(prices))] #dp[i][0]第i天持有股票,dp[i][1]第i天不持有股票dp[0][0] -prices[0]for i in range(1, len(prices)):dp[…...

IEC62056标准体系简介-4.IEC62056-53 COSEM应用层

为在通信介质中传输COSEM对象模型,IEC62056参照OSI参考模型,制定了简化的三层通信模型,包括应用层、数据链路层(或中间协议层)和物理层,如图6所示。COSEM应用层完成对COSEM对象的属性和方法的访问&#xff…...

嵌入式应用开发之代码整洁之道

前言:本系列教程旨在如何将自己的代码写的整洁,同时也希望小伙伴们懂如何把代码写脏,以备不时之需,同时本系列参考 正点原子 , C代码整洁之道,编写可读的代码艺术。 #好的代码的特点 好的代码应该都有着几…...

iwconfig iwpriv学习之路

iwconfig和iwpriv是两个常用的wifi调试工具,最近需要使用这两个工具完成某款wifi芯片的定频测试,俗话说好记性不如烂笔头,于是再此记录下iwconfig和iwpriv的使用方式。 -----再牛逼的梦想,也抵不住傻逼般的坚持! ----2…...

【Docker-compose】搭建php 环境

文章目录 Docker-compose容器编排1. 是什么2. 能干嘛3. 去哪下4. Compose 核心概念5. 实战 :linux 配置dns 服务器,搭建lemp环境(Nginx MySQL (MariaDB) PHP )要求6. 配置dns解析配置 lemp Docker-compose容器编排 1. 是什么 …...

【记录】LaTex|LaTex 代码片段 Listings 添加带圆圈数字标号的箭头(又名 LaTex Tikz 库画箭头的简要介绍)

文章目录 前言注意事项1 Tikz 的调用方法:newcommand2 标号圆圈数字的添加方式:\large{\textcircled{\small{1}}}\normalsize3 快速掌握 Tikz 箭头写法:插入点相对位移标号node3.1 第一张图:插入点相对位移3.2 第二张图&#xff1…...

《框架封装 · Redis 事件监听》

📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗 🌻 CSDN入驻不久,希望大家多多支持,后续会继续提升文章质量,绝不滥竽充数…...

小白学webgl合集-Three.js加载器

THREE.TextureLoader: 用途: 加载单个图像文件并将其作为纹理应用到材质上。示例: const loader new THREE.DataTextureLoader(); loader.load(path/to/data.bin, function (texture) {const material new THREE.MeshBasicMaterial({ map: texture });const geometry new TH…...

【算法】字符串的排列

难度:中等 给你两个字符串 s1 和 s2 ,写一个函数来判断 s2 是否包含 s1 的排列。如果是,返回 true ;否则,返回 false 。 换句话说,s1 的排列之一是 s2 的 子串 。 示例 1: 输入:…...

5-3.损失函数

文章最前: 我是Octopus,这个名字来源于我的中文名–章鱼;我热爱编程、热爱算法、热爱开源。所有源码在我的个人github ;这博客是记录我学习的点点滴滴,如果您对 Python、Java、AI、算法有兴趣,可以关注我的…...

SCSA第四天

ASPF FTP --- 文件传输协议 Tftp --- 简单文件传输协议 FTP协议相较于Tftp协议 ---- 1,需要进行认证 2,拥有一套完整的命令集 用户认证 防火墙管理员认证 ---- 校验登录者身份合法性 用户认证 --- 上网行为管理中的一环 上网用户认证 --- 三层认证…...

品牌策划必读:9本改变游戏规则的营销经典

作为深耕品牌十余年的策划人,这些年自学啃下的书不计其数。 这里特意挑选了几本知名度不高但是却非常有用的“遗珠”优质品牌策划书籍分享出来。 如果你是一位初步了解品牌的人,这些书籍既包含了品牌理论基础,也有实用的实践指导。 这些书…...

泛型

背景 优点 类型绝对安全避免强制类型转换 泛型类 定义 使用 举例 泛型类 // 泛型类 T就是类型参数 public class Generic<T>{// key这个成员变量的类型为T,T的类型由外部指定private T t;public void set(T t){this.t t;}public T get(){return t;} }使用 // 创建一个泛…...

react动态渲染列表与函数式组件

1.如何使用jsx语法动态渲染列表呢&#xff0c;下边我用一个例子来切实总结一下 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scal…...

小程序内容管理系统设计

设计一个小程序内容管理系统&#xff08;CMS&#xff09;时&#xff0c;需要考虑以下几个关键方面来确保其功能完善、用户友好且高效&#xff1a; 1. 需求分析 目标用户&#xff1a;明确你的目标用户群体&#xff0c;比如企业、媒体、个人博主等&#xff0c;这将决定系统的功…...

HDFS 块重构和RedundancyMonitor详解

文章目录 1. 前言2 故障块的重构(Reconstruct)2.1 故障块的状态定义和各个状态的统计信息2.2 故障文件块的查找收集2.5.2.1 misReplica的检测2.5.2.2 延迟队列(postponedMisreplicatedBlocks)的构造和实现postponedMisreplicatedBlocks中Block的添加postponedMisreplicatedBloc…...

Power BI DAX常用函数使用场景和代码示例

Power BI函数表达式对于没有接触过的朋友可能会有些迷茫&#xff0c;花一点时间了解一下原理在学习一些常用的DAX函数&#xff0c;就可以解决工作中绝大部分问题&#xff0c;函数使用都是共同的。 以下是一些最常用的DAX函数&#xff0c;如聚合&#xff0c;计数&#xff0c;日期…...

机器学习与深度学习:区别与联系(含工作站硬件推荐)

一、机器学习与深度学习区别 机器学习&#xff08;ML&#xff1a;Machine Learning&#xff09;与深度学习&#xff08;DL&#xff1a;Deep Learning&#xff09;是人工智能&#xff08;AI&#xff09;领域内两个重要但不同的技术。它们在定义、数据依赖性以及硬件依赖性等方面…...

大模型/NLP/算法面试题总结5——Transformer和Rnn的区别

Transformer 和 RNN&#xff08;循环神经网络&#xff09;是两种常见的深度学习模型&#xff0c;广泛用于自然语言处理&#xff08;NLP&#xff09;任务。 它们在结构、训练方式以及处理数据的能力等方面有显著的区别。以下是它们的主要区别&#xff1a; 架构 RNN&#xff0…...

【RHCE】转发服务器实验

1.在本地主机上操作 2.在客户端操作设置主机的IP地址为dns 3.测试,客户机是否能ping通...

AI提示词:打造爆款标题生成器

打开GPT输入以下内容&#xff1a; # Role 爆款标题生成器## Profile - author: 姜小尘 - version: 02 - LLM: Kimi - language: 中文 - description: 利用心理学和市场趋势&#xff0c;生成吸引眼球的自媒体文章标题。## Background 一个吸引人的标题是提升文章点击率和传播力…...

skywalking-1-服务端安装

skywalking很优秀。 安装服务端 skywalking的服务端主要是aop服务&#xff0c;为了方便查看使用还需要安装ui。另外采集的数据我们肯定要存起来&#xff0c;这个数据库就直接用官方的banyandb。也就是aop、ui、banyandb都使用官方包。 我们的目的是快速使用和体验&#xff0c…...

查看oracle ojdbc所支持的JDBC驱动版本

oracle jcbc驱动的下载地址参考&#xff1a;JDBC and UCP Downloads page 其实上文中对ojdbc所支持的JDBC驱动版本已经有说明了&#xff0c;不过&#xff0c;因为oracle的驱动包很多时间&#xff0c;都是在公司内部私服里上传维护的&#xff0c;上传的时候&#xff0c;可能又没…...

自媒体运营怎样引流客源?

不管是企业还是个人&#xff0c;越来越多都在做自媒体引流运营&#xff0c;那有什么引流客源的方式呢&#xff1f; 高质量内容&#xff1a;创作并分享有价值的内容&#xff0c;吸引目标受众&#xff0c;提升内容的分享和传播效果。 SEO优化&#xff1a;优化文章标题、关键词和…...

【算法】十进制转换为二进制

目的&#xff1a;将十进制转换为二进制 思路&#xff1a; 首先我们手算的情况是通过求余数算出进制数&#xff0c;同样代码也是通过做除法和求余数的方式&#xff0c;除法是得出下一次的被除数&#xff0c;而求余数是得到进制数 代码&#xff1a; #include<stdio.h>/…...

Postman中的API安全堡垒:全面安全性测试指南

&#x1f6e1;️ Postman中的API安全堡垒&#xff1a;全面安全性测试指南 在当今的数字化世界中&#xff0c;API安全性是保护数据和系统不可或缺的一环。Postman作为API开发和测试的领先工具&#xff0c;提供了多种功能来帮助开发者进行API安全性测试。本文将深入探讨如何在Po…...

学圣学最终的目的是:达到思无邪的状态( 纯粹、思想纯正、积极向上 )

学圣学最终的目的是&#xff1a;达到思无邪的状态&#xff08; 纯粹、思想纯正、积极向上 &#xff09; 中华民族&#xff0c;一直以来&#xff0c;教学都是以追随圣学为目标&#xff0c;所以中华文化也叫圣学文化&#xff0c;是最高深的上等学问&#xff1b; 圣人那颗心根本…...

JS进阶-构造函数

学习目标&#xff1a; 掌握构造函数 学习内容&#xff1a; 构造函数 构造函数&#xff1a; 封装是面向对象思想中比较重要的一部分&#xff0c;js面向对象可以通过构造函数实现的封装。 同样的将变量和函数组合到了一起并能通过this实现数据的共享&#xff0c;所不同的是借助…...

东莞凤岗网站建设制作/快照关键词优化

浙大版《Python 程序设计》题目集 第2章-14 求整数段和 (15分) 给定两个整数A和B&#xff0c;输出从A到B的所有整数以及这些数的和。 输入格式&#xff1a; 输入在一行中给出2个整数A和B&#xff0c;其中−100≤A≤B≤100&#xff0c;其间以空格分隔。 输出格式&#xff1a;…...

河南省工程建设信息网官网入口/开封网站快速排名优化

地址&#xff1a;http://poj.org/problem?id2486 题意&#xff1a;有一颗苹果树&#xff0c;每个节点上面有很多苹果&#xff0c;从一个节点到另外一个可以到达的节点花费1步&#xff0c;求k步最多能吃到多少苹果。 mark&#xff1a;这是典型的回溯型树状dp。dp[i][j][0]代表以…...

制作自己的网站学校/软文推广的100个范例

H3C网络设备包括路由器和交换机有三种验证方式&#xff0c;包括none、password和scheme三种&#xff0c;下面以console口为例设置三种登陆验证方式。 我们用的实验平台是H3C HCL 2.1.1版本。 新建一个工程&#xff0c;添加一台MSR36-20路由器&#xff0c;然后启动路由器&#x…...

做网站同行/企业网站优化外包

编写完自己的程序&#xff0c;如何生成其对应的开发者文档以方便我们日后查看呢&#xff1f;使用 javadoc 开发工具即可生成一个开发者文档。本文将介绍使用 javadoc 如何生成开发者文档以及注意的问题。 1.文档注释 注释分为&#xff1a; 单行注释&#xff1a;// 注释内容多…...

wordpress打开前台页面空白/seo顾问服务深圳

Vivado时序约束中Tcl命令的对象及属性在前面的章节中&#xff0c;我们用了很多Tcl的指令&#xff0c;但有些指令并没有把所有的参数多列出来解释&#xff0c;这一节&#xff0c;我们就把约束中的Tcl指令详细讲一下。我们前面讲到过get_pins和get_ports的区别&#xff0c;而且我…...

沈阳思路网站制作/企业网站seo多少钱

c语言程序设计课程设计报告gysC 语言程序设计课程设计材料C语言程序设计课程设计报告学生姓名&#xff1a; 钱朝政 学 号&#xff1a; 131408115系 (院)&#xff1a; 信息工程学院专 业&#xff1a; 物联网工程设计(论 )题目: 职工信息管理系统完成日期: 2013年12月30 日&#…...