事务性链表安全删除方案_第1页
事务性链表安全删除方案_第2页
事务性链表安全删除方案_第3页
事务性链表安全删除方案_第4页
事务性链表安全删除方案_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

19/24事务性链表安全删除方案第一部分事务链表安全删除机制 2第二部分删除操作的原子性保障 5第三部分并发环境中的死锁预防 7第四部分内存回收与空间复用优化 9第五部分事务性操作日志管理 11第六部分链表结构的完整性校验 13第七部分删除过程中异常处理机制 17第八部分性能优化与复杂度分析 19

第一部分事务链表安全删除机制关键词关键要点引用计数法

1.每个元素维护一个引用计数器,表示引用该元素的活动指针数量。

2.当指针被释放时,引用计数器递减。当引用计数器为0时,表示该元素不再被引用,可以安全删除。

3.此方法简单高效,但需要维护额外的引用计数,可能导致内存开销和性能开销。

标记清除法

1.对链表进行标记,标记出需要删除的元素。

2.进行一次遍历,清除所有标记的元素,并释放其内存。

3.此方法不需要维护额外的引用计数,但需要进行两次遍历,可能导致性能开销。

分块标记清除法

1.将链表划分为多个块,每个块都有自己的标记位。

2.当一个块的所有元素都需要删除时,标记该块并将其释放。

3.此方法减少了需要清除的元素数量,提高了性能,但需要维护额外的块标记位。

并发安全链表

1.使用无锁算法或锁机制来保证链表在并发环境下的安全。

2.无锁算法通过原子操作和compare-and-swap指令确保链表的完整性。

3.锁机制通过排他锁和共享锁控制对链表的访问,保证并发操作的正确性。

事务性链表

1.将链表操作封装成事务,并在事务中执行原子操作。

2.事务要么完全提交,要么完全回滚,保证链表的原子性、一致性、隔离性和持久性。

3.事务性链表提供了高并发环境下的安全删除机制,但需要额外的开销来管理事务。

趋势和前沿

1.随着并发和分布式系统的普及,事务性链表等安全删除机制变得越来越重要。

2.新的研究正在探索基于日志结构的链表、软件事务内存等技术,以进一步提高安全删除的效率和可靠性。

3.事务性链表在云计算、大数据等领域有广泛的应用前景,有望为海量并发数据处理提供安全可靠的解决方案。事务链表安全删除机制

事务链表是一种线程安全的链表数据结构,它是基于多版本并发控制(MVCC)原理实现的。在MVCC中,读写操作不会直接修改数据,而是创建数据的新副本。这使得同一时刻可以有多个数据副本同时存在,从而保证了并发读写的安全性。

事务链表中的每个节点都包含了以下字段:

*值:节点存储的实际数据

*事务ID:创建该节点的事务的ID

*前驱指针:指向该节点前一个节点的指针

*后继指针:指向该节点后一个节点的指针

安全删除机制

事务链表提供了一种安全删除节点的方法,该方法不会破坏链表的完整性或导致数据丢失。删除操作如下:

1.标记为已删除:将要删除节点的事务ID字段设置为一个特殊值(例如,-1),表示该节点已被标记为已删除。

2.创建tombstone节点:创建一个新的节点,称为tombstone节点。tombstone节点具有以下特征:

*值:为空

*事务ID:为删除操作的事务ID

*前驱指针:指向要删除节点的前一个节点

*后继指针:指向要删除节点的后一个节点

3.更新前驱和后继指针:将要删除节点的前一个节点的后继指针指向tombstone节点,将要删除节点的后一个节点的前驱指针指向tombstone节点。

原理

通过上述步骤,要删除的节点被标记为已删除,并由tombstone节点代替。tombstone节点记录了删除操作的事务ID,并维护了链表的完整性。

当其他线程尝试读取要删除的节点时,它们会看到tombstone节点,并知道该节点已被删除。读取操作会跳过tombstone节点,继续读取链表中的下一个节点。

当其他线程尝试修改要删除的节点时,它们会看到tombstone节点,并知道该节点已被删除。修改操作将失败,并返回一个错误。

优势

*并发删除:允许多个线程同时安全地删除节点。

*无数据丢失:标记为已删除的节点仍然存在,直到所有引用它的事务完成。这防止了数据丢失。

*链表完整性:删除操作维护了链表的完整性,不会破坏其结构。

*性能:标记为已删除的节点仍然存在于链表中,这会影响性能。然而,在大多数情况下,标记为已删除的节点最终会被垃圾回收。

限制

*空间开销:删除操作会创建tombstone节点,增加内存开销。

*查询性能:读取操作必须检查tombstone节点,这可能会降低查询性能。

总结

事务链表安全删除机制提供了一种安全且高效的方法来删除链表中的节点。它基于MVCC原理,允许并发删除,防止数据丢失,并维护链表完整性。该机制存在一些限制,如空间开销和查询性能下降,但它仍然是处理并发删除的高效解决方案。第二部分删除操作的原子性保障关键词关键要点【事务性链表原子性的保证】

1.原子性是一种数据完整性属性,它确保操作要么完全执行,要么完全不执行,从而防止数据损坏。

2.对于事务性链表,原子性删除操作确保链表中元素的删除不会被部分执行,从而导致链表结构的损坏。

3.为了实现删除操作的原子性,可以使用锁或基于标记的并发控制技术,这些技术可以防止在删除操作期间发生并发访问。

【并发控制】

删除操作的原子性保障

原子性是指事务操作要么全部执行成功,要么全部执行失败,不存在中间状态。在事务性链表中,删除操作的原子性保障至关重要,因为它涉及多项关键操作,包括:

*定位目标节点:搜索链表以找到要删除的节点。

*更新前驱指针:将要删除节点的前驱节点的指针指向其后继节点。

*更新后继指针:除非要删除的是尾节点,否则将要删除节点的后继节点的指针指向其前驱节点。

如果不保证删除操作的原子性,可能发生以下问题:

*链表损坏:如果在更新前驱或后继指针的过程中发生系统故障,链表可能变得损坏,导致数据丢失或损坏。

*并发问题:如果多个线程同时尝试删除同一个节点,可能会导致竞态条件,进而导致链表损坏或数据不一致。

为了保证删除操作的原子性,事务性链表通常采用以下机制:

锁机制:

链表中的每个节点都与一个锁关联。在进行删除操作之前,必须获取要删除节点的锁。这确保了同一时间只有一个线程能够访问该节点,从而防止并发问题。

CAS操作:

比较并交换(CAS)操作用于原子地更新指针。对于链表,CAS操作用于更新前驱和后继指针。在执行CAS操作之前,线程会先读取指针的当前值,然后尝试将其更改为所需的新值。CAS操作仅在当前值与线程读取的值相同时才成功。

双向链表:

使用双向链表可以简化删除操作的原子性保障。在双向链表中,每个节点都有指向其前驱和后继节点的指针。这允许线程在更新前驱和后继指针时使用CAS操作,而不需要先获取锁。

多版本并发控制(MVCC):

MVCC是一种并发控制技术,它允许多个事务同时访问和修改数据,而不会发生冲突。在事务性链表中,MVCC可以用于为每个活跃事务维护链表的快照。当一个事务删除一个节点时,该删除操作仅对该特定事务可见。一旦事务提交,对链表所做的更改才会对其他事务可见。

通过这些机制,事务性链表能够保证删除操作的原子性,从而确保链表的完整性和数据的一致性。第三部分并发环境中的死锁预防关键词关键要点主题名称:死锁条件

1.互斥使用:资源在同一时间只能被一个线程使用。

2.请求保持:线程在释放资源之前必须持续持有资源。

3.不可剥夺:资源只能通过资源持有者主动释放。

主题名称:死锁预防

并发环境中的死锁预防

在并发环境中,死锁是一种可能发生的现象,是指两个或多个线程相互等待对方释放资源,从而导致所有线程都无法继续执行。在事务性链表中,死锁可能发生在遍历和更新链表操作期间。

死锁预防策略

为了预防死锁,事务性链表通常采用以下策略之一:

1.锁阶层

锁阶层是一种通过分配每个数据结构一个唯一优先级来防止死锁的策略。当线程需要锁定多个数据结构时,它们必须按照优先级顺序锁定这些结构。这确保了不会出现循环等待的情况,从而消除了死锁的可能性。

2.定时器

另一种预防死锁的策略是使用定时器。每个线程都会给它的锁请求设置一个超时时间。如果线程在超时之前无法获得锁,它将放弃请求并尝试稍后重试。这有助于限制线程等待的时间,从而降低死锁发生的可能性。

3.检测和恢复

在某些情况下,即使采用了死锁预防策略,死锁也仍然有可能发生。因此,事务性链表通常会实现死锁检测和恢复机制。

死锁检测

死锁检测算法可以周期性地检查系统以检测是否有死锁。如果检测到死锁,算法将选择一个或多个线程来中止,释放它们持有的锁,并允许其他线程继续执行。

死锁恢复

死锁恢复机制负责从死锁状态中恢复系统。它通常涉及回滚一个或多个线程执行的事务,释放它们持有的锁,并允许其他线程继续执行。

事务性链表中的死锁预防

在事务性链表中,并发控制机制通常与死锁预防策略结合使用。例如,乐观并发控制使用锁来防止读-写冲突,同时使用定时器或检测和恢复机制来防止死锁。

总结

并发环境中的死锁预防对于确保事务性链表的正确和高效操作至关重要。通过使用锁阶层、定时器或检测和恢复机制,可以有效地预防死锁的发生,从而保证系统的高可用性和数据完整性。第四部分内存回收与空间复用优化关键词关键要点【内存回收与空间复用优化】

*链表节点回收优化:采用基于标记-清除或引用计数的垃圾回收机制,及时回收已删除的节点,释放内存空间。

*内存池引入:建立一个预先分配的节点池,用于存储已删除的节点,当需要新建节点时,直接从池中获取,避免频繁的内存分配和释放。

*空间复用:利用已删除节点的剩余空间,存储其他数据或结构,实现空间的二次利用。

【空间管理优化】

内存回收与空间复用优化

在事务性链表中,内存管理涉及到节点的分配、回收和空间复用,以确保高效利用内存资源。本文主要介绍以下优化方案:

1.内存池分配

*使用内存池预先分配固定数量的节点,避免频繁的内存分配和释放操作。

*内存池中的节点预先进行初始化,减少动态分配时的开销。

*当需要新节点时,直接从内存池中获取,避免系统调用开销。

2.惰性回收

*当节点被标记为删除后,不会立即将其回收,而是将其保存在一个惰性回收队列中。

*在特定时间间隔或达到一定数量的已删除节点时,再进行回收操作。

*惰性回收可以减少垃圾回收的频率和开销。

3.空间复用

*当需要创建新节点时,复用已删除的节点。

*惰性回收机制确保了有足够的已删除节点可供复用。

*空间复用优化可以显著提高内存利用率。

4.压缩空间

*在某些情况下,已删除的节点可能仍然包含一些有用数据。

*通过压缩技术,可以释放这些节点中的空间。

*压缩算法可以是简单的数据结构重新组织,也可以是更复杂的算法。

5.预取和堆叠空间

*预取机制可以预测即将访问的节点,并提前将其加载到缓存中。

*堆叠空间技术可以将多个节点存储在同一块内存中,减少碎片化。

*预取和堆叠空间优化可以提高链表遍历的性能。

6.硬件支持

*一些硬件平台提供特定指令或机制来支持内存管理优化。

*例如,某些处理器支持硬件事务性内存,这可以简化节点分配和回收的过程。

*利用硬件支持可以进一步提升内存管理效率。

此外,在设计内存管理策略时,还需要考虑以下因素:

*并发性:确保优化方案在并发环境下也能正常工作。

*故障处理:考虑内存分配和回收操作可能发生的故障情况。

*性能基准:通过性能基准测试来评估优化方案的有效性。

通过实施这些优化方案,事务性链表可以高效管理内存,减少内存开销,并提高整体性能。第五部分事务性操作日志管理事务性操作日志管理

在事务性链表中,日志管理对于保证数据完整性至关重要。事务性操作日志记录了数据结构中的所有更新操作,并用于在发生故障或错误时恢复数据。

#日志的结构和布局

事务性操作日志通常采用环形缓冲区结构,由一系列固定大小的日志条目组成。每个日志条目包含以下信息:

-操作类型:插入、删除、更新或提交事务

-键:更新或删除的操作涉及的键

-值:插入或更新操作的新值

-元数据:事务ID、时间戳等

#日志写入和持久化

当发生事务性操作时,将创建一个新的日志条目并写入环形缓冲区。为了保证数据安全,日志条目必须持久化,这意味着即使系统发生故障,它们也能被保留。持久化通常通过以下方式实现:

-WAL(Write-AheadLogging):日志条目在写入到主存储器之前先写入到稳定的存储设备(例如SSD)。

-持久化存储:日志条目直接写入到持久化存储设备,例如磁盘或NVMeSSD。

#日志的读取和重放

当发生故障时,系统将从日志中重放最近的操作以恢复数据结构。日志的读取和重放过程包括以下步骤:

1.读取日志条目:从环形缓冲区中读取日志条目,从最新条目开始。

2.应用操作:根据日志条目的操作类型,应用对应的插入、删除或更新操作。

3.提交事务:当遇到事务提交日志条目时,提交事务并将更改持久化到数据结构。

#日志截断和清理

随着时间的推移,日志会不断增长。为了防止日志过大,需要定期对其进行截断和清理。截断过程包括以下步骤:

1.确定截断点:确定一个安全截断点,即包含已提交事务所需的所有日志条目。

2.删除旧条目:从环形缓冲区中删除截断点之前的日志条目。

#性能优化

为了优化日志管理的性能,可以采用以下技术:

-预写日志条目:在应用操作到数据结构之前先将日志条目写入到持久化存储。

-批量写入日志条目:一次写入多个日志条目以减少磁盘I/O。

-日志压缩:使用算法压缩日志条目以减少其大小。

#安全考虑

事务性操作日志管理的安全性对于保护数据至关重要。需要采取以下措施来确保日志的安全:

-加密:加密日志条目以防止未经授权的访问。

-访问控制:限制对日志的访问,仅允许授权用户进行读取或写入操作。

-日志审核:定期审核日志以检测可疑活动或安全漏洞。第六部分链表结构的完整性校验关键词关键要点链表完整性校验

1.校验字段的引入:在每个链表节点中引入一个校验字段,用来存储节点内容的校验值,如哈希值或校验和。

2.校验值的计算:在插入或删除节点时,计算新节点或受影响节点的校验值,并将其存储在校验字段中。

3.校验值的验证:在遍历或使用链表时,验证节点的校验值是否与计算值匹配。若不匹配,则表明链表结构已损坏。

指针一致性检查

1.节点引用计数:为每个节点维护一个引用计数,记录引用该节点的其他节点数量。

2.引用计数校验:在插入或删除节点时,更新引用计数。当引用计数为0时,表明该节点不再被使用,可以安全删除。

3.循环引用检测:通过Floyd判环算法等方法检测链表是否存在循环引用。存在循环引用会破坏链表的完整性。

内存分配和释放的管理

1.内存池:采用内存池管理链表节点的内存分配和释放。内存池可确保内存的快速分配和释放,避免重复分配和释放造成的内存碎片。

2.引用跟踪:记录指向链表节点的指针,并在节点释放后及时更新指针,防止野指针问题。

3.智能指针:使用智能指针管理链表节点的内存,自动释放不再使用的节点,避免内存泄漏。

并发访问控制

1.锁机制:使用锁机制保护链表的并发访问,防止多个线程同时访问和修改链表。

2.读写分离:采用读写分离策略,允许多个线程同时读取链表,但只允许一个线程写入链表。

3.无锁数据结构:利用无锁数据结构,如无锁队列或原子链表,实现高并发下的安全链表操作。

错误处理和恢复

1.异常处理:在链表操作中捕获异常,并进行适当的处理,如记录异常信息、中止操作或尝试恢复。

2.备份机制:定期备份链表数据,以便在发生故障或破坏时恢复链表。

3.恢复算法:制定恢复算法,在链表损坏或丢失后,通过备份数据或其他手段重建链表。

性能优化

1.链表结构的选择:根据应用场景选择合适的链表结构,如单链表、双链表或循环链表,以优化性能。

2.内存预分配:一次性预分配一定数量的链表节点内存,避免频繁的动态内存分配和释放。

3.缓存技术:使用缓存技术减少链表访问的延迟,如L1、L2缓存或哈希表。链表结构的完整性校验

在事务性链表中,保证链表结构的完整性至关重要。为了防止并发操作导致链表损坏,需要引入完整性校验机制。

#校验类型

链表结构的完整性校验通常分为两种类型:

*链序校验:验证链表节点之间的指针关系是否正确。

*数据校验:验证链表节点本身的数据内容是否完整。

#链序校验

基于循环引用计数(RC)的校验:

*为每个链表节点维护一个引用计数器,当有指针指向该节点时,引用计数器加1;当指针释放时,引用计数器减1。

*当引用计数器为0时,表示该节点不再被任何指针引用,可以安全地删除。

基于版本控制的校验:

*为链表节点的指针维护一个版本号。

*当一个指针被更新时,其版本号也随之更新。

*在删除一个节点时,检查该节点的指针版本号与其他指针的版本号是否一致。如果不一致,说明链表结构已损坏,需要回滚操作。

基于哈希表的校验:

*维护一个哈希表,以节点地址为键值,以节点的元数据(如引用计数或版本号)为值。

*当需要验证一个节点时,计算其地址的哈希值,然后在哈希表中查找相应的元数据。

*如果在哈希表中找不到元数据,说明该节点已被删除或链表已损坏。

#数据校验

基于校验和的校验:

*为每个链表节点计算一个校验和,存储在节点中。

*在读取一个节点时,重新计算其校验和,并与存储的校验和进行比较。

*如果校验和不一致,说明该节点的数据已损坏,需要回滚操作。

基于数字签名的校验:

*为每个链表节点生成一个数字签名,存储在节点中。

*在读取一个节点时,验证其数字签名。

*如果验证失败,说明该节点的数据已损坏或签名已伪造,需要回滚操作。

#完整性校验的实现

完整性校验机制通常通过以下方式实现:

*节点头元数据:在每个链表节点的头部存储校验信息,如引用计数、版本号或校验和。

*独立校验器:作为一个单独的进程或线程,周期性地遍历链表并执行完整性校验。

*并发控制:使用并发控制机制(如互斥锁或原子操作)来确保并发操作的安全。

#优点和缺点

基于完整性校验的事务性链表具有以下优点:

*提高链表结构的可靠性和完整性。

*减少数据损坏和丢失的风险。

*支持高并发下的链表操作。

然而,它也有一些缺点:

*增加存储开销和计算开销。

*可能会影响链表的性能,特别是对于大型链表。

*需要额外的机制来处理并发校验和更新。

#总结

链表结构的完整性校验是保证事务性链表安全性的关键机制。通过实施链序校验和数据校验,可以有效地防止链表损坏,确保数据的一致性。根据具体场景和性能要求,可以选择不同的校验类型和实现方法。第七部分删除过程中异常处理机制关键词关键要点【异常类型判定】

1.异常类型判定是异常处理机制的关键步骤,用于识别删除过程中可能发生的异常类型。

2.常用异常类型包括:IndexOutOfBoundsException、NullPointerException、ConcurrentModificationException等。

3.通过捕获这些异常,可以进行有针对性的处理,避免程序崩溃或数据损坏。

【异常响应策略】

异常处理机制

在分布式系统中,异常处理机制对于确保数据一致性和系统可靠性至关重要。在实现带有安全删除功能的事务性(transactional)链接表时,异常处理机制尤为关键。

该方案中的异常处理机制基于以下原则:

*原子性(Atomicity):无论发生何种异常,整个删除操作必须要么完全执行,要么完全回滚。

*隔离性(Isolation):并发执行的事务不会相互干扰,每个操作都视为在自己的隔离环境中执行。

*一致性(Consistency):数据库在执行任何操作后都必须处于一致状态。

*持久性(Persistence):一旦提交,数据库中的数据必须永久存储并可以恢复。

为了满足这些原则,该方案采用以下异常处理机制:

异常分类

*可恢复性异常:这些异常是由于系统故障或网络问题等临时原因引起的,可以安全重试而不会导致数据损坏。

*不可恢复性异常:这些异常是由于数据库损坏或应用程序错误等严重问题引起的,无法安全重试,必须回滚正在进行的事务。

异常处理流程

1.检测异常:该方案使用各种机制来检测异常,包括数据库错误、网络故障和应用程序代码异常。

2.隔离异常:一旦检测到异常,系统会立即隔离正在执行的事务,防止对其进一步访问。

3.确定异常类型:系统分析异常以确定它是可恢复的还是不可恢复的。

4.处理可恢复性异常:对于可恢复性异常,系统会重试操作,直到成功或达到重试次数限制。

5.处理不可恢复性异常:对于不可恢复性异常,系统会回滚正在进行的事务,将数据库恢复到异常发生前的状态。

6.释放锁:在处理完异常后,系统会释放与正在进行的事务相关联的任何锁。

7.通知应用程序:系统会通知应用程序有关异常的详细信息,以便应用程序可以适当处理异常。

故障恢复

除了异常处理之外,该方案还提供故障恢复机制,以确保在系统故障后恢复数据库的完整性。故障恢复机制包括:

*定期备份:定期对数据库进行备份,以确保在发生灾难性故障时可以恢复数据。

*数据库镜像:通过创建数据库镜像,可以实现数据库的冗余,并在主数据库发生故障时提供快速故障转移。

*日志记录:数据库记录所有操作,以便在故障后可以重放操作并恢复数据库。

通过采用这些异常处理和故障恢复机制,该方案确保了带有安全删除功能的事务性链接表的高度数据一致性和可靠性。第八部分性能优化与复杂度分析性能优化与复杂度分析

数据结构与算法选择

为了确保安全删除方案的性能,选择合适的datastructure和算法至关重要。在大多数情况下,循环链表是不合适的,因为它不允许高效地从中间删除节点。双向链表是更合适的datastructure,因为它既允许从头删除又允许从中间删除。

对于删除算法,可以使用两种主要方法:

*Mark-and-sweep算法:该算法将要删除的节点标记为已删除,然后在稍后的独立步骤中将其清除。这有助于减少内存碎片,但代价是需要额外的遍历。

*合并算法:该算法将要删除的节点与它的前驱节点合并,从而有效地将其从链表中删除。这比mark-and-sweep算法更有效,但可能导致更多的内存碎片。

内存分配

内存分配策略对性能有重大影响。为了避免额外的内存分配开销,建议使用内存池来管理链表中的节点。内存池预先分配一组节点,并根据需要将它们分配给链表。这消除了动态内存分配的开销,并提高了性能。

并发性问题

在并发环境中,必须考虑多个线程并行访问链表的可能性。为了避免数据损坏,需要实现适当的并发控制机制。一种常见的机制是使用锁来保护链表的临界部分,例如添加或删除节点的操作。另一种方法是使用无锁数据结构,例如无锁链表,它不需要显式锁。

复杂度分析

插入和删除操作的复杂度

*插入:O(1)(时间复杂度)

*删除:

*Mark-and-sweep算法:O(n)(最坏时间复杂度)

*合并算法:O(1)(时间复杂度)

内存使用

*每增加一个节点,内存使用量增加O(1)

遍历操作的复杂度

*顺序遍历:O(n)(时间复杂度)

*逆序遍历:O(n)(时间复杂度)

注意事项

*复杂度分析假设链表中没有环。如果有环,则时间复杂度可能会显着增加。

*性能优化和复杂度分析取决于具体实现的具体情况。

结论

通过仔细选择datastructure、算法和并发控制机制,可以优化事务性链表安全删除方案的性能。对复杂度分析的理解对于确保方案在各种场景下都能满足性能要求至关重要。关键词关键要点事务性操作管理

主题名称:事务性链表安全删除方案

关键要点:

1.使用事务性链表删除操作可以确保即使在多个线程或进程同时操作链表时也能保持链表的完整性。

2.事务性链表删除操作通过使用原子操作和锁定机制来防止数据损坏。

3.事务性链表删除操作还可以通过使用写屏障来确保所有删除操作都持久化到存储介质中。

主题名称:并发链表管理

关键要点:

1.并发链表管理涉及管理多个线程或进程同时访问链表时的数据一致性。

2.并发链表管理可以使用各种技术,例如锁、无锁数据结构或乐观并发控制。

3.有效的并发链表管理可以提高链

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论