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

探究分布式事务:深入ACID特性在分布式系统中的挑战与解决方案


✨✨谢谢大家捧场,祝屏幕前的小伙伴们每天都有好运相伴左右,一定要天天开心哦!✨✨ 
🎈🎈作者主页: 喔的嘛呀🎈🎈
✨✨ 帅哥美女们,我们共同加油!一起进步!✨✨ 

 

目录

一、引言

二、什么是分布式事务?

        

三、ACID特性与分布式环境的挑战

1. 原子性(Atomicity)

2. 一致性(Consistency)

3. 隔离性(Isolation)

4. 持久性(Durability)

总结

四、分布式事务的解决方案

4.1、两阶段提交(Two-Phase Commit,2PC)

1. 工作原理:

2. 存在的问题:

3. 解决方案:

总结:

4.2、三阶段提交(Three-Phase Commit,3PC)

1. 工作原理:

2. 存在的问题:

3. 解决方案:

总结:

4.3、分布式事务中间件

1. 消息队列

2. 分布式数据库

3. 分布式事务中间件的优势

总结

4.4. 补偿事务

原理

优缺点

实例

4.5、全局事务协调器(Global Transaction Coordinator)

工作原理

优缺点

实例

结语


一、引言

随着互联网规模的扩大和应用复杂性的增加,分布式系统已经成为当今互联网应用架构的主流选择。在分布式系统中,保证数据一致性是至关重要的。而分布式事务作为实现数据一致性的关键技术之一,在面对多节点、网络延迟等挑战时显得尤为重要。本文将深入探讨分布式事务的概念、ACID特性在分布式环境下的挑战,以及常见的解决方案,带您深入了解分布式事务的精髓。

二、什么是分布式事务?

分布式事务是指涉及多个节点或服务的事务操作,这些节点可以位于不同的物理位置或运行在不同的系统中。分布式事务需要满足ACID属性,即原子性、一致性、隔离性和持久性。在分布式环境中,由于涉及到多个节点和可能存在网络延迟、节点故障等因素,实现ACID属性变得更加复杂。

        

  1. 原子性(Atomicity):原子性要求事务要么完全执行,要么完全不执行。在分布式环境中,要确保所有参与者都能成功提交或回滚事务,避免部分节点提交而其他节点未提交的情况发生。

  2. 一致性(Consistency):一致性要求事务在执行前后数据库的状态保持一致。在分布式环境中,由于多个节点之间的数据同步可能存在延迟,可能会出现数据不一致的情况。

  3. 隔离性(Isolation):隔离性要求事务之间相互独立,互不影响。在分布式环境中,要确保不同事务之间的操作不会相互干扰,避免出现数据混乱的情况。

  4. 持久性(Durability):持久性要求事务一旦提交,其结果应该是永久性的。在分布式环境中,要确保数据能够被可靠地持久化存储,即使发生节点故障也不会丢失数据。

三、ACID特性与分布式环境的挑战

ACID(原子性、一致性、隔离性和持久性)是传统数据库系统中事务的四个重要特性,它们确保了事务的可靠性和数据的一致性。然而,在分布式环境下,由于涉及到多个节点和网络通信,实现这些ACID特性变得更加复杂。下面我们将详细探讨每个ACID特性在分布式环境中面临的挑战:

1. 原子性(Atomicity)

  • 挑战
    • 分布式系统中的事务涉及到多个节点或服务,因此需要确保所有参与者要么全部执行成功,要么全部回滚。然而,由于网络延迟、节点故障等因素,可能导致某些节点成功提交而其他节点失败,从而破坏了原子性。
  • 解决方案
    • 使用分布式事务管理器(DTM)或分布式事务协议(如两阶段提交、三阶段提交)来协调各个参与者,确保事务的原子性。

2. 一致性(Consistency)

  • 挑战
    • 在分布式环境中,由于数据复制、异步通信等因素,可能导致数据在不同节点之间的一致性延迟,即使事务提交成功,也无法立即保证所有节点的数据都达到一致状态。
  • 解决方案
    • 使用分布式锁、同步机制或者强一致性的分布式数据库来保证数据的一致性。

3. 隔离性(Isolation)

  • 挑战
    • 分布式系统中的事务并发执行时,需要保证相互之间的隔离性,避免产生并发问题(如脏读、不可重复读、幻读)。但是,在分布式环境下,因为数据复制、分区通信等原因,可能会影响到事务的隔离性。
  • 解决方案
    • 使用分布式事务隔离级别(如读未提交、读已提交、可重复读、串行化)来控制事务之间的隔离程度,同时结合乐观锁或悲观锁等机制来保证数据的一致性。

4. 持久性(Durability)

  • 挑战
    • 分布式环境下,节点可能存在故障或数据丢失的风险,这可能导致已经提交的事务数据丢失,从而违反了持久性特性。
  • 解决方案
    • 使用数据备份、数据复制、日志记录等机制来确保数据的持久性,以及使用数据复制和冗余存储来防止数据丢失。

总结

在分布式环境中,实现ACID特性是一项复杂而又重要的任务。面对网络通信延迟、节点故障等挑战,需要采用适当的技术手段和协调机制来确保事务的可靠性和数据的一致性。因此,了解和解决分布式环境下ACID特性的挑战,是设计和构建分布式系统的关键之一。

四、分布式事务的解决方案

为了解决分布式环境下的ACID特性的挑战,通常采用以下解决方案:

4.1、两阶段提交(Two-Phase Commit,2PC)

两阶段提交(Two-Phase Commit,2PC)是一种用于保证分布式事务一致性的协议。在2PC中,事务的提交分为两个阶段进行,分别是准备阶段(Prepare Phase)和提交阶段(Commit Phase),通过协调者(Coordinator)和参与者(Participants)的交互来确保所有节点的一致性。下面我们将详细介绍2PC的工作原理和存在的问题:

1. 工作原理:

  1. 准备阶段(Prepare Phase)

    • 协调者向所有参与者发送准备请求,询问它们是否可以提交事务。
    • 参与者执行事务,并将执行结果和是否可以提交的消息发送给协调者。
  2. 提交阶段(Commit Phase)

    • 协调者根据所有参与者的反馈情况,决定是提交事务还是中止事务。
    • 如果所有参与者都发送了可以提交的消息,则协调者发送提交请求;否则,发送中止请求。

2. 存在的问题:

  1. 单点故障(Single Point of Failure)

    • 2PC中的协调者是单点,如果协调者发生故障,可能会导致整个分布式事务的中断。即使协调者在准备阶段失败,参与者仍会处于等待状态,可能导致系统阻塞。
  2. 阻塞(Blocking)

    • 在准备阶段,协调者需要等待所有参与者的响应,如果有参与者未响应或响应超时,协调者会一直等待,导致系统的阻塞。这种情况下,可能需要设置超时机制来避免无限等待。

3. 解决方案:

  1. 超时机制(Timeout Mechanism)

    • 在2PC中引入超时机制,如果协调者在一定时间内未收到所有参与者的响应,则可以根据超时策略继续执行或中止事务。
  2. 备份协调者(Backup Coordinator)

    • 引入备份协调者,可以在主协调者发生故障时接管工作,保证分布式事务的正常执行。
  3. 异步提交(Asynchronous Commit)

    • 可以将提交阶段改为异步执行,即使某些参与者未能及时提交,也可以通过后续的补偿机制来完成事务的提交。

总结:

虽然2PC能够保证分布式事务的一致性,但是由于存在单点故障和阻塞等问题,导致其在实际应用中的性能和可靠性有一定的局限性。因此,在选择分布式事务协议时,需要根据具体的应用场景和要求,综合考虑各种因素,选择合适的解决方案。

4.2、三阶段提交(Three-Phase Commit,3PC)

1. 工作原理:

  1. CanCommit 阶段

    • 协调者向参与者发送询问是否可以提交的消息。
    • 参与者根据自身状态回复 Yes 或 No。
    • 如果所有参与者回复 Yes,则进入预提交阶段;否则,直接中止事务。
  2. PreCommit 阶段

    • 协调者向参与者发送预提交请求,并等待参与者的响应。
    • 参与者在收到预提交请求后,执行事务的最后步骤,但不提交事务。
  3. DoCommit 阶段

    • 如果所有参与者在 PreCommit 阶段成功,协调者发送提交请求;否则,发送中止请求。
    • 参与者根据协调者的请求提交或中止事务,并向协调者发送确认消息。

2. 存在的问题:

  1. 一致性无法完全保证
    • 虽然3PC引入了额外的准备阶段和超时机制,可以降低单点故障和阻塞问题,但在某些情况下,仍然无法完全保证一致性。例如,在 PreCommit 阶段协调者故障,可能会导致部分参与者已经提交事务,而其他参与者未提交的情况。

3. 解决方案:

  1. 超时机制和重试策略

    • 在3PC中,引入了超时机制,可以在超时后根据重试策略继续执行或中止事务,以降低一致性风险。
  2. 增加决策阶段

    • 可以在3PC中增加额外的决策阶段,确保协调者在发出最终提交请求之前,已经得到了所有参与者的确认。

总结:

三阶段提交(3PC)相比于两阶段提交(2PC)在一定程度上降低了单点故障和阻塞问题,提高了分布式事务的可靠性。然而,仍然无法完全保证一致性,因此在实际应用中需要谨慎选择,并结合其他机制来进一步提高分布式事务的可靠性和性能。

4.3、分布式事务中间件

分布式事务中间件是一种用于管理和协调分布式事务的工具或服务,它们可以帮助实现跨多个节点或服务的事务操作,并提高系统的可扩展性和容错性。常见的分布式事务中间件包括消息队列、分布式数据库等。下面我们将介绍它们在分布式事务中的作用和优势:

1. 消息队列

  • 作用:消息队列可以在分布式系统中提供可靠的消息传递机制,用于在不同节点或服务之间传递事务消息,实现事务的跨节点或跨服务操作。
  • 优势:消息队列可以提供消息持久化、消息重试、消息顺序保证等功能,确保事务消息的可靠传递,同时提高系统的可扩展性和容错性。

2. 分布式数据库

  • 作用:分布式数据库可以提供分布式事务支持,确保在分布式环境下事务的原子性、一致性、隔离性和持久性。
  • 优势:分布式数据库可以分布存储数据,提高数据访问性能,同时支持分布式事务,保证数据一致性,提高系统的可靠性和容错性。

3. 分布式事务中间件的优势

  • 简化开发:分布式事务中间件可以隐藏分布式事务的复杂性,提供简单的API和接口,方便开发人员使用。
  • 提高可靠性:分布式事务中间件可以提供事务的可靠传递和执行,确保事务的一致性和完整性。
  • 提高性能:分布式事务中间件可以优化事务的执行流程,提高系统的性能和吞吐量。
  • 提高扩展性:分布式事务中间件可以支持动态的节点扩展和缩减,提高系统的扩展性和灵活性。

总结

分布式事务中间件是实现分布式事务的重要工具,它们可以帮助管理和协调分布式系统中的事务操作,提高系统的可靠性、可扩展性和容错性。在设计分布式系统时,可以根据具体需求选择合适的分布式事务中间件,以实现高效可靠的分布式事务管理。

4.4. 补偿事务

补偿事务是一种在分布式系统中处理异常情况的方法,用于回滚或修复已经执行的操作,以保证系统的一致性和可靠性。补偿事务通常用于处理分布式事务中可能出现的各种异常情况,如参与者故障、网络延迟、数据不一致等。

原理

  1. 补偿事务流程

    • 当某个参与者在分布式事务中出现异常时,补偿事务会尝试回滚或修复已经执行的操作。
    • 补偿事务会执行预先定义好的逆向操作(即补偿操作),将数据状态回滚到一致的状态。
  2. 补偿策略

    • 补偿事务通常会采用一定的策略来确保事务的一致性和可靠性,如幂等性、重试机制等。

优缺点

  1. 优点

    • 提高了系统的容错性,即使在出现异常情况下也能保证数据的一致性。
    • 灵活性高,可以根据具体业务场景设计不同的补偿策略。
  2. 缺点

    • 增加了系统的复杂性,需要额外的设计和实现成本。
    • 需要谨慎设计补偿操作,以避免引入新的问题。

实例

  1. 分布式订单支付

    • 在订单支付过程中,可能出现网络异常导致支付成功但订单状态未更新的情况。
    • 可以通过补偿事务,在支付成功后异步更新订单状态,确保订单状态与支付状态一致。
  2. 分布式库存管理

    • 在商品出库操作中,可能出现库存扣减成功但订单创建失败的情况。
    • 可以通过补偿事务,在库存扣减成功后异步回滚库存变更,确保库存与订单状态一致。

补偿事务是一种处理分布式系统异常的有效方法,但需要根据具体业务场景设计合适的补偿策略,以确保系统的一致性和可靠性。

4.5、全局事务协调器(Global Transaction Coordinator)

全局事务协调器(Global Transaction Coordinator,GTC)是用于管理分布式事务的核心组件,负责协调和控制分布式系统中的各个局部事务,以确保全局事务的一致性和可靠性。GTC通常作为一个独立的服务运行,并与参与者(分布式系统中的各个节点或服务)进行通信和协调。

工作原理

  1. 事务管理

    • GTC负责管理全局事务,包括事务的开始、提交、回滚等操作。
    • 当全局事务发起时,GTC会生成一个全局事务ID,并分配给所有参与者。
  2. 协调者和参与者通信

    • GTC通过与协调者和参与者的通信,控制事务的执行和协调各个参与者的操作。
    • 协调者向GTC请求事务的开始、提交、回滚等操作,参与者向GTC报告事务执行状态。
  3. 一致性保证

    • GTC通过多阶段提交协议(如两阶段提交、三阶段提交)等机制,确保事务在所有参与者上的一致性。
    • 在提交阶段,GTC会等待所有参与者的确认,只有当所有参与者都成功提交时,才会向协调者发送最终提交请求。

优缺点

  1. 优点

    • 提供了集中式管理,能够更好地控制分布式事务的执行。
    • 简化了事务管理和协调的复杂性,提高了系统的可靠性和一致性。
  2. 缺点

    • 可能成为系统的瓶颈,特别是在高并发和大规模事务的场景下。
    • 增加了系统的复杂性和单点故障的风险,需要谨慎设计和部署。

实例

  1. 分布式数据库事务

    • 在分布式数据库中,GTC可以用来管理全局事务,确保跨数据库的事务操作的一致性和可靠性。
  2. 分布式消息队列事务

    • 在分布式消息队列中,GTC可以用来管理消息的发送和接收,保证消息的可靠性传输和一致性处理。

全局事务协调器是分布式系统中重要的组件之一,它通过管理和协调分布式系统中的事务操作,保证了分布式系统的一致性和可靠性。在设计和实现分布式系统时,需要根据具体业务需求和系统规模选择合适的全局事务协调器。

结语

分布式事务是构建分布式系统的关键技术之一,它能够确保数据的一致性和可靠性。然而,实现分布式事务并不容易,需要克服网络延迟、节点故障等挑战。通过选择合适的分布式事务协议和解决方案,可以有效地管理分布式系统中的事务,提高系统的可靠性和性能。

相关文章:

探究分布式事务:深入ACID特性在分布式系统中的挑战与解决方案

✨✨谢谢大家捧场,祝屏幕前的小伙伴们每天都有好运相伴左右,一定要天天开心哦!✨✨ 🎈🎈作者主页: 喔的嘛呀🎈🎈 ✨✨ 帅哥美女们,我们共同加油!一起进步&am…...

PCI总线管脚定义(引脚定义)

文章目录 1: 参考资料的链接2: 图片说明3:PCI文字说明每日好图 1: 参考资料的链接 PCI bus pinout PCI三种标准引脚信号定义 PCI bus pinout 2: 图片说明 A面和B面正反 PCI Universal Card 32/64 bit ----------------------------------…...

万字详解PHP+Sphinx中文亿级数据全文检索实战(实测亿级数据0.1秒搜索耗时)

Sphinx查询性能非常厉害,亿级数据下输入关键字,大部分能在0.01~0.1秒,少部分再5秒之内查出数据。 Sphinx 官方文档:http://sphinxsearch.com/docs/sphinx3.html极简概括: 由C编写的高性能全文搜索引擎的开源组件&…...

数据库索引及优化

数据库索引及优化 什么是索引? MySQL官方对索引的定义为:索引(INDEX)是帮助MySQL高效获取数据的数据结构。 索引的本质: 数据结构 为什么要引入索引? 引入索引的目的在于提高查询效率,就好像是…...

flink: 将接收到的tcp文本流写入HBase

一、依赖&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.o…...

SpringBoot集成knife4j

SpringBoot集成knife4j 1、什么是Knife4j2、SpringBoor整合Knife4j2.1、Knife4j配置方式12.2 配置方式二2.3、写注解2.4、效果 1、什么是Knife4j 在日常开发中&#xff0c;写接口文档是我们必不可少的&#xff0c;而Knife4j就是一个接口文档工具&#xff0c;可以看作是Swagger…...

Vue3之setup方法

Vue 3 的 setup 方法是 Vue Composition API 的一部分&#xff0c;用于组织和复用 Vue 组件的逻辑代码。Vue Composition API 允许您以更具响应性和函数式的方式来组织和复用 Vue 组件中的代码&#xff0c;特别是在处理复杂逻辑或跨组件共享逻辑时非常有用。 以下是关于 setup…...

MySQL常见索引及其创建

MySQL索引 在 MySQL 数据库中&#xff0c;常见的索引类型包括以下几种&#xff1a; 普通索引&#xff08;Normal Index&#xff09;&#xff1a;最基本的索引类型&#xff0c;没有任何限制。唯一索引&#xff08;Unique Index&#xff09;&#xff1a;要求索引列的值是唯一的…...

高效测量“芯”搭档 | ACM32激光测距仪应用方案

激光测距仪概述 激光测距仪是利用激光对目标的距离进行准确测定的仪器。激光测距仪在工作时向目标射出一束很细的激光&#xff0c;由光电元件接收目标反射的激光束&#xff0c;计时器测定激光束从发射到接收的时间&#xff0c;计算出从观测者到目标的距离。激光测距仪分为手持激…...

基于Hive大数据分析springboot为后端以及vue为前端的的民宿系

标题基于Hive大数据分析springboot为后端以及vue为前端的的民宿系 本文介绍了如何利用Hive进行大数据分析,并结合Spring Boot和Vue构建了一个民宿管理系统。该民民宿管理系统包含用户和管理员登陆注册的功能,发布下架酒店信息,模糊搜索,酒店详情信息展示,收藏以及对收藏的…...

pnpm、monorepo分包管理、多包管理、npm、vite、前端工程化、保姆级教程

浅尝pnpm monorepo 多包管理方案 &#x1f4a1;tips: 创建pnpm monorope多包管理框架流程 初始化 mkdir taurus & cd taurus pnpm init创建基础文件 创建文件pnpm-workspace.yaml packages:- packages/**创建文件夹packages/ -packages/ -package.json -pnpm-workspace…...

vue3封装Element分页

配置当前页 配置每页条数 页面改变、每页条数改变都触发回调 封装分页 Pagination.vue <template><el-paginationbackgroundv-bind"$attrs":page-sizes"pageSizes"v-model:current-page"page"v-model:page-size"pageSize":t…...

真机 ARM64 架构转模拟器 ARM64 架构

本文字数&#xff1a;2051字 预计阅读时间&#xff1a;15分钟 01 需要转换架构的原因 老版 Mac 使用 Intel 芯片&#xff0c;是x86_64架构&#xff0c;相应地在老版 Mac 上运行的模拟器使用的也就是 x86_64架构。 由于模拟器的 x86_64 架构与真机的 arm64、armv7 等架构不冲突&…...

敏捷教练CSM认证考了有没有用,谁说了算?

敏捷教练CSM证书是近年来备受关注的一项证书&#xff0c;它被认为可以提升敏捷开发团队的管理能力和项目执行效率。然而&#xff0c;对于这个证书的价值和含金量&#xff0c;人们的观点却不尽相同。那么&#xff0c;CSM证书到底有没有用&#xff0c;谁来说了算呢&#xff1f; 首…...

Docker-Container

Docker ①什么是容器②为什么需要容器③容器的生命周期容器 OOM容器异常退出容器暂停 ④容器命令清单总览docker createdocker rundocker psdocker logsdocker attachdocker execdocker startdocker stopdocker restartdocker killdocker topdocker statsdocker container insp…...

下载安装anaconda和pytorch的详细方法,以及遇到的问题和解决办法

下载安装Anaconda 首先需要下载Anaconda&#xff0c;可以到官网Anaconda官网或者这里提供一个镜像网站去下载anaconda镜像网站 安装步骤可参考该文章&#xff1a;Anaconda安装步骤&#xff0c;本篇不再赘述 注意环境变量的配置&#xff0c;安装好Anaconda之后一定要在环境变量…...

2020年天津市二级分类土地利用数据(矢量)

天津市&#xff0c;位于华北平原海河五大支流汇流处&#xff0c;东临渤海&#xff0c;北依燕山。地势以平原和洼地为主&#xff0c;北部有低山丘陵&#xff0c;海拔由北向南逐渐下降&#xff0c;地貌总轮廓为西北高而东南低。天津有山地、丘陵和平原三种地形&#xff0c;平原约…...

设计模式——结构型——外观模式Facade

处理器类 public class Cpu {public void start() {System.out.println("处理器启动了...");} } 内存类 public class Memory {public void start() {System.out.println("内存启动了...");} } 硬盘类 public class Disk {public void start() {Syste…...

OpenGL的MVP矩阵理解

OpenGL的MVP矩阵理解 右手坐标系 右手坐标系与左手坐标系都是三维笛卡尔坐标系&#xff0c;他们唯一的不同在于z轴的方向&#xff0c;如下图&#xff0c;左边是左手坐标系&#xff0c;右边是右手坐标系 OpenGL中一般用的是右手坐标系 1.模型坐标系&#xff08;Local Space&…...

前端超分辨率技术应用:图像质量提升与场景实践探索-设计篇

超分辨率&#xff01; 引言 在数字化时代&#xff0c;图像质量对于用户体验的重要性不言而喻。随着显示技术的飞速发展&#xff0c;尤其是移动终端视网膜屏幕的广泛应用&#xff0c;用户对高分辨率、高质量图像的需求日益增长。然而&#xff0c;受限于网络流量、存储空间和图像…...

C++11入门手册第一节,学完直接上手Qt(共两节)

入门 hello.cpp #include <iostream>int main() { std::cout << "Hello Quick Reference\n"<<endl; return 0;} 编译运行 $ g hello.cpp -o hello$ ./hello​Hello Quick Reference 变量 int number 5; // 整数float f 0.95; //…...

Docker部署MinIO对象存储服务

1. 拉取MinIO镜像 # 下载镜像 docker pull minio/minio#查看镜像 docker images2. 创建目录 # 文件存储目录 mkdir -p /opt/minio/data# 配置文件 mkdir -p /opt/minio/config# 日志文件 mkdir -p /opt/minio/logs3. 创建Minio容器并运行 docker run \ -p 9000:9000 \ -p 90…...

基于Echarts的超市销售可视化分析系统(数据+程序+论文)

本论文旨在研究Python技术和ECharts可视化技术在超市销售数据分析系统中的应用。本系统通过对超市销售数据进行分析和可视化展示&#xff0c;帮助决策层更好地了解销售情况和趋势&#xff0c;进而做出更有针对性的决策。本系统主要包括数据处理、数据可视化和系统测试三个模块。…...

使用ai智能写作场景之gpt整理资料,如何ai智能写作整理资料

Ai智能写作助手&#xff1a;Ai智能整理资料小助手 Ai智能整理资料小助手可试用3天&#xff01; 通俗的解释一下怎么用ChatGPT来进行资料整理&#xff1a; 搜寻并获取指定数量的特定领域文章&#xff1a; 想像你在和我说话一样&#xff0c;告诉我你想要多少篇关于某个话题的文…...

C/C++ 内存管理

1、C/C内存分布 首先我们来了解在一个程序中&#xff0c;代码主要存储在哪些地方&#xff1b; 1.栈&#xff1a;又叫堆栈&#xff0c;其中一般存储非静态局部变量、函数参数、返回值等&#xff0c;栈的增长是向下的。 2.内存映射段&#xff1a;是高效的 I/O 映射方式&#xff0…...

android pdf框架-10,相册浏览

MupdfViewer 这是最后apk,源码在前面的文章已经贴过了本站下载地址,只是不是最新的.可能不少是旧的内容. subsampling-scale-image-view这是一个大图片的分块加载的实现.比较不错的.滑动方面我觉得使用flinger的效果比它要流畅,惯性要好. 也有人把这个作成pdf渲染器.但翻页就…...

基于SSM的高校普法系统(有报告)。Javaee项目。ssm项目。

演示视频&#xff1a; 基于SSM的高校普法系统&#xff08;有报告&#xff09;。Javaee项目。ssm项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;通过Spring Spri…...

数据结构刷题篇 之 【力扣二叉树基础OJ】详细讲解(含每道题链接及递归图解)

有没有一起拼用银行卡的&#xff0c;取钱的时候我用&#xff0c;存钱的时候你用 1、相同的树 难度等级&#xff1a;⭐ 直达链接&#xff1a;相同的树 2、单值二叉树 难度等级&#xff1a;⭐ 直达链接&#xff1a;单值二叉树 3、对称二叉树 难度等级&#xff1a;⭐⭐ 直达…...

Jackson 2.x 系列【6】注解大全篇二

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 本系列Jackson 版本 2.17.0 源码地址&#xff1a;https://gitee.com/pearl-organization/study-jaskson-demo 文章目录 注解大全2.11 JsonValue2.12 JsonKey2.13 JsonAnySetter2.14 JsonAnyGetter2.15 …...

在低成本loT mcu上实现深度神经网络端到端自动部署-深度神经网络、物联网、边缘计算、DNN加速——文末完整资料

目录 前言 DNN 量化神经网络 并行超低功耗计算范式 面向内存的部署 结果 原文与源码下载链接 REFERENCES 前言 在物联网极端边缘的终端节点上部署深度神经网络( Deep Neural Networks&#xff0c;DNNs )是支持普适深度学习增强应用的关键手段。基于低成本MCU的终端节点…...

网站建设代理开发科技企业服务/长沙百度搜索网站排名

首先说一下坑的地方就是python2和python3的模块改变问题&#xff0c;当然精通python的可以略过。这个在网上百度一下吧&#xff0c;第二个是导入xlsx文件的时候需要xlrd模块&#xff0c;而这个模块最好跟着我下面的方法走&#xff0c;那个python2 就可以用我下边的脚本了。 1.安…...

做英文题的网站/关键词排名监控

gitbook 插件&#xff1a;图片查看 文章目录gitbook 插件&#xff1a;图片查看1. lightbox 插件1.1 安装1.2 配置1.3 效果2. popup 插件2.1 安装2.2 配置2.3 效果1. lightbox 插件 lightbox 插件&#xff1a;单击查看图片 点击图片可显示&#xff0c;大小不变 以弹窗形式查看…...

合理规划网站/搜狗输入法下载安装

前言 很多次小伙伴问到学习方法&#xff0c;我也很想写这样的一篇文章来跟大家讨论下关于学习方法这件事情。 其实学习方法这个事情&#xff0c;我没啥发言权&#xff0c;因为我自己本身都是没啥方法可言的&#xff0c;就瞎折腾那种&#xff0c;但是大家想看这样的一篇文章&a…...

自己做外贸购物网站/电子商务网站建设论文

1.爬虫导出方法使用: 2.导入数据库: 1.创建表结构: 2.安装数据库驱动:(pip install -i https://pypi.douban.com/simple mysqlclient) 数据库连接: 声明到settings.py: 异步入库: 解决异步插入数据库重复插入问题: itemloader提取信息: 1. 追加修改爬取的值 可以增加多个值: …...

做试管网站/广东省广州市佛山市

XSS&#xff1a;脚本中的不速之客XSS&#xff1a;跨站脚本&#xff08;Cross-site scripting&#xff09;CSRF&#xff1a;冒充用户之手CSRF&#xff1a;跨站请求伪造&#xff08;Cross-site request forgery&#xff09; 谷歌搜索到几篇好文章。《XSS CSRF 攻击》http://www.c…...

对网站做打包备份处理/百度引擎

// 对Date的扩展&#xff0c;将 Date 转化为指定格式的String // 月(M)、日(d)、小时(h)、分(m)、秒(s)、季度(q) 可以用 1-2 个占位符&#xff0c; // 年(y)可以用 1-4 个占位符&#xff0c;毫秒(S)只能用 1 个占位符(是 1-3 位的数字) // 例子&#xff1a; // (new D…...