公司内部培训的高性能应用设计与开发技术(绝版).pptx_第1页
公司内部培训的高性能应用设计与开发技术(绝版).pptx_第2页
公司内部培训的高性能应用设计与开发技术(绝版).pptx_第3页
公司内部培训的高性能应用设计与开发技术(绝版).pptx_第4页
公司内部培训的高性能应用设计与开发技术(绝版).pptx_第5页
已阅读5页,还剩61页未读 继续免费阅读

下载本文档

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

文档简介

高性能应用设计与开发实践v1.0,klaudream 高尚,2011.6,大纲,引言,应用分类 基于操作系统 通用运行环境 web应用 应用模式的发展 单机应用 c/s,b/s应用 分布式应用(多服务器) 云计算,klaudream,概述,性能(performance):任务执行的速度能力 高性能要求:对于应用软件,在高并发情况下较好的用户体验,表现在 请求响应时间长度较短 请求响应时间变化较稳定 性能的认识误区 先功能,再性能 性能调优是dba的事 性能瓶颈得加内存,换cpu(提升硬件配置),klaudream,概述2,关注目标:面向java web应用 影响性能的方面 硬件:服务器配置,网络带宽 软件: 运行支撑环境:jvm,中间件,技术框架,工具包 数据:数据结构,数据查询,数据转换 业务逻辑:java语言特性,算法, 输入输出:文件,通讯 前台展现:dom操作,css渲染,klaudream,软件支撑环境优化-jvm,jvm oracle jrockit:速度最快,仅支持intel处理器 sun jvm:经典的jvm,最为通用 ibm jvm:ibm产品所依赖,非ibm产品则不建议使用 sun jvm的运行模式 server模式: 启动慢,运行快,可达高性能 使用场景:linux系统服务器( 2cpu, 2g 物理内存),klaudream,软件支撑环境优化- jvm2,client模式: 客户端java运行模式 使用场景:客户机,配置较低的服务器 不同平台,默认的运行模式不同,klaudream,软件支撑环境优化- jvm3,gc机制 java程序的性能与效率很大程度上与jvm的垃圾回收机制相关 对象的生命周期 creation using:至少一个强引用 强引用(strong),默认 软引用(soft):空间不够时回收 弱引用(weak):即时回收 虚引用(phantom):辅助后期垃圾回收 一般很少使用弱引用与虚引用,使用软引用的情况较多,可以加速jvm对垃圾内存的回收速度,维护系统的运行安全,防止内存溢出,klaudream,软件支撑环境优化- jvm4,对象的生命周期(续) invisible 离开对象有效可视范围(作用域) 在本阶段应该将作用域内的引用设置null unreachable jvm治理的对象引用根集合中无任何强引用 本阶段并未进行回收 collected 收集不可达对象 执行对象的finalize方法,完成收尾工作 finalized 对象本身的销毁 free 释放内存空间,klaudream,软件支撑环境优化-jvm5,gc分代回收机制 堆(heap)结构 存放对象,使用-xms,-xmx设置 young(年轻代): minorgc 通过-xmn,-survivorratio设置 eden区 两个survivor区(同样大小) tenured(年老代) fullgc perm(持久代) 存放静态文件,类、方法等。持久代对垃圾回收没有显著影响,通过-xx:maxpermsize设置,klaudream,软件支撑环境优化-jvm6,垃圾收集器 串行处理器(client级别): -xx:+useserialgc设置 适用情况:数据量比较小(100m左右);单处理器下并且对响应时间无要求的应用。 缺点:只能用于小型应用 并行处理器: -xx:+useparallelgc,-xx:+useparalleloldgc,-xx:parallelgcthreads, -xx:maxgcpausemillis, -xx:gctimeratio设置 适用场景:对吞吐量有高要求,多cpu、对应用响应时间无要求的中、大型应用,如后台处理,大型计算 缺点:应用响应时间可能较长 并发处理器: -xx:+useconcmarksweepgc, -xx:cmsinitiatingoccupancyfraction设置 适用场景:对响应时间有高要求,多cpu、对应用响应时间有较高要求的中、大型应用,如高并发服务器,klaudream,软件支撑环境优化-jvm7,jvm运行参数示例 堆大小设置 -xmx不超过物理内存1/2, -xms可以保持和-xmx一致,避免每次垃圾回收完成后jvm重新分配内存 -xmn:增大年轻代会减小年老代大小。此值对系统性能影响较大,sun官方推荐配置为整个堆的3/8 -xss:设置每个线程的堆栈大小 jdk5.0以后每个线程堆栈大小为1m,以前每个线程堆栈大小为256k。 在相同物理内存下,减小这个值能生成更多的线程,线程数上限往往在30005000左右。,klaudream,软件支撑环境优化-jvm8,jvm运行参数示例(续) 垃圾回收器选择 jdk5.0后根据系统配置自动选择 吞吐量优先的并行收集器 适用于科学技术和后台处理等 响应时间优先的并发收集器 适用于应用服务器、电信领域等,klaudream,软件支撑环境优化-jvm9,garbage first(g1) jdk 7.0新增gc 目标是要做到尽量减少gc 所导致的应用暂停的时间,让应用达到准实时的效果,同时保持jvm 堆空间的利用率 最大的特色在于允许指定在某个时间段内gc 所导致的应用暂停的时间最大值 realtime jdk 不受gc 管理的内存区 immortal 内存区域用于保留永久的对象,这些对象仅在应用结束运行时才会释放内存 scoped 内存区域用于保留临时的对象,位于scope 中的对象在scope 退出时,这些对象所占用的内存会被直接回收。 允许java 应用直接访问物理内存 在保证安全的情况下,允许java 应用直接访问物理内存,klaudream,软件支撑环境优化-中间件,java应用中涉及的中间件 web服务器:提供web访问服务 apache:世界第一的web服务器,支持php iis:最通用的asp服务器 resin:高效率的jsp服务器 tomcat:java领域功能最全,应用最广的开源jsp服务器 应用服务器:提供企业级容器服务,在运行管理,事务控制,集成等方面具备强大能力 websphere:ibm体系中发挥最突出的主流商业服务器 weblogic:综合实力突出的商业级服务器 jboss:功能全面,已逐步成为替代商业服务器的主要开源应用服务器 数据库:为关系型数据提供存储,管理和访问服务 oracle:总体功能,性能最强;但成本高 db2:在ibm aix主机之上拥有较高性能 sql server:windows平台最具优势的数据库 mysql:开源数据库中最强,应用最广,并已成为电子商务型网站的主要产品,klaudream,软件支撑环境优化-中间件2,专门中间件 安全中间件 提供网络安全服务,如ca服务器,sso认证服务器 消息中间件 连接不同应用之间的通信,将不同的通信格式转换成同一格式,如ibm mq、active mq、hornetq 邮件服务器 提供邮件收发服务,如microsoft exchange server,james 文件服务器 提供文件存储与访问服务 流媒体服务器 提供视频,音频等流媒体存储与访问服务,klaudream,软件支撑环境优化-中间件3,构建策略 建立应用服务器集群 基于应用服务器本身集群功能 部署对称应用,访问共同的数据源 建立负载均衡机制 基于dns的负载均衡(不建议) 一个域名绑定多个ip 通过硬件四层交换实现负载均衡 alteon、f5、zeus负载均衡器,klaudream,软件支撑环境优化-中间件4,通过软件四层交换实现负载均衡 lvs(linux virtual server),提供基于heartbeat的实时灾难应对解决方案通过反向代理服务器实现负载均衡 基于http服务器实现负载均衡 商业级应用服务器往往自带负载均衡功能,如websphere的ihs apache:通过插件连接到应用服务器 nginx:已发展成为apache的替代品 lighttpd,klaudream,软件支撑环境优化-中间件5,klaudream,软件支撑环境优化-中间件6,建立反向代理 动静分离,将静态资源通过反向代理服务器缓存,减轻应用服务器的访问负载 squid nginx本身具备反向代理功能 数据库方面 根据需要建立在线库,近线库,主题库 在线库:偏重写操作,保存近期数据,使用商业级数据库,甚至商业级集群(如oracle rac) 近线库:偏重读操作,保存全部数据,可以使用mysql等开源数据库,若数据量巨大,可以实施分片(sharding)技术 主题库:为商业智能的需要建设数据仓库,专注于统计分析,klaudream,软件支撑环境优化-中间件7,其他方面,根据需要选择特定的中间件 若文件数量庞大,应该建立文件服务器,并部署相关文件系统(ftp,hdfs) 若应用中需处理大量的视频,音频,应建立流媒体服务器 小结: 中间件是应用软件的补充,简化并解决特定领域问题,加速应用的实施; 中间件不是越多越好,存在一定的采购,实施和维护成本,因此是否选择需要联系实际业务 中间件的选择需要基于以下因素 成熟度:产品本身,社区关注度 案例与技术支持 扩展性,klaudream,软件支撑环境优化-技术框架与工具包,对于java web应用而言,往往需要基于一组技术框架和一些工具包之上进行开发 核心技术框架 ssh:以spring为核心的轻量级框架,目前已发展成最广泛应用的框架 jsf+seam:体现java通用标准的轻量级框架,包含了ejb3 工具包 java开源社区庞大,几乎涵盖所有面向某个技术方面的支持。,klaudream,软件支撑环境优化-技术框架与工具包2,spring性能优化实践 尽量让spring来管理java对象,尤其是业务服务,数据访问,资源,web处理; 尽量避免对spring context的定制化; 如果应用启动过慢,可以尝试延迟加载spring配置(风险:运行时检查) 将prototype类型bean控制在最低范围; 不要每次请求都实例化spring context; 对可以在后台运行的任务,考虑使用spring的异步任务执行器来减少用户等待时间; 选择合适的远程访问协议,比如不需要soap的互通性,一个简单方案(如spring的httpinvoker支持)将更快更简单。 对影响大部分应用程序的aspect,考虑使用aspectj代替spring aop; 尽量避免使用分布式事务(基于容器的jta); 对于第三方工具,若spring已集成,应使用spring的访问方式,若未集成,则最好先将其集成到spring中再使用;,klaudream,软件支撑环境优化-技术框架与工具包3,struts2性能优化实践 关闭logging和devmode; 根据需要去除不需要的interceptor和filter 利用gzip压缩的filter来降低页面传输大小; 对于性能要求高的系统,不要大量使用ognl; 界面标签往往关联有很多静态资源,需要注意避免引入额外资源,尤其是注意其默认的dojo库性能不高,建议使用其他轻量级js库辅助完成界面逻辑,klaudream,软件支撑环境优化-技术框架与工具包4,hibernate性能优化 若数据量庞大,结构复杂,性能要求高,可以考虑使用ibatis等其他轻量级orm,或者直接的jdbc方式; 在处理大数据量时,会有大量的数据缓冲保存在session的一级缓存中,适时使用session.clear()或者session. evict(object) ,清除全部的缓存或者清除某个对象; 对大数据量查询时,慎用list()或者iterator()返回查询结果,尽量使用分页,减少select *; 对于关联操作,hibernate虽然可以表达复杂的数据关系,但请慎用,使数据关系较为简单时会得到较好的效率,特别是较深层次的关联时,性能会很差,诸如a.b.c.d.e = f.g.h 对含有关联的bo时,若default-cascade=“all”或者 “save-update”,新增bo时,请注意对bo中的集合的赋值操作,因为有可能使得多执行一次update操作; 尽量避免多对多关联;,klaudream,软件支撑环境优化-技术框架与工具包5,在一对多、多对一的关系中,使用延迟加载机制,并且在获取集合时,可以使用createfilter来减少不必要的集合内数据处理; 在one-to-many 关系中,将many一方设为主动方(inverse=false); 生产环境,务必:show_sql设置为false,此外,通过设置hibernate.jdbc.fetch_size,hibernate.jdbc.batch_size等属性,可以一定程度上优化性能; 对于并发insert要求较高的系统,推荐采用uuid.hex作为主键生成机制; 设置dynamic-update和dynamic-insert为true,则生成update/insert sql 时不包含未发生变动的字段属性; 在编写代码的时候请,对将pojo的getter/setter方法设定为public,避免处理反射; 二级缓存不是万能,要用前必须确认能够驾驭;,klaudream,软件支撑环境优化-技术框架与工具包6,其他技术工具的性能考虑 数据库访问 jdbc驱动:尽量选择type-4类型 type-1:jdbc-odbc桥模式 type-2:本机api驱动,部分是java的驱动程序,例如oracle oci驱动 type-3:网络协议驱动,面向数据库中间件的纯java驱动程序 type-4:本地协议驱动,直接面向数据库的纯java驱动程序,例如oracle thin驱动,klaudream,软件支撑环境优化-技术框架与工具包7,数据库访问(续) 生产机必须使用jdbc连接池 根据业务状况设置资源初始值和最大值,其中最大值可以设置为需要jdbc连接的并发客户端会话的数量,如果应用长期处于高负荷的状态,应将两者设置同样大小 如向外部提供jdbc资源服务,则应开启行预取功能; 设置连接使用超时时间,避免连接池资源泄露 json库 分为基于树模型和基于流模型两种解析器 按性能优劣排序: jackson/streaming jackson/tree stringtree json-simple json-tools json-lib,klaudream,软件支撑环境优化-技术框架与工具包8,xml库 xml处理类型包括: sax:基于事件,仅提供读,推事件处理模式,性能好 dom:基于内存的对象树,性能较差 stax:基于流的处理模型,jdk6.0集成;拉事件处理模式,性能好 xml解析器选择: 对于大型xml的一次性读写处理,首选stax 对于xml节点的多次处理,首选dom4j,jdom性能一般。,klaudream,软件支撑环境优化-技术框架与工具包9,web service工具 jax-rpc:axis,已淘汰 jax-ws(纳入到jdk6.0):cxf(推荐),axis2(跨语言),metro jax-rs(纳入到java ee6.0):jersey,cxf 其他:jbossws,springws(轻量级的简化品),klaudream,软件支撑环境优化-技术框架与工具包10,日志工具 替代system.out.print/println debug/info/warn/fatal log4j性能最优,但往往使用apache common log作为外层日志框架,klaudream,软件支撑环境优化-技术框架与工具包11,apache common工具包 beanutils:支持pojo对象内容进行处理,包括属性的复制,设置等。 cli:面向命令行的处理工具 codec:提供编码,解码算法,包括base64,sha,md5等; collections:java.util的扩展,一方面提供了集合操作,如交集,并集;另一方面提供更丰富的集合和map实现,如orderedmap configuration:用于处理配置文件的,支持很多种存储方式,如properties 文件,xml文件,jdbc数据源,jndi等; fileupload:提供文件上传下载功能,辅助mvc层完成文件收发; httpclient:提供了程序级访问web站点的功能; io:java.io的扩展,提供了丰富的流处理和文件系统处理功能; lang:java.lang的扩展,提供了诸如stringutils, stringescapeutils, randomstringutils, tokenizer, wordutils等工具类; math:提供丰富的数学计算功能; net:提供了多种网络应用层协议的处理方法,包括ftp,telnet等; validator:提供了丰富的后台验证的工具。比如验证email字符串,日期字符串等是否合法; vfs:提供对多种资源的访问接口,包括ftp,http,zip等资源类型;,klaudream,数据优化-数据本身,java数据 尽量使用原生类型int/boolean/float,而非对象类型的integer/boolean/float; 运行期对象:状态数据需考虑线程安全问题 web控制对象:action,servlet,建议根据线程产生 持久化访问对象:dao,建议无状态 业务逻辑对象:service,handler,建议无状态 映射对象:保证为pojo,尽量避免计算逻辑 orm映射的持久化对象 元数据描述对象 传值对象,klaudream,数据优化-数据本身2,常用的集合对象 非线程安全类:,klaudream,数据优化-数据本身3,非线程安全类(续) 如果要进行大量的随机访问,应使用arraylist;如果经常进行插入与删除操作,用使用linkedlist。 hashmap设计用来快速访问;而treemap保持“键”始终处于排序状态,所以没有hashmap快。linkedhashmap保持元素插入的顺序,但是也通过散列提供了快速访问能力。 set不接受重复元素。hashset提供最快的查询速度,而treeset保持元素处于排序状态。linkedhashset以插入顺序保存元素。 对哈希表的操作,作为key的对象要正确重写equals和hashcode方法。,klaudream,数据优化-数据本身4,线程安全类 concurrenthashmap比hashtable及collection.synchronizedmap有更好的并发性; copyonwritearraylist 比vector及collection.synchronizedlist有更好的并发性; copyonwritearrayset比collection.synchronizedset有更好的并发性,klaudream,数据优化-数据本身5,数据库数据 数据类型,长度原则 关系设计原则 索引创建:加速查询 分区创建:避免全表扫描 视图:方便数据整合和管理 冗余数据:提高访问命中率,klaudream,数据优化-数据查询,数据查询优化 sql中超过三个表连接后性能下降较大; 减少select *的使用; where语句中尽量避免对索引字段的计算; 子查询代替连接查询; exists和in相比,性能的发挥,需要看外表和内表大小情况,外表大,内表小则适合in,反之适合exists 不要以字符格式声明数字,要以数字格式声明字符值,以避免索引失效; 慎重使用临时表 对于复杂的数据查询统计逻辑,可以考虑采用存储过程,klaudream,业务逻辑优化-java语言特性,java语言级优化 减少对象生成,避免重复计算; 充分利用第三方工具及中间件,避免重新发明轮子; 对所有的常量代数表达式使用static final修饰符 使用collection及map对象时根据需要设置初始大小; java反射需要慎用,尤其是在运行期使用性能影响较大; 对异常进行有效处理,异常对性能影响很大; 首先,需要避免出现e.printstacktrace的情况; 构建自己的异常体系,将各类系统异常包装成runtimeexception后throw; 由最外层拦截,负责将问题进行记录,并根据情况决定是否通知,停止或者忽略;,klaudream,业务逻辑优化-java语言特性2,java语言级优化 避免显示调用system.gc(); 对象不用时务必显式置为null; 避免string拼接,以stringbuffer/stringbuilder代替; 尽量减少对象的clone; 充分运用位运算: 左移1位()操作相当于除以2。,klaudream,业务逻辑优化-缓存,缓存的特征 时间记录:数据进入cache的时间。 timeout过期时间 eviction policy 清除策略 命中率 分级cache:分区机制 分布式cache 锁,事务,数据同步 访问接口均清晰简单,klaudream,业务逻辑优化-缓存2,主流缓存技术 ehcache:应用级缓存,支持集群式缓存; oscache:主要应用于jsp页面中,支持集群式缓存; memcached:高性能应用级缓存,支持跨语言访问,支持中心管理方式的分布式缓存; jbosscache:功能最全的应用级缓存,支持集群式缓存,事务等高级特性,可以作为内存数据库,klaudream,业务逻辑优化-缓存3,memcached 协议简单 基于libevent的事件处理 内置内存存储方式 中心端控制的分布式 consistent hashing,klaudream,业务逻辑优化-多线程,多线程处理(垂直扩展) 并发与并行 不是仅仅创建thread这么简单 主线程,daemon线程 runnable, callable,future start(),stop(),interrupt(),wait(), notify(), notifyall(),sleep(),join(),yield() 结合线程池管理维护线程 executors创建executorservice,spring中提供了封装的taskexecutor提供对应的excecutorservice 线程池大小的设置,充分结合cpu的负载能力,默认为runtime.getruntime().availableprocessors(cpu个数或核数) jdk7中提供了fork/join模型,简化了并发/并行计算,klaudream,业务逻辑优化-多线程2,多线程设计模式 critical section:仅允许一个线程运行,如计算全局唯一id 利用synchronized将临界资源保护起来; producer-consumer:包含1个或多个生产者,1个或多个消费者,例如数据采集与处理 当两方仅一个时,则为管道模式(pipe) 创建数据交换区(管道),并对其输入和输出方法作为同步资源保护起来; 利用wait, notify机制实现线程间通信,保证数据交换区始终可用;,klaudream,业务逻辑优化-多线程3,多线程设计模式(续) read-write lock:读写两个操作分离,并由不同线程请求,例如内存读写 往往读明显多于写操作; 对于写操作需要加上线程同步机制,对于读则应支持并发读取,但是在没有写的情况下。 可以基于reentrantreadwritelock(替代synchronized)创建读锁和写锁 workerthread:包含一个主线程和若干个工作线程,如服务器请求响应处理 主线程使用线程池模式管理工作线程,并动态维护工作线程资源; 需要建立工作任务队列,主线程负责放,工作线程负责取出,工作任务队列需要使用线程同步保护,并且建立线程间通信保证工作任务队列可用;,klaudream,业务逻辑优化-多线程4,线程安全策略 不保存任何中间状态 使用threadlocal绑定线程变量; 不使用单例模式 针对线程轮询 不建议使用timer,而是使用scheduledthreadpool; 此外,针对复杂的轮询调度,可以结合spring使用quartz,klaudream,业务逻辑优化-java消息,java消息处理 jms规范 消息模型: p2p:queue pub/sub:topic 消息的消费 同步 订阅者或接收者调用receive方法来接收消息,receive方法在能够接收到消息之前(或超时之前)将一直阻塞。 异步 基于mdb模型,并需要重量级容器的支撑,klaudream,业务逻辑优化-java消息2,spring框架提供了mdp技术 实现轻量级异步消息处理 三种响应类型: 兼容mdb模式,实现了 javax.jms.messagelistener 接口和onmessage()方法,处理一个javax.jms.message类型的消息; 实现了spring框架的接口sessionawaremessagelistener,允许 javax.jms.session对象与消息对象一起传入onmessage() 方法; 使用spring的 messagelistenercontainer。提供了自动消息变换处理,允许构造一个异步的消息监听器 (mdp),该监听器有一个诸如processtrade() 的方法,该方法接收一个从消息负载中得到的包含一些xml的字符串参数,而不是像非描述性的onmessage()方法那样接受一个消息对象。,klaudream,业务逻辑优化-java消息3,jms的使用需要借助消息中间件,推荐开源的hornetq 性能非常好 数据文件压缩率高 支持三种运行模式: embedded:可以运行在任何java虚拟机中,对开发非常方便,内嵌在应用本身或jboss等服务器中; stand-alone:独立服务器运行模式 cluster:提供集群化运行模式,支持ha,klaudream,业务逻辑优化-资源池,资源池技术 资源往往是有限的,但需求量却是很大的,比如数据库连接资源,web容器的线程池 由资源池管理器提供一定数目的目标资源,请求的资源依赖于资源池的分配,然后给该资源标识为忙,标示为忙的资源不能再被分配使用,当某一个资源使用完后,资源池把相关的资源的忙标示清除掉,以示该资源可以再被下一个请求使用 资源池常有的参数 初始资源的数目:资源池启动时,一次建立的资源数目,资源池最少要保证在这个数目上 最大资源的数目:当请求的资源超出这个数目,就等待 对于业务系统的有限资源,可以基于common-pool对象池技术实现资源的申请与使用;,klaudream,输入输出优化-文件流,java输入输出处理 针对于大量且连续的文件,设备数据的输入输出,需要借助流处理技术; inputstream:输入流,从源读取进内存的流; outputstream:输出流,即将写入到目标的流 流是资源,用完必须关闭; 借助缓冲器(buffer)可以明显提升输入输出效率 针对于文件处理 针对任意位置的处理,jdk7提供了seekablebytechannel随机文件处理功能; 文件的存储不建议放入到数据库中,而是输出到文件系统中,klaudream,输入输出优化-通讯,java网络通讯 常用技术: rmi:远程方法调用,tcp/ip层,支持对象传递,典型应用如ejb; rpc:远程过程调用,http层,典型应用如xml-rpc,json-rpc,web service,性能比rmi低; socket:面向消息的传递,tcp/ip层,性能相对高;,klaudream,输入输出优化-通讯2,不提倡使用重量级的rmi 基于socket的应用 协议类型: tcp:面向三次握手的连接协议,包括完整的收发逻辑,具有较高的传输安全性,往往在不稳定的网络或者高要求的网络状况下使用;服务器客户机模式; udp:用户数据报文协议,无法保证传输安全性,往往在较好的网络状况下使用;若完整手法,需建立双服务器模式; 网络io技术: bio:阻塞式io,性能最差 nio:非阻塞同步io,性能较好,开源框架:netty、mina aio(jdk7):非阻塞异步io,性能最好,klaudream,输入输出优化-通讯3,bio,klaudream,输入输出优化-通讯4,nio:基于reactor设计模式 等待事件到来(reactor负责) 将读就绪事件分发给用户定义的处理器(reactor负责) 读数据(

温馨提示

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

最新文档

评论

0/150

提交评论