代码改变世界

java面试题

2011-12-02 20:07  javaspring  阅读(530)  评论(0编辑  收藏  举报

1.Java 面向对象的特征

 继承,封装,抽象,多态

2.String StringBuffer区别

String:是不可变对象,创建后如果被修改,相当于又创建一个对象,大部情况下效率比较低

StringBuffer:是一个可变对象,当对他进行修改的时候不会像String那样重新建立对象

3.Hashtable HashMap区别

Hashtable是线程安全的,也就是说是同步的,而HashMap是线程序不安全的,不是同步的 。

Hashtable key value不允许为空,而HashMap可以。

HashTable使用Enumeration,HashMap使用Iterator

4.String 是最基本的数据类型吗?

不是基本的数据类型,String类是final类型

基本的数据类型有:byte char short int long float double

5.说出ArrayList,Vector,LinkedList存储性能 

ArrayList,Vector 都是采用数组的存储方式,索引速度快而插入数据慢。

LinkedList 使用双链表实现存储,插入速度快,而索引速度慢。

6.int 和 Integer有什么区别

int是最原始的数据类型,Integer是java为int提供的封装类。

7.collection 和collections 区别

collection 是集合类的上级接口,继承他的子接口主要有List和set

collections 是集合类的一个帮助类,他提供一系列的静态方法实现对各种集合的搜索,排序,线程安全等操作

8.&和&&区别

&是位运算符,&&是逻辑运算符

9.final,finally,finalize的区别

final是用来声明属性,方法,类,表示属性不可变,方法不能被重写,类不能被继承

finally是异常处理语句结构的一部分,表示总是执行。

finalize 是Object类的一个方法,我们可以重写该方法,用来资源回收。

10.sleep()和wait()区别

调用sleep()不会释放对象锁

调用wait()会放弃对象锁,直到些对象发出notify()方法(或notifyAll)后才可进入运行状态。

11.overload和override的区别。overload是否可以改变返回值类型?

重载overload是一个类中多态性的表现,当一个类中定义多个同名的方法,它们有不同参数个数或不同参数类型,则称方法为重载

重写override是子类与父类之间多态性的一种表现,如果子类中定义某方法,与其父类具有相同参数和名称,我们说该方法被重写

overload是可以改变返回值类型的

12.同步和异步区别,在什么情况下使用他们。

同步是指数据将在线程间共享防止多线程的并发操作。例如正在写数据的时候可能被另一个线程读到。或者正在读数据的时候可能被另一个线程写过,那么这么数据就是共享数据,必须采用同步存取。

异步是指多个线程同时运行,并且互不干扰。例如:当一个应用程序在对象上调用了一个需要花费长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程。

13.抽象类和接口区别

抽象类可以拥有自己的数据成员,可以拥有抽象方法的声明和非抽象方法的定义。抽象类要被继承,抽象方法要被重写

接口就是一种特殊的抽象类,包含常量与方法的定义,定义常量必须是public static final,定义的方法必须是public abstract

14.Static Nested Class 和 Inner Class的不同。 

Static Nested Class是被声明为静态(static)的内部类,它可以不依赖于外部类实例被实例化。而通常的内部类需要在外部类实例化后才能实例化。

15.short s = 1; s = s+ 1;有什么错? short s = 1; s += 1;有什么错?

s = s + 1;会出错;必须经过类型的强制转换。

s += 1 可以正确编译。

16.Math.round(12.5)等于多少? Math.round(-12.5)等于多少?

Math.round(12.5) 等于 13

Math.round(-12.5) 等于 -11

Math.round()返回是与参数最接近的长整数

17.String s = new String("xyz");创建了几个String Object?  

两个

18.Java有没有goto?

goto是java中的保留字,现在没有在java中使用

19.启动一个线程是用run()还是start()?

用start()启动,启动后执行run()方法。

20.接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)?

接口可以继承接口。抽象类可以实现(implements)接口,抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数。

21.List, Set, Map是否继承自Collection接口?  

List,Set是,Map不是

22.数组有没有length()这个方法? String有没有length()这个方法?

数组没有length()方法,但有lenght属性.String有length()这个方法

23.Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?

用== equals都不能判断Set里的元素重复与否,可以采用Iterator进行遍历来区分。

==判断引用值是否指向同一个对象 equals判断双方对象内容是否相等;

Set<Integer> set = new HashSet<Integer>();
Set<Integer> newset = set;
System.out.println(set == newset);//输出为ture
Set<Integer> set = new HashSet<Integer>();
Set<Integer> newset = new HashSet<Integer>();
System.out.println(set.equals(newset));//输出为ture

24.构造器Constructor是否可被override?

构造器不能被继承,因此不能被重写。但可以重载

25.是否可以继承String类?

String 是final类,因为不能被继承

26.swtich是否能作用在byte上,是否能作用在long上,是否能作用在String上?

switch(expr)中,expr是一个整数表达式。因此传递给 switch 和 case 语句的参数应该是 int、 short、 char 或者 byte。long,string 都不能作用于swtich。

27.try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?

会被执行,在return 之前执行

28.Java的接口和C++的虚类的相同和不同处。

相同:都不能被实例化

      可能某个类或对象要使用分别在几个类或对象里面的方法或属性,java没有多继承,只能通过接口。

不同处:java接口属性必须是public static 方法必须是抽象方法,接口没有任何实现代码。

29.char型变量中能不能存贮一个中文汉字?为什么? 

可以存放,因为java中以unicode编码,一个char占16字节,所以放一个中文没问题

30.描述一下JVM加载class文件的原理机制?

JVM中类的装载是由ClassLoader和它的子类来实现的 ClassLoader 是一个重要的Java运行时系统组件。它负责在运行时查找和装入类文件的类。

31、多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么? 

多线程实现方法一种是继承Thread,一种是实现Runnable接口

同步实现方法有wait,notify,synchronized

32.float型float f=3.4是否正确?

不正确。精度不准确,应该用强制类型转换,float f=(float)3.4,或者 float f = 3.4f;

33.当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?

是值的传递,在java编程中只有值的传递。当一个对象实例作为一个参数传递到方法时,参数的值就是该对象的引用。

34.用最有效率的方法算出2乘以8等于几?

2<<3

35.当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?

不能,一个对象的一个synchronized方法只能由一个线程访问。

36.你所知道的集合类都有哪些?主要方法?

Collection
├List
│├LinkedList
│├ArrayList
│└Vector
│ └Stack
└Set
Map
├Hashtable
├HashMap

List接口主要方法:add() clear()  get() isEmpty() iterator() remove()  size()

Map接口主要方法entrySet() get() clear() isEmpty() put() rmove() size() 

37.我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-1等,如何输出一个某种编码的字符串?

	public  String translate(String str){
		String resultString = null;
		try {
			resultString = new String(str.getBytes("iso8859-1"), "utf-8");
		} catch (UnsupportedEncodingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return resultString;
	}

38 一个“.java”源文件中是否可以包括多个类(不是内部类)?有什么限制?

可以。必须只有一个类名与文件名相同。

39.MVC的各个部分都有那些技术来实现?如何实现?

MVC是Model-View-Controller的简写。以 android应用程序开发为例

"Model"代表的是应用的业务逻辑(javabean ).

 "View" 是应用的表示面(main.xml .....在手机显示界面的xml资源文件).

"Controller" 是提供应用的处理过程控制(一般是activity).

40.java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类?

字节流,字符流。

字节流继承于InputStream \ OutputStream,字符流继承于InputStreamReader \ OutputStreamWriter。

在java.io包中还有许多其他的流,主要是为了提高性能和使用方便。

41.java中会存在内存泄漏吗,请简单描述?

会。

 //当a足够大的正数,b足够大的负数。就会导致溢位
	 int a ,b;
	 return a - b;

42.静态变量和实例变量的区别?

静态变量可以直接使用类名来仿问,实例变量需要通过对象来仿问

静态变量可以被所有的实例共享

43.在JAVA中,如何跳出当前的多重嵌套循环?

用break;return 方法

44、说出一些java常用的类,包,接口,请各举5个

常用的类:String  Integer Thread Date File 

常用的包:java.lang  java.awt  java.io  java.util  java.sql

常用的接口:Comparable List Map  Document  ResultSet