Java框架面试题总结-201104.doc_第1页
Java框架面试题总结-201104.doc_第2页
Java框架面试题总结-201104.doc_第3页
Java框架面试题总结-201104.doc_第4页
Java框架面试题总结-201104.doc_第5页
免费预览已结束,剩余29页可下载查看

下载本文档

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

文档简介

Java框架面试题总结 2011-03-26Struts 篇1. Struts的工作流程当客户端向浏览器发送HTTP请求时,所有浏览器请求都被提交给ActionServlet处理。如果用户提交表单,则会将表单中的数据放入到ActionForm中。ActionServlet根据struts_config.xml文件中预先配置好的设置选择将请求转发到哪个action对象,action对象从actionForm对象中获取数据,但后调用业务逻辑组件,完成业务功能。2. Struts的工作流程分解 Web应用如果采用struts框架,在web应用启动时就会加载并初始化ActionServlet, ActionServlet从struts_config.xml文件中读取配置信息,基本执行步骤如下: (1) 所有浏览器请求都被提交给ActionServlet处理(2) ActionServlet根据struts_config.xml文件中预先配置好的设置,选择应该将请求转发到哪个action对象. (3) 当用户提交表单时,一个配置好的ActionForm对象将被创建,并被填入表单中的相当数据. (4) Action对象从ActionForm对象中获取数据. (5) Action对象调用业务逻辑组件完成业务功能. 3. Struts控制器组件的组成. 和控制器的主要功能Struts控制器组件主要包括:ActionServlet组件:充当Struts框架的中央控制器. RequestRrocessor组件:充当每个子应用模块的请求处理器. Action组件:负责处理一项具体的业务. Struts控制器组件主要完成以下任务:l 接受用户请求. l 根据用户请求,调用合适的模型组件来执行相应的业务逻辑. l 获取业务逻辑执行结果. l 根据当前状态以及业务逻辑执行结果,选择合适的视图组件返回给用户. 4. Struts中的几个关键对象的作用(说说几个关键对象的作用)ActionServlet类控制导航流. ActionServlet根据URI来决定哪个Action类被用于处理请求,Action可以校验输入,并访问业务层以便从数据库检索信息. Action需要知道页面提交了哪些内容,所以由ActionServlet根据请求URI来决定将请求参数绑定到哪个ActionForm中并传入Action. Action在完成业务逻辑后,返回一个ActionForward对象,ActionServlet根据ActionForward对象中的路径来调用页面完成响应. Struts将这些信息绑定在一个ActionMapping对象中,一个ActionMapping对应一个请求URI,当请求路径到达的时候,ActionServlet就会查询ActionMapping对象,ActionMapping对象将告诉ActionServlet哪个Action类会被调用,哪个ActionForm类被用于传递页面数据以及哪些ActionForward将被用于转向. 有关Action,ActionForm,ActionForward等信息,通过struts-config.xml配置文件来定义.5. Struts工作流程图(用例图) 注: Servlet 容器在启动时,或者用户首次请求ActionServlet时加载ActionServlet类. 6. 说说MVC设计模式和它的优点MVC是一种设计模式,.它强制性的把应用程序的输入,处理和输出分开.MVC把应用程序分成三个核心模块:模型(Model),视图(View)和控制器(Controller).他们分别处理不同的任务. 视图是用户看到并与之交互的界面.视图向用户显示相关的数据,并能接受用户的输入数据,但是它不进行任何实际的业务处理. 模型是应用程序的主体部分.模型表示业务数据和业务逻辑.一个模型能为多个视图提供数据.由于同一个模型可以被多个视图重用,所以提高了应用的重用性. 控制器接受用户的输入并调用模型和视图去完成任务.MVC的处理逻辑如下: 首先控制器接受用户请求,并决定应该调用哪个模型来进行处理,然后模型根据用户请求进行相应的业务逻辑处理,并返回数据. 最后控制器调用相应的视图来格式化模型返回的诗句,并通过视图呈现给用户. MVC的优点:(1) 在MVC设计模式中,模型响应用户请求并返回响应数据,视图负责格式化数据并把它们呈现给用户,业务逻辑和表示层分离,同一个模型可以被不同的视图重用,所以大大提高了代码的可重用性. (2) MVC的三个模块相互独立,改变其中的一个不会影响其他两个,所以根据这种设计思想能构造良好的松耦合的构件. (3) 控制器可以用来连接不同的模型和视图去完成用户的需求,也可以为构造应用程序提供强有力的手段.给定一些可重用的模型和视图,控制器可以根据用户的需求选择适当的模型进行处理,然后选择适当的视图将结果显示给用户. 7. 说说struts是如何实现MVC的 ?Struts采用JSP作为MVC的视图, 控制器由ActionServlet和Action类来实现. 控制器负责视图和模型之间的交互. 模型由实现业务逻辑的JavaBean或EJB组件构成, 然后说说Struts的工作流程. 8. Struts优点与缺点 Struts是开源软件,使开发者能更深入的了解其内部实现机制。 Struts 优点:业界标准(很多成功案例),学习资源丰富。 Struts的优点主要集中体现在两个方面:Taglib和页面导航。 a、利用Struts提供的taglib可以大大节约开发时间。 b、维护扩展比较方便。通过一个配置文件,即可把握整个系统各部分之间的联系,这对于后期的维护有着莫大的好处。 c、表现与逻辑分离 d、表单验证解决了请求数据的验证问题,增强了系统健壮性。 e、便于团队开发 Struts缺点:a、大量的使用标签,对于初学者难度较大。 b、ActionForms使用不便、无法进行单元测试(StrutsTestCase只能用于集成)9 . strust的Action是不是线程安全的?如果不是 有什么方式可以保证Action的线程安全?如果是,说明原因不是. 为了确保action的线程安全, 最好的办法就是不要在action里定义实列变量.10. Tiles框架是什么?Tiles框架为创建Web页面提供了一种模板机制,它能将网页的布局和内容分离。11. struts1.x 和struts 2 的区别本文将从Struts1和Struts2的各个方面进行比较特征Struts 1 Struts 2Action类Struts1的action需要去继承一个抽象基类。一个普遍问题就是Struts1是面向抽象类编程来代替接口编程Struts2的action可以实现一个Action接口,也可以同时实现一些其他的接口来添置一些附加的,常用的服务。Struts2提供一个基类ActionSupport实现了一些常用的接口。虽然Action接口不是必须的。任何附带execute方法的POJO对象都可以作为Struts2的action对象。线程模型Struts1的action是单例的而且必须是线程安全的,因为该类会只有唯一一个引用来为action处理所有的请求。单例策略会限制Struts1的action的功能以及需要扩展的额外的功能(The singleton strategy places restrictions on what can be done with Struts 1 Actions and requires extra care to develop)。Struts1的action必须是线程安全的并且是同步的。Struts2的Action对象是针对每一个请求的,所以自然也就不存在线程安全问题了。(实际上,)Servlet的依赖Struts1的Action依赖于Servlet API,因为当Action被调用的时候HttpServletRequest和HttpServletResponse对象是通过execute方法进行处理的。Struts2的Action和容器的连接并不紧密。通常servlet上下文被描绘成简单的Map映射,允许Action被单独测试。当然,如果需要的话Struts2的Action也可以通过访问初始的request和response来完成一些功能。然而,其他的一些架构元素导致降低或者删除了直接访问request和response的需求。易测试性测试Struts1的Action有一个大障碍就是execute方法是直接暴露于servlet API的。Struts2的Action可以很容易的通过设置属性调用方法来进行测试。当然依赖注入的支持也使得测试变得简单。输入处理Struts1使用一个ActionForm对象来获取用户的输入。和action一样,所有的ActionForm都必须继承自一个基类。因为其他的javaBean不能被用作ActionForm,开发者通常要写一些多余的类来获取用户输入。DynaBean可以被用做生成ActionForm类的一个选择,但是开发者需要对现有的javaBean进行重写。Struts2使用Action属性作为输入属性,除掉了对于输入对象的需求。输入属性可以是一个拥有他自己的属性的对象。Action属性是通过标签和web页面交互。Struts2也支持ActionForm模型,就是POJO的Form对象和POJO的Action。多数的对象类型,包括商业逻辑对象和领域对象都可以作为输入/输入对象。模式驱动特征简化了标签和POJO输入对象的关系。表达式语言Struts1和JSTL结合,所以他可以使用JSTL的EL。Struts2也支持JSTL,但是这个框架也支持更加强大的表达式语言OGNL表现层和类型值的绑定Struts1使用标准的JSP机制将对象绑定到page context来进行访问。Struts2使用”ValueStack”技术,所以标签不用将视图和表现的对象结合就可以得到值.ValueStack策略允许通过一系列可能具有相同属性名字但是不同属性类型的的类型来完成视图的重用,类型转换Struts1的ActionForm通常都是String类型。Struts1通过Commons-Beanutils实现类型转换。Struts2使用OGNL实现类型转换,框架包含了对基础和公共类型的转换器。验证Struts1支持通过ActionForm中的validate方法实现手工验证。也可以通过扩展通用的验证框架进行验证。对于同一个类可以有不同的验证,但是不能关联到子对象的验证。Struts2也支持通过validate方法进行手工验证以及Xwork验证框架进行验证。Xwork验证框架支持将验证链接到子属性,子属性使用了为属性类型和验证上下文定义的验证。Action执行的控制Struts1支持为每一个模块分配请求处理(生命周期),但是一个模块中的所有Action必须分享相同的生命周期。Struts2支持通过拦截器栈为每个Action创建不同的生命周期。通常对于不同的Action根据需要都要有对应的栈被创建和使用。12 . Struts 的常用标签库及用法常见的struts标签库有struts html 标签库,struts bean标签库, struts Logic标签库,Struts Template 标签库, Struts Nested 标签库.HTML 标签 用来创建能够和Struts 框架和其他相应的HTML 标签交互的HTML 输入表单 Bean 标签 在访问JavaBeans 及其属性,以及定义一个新的bean 时使用Logic 标签 管理条件产生的输出和对象集产生的循环Template 标签 随着Tiles框架包的出现,此标记已开始减少使用Nested 标签 增强对其他的Struts 标签的嵌套使用的能力以下分别讲解struts标签库的用法.Struts html标签库:生成html 标签用法:标签的action属性用来指定当前用户提交表单后,处理用户请求的组件.生成html 标签该标签在表单上创建HTML文本框字段.用法:property:指定字段的名字生成html 标签这个标签在表单上生成隐藏字段.隐藏字段用于在表单上存放不希望让用户看到或不允许修改的信息.生成html 标签标签生成表单的提交按钮用法:submit生成html 标签标签生成表单复位按钮用法:reset在表单上生成取消按钮标签用于生成表单取消按钮 用法:cancel:生成html 元素用于生成单选按钮用法:男女单选按钮需要确保property一样,只是value值不一样就可以了.:生成复选框 用法: 篮球足球乒乓球复选框按钮需要确保property一样,value的值不同就可以了.还需要注意的是复选框的值需要写在标签按钮的最后面的.如果应用中有多个Checkbox,并且希望ActionFrom Bean 中用单个数组表示,都可以采用. 的使用方法如下:(1) 在Action Form 中定义一个数组,用来存放checkBox的值,private String strArray =new String0;public String getStrArray() return this.strArray;public void SetStrArray(String strArray)this. StrArray = strArray;(2) 在表单中加入元素,通过设置property=”strArray” 来把它和ActionFrom Bean 关联.(3) 对于每个元素,设置它的初始值.value1下拉列表 用于生成html 元素它可以在表单上创建下拉列表和多选列表用法:value1value2value3属性说明: size:指定每次在网页上显示的可选项的数目.Multibox:指定是否支持多项选择,如果设置为true,就表示多选列表.支持多项选择;否则表示下拉列表.只支持单项选择,默认为falseProperty属性:与action From中的某个属性相对应.这个属性用来存放用户在列表上选中的选项的值.标签生成html 元素,提供从html表单中上传文件的功能.标签可以方便的实现文件上传的功能.样列代码如下:提交使用标签要注意以下几点:(1) 标签必须嵌套在标签中(2) 标签的method属性必须设置为post(3) 标签的编码类型emctype属性必须设置为” multipart/form-data”(4) 标签必须设置property属性,这个属性和ActionFrom Bean中的FormFile类型的属性对应.在ActiomForm中设置FormFile属性:在actionForm中设置一个名为file的属性,这个属性必须为org.apache.struts.upload.FormFile类型.代码如下:private FormFile file;public FormFile getFile()return this.file;public void setFile(FormFile file)this.file=file上传下载的例子详细参见(My_JavaE 实例小例子upDownFile) 标签:用于输出错误消息.标签可以放在网页的任何地方,既可以位于HTML标签内,也可以位于HTML标签外,标签输出的错误消息和它在网页上的位置有关.标签具有以下重要的属性:name:指定ActionMessage对象存放在request或sessios范围内的属性key.标签处理类将根据这一属性的key来检索request或session范围的ActionMessage对象.默认值为Globals.ERROR_KEY.Property:指定消息的属性.如果此项没有设置,将显示ActionMessages对象中的所有的ActionMessage.Bundle:指定Resource Bundle(资源包) ,如果此项没有设置.将从应用默认的Resource Bundle 中获取消息文本. 关于标签的用法详见:精通struts p326_p328.错误消息的来源标签在request或session范围内寻找ActionMessages(或其子类ActionErrors)集合对象.在从ActionMessages集合对象读取ActionMessage对象,把ActionMessage包含的消息文本显示到网页上.在ActionForm Bean和Action类中都可以生成ActionMessages对象.ActionForm Bean的validate() 方法执行表单验证,返回ActionErrors对象,Struts控制器组件RequestProcessor(请求处理器)然后把ActionErrors对象存放在request范围内,存放时的属性key为Globals.ERROR_KEY .以下是HtmlErrorForm 的validate() 方法:public ActionErrors validate(ActionMapping mapping ,HttpServletRequest request)ActionErrors errors = new ActionErrors();/如果复选筐被选中了,显示错误消息If(this,getCheckBox1()Errors.add(ActionMessages.Global_MESSAGE,.new ActionMessage(“error.global.fromform”);Errors.add(“checkbox1”,new ActionMessage(“error.checkbox”);retrun errors;在action类的execute()方法中可以进行数据逻辑验证,如果验证失败,将生成ActionMessages对象.以下是helloapp应用的LogonAction的execute()方法; public ActionForward execute(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response) ActionMessages errors = new ActionMessages();String userName=(String)(HelloForm)form).getUserName();String badUserName=”Monster”;If(userName.equalsIgnoreCase(badUserName)Errors.add(“userName”,new ActionMessage(“hello.dont.talk.to.monster”,badUserName);SaveErrors(request,errors);Return (new ActionForward(mapping.getInput();以上代码先创建了一个ActionMessages对象,它用来存放ActionMessage对象,最后调用Action基类的saveErrors()方法,saveErrors()方法把ActionMessages 对象保存在request范围内.标签:用于显示正常消息的代码如下: 标签有以下一些重要属性:name:指定actionMessages对象存放在request或session范围内的key.,标签处理类将根据这一属性key来检索request或session范围的ActionMessages对象.Message属性:指定消息的来源.Id属性: 用来命名从消息集合中检索出的每个ActionMessage对象.它和标签的name属性匹配.Struts bean标签库标签用于输出Resource Bundle 种的一条消息.标签的bundle属性指定Resource Bundle 它和struts配置文件的元素的key属性匹配.如果没有设置bundle 属性,就采用默认的Resource Bundle. 标签的key属性直接指定消息key. Bundle属性指明资源文件的struts-config.xml文件种的配置的key值.例如: (详细参照:精通struts p339) 标签标签用于在网页上输出某个Bean 或它的属性的内容.标签可以输出单个字符串,或责一个对象的某个属性,或责通过迭代器遍历集合的所有值 标签的name属性指定已经存在的变量.例如:在action中得到一个字符串的值,然后在页面上显示出来/得到定单状态(action中)String orderState=orderService.getOrderState(userOrderId);request.setAttribute(orderState,orderState);/在界面上显示为(界面中)如果希望输出Bean的某个属性值,应该同时设置标签的name属性和property属性. Property属性指定Bean的属性.例如:/得到当前定单的购货人信息UserVO uVO =orderService.getUserbyOrderId(userOrderId);request.setAttribute(userVO,uVO);/在页面上显示购货人的信息 购货人姓名:   联系电话: 根据迭代器标签显示集合的所有内容/得到当前定单的所有商品的信息List list=orderService.getWareByOrderId(userOrderId);request.setAttribute(wareList,list);/根据迭代器标签显示所有内容(界面层) Struts Logic标签库:判断变量中是否包含指定的常量字符串:判断变量中是否不包含指定变量的类和 标签 和标签判断指定变量是否为空字符串.例子: 以下代码先定义一个字符串变量emptyString ,它是空字符串.接下来标签判断emptyString变量是否为空 字符串.其判断结果为true.因此将执行标签主体的内容.the variable named emptyString is empty!标签是Logic标签中最复杂的标签.也是用途最广的一个标签.它能够在一个循环中遍历数组,Collection,Enumeration,Iterator 或Map中的所有元素.一:遍历集合的name属性指定需要进行遍历的集合对象.它每次从集合中检索出一个元素,然后把它存放在page范围内.并以id属性指定的字符串来命名这个元素.例如:标签的length属性指定需要遍历的元素的数目,如果没有设置length属性,就遍历集合中的所有元素.offset属性指定开始遍历的起始位置,默认值为”0”,表示中集合的第一个元素开始遍历,indexId属性定义一个代表当前别遍历的元素序号的变量.整个变量存放在page范围内.可以被标签主体的标签访问.例如:.以上代码输出的内容为:1. Cat2. Bird设置被遍历的变量设置name属性,name属性指定需要遍历的集合或map.例如:设置name属性和property属性,name属性指定一个javaBean,property属性指定javaBean的一个属性.这个属性为需要遍历的集合或map. 例如:.-设置collection 属性,collection属性指定一个运行时表达式,表达式的运算结果为需要遍历的集合或map.例如:logic:iterate id=”header” collection=”13、JSP中动态INCLUDE与静态INCLUDE的区别?动态INCLUDE用jsp:include动作实现 它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数。静态INCLUDE用include伪码实现,定不会检查所含文件的变化,适用于包含静态页面 Ajax 篇1. ajax是什么 Ajax 是 Asynchronous JavaScript and XML(以及 DHTML 等)的缩写。ajax不是一项新技术,只是多种技术的综合,或者是设计方式.包括javascript,xhtml和css,dom,xml和XSTL,xmlHttpRequest等技术.2. ajax实现的原理 ajax采用异步传输方式, 用户触发事件和向服务器发起请求是在一个线程上. Ajax主要是通过XMLHTTPRequest对象调用服务端方法,然后将服务端返回的数据显示在客户端. 3. ajax框架的基本流程对象初始化 发送请求 服务器接受服务器返回-.客户端接受修改客户端页面内容。4. dwr的实现原理. Dwr是ajax的开源框架。dwr包含两个主要部分:其一是运行在浏览器客户端的javascript, 这部分被用来与服务端通信,并更新页面内容; 其二是运行在服务器端的java servlet,这部分用来处理请求将响应结构发送给浏览器.5. ajax 开发步骤.(1) 初始化xmlHttpRequest 对象.(2) 设置xmlHttpRequest对象的onreadystatechange属性,指定服务器返回响应数据时要调用的回调函数. 即指定相应处理函数.(3) 调用xmlHttpRequest对象的open方法创建http请求.(4) 调用xmlHttpRequest对象的setResourceHeader等方法,设置必要的http请求头信息.(5) 调用xmlHttpRequest对象的send方法,发送之前创建的http请求.(6) 根据xmlHttpRequest对象的open方法参数,决定等待或者不等到服务器返回响应数据,如果服务器返回响应数据,则将控制权交给之前设置的回调函数. Spring 篇一. 基础知识1. 对IOC的理解. IOC的全称是: Inversion of Control(即: 控制反转). 理解: 在传统的应用程序中,控制权在应用程序本身,程序的控制流程完全由开发者控制。在IOC容器中,控制权发生了反转:从应用程序转移到了IOC容器。组件不再由应用程序负责创建和配置,而是由IOC容器负责,应用程序只需要直接使用已经创建并配置好的组件。为了让组件能在IOC容器中被“装配”出来,需要某种“注入”的机制,才能将一种组件“注入”到另一种组件中。 简单来说,依赖注入解决了最主要的问题:将组件的配置与使用相分离,并且由IoC容器负责管理组件的生命周期。简单来说: 控制反转就是由容器控制程序之间的(依赖)关系.2. 依赖注入的三种实现形式? a. 接口注入(Interface Injection) 说明: 通过实现一个接口来实现对依赖对象的注入.b. 设值方法注入(Setter注入). 说明: 对象创建之后,将被依赖对象通过set方法设置进去.c. 构造方法注入(Constructor injection). 说明: 对象创建时,被依赖对象以构造方法参数的方式注入. 说明: Spring两种依赖注入的类型分别是setter注入和构造方法注入。setter注入: 一般情况下所有的java bean, 我们都会使用setter方法和getter方法去设置和获取属性的值,示例如下:public class namebean String name; public void setName(String a) name = a; public String getName() return name; 我们会创建一个bean的实例然后设置属性的值,spring的配置文件如下: tom Spring会调用setName方法来只是name熟悉为tom构造方法注入:构造方法注入中,我们使用带参数的构造方法如下:public class namebean String name; public namebean(String a) name = a; 我们会在创建bean实例的时候以new namebean(“tom”)的方式来设置name属性, Spring配置文件如下: My Bean Value 使用constructor-arg标签来设置构造方法的参数。3. Setter注入和构造方法注入比较Setter注入的优点:(1)与传统的JavaBean的写法更相似,程序员更容易理解、接受,通过setter方式设定依赖关系显得更加直观、明显;(2)对于复杂的依赖关系,如果采用构造注入,会导致构造器过于臃肿,难以阅读。Spring在创建Bean实例时,需要同时实例化其依赖的全部实例,因而导致死你功能下降。而使用设置注入,则避免这下问题; 尤其在某些属性可选的情况下,多参数的构造器更加笨拙。构造注入的优点:(1)构造注入可以再构造器中决定依赖关系的注入顺序,优先依赖的优先注入。(2)对于依赖关系无须变化的Bean,构造注入更有用处;因为没有setter方法,所有的依赖关系全部在构造器内设定,因此,不用担心后续代码对依赖关系的破坏。(3)依赖关系只能在构造器中设定,则只有组件的创建者才能改变组件的依赖关系。对组件的调用者而言,组件内部的依赖关系完全透明,更符合高内聚的原则;建议采用以设置注入为主,构造注入为辅的注入策略。对于依赖关系无须变化的注入,尽量采用构造注入;而其他的依赖关系的注入,则考虑采用设置注入。4. 对AOP的理解,以及AOP在项目中是如何使用的? AOP(Aspect Oriented Programming), 也就是面向切面编程,也有译作面向方面编程。AOP是一种编程思想. 在传统的面向对象(Object-Oriented Programming,OOP)编程中,对垂直切面关注度很高,横切面关注却很少,也很难关注。也就是说,我们利用OOP思想可以很好的处理业务流程,却不能把系统中的某些特定的重复性行为封装在某个模块中。比如在很多的业务中都需要记录操作日志,结果我们不得不在业务流程种嵌入大量的日志记录代码。无论是对业务代码还是对日志记录代码来说,今后的维护都是非常复杂的。由于系统种嵌入了这种大量的与业务无关的其它重复性代码,系统的复杂性、代码的重复性增加了,从而使bug的发生率也大大的增加。IOC使软件组件松散连接成为可能,AOP让你能够捕捉系统中经常使用的功能,把他转化为组件.简单的说: 面向切面编程通过提供另外一种思考程序结构的途径来弥补面向对象编程(OOP)的不足.在OOP中模块化的关键单元是类(classes),而在AOP中模块化的单元则是切面。切面能对关注点进行模块化。AOP将应用系统分为两部分,核心业务逻辑(Core business concerns)及横向的通用逻辑,也就是所谓的方面Crosscutting enterprise concerns。AOP的应用: 例如,所有大中型应用都要涉及到的持久化管理(Persistent)、事务管理(Transaction Management)、安全管理(Security)、日志管理(Logging)和调试管理(Debugging)等。5. AOP的概念和术语 方面(Aspect):一个关注点的模块化,这个关注点实现可能另外横切多个对象。事务管理是J2EE应用中一个很好的横切关注点例子。方面用Spring的Advisor或拦截器实现。连接点(Joinpoint):程序执行过程中明确的点,如方法的调用或特定的异常被抛出。通知(Advice):在特定的连接点,AOP框架执行的动作。各种类型的通

温馨提示

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

评论

0/150

提交评论