java面试题详解及复习_第1页
java面试题详解及复习_第2页
java面试题详解及复习_第3页
java面试题详解及复习_第4页
java面试题详解及复习_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

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

文档简介

1、1、什么是Java集合APIJava集合框架API是用来表示和操作集合的统一框架,它包含接口、实现类、以及帮助程序员完成一些编程的算法。简言之,API在上层完成以下几件事: 编程更加省力,提高城程序速度和代码质量 非关联的API提高互操作性 节省学习使用新API成本 节省设计新API的时间 鼓励、促进软件重用具体来说,有6个集合接口,最基本的是Collection接口,由三个接口Set、List、SortedSet继承,另外两个接口是Map、SortedMap,这两个接口不继承Collection,表示映射而不是真正的集合。2、什么是Iterator一些集合类提供了内容遍历的功能,通过java

2、.util.Iterator接口。这些接口允许遍历对象的集合。依次操作每个元素对象。当使用Iterators时,在获得Iterator的时候包含一个集合快照。通常在遍历一个Iterator的时候不建议修改集合本省。3、Iterator与ListIterator有什么区别?Iterator:只能正向遍历集合,适用于获取移除元素。ListIerator:继承Iterator,可以双向列表的遍历,同样支持元素的修改。4、什么是HaspMap和Map?Map是接口,Java 集合框架中一部分,用于存储键值对,HashMap是用哈希算法实现Map的类。5、HashMap与HashTable有什么区别?对

3、比Hashtable VS HashMap两者都是用key-value方式获取数据。Hashtable是原始集合类之一(也称作遗留类)。HashMap作为新集合框架的一部分在Java2的1.2版本中加入。它们之间有一下区别: HashMap和Hashtable大致是等同的,除了非同步和空值(HashMap允许null值作为key和value,而Hashtable不可以)。 HashMap没法保证映射的顺序一直不变,但是作为HashMap的子类LinkedHashMap,如果想要预知的顺序迭代(默认按照插入顺序),你可以很轻易的置换为HashMap,如果使用Hashtable就没那么容易了。 H

4、ashMap不是同步的,而Hashtable是同步的。 迭代HashMap采用快速失败机制,而Hashtable不是,所以这是设计的考虑点。6、在Hashtable上下文中同步是什么意思?同步意味着在一个时间点只能有一个线程可以修改哈希表,任何线程在执行hashtable的更新操作前需要获取对象锁,其他线程等待锁的释放。7、什么叫做快速失败特性从高级别层次来说快速失败是一个系统或软件对于其故障做出的响应。一个快速失败系统设计用来即时报告可能会导致失败的任何故障情况,它通常用来停止正常的操作而不是尝试继续做可能有缺陷的工作。当有问题发生时,快速失败系统即时可见地发错错误告警。在Java中,快速失

5、败与iterators有关。如果一个iterator在集合对象上创建了,其它线程欲“结构化”的修改该集合对象,并发修改异常 (ConcurrentModificationException) 抛出。8、怎样使Hashmap同步?HashMap可以通过Map m = Collections.synchronizedMap(hashMap)来达到同步的效果。9、什么时候使用Hashtable,什么时候使用HashMap基本的不同点是Hashtable同步HashMap不是的,所以无论什么时候有多个线程访问相同实例的可能时,就应该使用Hashtable,反之使用HashMap。非线程安全的数据结构能

6、带来更好的性能。如果在将来有一种可能你需要按顺序获得键值对的方案时,HashMap是一个很好的选择,因为有HashMap的一个子类LinkedHashMap。所以如果你想可预测的按顺序迭代(默认按插入的顺序),你可以很方便用LinkedHashMap替换HashMap。反观要是使用的Hashtable就没那么简单了。同时如果有多个线程访问HashMap,Collections.synchronizedMap()可以代替,总的来说HashMap更灵活。10、为什么Vector类认为是废弃的或者是非官方地不推荐使用?或者说为什么我们应该一直使用ArrayList而不是Vector你应该使用Arra

7、yList而不是Vector是因为默认情况下你是非同步访问的,Vector同步了每个方法,你几乎从不要那样做,通常有想要同步的是整个操作序列。同步单个的操作也不安全(如果你迭代一个Vector,你还是要加锁,以避免其它线程在同一时刻改变集合)。而且效率更慢。当然同样有锁的开销即使你不需要,这是个很糟糕的方法在默认情况下同步访问。你可以一直使用Collections.sychronizedList来装饰一个集合。事实上Vector结合了“可变数组”的集合和同步每个操作的实现。这是另外一个设计上的缺陷。Vector还有些遗留的方法在枚举和元素获取的方法,这些方法不同于List接口,如果这些方法在代

8、码中程序员更趋向于想用它。尽管枚举速度更快,但是他们不能检查如果集合在迭代的时候修改了,这样将导致问题。尽管以上诸多原因,oracle也从没宣称过要废弃Vector.1.什么是web容器?实现J2EE规范中web协议的应用。该协议定义了web程序的运行时环境,包括:并发性,安全性,生命周期管理等等。2.解释下面关于J2EE的名称1)JNDI:JAVA命名目录服务2)JMS:JAVA消息服务3)JTA:JAVA事务服务4)JAF:JAVA安全认证框架5)RMI:远程方法调用3.EJB是基于哪些技术实现的?并说 出SessionBean和EntityBean的区别,StatefulBean和Sta

9、telessBean的区别?EJB包括Session Bean、Entity Bean、Message Driven Bean,基于JNDI、RMI、JAT等技术实现。SessionBean在J2EE应用程序中被用来完成一些服务器端的业务操作,例如访问数据库、调用其他EJB组件.EntityBean被用来代表应用系统中用到的数据。对于客户机,SessionBean是一种非持久性对象,它实现某些在服务器上运行的业务逻辑;EntityBean是一种持久性对象,它代表一个存储在持久性存储器中的实体的对象视图,或是一个由现有企业应用程序实现的实体。Session Bean 还可以再细分为 Statef

10、ul Session Bean 与 Stateless Session Bean 。这两种的 Session Bean都可以将系统逻辑放在 method之中执行,不同的是 Stateful Session Bean 可以记录呼叫者的状态,因此通常来说,一个使用者会有一个相对应的 Stateful Session Bean 的实体,Stateless Session Bean 虽然也是逻辑组件,但是他却不负责记录使用者状态,也就是说当使用者呼叫 Stateless Session Bean 的时候,EJB Container 并不会找寻特定的 Stateless Session Bean 的实体

11、来执行这个 method.换言之,很可能数个使用者在执行某个 Stateless Session Bean 的 methods 时,会是同一个 Bean 的 Instance 在执行.从内存方面来看, Stateful Session Bean 与 Stateless Session Bean 比较, Stateful Session Bean 会消耗 J2EE Server 较多的内存,然而 Stateful Session Bean 的优势却在于他可以维持使用者的状态。4.J2EE是技术还是平台还是框架?J2EE本身是一个标准,为企业分布式应用开发提供的标准平台。J2EE也是一个框架,包括

12、JDBC,JNDI,RMI、,JMS,EJB,JTA等技术。5.23种设计模式Factory(工厂模式), Builder(建造模式), Factory Method(工厂方法模式), Prototype(原始模型模式),Singleton(单例模式), Facade(门面模式), Adapter(适配器模式), Bridge(桥梁模式), Composite(合成模式), Decorator(装饰模式), Flyweight(享元模式), Proxy(代理模式), Command(命令模式), Interpreter(解释器模式), Visitor(访问者模式), Iterator(迭代子模

13、式), Mediator(调停者模式), Memento(备忘录模式), Observer(观察者模式), State(状态模式), Strategy(策略模式), Template Method(模板方法模式), Chain Of Responsibleity(责任链模式)Jsp面试题1.forward和sendRedirect的区别?forward:请求转发或RequestDispatcher.forward;跳转到新的页面url不变;控制的转移完全在服务器上进行,不涉及网络传输。response.sendRedirect:重定向302;跳转到新的页面url也变成新的地址;控制的转移通过向

14、客户发送302状态代码和Location响应报头来完成,需要额外的网络传输。2.jsp有哪些内置对象?作用分别是什么?request:请求端信息httpservletrequestresponse:响应端信息httpservletResponsesession:存储用户状态信息httpsessionapplication:servletContext,等同getServlet.Config().getServletContext()out:jspWriter,数据流的标准输出config:ServletConfig,存取servlet的初始化参数exception:异常信息pageContex

15、t:PageContext,提供存取所有在网页中可被利用的隐含对象,并且可以管理它们的属性。page:this,该页面产生的servlet实例3.jsp有哪些动作?作用分别是什么?6种基本动作1)jsp:include:在页面被请求时引入一个文件。2)jsp:useBean:查找或实例化一个javaBean.3)jsp:setProperty:设置javaBean的属性4)jsp:getProperty:输出javaBean的某个属性5)jsp:forward:把请求转到新的页面6)jsp:plugin:根据浏览器类型为java插件生成OBJECT或EMBED标记4.jsp中动态include

16、和静态include的区别?静态include是jsp转译期间,被激活;始终生成1个Servlet;被包含的页面更新后,需要更新主页面。动态include是jsp请求期间,被激活;会生成2个Servlet;被包含的页面更新后,不需要更新主页面;可增加请求参数。5.jsp的执行过程?1)客户端发出request请求2)jsp容器将jsp转译成servlet的源代码3)将产生的servlet的源代码经过编译后,加载到内存中4)把结果response响应到客户端6.servlet的生命周期?web容器加载servlet,生命周期开始。通过调用servlet的init方法进行servlet的初始化,通

17、过调用service方法响应请求,根据请求的不同调用不同的doxxx方法,响应结束,web容器调用servlet的destroy方法。7.什么情况下调用doGet()和doPost()?由jsp页面的form的method属性决定。method为get时调用doGet,为post时调用doPost。8.jsp和servlet有哪些相同点和不同点?jsp是servlet技术的扩展。本质上是servlet,jsp编译后是servlet。不同点在于:servlet的应用逻辑是在java文件中,没有和html分离开;而jsp则是java代码和html组合成jsp文件。servlet主要用于控制逻辑,而

18、jsp侧重于表示。9.4种作用域page:代表与一个页面相关的对象和属性。静态include可以共享该对象和属性request:代表与某个请求相关的对象和属性。session:代表与某个用户相关的对象和属性。application:代表与整个web应用程序相关的对象和属性。10.在web开发过程中经常遇到输出某种编码的字符,如:iso-8859-1,如何输出特定编码的字符串?String gbkStr = ;gbkStr = new String(str.getBytes(ISO-8859-1), GBK);11.jsp的4种过滤器request,forward,include,error15

19、.假设在helloapp应用中有一个helloServlet类,它在Web.xml中如何配置?helloServlet.helloServlethelloServlet/helloServlet访问方式http:/localhost/helloapp/helloServlet16.jsp中执行浏览器cacheresponse.setHeader(Expires, 0);response.setHeader(Cache-Control, no-cache);response.setHeader(Pragma, no-cache);17.jsp中设置cookieCookie c = new Coo

20、kie(name, tomzhang);response.addCookie(c);18.jsp中删除cookiec.setMaxAge(0);19.jsp中如何停止jsp的执行20.会话跟踪url重写,cookie方式response.encodeURL-针对window.location.href=response.encodeRedirectURL-针对response.sendRedirect(response.encodeRedirectURL(XXX);jsessionid=xxxxxx21.当使用一个结果集时,如何防止字段为null显示在html文本域中?input type =

21、text name=name value=/22.如何获得当前的session数?使用HttpSessionBindingListener监听器来跟踪。23.getSession(true)和getSession(false)的区别?request.getSession(true):如果不存在会话就创建一个新的会话(如果想把数据写入到会话中)request.getSession(false):如果不存在会话就返回null(如果只是想读取会话中的数据)24.jsp相关的包jsp-api.jarServlet生命周期Servlet生命周期分为三个阶段:1,初始化阶段 调用init()方法2,响应客

22、户请求阶段调用service()方法3,终止阶段调用destroy()方法Servlet初始化阶段:在下列时刻Servlet容器装载Servlet:1,Servlet容器启动时自动装载某些Servlet,实现它只需要在web.XML文件中的之间添加如下代码:?12,在Servlet容器启动后,客户首次向Servlet发送请求3,Servlet类文件被更新后,重新装载ServletServlet被装载后,Servlet容器创建一个Servlet实例并且调用Servlet的init()方法进行初始化。在Servlet的整个生命周期内,init()方法只被调用一次。Servlet工作原理:首先简单解

23、释一下Servlet接收和响应客户请求的过程,首先客户发送一个请求,Servlet是调用service()方法对请求进行响应的,通过源代码可见,service()方法中对请求的方式进行了匹配,选择调用doGet,doPost等这些方法,然后再进入对应的方法中调用逻辑层的方法,实现对客户的响应。在Servlet接口和GenericServlet中是没有doGet,doPost等等这些方法的,HttpServlet中定义了这些方法,但是都是返回error信息,所以,我们每次定义一个Servlet的时候,都必须实现doGet或doPost等这些方法。每一个自定义的Servlet都必须实现Servle

24、t的接口,Servlet接口中定义了五个方法,其中比较重要的三个方法涉及到Servlet的生命周期,分别是上文提到的init(),service(),destroy()方法。GenericServlet是一个通用的,不特定于任何协议的Servlet,它实现了Servlet接口。而HttpServlet继承于GenericServlet,因此HttpServlet也实现了Servlet接口。所以我们定义Servlet的时候只需要继承HttpServlet即可。Servlet接口和GenericServlet是不特定于任何协议的,而HttpServlet是特定于HTTP协议的类,所以HttpSer

25、vlet中实现了service()方法,并将请求ServletRequest,ServletResponse强转为HttpRequest和HttpResponse。?public void service(ServletRequest req,ServletResponse res) throws ServletException,IOException HttpRequest request; HttpResponse response; try req = (HttpRequest)request; res = (HttpResponse)response; catch(ClassCast

26、Exception e) throw new ServletException(non-HTTP request response); service(request,response); 代码的最后调用了HTTPServlet自己的service(request,response)方法,然后根据请求去调用对应的doXXX方法,因为HttpServlet中的doXXX方法都是返回错误信息,?protected void doGet(HttpServletRequest res,HttpServletResponse resp) throws ServletException,IOExcepti

27、on String protocol = req.getProtocol(); String msg = IStrings.getString(http.method_get_not_supported); if(protocol.equals(1.1) resp.sendError(HttpServletResponse.SC.METHOD.NOT.ALLOWED,msg); esle resp.sendError(HttpServletResponse.SC_BAD_REQUEST,msg); 所以需要我们在自定义的Servlet中override这些方法!源码面前,了无秘密!-Servl

28、et响应请求阶段:对于用户到达Servlet的请求,Servlet容器会创建特定于这个请求的ServletRequest对象和ServletResponse对象,然后调用Servlet的service方法。service方法从ServletRequest对象获得客户请求信息,处理该请求,并通过ServletResponse对象向客户返回响应信息。对于Tomcat来说,它会将传递过来的参数放在一个Hashtable中,该Hashtable的定义是:?private Hashtable paramHashStringArray = new Hashtable();这是一个String-String

29、的键值映射。HashMap线程不安全的,Hashtable线程安全。-Servlet终止阶段:当WEB应用被终止,或Servlet容器终止运行,或Servlet容器重新装载Servlet新实例时,Servlet容器会先调用Servlet的destroy()方法,在destroy()方法中可以释放掉Servlet所占用的资源。-Servlet何时被创建:1,默认情况下,当WEB客户第一次请求访问某个Servlet的时候,WEB容器将创建这个Servlet的实例。2,当web.xml文件中如果元素中指定了子元素时,Servlet容器在启动web服务器时,将按照顺序创建并初始化Servlet对象。注

30、意:在web.xml文件中,某些Servlet只有元素,没有元素,这样我们无法通过url的方式访问这些Servlet,这种Servlet通常会在元素中配置一个子元素,让容器在启动的时候自动加载这些Servlet并调用init()方法,完成一些全局性的初始化工作。Web应用何时被启动:1,当Servlet容器启动的时候,所有的Web应用都会被启动2,控制器启动web应用-Servlet与JSP的比较:有许多相似之处,都可以生成动态网页。JSP的优点是擅长于网页制作,生成动态页面比较直观,缺点是不容易跟踪与排错。Servlet是纯Java语言,擅长于处理流程和业务逻辑,缺点是生成动态网页不直观。J

31、SP和Servlet的关系浅谈JSP是Servlet的扩展,在没有JSP之前,就已经出现了Servlet技术。Servlet是利用输出流动态生成HTML页面,包括每一个HTML标签和每个在HTML页面中出现的内容。 由于包括大量的HTML标签、大量的静态文本及格式等,导致Servlet的开发效率极为低下。所有的表现逻辑,包括布局、色彩及图像等,都必须耦合在Java代码中,这的确让人不胜其烦。JSP的出现弥补了这种不足,JSP通过在标准的HTML页面中插入Java代码,其静态的部分无须Java程序控制,只有那些需要从数据库读取并根据程序动态生成信息时,才使用Java脚本控制。 从表面上看,JSP

32、页面已经不再需要Java类,似乎完全脱离了Java面向对象的特征。事实上,JSP是Servlet的一种特殊形式,每个JSP页面就是一个Servlet实例JSP页面由系统编译成Servlet,Servlet再负责响应用户请求。JSP其实也是Servlet的一种简化,使用JSP时,其实还是使用Servlet,因为Web应用中的每个JSP页面都会由Servlet容器生成对应的Servlet。对于Tomcat而言,JSP页面生成的Servlet放在work路径对应的Web应用下。 看下面一个简单的JSP页面: 第一个JSP页面 %for(int i = 0 ; i 当启动Tomcat之后,可以在Tom

33、cat的Catalinalocalhostjsptestorgapachejsp目录下找到如下文件(假如Web应用名为jsptest,上面JSP页的名为test1.jsp):test1_jsp.java和test1_jsp.class。这两个文件都是Tomcat生成的,Tomcat根据JSP页面生成对应Servlet的Java文件及class文件。 下面是test1_jsp.java文件的源代码,这是一个特殊的Java类,是一个Servlet类: /JSP页面经过Tomcat编译后默认的包 package org.apache.jsp; import javax.servlet.*; impo

34、rt javax.servlet.http.*; import javax.servlet.jsp.*; /继承HttpJspBase类,该类其实是个Servlet的子类 public final class test1_jsp extends org.apache.jasper.runtime.HttpJspBase implements org.apache.jasper.runtime.JspSourceDependent private static java.util.Vector _jspx_dependants; public java.util.List getDependan

35、ts() return _jspx_dependants; /用于响应用户的方法 public void _jspService(HttpServletRequest request, HttpServletResponse response) throws java.io.IOException, ServletException /获得页面输出流 JspFactory _jspxFactory = null; PageContext pageContext = null; HttpSession session = null; ServletContext application = nu

36、ll; ServletConfig config = null; /获得页面输出流 JspWriter out = null; Object page = this; JspWriter _jspx_out = null; PageContext _jspx_page_context = null; /开始生成响应 try _jspxFactory = JspFactory.getDefaultFactory(); /设置输出的页面格式 response.setContentType(text/html; charset=gb2312); pageContext = _jspxFactory.

37、getPageContext(this, request, response, null, true, 8192, true); _jspx_page_context = pageContext; application = pageContext.getServletContext(); config = pageContext.getServletConfig(); session = pageContext.getSession(); /页面输出流out = pageContext.getOut(); _jspx_out = out; /输出流,开始输出页面文档 out.write(rn

38、); /下面输出HTML标签 out.write(rn); out.write(rn); out.write(rn); out.write(first Jsprn); out.write(rn); out.write(rn); /页面中的循环,在此处循环输出 for(int i = 0 ; i 10; i+) out.println(i); out.write(rn); out.write(rn); out.write(rn); out.write(rn); out.write(rn); out.write(rn); catch (Throwable t) if (!(t instanceof

39、 SkipPageException) out = _jspx_out; if (out != null & out.getBufferSize() != 0) out.clearBuffer(); if (_jspx_page_context != null) _jspx_page_context.handle PageException(t); finally if (_jspxFactory != null) _jspxFactory.releasePageContext(_jspx_ page_context); 即使读者不了解上面提供的Java代码,也依然不会影响JSP页面的编写,因

40、为这都是由Web容器负责生成的。图2.1显示了test1.jsp的执行效果。 根据图2.1的执行效果,再次对比test1.jsp和test1_jsp.java文件,可得到一个结论:该JSP页面中的每个字符都由test1_jsp.java文件的输出流生成。 根据上面的JSP页面工作原理图,可以得到如下四个结论: JSP文件必须在JSP服务器内运行。 JSP文件必须生成Servlet才能执行。 每个JSP页面的第一个访问者速度很慢,因为必须等待JSP编译成Servlet。 JSP页面的访问者无须安装任何客户端,甚至不需要可以运行Java的运行环境,因为JSP页面输送到客户端的是标准HTML页面。

41、JSP和Servlet会有如下转换: JSP页面的静态内容、JSP脚本都会转换成Servlet的xxxService()方法,类似于自行创建Servlet时service()方法。 JSP声明部分,转换成Servlet的成员部分。所有JSP声明部分可以使用private,protected,public,static等修饰符,其他地方则不行。 JSP的输出表达式(部分),输出表达式会转换成Servlet的xxxService()方法里的输出语句。 九个内置对象要么是xxxService()方法的形参,要么是该方法的局部变量,所以九个内置对象只能在JSP脚本和输出表达式中使用。jstl资料重复定

42、义,这样就促成了JSTL(JavaServer Pages Standard Tag Library)的诞生。因为工作中需要用到JSTL,但网上却苦于找不到有关JSTL的中文资料,所以就有了这篇文章。JSTL简介JSTL是一个不断完善的开放源代码的JSP标签库,是由apache的jakarta小组来维护的。JSTL只能运行在支持JSP1.2和Servlet2.3规范的容器上,如tomcat 4.x。但是在即将推出的JSP 2.0中是作为标准支持的。JSTL目前的最新版本为1.02,最终发布版为1.0。JSTL包含两个部分:标签库和EL(Expression Language表达式语言)语言。标

43、签库目前支持四种标签:标签 URI 前缀 示例 Core c XML processing x I18N capable formatting fmt Database access (SQL) sql Core支持JSP中的一些基本的操作;XML processing支持XML文档的处理;I18N capable formatting支持对JSP页面的国际化;Database access (SQL)支持JSP对数据库的操作。由于本人水平有限,本文仅介绍Core标签,如有兴趣,可一起探讨其它三种标签的使用与扩充。EL语言介绍EL语言是JSTL输出(输入)一个JAVA表达式的表示形式。在JST

44、L中,EL语言只能在属性值中使用。EL语言只能通过建立表达式$exp1来进行调用。在属性值中使用表达式有三种方式。1、 value属性包含一个表达式在这种情况下,表达式值被计算出来并根据类型转换规则赋值给value属性。比如:中的$username就是一个EL,它相当于JSP语句或2、 value属性包含一个或多个属性,这些属性被文本分割或围绕在这种情况下,表达式从左到右进行计算,并将结果转换为字符串型(根据类型转换规则),并将结果赋值给value属性3、 value属性仅仅包含文本在这种情况下,字符串型属性value将根据类型转换规则转换为标签所希望的类型。EL语言的操作符取得某个对象或集合

45、中的属性值为了获得集合中的属性,EL支持以下两种操作1 使用.操作符来获得有名字的属性。例如表达式$user.username表明对象user的username属性2 使用操作符来获得有名字或按数字排列的属性。表达式$userusername和表达式$user. username 含义相同表达式$row0 表明row集合的第一个条目。在这里user是一个类的对象,它的属性username必须符合标准JavaBean的规范,即必须为username属性定义相应的getter、setter方法。Empty操作符(空值检查)使用empty操作符来决定对象、集合或字符串变量是否为空或null。例如:$empty param.username如果request的参数列表中的username值为

温馨提示

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

评论

0/150

提交评论