java⾯试笔试题⼤汇总及cc++⾯试试题
JAVA相关基础知识
1、⾯向对象的特征有哪些⽅⾯
1.抽象:
抽象就是忽略⼀个主题中与当前⽬标⽆关的那些⽅⾯,以便更充分地注意与当前⽬标有关的⽅⾯。抽象并不打算了解全部问题,⽽只是选择其中的⼀部分,暂时不⽤部分细节。抽象包括两个⽅⾯,⼀是过程抽象,⼆是数据抽象。
2.继承:
继承是⼀种联结类的层次模型,并且允许和⿎励类的重⽤,它提供了⼀种明确表述共性的⽅法。对象的⼀个新类可以从现有的类中派⽣,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派⽣类(⼦类),⽽原始类称为新类的基类(⽗类)。派⽣类可以从它的基类那⾥继承⽅法和实例变量,并且类可以修改或增加新的⽅法使之更适合特殊的需要。
3.封装:
封装是把过程和数据包围起来,对数据的访问只能通过已定义的界⾯。⾯向对象计算始于这个基本概念,即现实世界可以被描绘成⼀系列完全⾃治、封装的对象,这些对象通过⼀个受保护的接⼝访问其他对象。
4. 多态性:
多态性是指允许不同类的对象对同⼀消息作出响应。多态性包括参数化多态性和包含多态性。多态性语⾔具有灵活、抽象、⾏为共享、代码共享的优势,很好的解决了应⽤程序函数同名问题。
2、String是最基本的数据类型吗?
基本数据类型包括byte、int、char、long、float、double、boolean和short。
java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提⾼效率节省空间,我们应该⽤StringBuffer类
3、int 和 Integer 有什么区别
Java 提供两种不同的类型:引⽤类型和原始类型(或内置类型)。Int是java的原始数据类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类。
原始类型封装类
booleanBoolean
charCharacter
byteByte
shortShort
intInteger
longLongarraylist排序sort对象
floatFloat
doubleDouble
引⽤类型和原始类型的⾏为完全不同,并且它们具有不同的语义。引⽤类型和原始类型具有不同的特征和⽤法,它们包括:⼤⼩和速度问题,这种类型以哪种类型的数据结构存储,当引⽤类型和原始类型⽤作某个类的实例数据时所指定的缺省值。对象引⽤实例变量的缺省值为null,⽽原始类型实例变量
的缺省值与它们的类型有关。
4、String 和StringBuffer的区别
JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。这个String类提供了数值不可改变的字符串。⽽这个StringBuffer类提供的字符串进⾏修改。当你知道字符数据要改变的时候你就可以使⽤StringBuffer。典型地,你可以使⽤StringBuffers来动态构造字符数据。
5、运⾏时异常与⼀般异常有何异同?
异常表⽰程序运⾏过程中可能出现的⾮正常状态,运⾏时异常表⽰虚拟机的通常操作中可能遇到的异常,是⼀种常见运⾏错误。java编译器要求⽅法必须声明抛出可能发⽣的⾮运⾏时异常,但是并不要求必须声明抛出未被捕获的运⾏时异常。
6、说出Servlet的⽣命周期,并说出Servlet和CGI的区别。
Servlet被服务器实例化后,容器运⾏其init⽅法,请求到达时运⾏其service⽅法,service⽅法⾃动派遣运⾏与请求对应的doXXX⽅法(doGet,doPost)等,当服务器决定将实例销毁的时候调⽤其destroy⽅法。
与cgi的区别在于servlet处于服务器进程中,它通过多线程⽅式运⾏其service⽅法,⼀个实例可以服务于多个请求,并且其实例⼀般不会销毁,⽽CGI对每个请求都产⽣新的进程,服务完成后就销毁,所以效率上低于servlet。
7、说出ArrayList,Vector, LinkedList的存储性能和特性
ArrayList和Vector都是使⽤数组⽅式存储数据,此数组元素数⼤于实际存储的数据以便增加和插⼊元素,它们都允许直接按序号索引元素,但是插⼊元素要涉及数组元素移动等内存操作,所以索引数据快⽽插⼊数据慢,Vector由于使⽤了synchronized⽅法(线程安全),
素,但是插⼊元素要涉及数组元素移动等内存操作,所以索引数据快⽽插⼊数据慢,Vector由于使⽤了synchronized⽅法(线程安全),通常性能上较ArrayList差,⽽LinkedList使⽤双向链表实现存储,按序号索引数据需要进⾏前向或后向遍历,但是插⼊数据时只需要记录本项的前后项即可,所以插⼊速度较快。
8、EJB是基于哪些技术实现的?并说出SessionBean和EntityBean的区别,StatefulBean和StatelessBean的区别。
EJB包括Session Bean、Entity Bean、Message Driven Bean,基于JNDI、RMI、JAT等技术实现。
SessionBean在J2EE应⽤程序中被⽤来完成⼀些服务器端的业务操作,例如访问数据库、调⽤其他EJB组件。EntityBean被⽤来代表应⽤系统中⽤到的数据。
对于客户机,SessionBean是⼀种⾮持久性对象,它实现某些在服务器上运⾏的业务逻辑。
对于客户机,EntityBean是⼀种持久性对象,它代表⼀个存储在持久性存储器中的实体的对象视图,或是⼀个由现有企业应⽤程序实现的实体。
Session Bean 还可以再细分为 Stateful 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 的实体来执⾏这个 method。换⾔之,很可能数个使⽤者在执⾏某个 Stateless Session Bean 的 methods 时,会是同⼀个 Bean 的 Instance 在执⾏。从内存⽅⾯来看,Stateful Session Bean 与 Stateless Session Bean ⽐较, Stateful Session Bean 会消耗 J2EE Server 较多的内存,然⽽ Stateful Session Bean 的优势却在于他可以维持使⽤者的状态。
9、Collection 和 Collections的区别。
Collection是集合类的上级接⼝,继承与他的接⼝主要有Set 和List.
Collections是针对集合类的⼀个帮助类,他提供⼀系列静态⽅法实现对各种集合的搜索、排序、线程安全化等操作。
10、&和&&的区别。
&是位运算符,表⽰按位与运算,&&是逻辑运算符,表⽰逻辑与(and)。
11、HashMap和Hashtable的区别。
HashMap是Hashtable的轻量级实现(⾮线程安全的实现),他们都完成了Map接⼝,主要区别在于HashMap允许空(null)键值(key),由于⾮线程安全,效率上可能⾼于Hashtable。
HashMap允许将null作为⼀个entry的key或者value,⽽Hashtable不允许。
java常见笔试题HashMap把Hashtable的contains⽅法去掉了,改成containsvalue和containsKey。因为contains⽅法容易让⼈引起误解。
Hashtable继承⾃Dictionary类,⽽HashMap是Java1.2引进的Map interface的⼀个实现。
最⼤的不同是,Hashtable的⽅法是Synchronize的,⽽HashMap不是,在多个线程访问Hashtable时,不需要⾃⼰为它的⽅法实现同步,⽽HashMap 就必须为之提供外同步。
Hashtable和HashMap采⽤的hash/rehash算法都⼤概⼀样,所以性能不会有很⼤的差异。
12、final, finally, finalize的区别。
final ⽤于声明属性,⽅法和类,分别表⽰属性不可变,⽅法不可覆盖,类不可继承。
finally是异常处理语句结构的⼀部分,表⽰总是执⾏。
finalize是Object类的⼀个⽅法,在垃圾收集器执⾏的时候会调⽤被回收对象的此⽅法,可以覆盖此⽅法提供垃圾收集时的其他资源回收,例如关闭⽂件等。
13、sleep() 和 wait() 有什么区别?
sleep是线程类(Thread)的⽅法,导致此线程暂停执⾏指定时间,给执⾏机会给其他线程,但是监控状态依然保持,到时后会⾃动恢复。调⽤sleep不会释放对象锁。
wait是Object类的⽅法,对此对象调⽤wait⽅法导致本线程放弃对象锁,进⼊等待此对象的等待锁定池,
只有针对此对象发出notify⽅法(或notifyAll)后本线程才进⼊对象锁定池准备获得对象锁进⼊运⾏状态。
14、Overload和Override的区别。Overloaded的⽅法是否可以改变返回值的类型?
⽅法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是⽗类与⼦类之间多态性的⼀种表现,重载Overloading是⼀个类中多态性的⼀种表现。如果在⼦类中定义某⽅法与其⽗类有相同的名称和参数,我们说该⽅法被重写 (Overriding)。⼦类的对象使⽤这个⽅法时,将调⽤⼦类中的定义,对它⽽⾔,⽗类中的定义如同被"屏蔽"了。如果在⼀个类中定义了多个同名的⽅法,它们或有不同的参数个数或有不同的参数类型,则称为⽅法的重载(Overloading)。Overloaded的⽅法是可以改变返回值的类型。
15、error和exception有什么区别?
error 表⽰恢复不是不可能但很困难的情况下的⼀种严重问题。⽐如说内存溢出。不可能指望程序能处理这样的情况。
exception 表⽰⼀种设计或实现问题。也就是说,它表⽰如果程序运⾏正常,从不会发⽣的情况。
16、同步和异步有何异同,在什么情况下分别使⽤他们?举例说明。
如果数据将在线程间共享。例如正在写的数据以后可能被另⼀个线程读到,或者正在读的数据可能已经被另⼀个线程写过了,那么这些数据就是共享数据,必须进⾏同步存取。
当应⽤程序在对象上调⽤了⼀个需要花费很长时间来执⾏的⽅法,并且不希望让程序等待⽅法的返回时,就应该使⽤异步编程,在很多情况下采⽤异步途径往往更有效率。
17、abstract class和interface有什么区别?
声明⽅法的存在⽽不去实现它的类被叫做抽象类(abstract class),它⽤于要创建⼀个体现某些基本⾏为的类,并为该类声明⽅法,但不
声明⽅法的存在⽽不去实现它的类被叫做抽象类(abstract class),它⽤于要创建⼀个体现某些基本⾏为的类,并为该类声明⽅法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然⽽可以创建⼀个变量,其类型是⼀个抽象类,并让它指向具体⼦类的⼀个实例。不能有抽象构造函数或抽象静态⽅法。Abstract 类的⼦类为它们⽗类中的所有抽象⽅法提供实现,否则它们也是抽象类为。取⽽代之,在⼦类中实现该⽅法。知道其⾏为的其它类可以在类中实现这些⽅法。
接⼝(interface)是抽象类的变体。在接⼝中,所有⽅法都是抽象的。多继承性可通过实现这样的接⼝⽽获得。接⼝中的所有⽅法都是抽象的,没有⼀个有程序体。接⼝只可以定义static final成员变量。
接⼝的实现与⼦类相似,除了该实现类不能从接⼝定义中继承⾏为。当类实现特殊接⼝时,它定义(即将程序体给予)所有这种接⼝的⽅法。然后,它可以在实现了该接⼝的类的任何对象上调⽤接⼝的⽅法。由于有抽象类,它允许使⽤接⼝名作为引⽤变量的类型。通常的动态联编将⽣效。引⽤可以转换到接⼝类型或从接⼝类型转换,instanceof 运算符可以⽤来决定某对象的类是否实现了接⼝。
18、heap和stack有什么区别。
栈是⼀种线形集合,其添加和删除元素的操作应在同⼀段完成。栈按照后进先出的⽅式进⾏处理。
堆是栈的⼀个组成元素
19、forward 和redirect的区别
forward是服务器请求资源,服务器直接访问⽬标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪⼉来的,所以它的地址栏中还是原来的地址。
redirect就是服务端根据逻辑,发送⼀个状态码,告诉浏览器重新去请求那个地址,⼀般来说浏览器会⽤刚才请求的所有参数重新请求,所以session,request参数都可以获取。
20、EJB与JAVA BEAN的区别?
Java Bean 是可复⽤的组件,对Java Bean并没有严格的规范,理论上讲,任何⼀个Java类都可以是⼀个Bean。但通常情况下,由于Java Bean是被容器所创建(如Tomcat)的,所以Java Bean应具有⼀个⽆参的构造器,另外,通常Java Bean还要实现Serializable接⼝⽤于实现Bean的持久性。Java Bean实际上相当于微软COM模型中的本地进程内COM组件,它是不能被跨进程访问的。Enterprise Java Bean 相当于DCOM,即分布式组件。它是基于Java的远程⽅法调⽤(RMI)技术的,所以EJB可以被远程访问(跨进程、跨计算机)。但EJB必须被布署在诸如Webspere、WebLogic这样的容器中,EJB客户从不直接访问真正的EJB组件,⽽是通过其容器访问。EJB容器是EJB组件的代理,EJB组件由容器所创建和管理。客户通过容器来访问真正的EJB组件。
编程语言怎么理解21、Static Nested Class 和 Inner Class的不同。
Static Nested Class是被声明为静态(static)的内部类,它可以不依赖于外部类实例被实例化。⽽通常的内部类需要在外部类实例化后才能实例化。
22、JSP中动态INCLUDE与静态INCLUDE的区别?
动态INCLUDE⽤jsp:include动作实现 <jsp:include page="included.jsp" flush="true" />它总是会检查所含⽂件中的变化,适合⽤于包含动态页⾯,并且可以带参数。
静态INCLUDE⽤include伪码实现,定不会检查所含⽂件的变化,适⽤于包含静态页⾯<%@ include file="included.htm" %>
23、什么时候⽤assert。
react小程序开发框架有哪些assertion(断⾔)在软件开发中是⼀种常⽤的调试⽅式,很多开发语⾔中都⽀持这种机制。在实现中,assertion就是在程序中的⼀条语句,它对⼀个boolean表达式进⾏检查,⼀个正确程序必须保证这个boolean表达式的值为true;如果该值为false,说明程序已经处于不正确的状态下,系统将给出警告或退出。⼀般来说,assertion⽤于保证程序最基本、关键的正确性。assertion检查通常在开发和测试时开启。为了提⾼性能,在软件发布后,assertion检查通常是关闭的。
24、GC是什么? 为什么要有GC?
GC是垃圾收集的意思(Gabage Collection),内存处理是编程⼈员容易出现问题的地⽅,忘记或者错误的内存回收会导致程序或系统的不稳定甚⾄崩溃,Java提供的GC功能可以⾃动监测对象是否超过作⽤域从⽽达到⾃动回收内存的⽬的,Java语⾔没有提供释放已分配内存的显⽰操作⽅法。
25、short s1 = 1; s1 = s1 + 1;有什么错? short s1 = 1; s1 += 1;有什么错?
short s1 = 1; s1 = s1 + 1; (s1+1运算结果是int型,需要强制转换类型)
short s1 = 1; s1 += 1;(可以正确编译)
26、und(11.5)等於多少? und(-11.5)等於多少?
round⽅法返回与参数最接近的长整数,参数加1/2后求其floor.
27、String s = new String("xyz");创建了⼏个String Object?
两个
28、设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。
以下程序使⽤内部类实现线程,对j增减的时候没有考虑顺序问题。
public class ThreadTest1{
private int j;
public static void main(String args[]){
ThreadTest1 tt=new ThreadTest1();
Inc w Inc();
Inc w Inc();
Dec w Dec();
c语言指针的表示方法for(int i=0;i<2;i++){
Thread t=new Thread(inc);
t.start();
t=new Thread(dec);
t.start();
}
}
private synchronized void inc(){
j++;
System.out.println(Thread.currentThread().getName()+"-inc:"+j);
}
private synchronized void dec(){
j--;
System.out.println(Thread.currentThread().getName()+"-dec:"+j);
}
class Inc implements Runnable{
public void run(){
sql查询语句的格式for(int i=0;i<100;i++){
inc();
}
}
}
class Dec implements Runnable{
public void run(){
for(int i=0;i<100;i++){
dec();
}
}
}
}
29、Java有没有goto?
java中的保留字,现在没有在java中使⽤。
30、启动⼀个线程是⽤run()还是start()?
启动⼀个线程是调⽤start()⽅法,使线程所代表的虚拟处理机处于可运⾏状态,这意味着它可以由JVM调度并执⾏。这并不意味着线程就会⽴即运⾏。run()⽅法可以产⽣必须退出的标志来停⽌⼀个线程。
97、⼀个".java"源⽂件中是否可以包括多个类(不是内部类)?有什么限制?
可以。必须只有⼀个类名与⽂件名相同。
98、MVC的各个部分都有那些技术来实现?如何实现?
MVC是Model-View-Controller的简写。"Model" 代表的是应⽤的业务逻辑(通过JavaBean,EJB组件实现), "View" 是应⽤的表⽰⾯(由JSP页⾯产⽣),"Controller" 是提供应⽤的处理过程控制(⼀
般是⼀个Servlet),通过这种设计模型把应⽤逻辑,处理过程和显⽰逻辑分成不同的组件实现。这些组件可以进⾏交互和重⽤。
99、java中有⼏种⽅法可以实现⼀个线程?⽤什么关键字修饰同步⽅法? stop()和suspend()⽅法为何不推荐使⽤?
有两种实现⽅法,分别是继承Thread类与实现Runnable接⼝
⽤synchronized关键字修饰同步⽅法
反对使⽤stop(),是因为它不安全。它会解除由线程获取的所有锁定,⽽且如果对象处于⼀种不连贯状态,那么其他线程能在那种状态下检查和修改它们。结果很难检查出真正的问题所在。suspend()⽅法容易发⽣死锁。调⽤suspend()的时候,⽬标线程会停下来,但却仍然持有在这之前获得的锁定。此时,其他任何线程都不能访问锁定的资源,除⾮被"挂起"的线程恢复运⾏。对任何线程来说,如果它们想恢复⽬标线程,同时⼜试图使⽤任何⼀个锁定的资源,就会造成死锁。所以不应该使⽤suspend(),⽽应在⾃⼰的Thread类中置⼊⼀个标志,指出线程应该活动还是挂起。若标志指出线程应该挂起,便⽤wait()命其进⼊等待状态。若标志指出线程应当恢复,则⽤⼀个notify()重新启动线程。
100、java中有⼏种类型的流?JDK为每种类型的流提供了⼀些抽象类以供继承,请说出他们分别是哪些类?
字节流,字符流。字节流继承于InputStream OutputStream,字符流继承于InputStreamReader OutputStreamWriter。在java.io包中还有许多其他的流,主要是为了提⾼性能和使⽤⽅便。
101、java中会存在内存泄漏吗,请简单描述。
会。如:int i,i2; return (i-i2); //when i为⾜够⼤的正数,i2为⾜够⼤的负数。结果会造成溢位,导致错误。
102、java中实现多态的机制是什么?
⽅法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是⽗类与⼦类之间多态性的⼀种表现,重载Overloading是⼀个类中多态性的⼀种表现。
103、垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进⾏垃圾回收?
对于GC来说,当程序员创建对象时,GC就开始监控这个对象的地址、⼤⼩以及使⽤情况。通常,GC采⽤有向图的⽅式记录和管理堆(heap)中的所有对象。通过这种⽅式确定哪些对象是"可达的",哪些对象是"不可达的"。当GC确定⼀些对象为"不可达"时,GC就有责任回收这些内存空间。可以。程序员可以⼿动执⾏(),通知GC运⾏,但是Java语⾔规范并不保证GC⼀定会执⾏。
104、静态变量和实例变量的区别?
static i = 10; //常量
class A a; a.i =10;//可变
105、什么是java序列化,如何实现java序列化?
序列化就是⼀种⽤来处理对象流的机制,所谓对象流也就是将对象的内容进⾏流化。可以对流化后的对象进⾏读写操作,也可将流化后的对象传输于⽹络之间。序列化是为了解决在对对象流进⾏读写操作时所引发的问题。
序列化的实现:将需要被序列化的类实现Serializable接⼝,该接⼝没有需要实现的⽅法,implements Serializable只是为了标注该对象是可被序列化的,然后使⽤⼀个输出流(如:FileOutputStream)来构造⼀个ObjectOutputStream(对象流)对象,接着,使⽤ObjectOutputStream对象的writeObject(Object obj)⽅法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则⽤输⼊流。106、是否可以从⼀个static⽅法内部发出对⾮static⽅法的调⽤?
不可以,如果其中包含对象的method();不能保证对象初始化.
107、写clone()⽅法时,通常都有⼀⾏代码,是什么?
Clone 有缺省⾏为,super.clone();他负责产⽣正确⼤⼩的空间,并逐位复制。
108、在JAVA中,如何跳出当前的多重嵌套循环?
⽤break; return ⽅法。
109、List、Map、Set三个接⼝,存取元素时,各有什么特点?
List 以特定次序来持有元素,可有重复元素。Set ⽆法拥有重复元素,内部排序。Map 保存key-value值,value可多值。
110、J2EE是什么?
J2EE是Sun公司提出的多层(multi-diered),分布式(distributed),基于组件(component-base)的企业级应⽤模型(enterpriese application model).在这样的⼀个应⽤系统中,可按照功能划分为不同的组件,这些组件⼜可在不同计算机上,并且处于相应的层次(tier)中。所属层次包括客户层(clietn tier)组件,web层和组件,Business层和组件,企业信息系统(EIS)层。
111、UML⽅⾯
标准建模语⾔UML。⽤例图,静态图(包括类图、对象图和包图),⾏为图,交互图(顺序图,合作图),实现图。
112、说出⼀些常⽤的类,包,接⼝,请各举5个
常⽤的类:BufferedReader BufferedWriter FileReader FileWirter String Integer
常⽤的包:java.lang java.awt java.io java.util java.sql
常⽤的接⼝:Remote List Map Document NodeList
113、开发中都⽤到了那些设计模式?⽤在什么场合?
每个模式都描述了⼀个在我们的环境中不断出现的问题,然后描述了该问题的解决⽅案的核⼼。通过这种⽅式,你可以⽆数次地使⽤那些已有的解决⽅案,⽆需在重复相同的⼯作。主要⽤到了MVC的设计模式。⽤来开发JSP/Servlet或者J2EE的相关应⽤。简单⼯⼚模式等。114、jsp有哪些动作?作⽤分别是什么?
JSP共有以下6种基本动作 jsp:include:在页⾯被请求的时候引⼊⼀个⽂件。 jsp:useBean:寻或者实例化⼀个JavaBean。
jsp:setProperty:设置JavaBean的属性。 jsp:getProperty:输出某个JavaBean的属性。 jsp:forward:把请求转到⼀个新的页⾯。jsp:plugin:根据浏览器类型为Java插件⽣成OBJECT或EMBED标记。
115、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接⼝)?
可以继承其他类或完成其他接⼝,在swing编程中常⽤此⽅式。
116、应⽤服务器与WEB SERVER的区别?
应⽤服务器:Weblogic、Tomcat、Jboss
WEB SERVER:IIS、 Apache
117、BS与CS的联系与区别。
C/S是Client/Server的缩写。服务器通常采⽤⾼性能的PC、⼯作站或⼩型机,并采⽤⼤型数据库系统,如Oracle、Sybase、Informix或SQL Server。客户端需要安装专⽤的客户端软件。
B/S是Brower/Server的缩写,客户机上只要安装⼀个浏览器(Browser),如Netscape Navigator或Internet Explorer,服务器安装Oracle、Sybase、Informix或 SQL Server等数据库。在这种结构下,⽤户界⾯完全通过WWW浏览器实现,⼀部分事务逻辑在前端实现,但是主要事务逻辑在服务器端实现。浏览器通过Web Server 同数据库进⾏数据交互。
C/S 与 B/S 区别:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论