JAVA 2013面试题-上

1.面向对象的特征有哪些?

  抽象、继承、封装、多态

2.String是基本数据类型吗?

  基本数据类型:byte,int,long,short,boolean,float,char,double。Stirng是final类型,不可继承不可修改,不是基本数据类型。

3.int和Integer区别?

  int是java原始数据类型,Integer是int的封装类,Integer初值null,int初值0。

4.String和StringBuffer区别?

  String定长字符串,StringBuffer变长字符串。

5.运行时异常与一般异常有何异同?

  编译时 运行期异常如果没有被捕获 不要求方法必须声明抛出

      一般非运行期异常,方法必须声明抛出。

6.Servlet的生命周期,Servlet和CGI的区别。

  Servlet被服务器实例化后,容器运行init(),请求到达时运行service(),service方法自动派遣运行与请求对应的doGet/doPost方法,销毁destroy();

  与CGI区别在于servlet处于服务器进程中,通过多线程方式运行service方法,一个实力可以服务多个请求,并且实例一般不会销毁,而CGI对每个请求都产生新进程,服务完成即销毁,效率低于servlet。

7.说出ArrayList,Vector,LinkedList的存储性能和特性。

  ArrayList,Vector:数组方式存储,数组元素数>实际存储数据,以便增加和插入元素,可以索引数据,插入元素要将数组元素移动等内存操作,所以索引快插入慢(即一个萝卜一个坑,中间插萝卜后面的都得挪,所以直接拔或者种后面,不要中间种)

  Vector是用synchronized()线程安全,性能比ArrayList差点

  LinkedList:双向链表实现存储,按序号索引数据需要进行向前或向后遍历,但是插入数据只需记录前后项即可,所以插入快。

8.Collection和Collections的区别。

  Collection是集合类的上级接口,继承他的接口主要是Set,List.

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

9.List和Map区别?

  List:单列数据,有序,允许重复

  Map:双列有键值对数据,无序,键不能重复,值可重复。

10.&和&&区别?

  &是位运算符,“按位与”运算,&&是逻辑运算符,表示“逻辑与”(and)。

11.HashMap和Hashtable区别?

  HashMap:实现Map接口,非线程安全,多线程访问需加同步锁,允许空键值

  Hashtable:继承Dictionary类,线程安全,多线程访问不需加同步锁,不允许空键值。

12.final,finally,finalize区别?

  final:声明属性,方法和类,表示属性不可变,方法不可覆盖,类不可继承

  finally:异常处理语句一部分,表示总是执行

  finalize:是Object类的方法,在垃圾收集器执行时会调用。

13.sleep()和wait()区别?

  sleep是线程类(Thread)的方法,作用:使此线程暂停执行指定时间,把执行机会给其他线程,但是监控状态依旧保持,到时间后自动恢复,不会释放对象锁

  wait是Object类的方法,作用:使本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对象发出notify()后本线程才进入对象锁定池准备获得对象锁进入运行状态。

14.Overload和Override区别,Overload方法时候可以改变返回值?

  重载Overload:同一个类,同名,不同参数或不同参数类型  

  重写Override:父子两个类,同名,同参数

  重载可以改变返回值类型。

15.error和exception区别?

  error:程序不能处理的严重问题,例如内存溢出

  exception:如果程序正常运行,不会发生的情况,并且可以抛出来捕获。

16.同步和异步有何异同?在什么情况下分别使用他们?举例说明

  同步:如果数据将在线程间共享,例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,则这些数据为共享数据,必须同步存取。

  异步:当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法返回时,应该使用异步编程。

17.abstract class和interface区别?

  抽象类:是模板,可以有构造方法,可以有普通成员变量和方法,有一部分抽象方法,public/protected修饰,包含静态方法,包含静态成员变量(任意访问类型)

  接口:是规范,不能有构造方法,不能有普通成员变量,所有方法必须是抽象的,public abstract修饰,不能有静态方法,包含静态成员变量(public static修饰)

一个类可以实现多个接口,但只能继承一个抽象类。

18.heap和stack区别?

  栈是线型集合,添加和删除元素的操作应在同一段完成,后进先出方式处理(死胡同停车)

  堆是栈的一个组成元素。

19.forword和redirect区别?

  forword:服务器请求资源,服务器直接访问目标地址URL,把URL相应内容读取后发给浏览器,浏览器不知道服务器内容来源,故地址栏URL不变;

  redirect:服务器根据逻辑,发送一个状态码,浏览器重新请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,所以session,request参数都可以获取。

20.Static Nested Class和Inner Class区别?

  Static Nested Class:静态内部类,可以不依赖于外部类实例而被实例化;

  Inner Class:内部类,需要外部类实例化后才能被实例化。

21.JSP中动态Include与静态Include区别?

  动态:<jsp:include page="included.jsp" flush="true"/>总会检查所含文件中变化,适合用于包含动态页面,并且可以带参数;先编译后包含

  静态:<%@include file="included.htm"%>不会解析,包含并显示即可。先包含后编译。

22.什么时候用assert?

  assertion就是在程序中的一条语句,它对一个Boolean表达式进行检查,一个正确程序必须保证这个Boolean表达式的值为true;如果为false,说明程序处于不正确的状态下,系统将警告或退出,一般来说assertion用于保证程序最基本、关键的正确性。

23.GC是什么?为什么要有GC?

  GC是垃圾回收机制,GC能自动监测对象时候超过作用域从而达到自动回收内存的目的。

24.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;(可以正确编译)

25.Math.round(11.5)等於多少? Math.round(-11.5)等於多少?

  Math.round(11.5)==12 

  Math.round(-11.5)==-11 

  round方法返回与参数最接近的长整数,参数加1/2后求其floor.

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

  两个(一个是“xyx”,一个是指向“xyx”的引用对象s)。

27.java有没有goto?

  java中的保留字,现在没有再java中使用。

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

  用start(),线程准备就绪,并没运行,通过调用run()来完成运行操作;这里run()称为线程体,它包含了要执行的这个线程的内容,run()运行结束则线程终止,cpu运行其他线程;

  直接用run(),只是调用一个方法而已,程序中依然只有主线程这个线程,其程序执行路径还是只有一条,这样就木有达到写线程的目的。

29.应用服务器有哪些?

  BEA WebLogic Server

  IBM WebSphere Application Server

  Oracle10i Application Server

  jBoss

  Tomcat

30.常见的运行期异常?

  IndexOutOfBoundsException

  NullPointerException

  DOMException

  NoSuchElementException

  ArrayStoreException

31.接口是否可以继承接口?抽象类是否可以实现接口?抽象类是否可以继承实体类?

  接口可以继承几口;

  抽象类可以实现接口;

  抽象类可以继承实体类,前提是实体类必须有明确的构造函数。

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

  List和Set是继承,Map不是。

33.说出数据连接池的工作机制?

  J2EE服务器启动时会建立一定数量的池连接,并一直维持不少于此数目的池连接。客户端程序需要连接时,池驱动程序会返回一个未使用的池连接并且将其标记为忙。如果当时没有空闲连接,池驱动程序就新建一定数量的连接,新建连接的数量由配置参数决定。当使用的池连接调用完成后,池驱动程序将此连接标记为空闲,其他调用就可以使用这个连接。

34.abstract的method是否可以同时是static、native、synchronized?

  都不能。

35.数据有没有length()方法?String有没有length()方法?

  数组没有length()方法,但是有length属性,String有此方法。

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

  Set里面的元素是不能重复的,用iterator()来区分;

  equals()是判断两个Set是否相等,equals()和==方法决定引用值是否指向同一个对象,equals()在类中被覆盖,为的是当两个分离的对象的内容和类型相配的话,返回真。

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

  不能被继承,所以不能被重写,但是可以重载。

38.是否可以继承String类?

  不可以,String类是final类。

39.switch是否能作用在byte,long,String上?

  switch(expr1)中,expr1是整数表达式,所以传给switch和case语句的参数应该是int、short、char、byte。

  long、stirng都不能作用与switch。

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

  finally中的一定会执行,在return前执行。

41.编程题:用最有效率的方法算出2乘以8等于几?

  2<<3.

42.两个对象值相同(x.equals(y)==true),但却可有不同的hash code,这句话对不对?

  不对,有相同的hash code.

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

  值传递。java中只有值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用,对象的内容可以在被调用的方法中改变,但是对象的引用是永远不会改变的。

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

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

45.写一个单例Singleton出来

  public class Singleton{

    private Singleton(){}

    private static Singleton instance = new Singleton();

    public static Singleton getInstance(){

      return instance;

    }

  }

46.java中的异常处理机制的简单原理和应用。

  当java程序违反了java的语义规则时,java虚拟机就会将发生的错误表示为一个异常。违反语义规则包括2种情况。一种是java类库内置的语义检查。例如IndexOutOfBoundsException;访问null对象时会引发NullPointerException。另一种情况就是java允许程序员扩展这种语义检查,程序员可以创建自己的异常,并且自由选择在何时用throw关键字引发异常。所有异常都是java.lang.Thowable的子类。

47.垃圾回收的优点和原理,并考虑2种回收机制。

  垃圾回收机制使java程序员在编写程序的时候不用再考虑内存管理。由于有个垃圾回收机制,java总的对象不再有“作用域”的概念,只有对象的引用才有“作用域”。垃圾回收可以有效的防止内存泄露,有效的使用可用的内存。通常是作为一个单独的低级别的线程运行,不可预知的情况下对内存堆中已经死亡的或者长时间没有使用的对象进行清除和回收,程序员不能实时的调用垃圾回收器对某个对象或所有对象进行垃圾回收。回收机制有分复制垃圾回收和标记垃圾回收,增量垃圾回收。

48.说出你所知道的线程同步的方法。

  wait():使一个线程处于等待状态,并且释放所持有的对象锁lock。

  sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉InterrupteException异常。

  notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某个等待状态的线程,而是由JVM确定唤醒哪个线程,而且不是按优先级。

  Allnotify():唤醒所有处于等待状态的线程,注意并不是给所有唤醒线程一个对象锁,而是让他们竞争。

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

  最常用的集合类:List和Map。

  List的具体实现包括ArrayList和Vector。它们是可变大小的列表,比较适合构建、存储和操作任何类型对象的元素列表。List适用于按数值索引访问元素的情况。

  Map提供了一个更通用的元素存储方法。Map集合类用于存储元素对。

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

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

JAVA 2013面试题-上,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。