collection java 反序_Java程序员面试复习习题+答案整合

原标题:Java程序员面试复习习题+答案整合

b36a2ff428615358f6cf8ca6676bdbd0.png

Java基础知识

面向对象的特征:

抽象,封装、继承、多态

面向对象的特征

1.抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一是过程抽象,二是数据抽象。

2.继承:继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。

3.封装:封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。

4.多态性:多态性是指允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。

intInteger的区别:

Java提供两种不同的类型:引用类型和原始类型(或内置类型)。Int是java的原始数据类型,Integer是java为int提供的封装类。Java为每个原始类型提供了封装类。

原始类型封装类

booleanBoolean

charCharacter

byteByte

shortShort

intInteger

longLong

floatFloat

doubleDouble

引用类型和原始类型的行为完全不同,并且它们具有不同的语义。引用类型和原始类型具有不同的特征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为null,而原始类型实例变量的缺省值与它们的类型有关。

String类和StringBuffer类的区别

它们都是处理字符串的类,但是它们有一个最大的区别,那就是,String对象是存储你不能改动的文本字符

串,相反,如果你希望改动,则应使用StringBuffer类作为替换

StringBuffer是可变的而String是不可变的.

而且String用得多个的话会占用不同的内存.

如:Stringstr=“bb”;

str=“aa”;

前一个bb的内存地址不变,当又给它赋值为aa时它又指向aa的地址.

而StringBuffer就不会这样.

:”==”比较的是两个对象的地址,”equals()”比较的是两个对象的值.

集合

Collection层次结构中的根接口

Collection表示一组对象,这些对象也称为collection的元素

Java集合的缺点:类型未知

总的说来,JavaAPI中所用的集合类,都是实现了Collection接口,他的一个类继承结构如下:

Collection

Collection

Collection

Collection

Collection

Collection

List是基于Array,可以有重复的值

Vector:基于Array的List很重要的一点就是Vector“sychronized”的,这个也是Vector和ArrayList的唯一的区别

ArrayList:基于Array上的链表,但是不同的是ArrayList不是同步的

LinkedList:它不是基于Array的,所以不受Array性能的限制。它每一个节点(Node)都包含两方面的内容:1.节点本身的数据(data);2.下一个节点的信息(nextNode)。所以当对LinkedList做添加,删除动作的时候就不用像基于Array的List一样,必须进行大量的数据移动。只要更改nextNode的相关信息就可以实现了。这就是LinkedList的优势

HashSet:虽然Set同List都实现了Collection接口,但是他们的实现方式却大不一样。List基本上都是以Array为基础。但是Set则是在HashMap的基础上来实现的,这个就是Set和List的根本区别。HashSet的存储方式是把HashMap中的Key作为Set的对应存储

Set总结:

1.Set实现的基础是Map(HashMap);

2.Set中的元素是不能重复的,如果使用add(Objectobj)方法添加已经存在的对象,则会覆盖前面的对象;

性能时Map所要面对的一个大问题。如果你知道get()时怎么工作的,你就会发觉(比方说)在ArrayList里面找对象会是相当慢的。而这正是HashMap的强项。它不是慢慢地一个个地找这个键,而是用了一种被称为hashcode的特殊值来进行查找的。散列(hash)时一种算法,它会从目标对象当中提取一些信息,然后生成一个表示这个对象的“相对独特”的int。hashCode()是Object根类的方法,因此所有Java对象都能生成hashcode。HashMap则利用对象的hashCode()来进行快速的查找。这样性能就有了急剧的提高。

设计模式方面

1、开发中都用到了那些设计模式?用在什么场合?

答:每个模式都描述了一个在我们的环境中不断出现的问题,然后描述了该问题的解决方案的核心。通过这种方式,你可以无数次地使用那些已有的解决方案,无需再重复相同的工作。主要用到了MVC的设计模式。用来开发JSP/Servlet或者J2EE的相关应用。简单工厂模式等。

2、UML方面

答:标准建模语言UML。用例图,静态图(包括类图、对象图和包图),行为图,交互图

(顺序图,合作图),实现图,

1、概述struts,以及struts如何实现MVC架构的?

答:strutsframework是一种基于java的技术,Web应用程序开发人员通过strutsframework即可充分利用面向对象设计、代码重用以及“编写一次、到处运行”的优点。Struts提供了一种创建Web应用程序的框架,其中对应用程序的显示、表示和数据的后端代码进行了抽象。Struts采用jsp作为MVC的视图,由ActionServlet具体指定的action动作类作为控制器即MVC中的C,负责视图与模型之间的交互。控制器的每个入口点都由名为struts-config.xml的配置文件设置。该文件把来自视图的请求映射为特定的JAVA类以进行相应的处理,控制器还指定下一个视图的位置。Struts中的模型主要指的就是javabean,它是模型的代表,主要封装数据和业务逻辑。

Struts的处理流程:

控制器进行初始化工作,读取配置文件,为不同的Struts模块初始化相应的ModulConfig对象。

控制器接收Http请求,并从ActionConfig中找出对应于该请求的Action子类,如果没有对应的Action,控制器直接将请求转发给JSP或者静态页面,否则控制器将请求分发至具体的Action类进行处理。

在控制器调用具体的Action的Execute方法之前,ActionForm对象将利用Http请求中的参数来填充自已。还可以在ActionForm类中调用Validate方法来检查请求参数的合法性,并且可以返回一个包含所有错误信息的Actis对象。

执行具体的的Execute的方法,它负责执行相应的业务逻辑。执行完后,返回一个ActionForward对象,控制器通过该ActionForward对象来进行转发工作。也可以把Action要处理的业务逻辑封装在JavaBean中,如果系统中还有EJB,那么通过JavaBean调用EJB以完成业务处理;如果没有EJB,那么就直接在JavaBean中连接数据库,进行数据库相关的操作。

2、概述MVC体系结构

答:MVC包括三类对象,model是应用对象,view是视图,controller是控制器,它定义用户界面对用户输入的响应方式。

在MVC体系中,模型通常被称为“业务逻辑”,是真正完成任务的代码,视图就是使用界面,反映数据的变化。控制器控制着模型和视图之间的交互过程,它决定着向用户返回怎样的视图、检查通过界面输入的信息以及选择处理输入信息的模型

在MVC中,表示层和逻辑层分离,各部分可相互独立进行开发,便于开发和维护,提高了开发效率。

3、多线程的优点

答:可分两方面来答:

相对于单线程而言:

可以响应多任务的并发操作。

多线程取消了主循环和轮流检测机制,一个线程可以暂停而不阻止系统其他的部分的执行,而且当程序中一个线程阻塞时,只有那个被阻塞的线程暂停,所有其他的线程继续执行。

相对于进程而言:(可以答也可以不答)

它所要求的开销比较小,转换成本较小。

所有线程共享同一地址空间,相互协作。

彼此之间通信很容易。

4、用java访问Oracle数据库、取得记录并输出到界面

答:……………………..

Class.forName(“oracle.jdbc.driver.OracleDriver”);

Connectionconn=DriverManager.getConnection(url,username,password);

Statementstmt=conn.createStatement();

Stringstr=”select*from[table]”;

ResultSetrs=stmt.executeQuery(str);

While(rs.next())

{

……………………

}

rs.close();

stmt.close();

conn.close();

5、概述java垃圾回收机制

答:它的工作原理如下:

当不存在对一个对象的引用时,我们就假定不再需要那个对象,那个对象所占有的存储单元可以被收回,可通过System.gc()方法回收,但一般要把不再引用的对象标志为null为佳。

6、java类是否可以多继承,怎么实现多继承?

答:java没有多继承,但可以通过接口的形式来达到多继承的目地。

7、面向对象的特点

答:面向对象有三大特点:封装、继承、多态。(如果要回答四个,可加上抽象性这一特点)

9、接口有什么优点

答:接口有以下优点:

接口只是一个框架而没有实现,因此在接口定义时不需要考虑接口中的方法如何实现。

利用接口可达到实现多继承的目地。

可以在不暴露对象的类的前提下,暴露对象的编程接口。

不用强迫类关系在无关类中截获相似处(采用适配器就可以了)。

声明想执行的一个或多个方法。

10、ArrayList与Vector的区别

答:主要从两个方面来说明:

安全、效率方面

如果要实现同步安全,则要用Vector,否则则用ArrayList,因为ArrayList不考虑同步安全的问题,所以效率要高些。

资源方面

当两者的容量已满时,它们都会自动增长其容量,但Vector是按其容量的一倍增长,而ArrayList则按其容量的50%增加,所以Vector更能节省资源。

11、MVC结构在Jtable中怎样实现的,这种结构有什么好处?

答、在Jtable中不存储它的单元数据,它的所有实例把它们的单元值交给实现了TableModel接口的对象来维护和管理,所以在MVC结构中,Jtable的表格主要体现了一个V的作用,其表格将数据变化体现出来,而数据模型则体现了M的作用,封装数据和业务逻辑。

注:详细解说见第二题

12、在控制台中输入一个字符串,然后按照逆序打印出来

答:importjava.io.*;

publicclasstest{

publicstaticvoidmain(Stringargs[]){

StringA=””;

StringB=””;

StringC=””;

Try{

BufferedReaderbr=newBufferedReader(newInputStreamReader(System.in));

If((B=br.readLine())!=null){

A=A+B;

}

for(intI=str.length()-1;I>=0;I–){

C=C+A.substring(I,I+1);

}

System.out.println(C);

}

catch(Exceptione){

System.out.println(e.getMessage());

}

}

}

13、java是否存在内存泄露

答:存在,当一个对象引用另一对象后,当另一对象为空时,会出现内存泄露。

14、String类的值是否可以改变

答:String类的值在初始后不能改变,如果要改变,可转换为StringBuffer类,这个类的值是可以动态改变的。(这里主要考String和StringBuffer的区别)

17、java有几种修饰符?默认的是什么?

答:(注:修饰符是影响类、变量及成员方法的生存空间和可访问性的关键字)

修饰符类成员方法成员变量局部变量

abstract√√--

static-√√-

public√√√-

protected-√√-

private-√√-

privateprotected-√√-

synchronized-√--

native-√--

volatile--√-

final√√√-

transient--√√

以下是访问控制修饰符:默认为friendly

修饰符同类同包子孙类不同包

public√√√√

protected√√√-

friendly√√--

private√---

18、toString方法的概述

答:因为每个类都继承了Object类,所以都实现了toString()方法。

通过toString()方法可以决定所创建对象的字符串表达形式。

19、Object类的概述

答:Object类是所有其他的类的超类,Object的一个变量可以引用任何其他类的对象。因为数组是作为类实现的,所以Object的一个变量也可以引用任何数组,它包括以下几种方法:

clone()equals()finalize()getClass()hashCode()notify()notifyAll()toString()wait()

20、java特点

答:java具有以下几个主要特点:

简单性

面向对象:JAVA是完全面向对象的,它支持静态和动态风格的代码继承及重用

分布式:包括数据分布和操作分布

健壮性:java系统仔细检测对内存的每次访问,确认它是否合法,而且在编译和运行程序时,都要对可能出现的问题进行检查,以消除错误的产生。

结构中立

安全性:java不支持指针,一切对内存的访问都必须通过对象的实例变量来实现,这样就防止程序员使用木马等欺骗手段访问对象的私有成员,同时也避免了指针操作中容易产生的错误。

与平台无关:java写的应用程序不用修改就可在不同的软硬平台上运行。平台无关性有两种:源代码级和目标代码级。Java主要靠JAVA虚拟机在目标代码级上实现平台无关性

解释执性:运行JAVA程序时,它首先被编译成字节代码,字节代码非常类似机器码,执行效率非常高。

高性能

多性程

动态性:它允许程序动态的装入运行时需要的类。

21、什么叫抽象类?抽象类跟接口有什么区别?为什么引进数据接口概念?

答:具有关键字abstract,在实现内容上没有完全定义的类就叫抽象类。

抽象类和接口的区别如下:

①在类来继承抽象类时,只需实现部分具体方法和全部抽象方法,而实现接口则要实现里面的全部方法。

②在接口中无成员变量,而抽象类中可有成员变量。

在Java中引进接口主要是为了解决多继承的问题。

22、doGet与doPut的区别?

答:doPut会把地址作为一个文件写到服务器,而doGet不会,而只显示在地址栏。

23、多线程实现有那几种方法,同步有哪几种方法?

答:实现同步主要有两种方法:1.synchronized2.waitnotify

实现多线程主要继承Thread类和实现Runnable接口。

24、JSP页面的跳转?

答:jsp页面实现跳转主要有jsp:forward和sendRedirect两种方法

jsp:forward:在本容器内跳转。跳转后,地址栏地址不变。效率高。跳转后立即结束本页的内容。

sendRedirect:在容器之间的跳转,跳转后地址栏地址为跳转后的地址,效率较低。

通常采用jsp:forward方式跳转。

25、类变量的初始化

答:在Java中类变量在局部中一定要初始化,因为局部变量会覆盖全局变量,否则会报错:变量未初始化。全局变量则可以不初始化,而到具体的内部方法或其他的类成员中初始化。

26、数组的定义

答:数组是作为一种对象实现的。数组元素可以包含作何类型值,但数组里面的每个元素的类型必须一致创建数组步聚如下:

声明

构造

初始化

27、Hastable与HashMap的区别?

答:Hashtable和Hashmap的主要区别如下:

Hashtable是同步的,而HashMap不是同步的。所以不要求同步的时候,用HashMap的效率较高

Hashtable版本较HashMap版本低。

28、说明List和Set的区别

答:两者主要区别如下:

List用来处理序列,而Set用来处理集。

List中的内容可以重复,而Set则不行。返回搜狐,查看更多

责任编辑:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值