Java面试知识点

1. Error和Exception的区别?

   Error表示系统级的错误和程序不必处理的错误;

   Exception表示需要捕获和程序进行处理的异常;

2.堆和栈有什么区别?

   栈是一种线性结构,后进先出,增加和删除在同一端;堆是栈的一个组成元素;

  堆是用来new创建出来的对象和数组的空间,栈是存放基本数据类型的变量和引用的内存空间;

   栈中的变量,超过变量的作用域范围,就会被回收内存空间;堆中的内存则是由Java虚拟机的垃圾回收器来回收,只有当内存不够的时候,垃圾收集器会回收堆的内存空间;

3.throw和throws的区别?

   throws是声明一个方法可能抛出的异常,throw是抛出具体的异常。throws用于方法声明的后面,throw则用于方法方法的内部来抛出异常;

   throws表示当前方法不需要捕获的异常,由系统重新抛出给方法的调用者;throw是捕获异常,重新封装后抛出上一级;

4.super和this的区别?

   Java虚拟机会为当前类的对象分配一个指向自身的指针,this就是这个对象的默认引用;需要用到this的情况:

   调用本类的一个构造方法;

   局部变量和成员变量同名的时候,要用this.num的方式来调用成员变量;

   访问当前方法的引用;

   super是指向父类的应用。下面是要用到super的情况:

   调用父类的构造方法,通过super来调用;

   在子类访问父类被屏蔽的方法和属性;

5.类的初始化机制?

  创建类的实例;

  调用类的静态方法;

  访问某个类的或接口的静态变量;

  调用Java API的某些反射方法;

  初始化一个类的子类;

  启动类。

6.构造方法的特点?

  没有返回值;

  方法名和类名相同;

  不能被static,final,synchronized,native等修饰;

  不能显式调用构造方法;

 7.垃圾回收的优点和缺点?

    把程序员从复杂的内存的跟踪,检测,释放中解放出来,

    防止内存泄露,提高程序的健壮性;

    程序中的对象只有不被引用变量引用的时候,才可以回收;

    程序无法迫使垃圾收集器回收内存;

    当垃圾收集器要回收这个对象的内存的时候,会调用finalize方法,但是调用这个方法可能会导致这个对象复活。

8.异常处理机制?

    把异常分类,用Java类来表示异常;

    把异常的代码和正常的流程分开,提高程序的可读性,简化结构;

    灵活处理异常,当前可以处理的异常就处理,不能处理的异常抛出给调用者处理;

    滥用异常会降低程序的性能;

    过多使用异常会影响程序的可读性;

    容易覆盖程序的错误,影响调试;

    用异常来表示正确的情况,违背了异常的处理机制。

9.异常的处理原则?

    异常只能用于非正常的情况;

    为异常提供说明文档;

    尽可能避免运行性异常;

    保持异常的原子性;

    避免过于庞大的try代码块;

    catch最好跟具体的异常;

    不雅忽略catch捕获的异常。

10.Java的异常处理机制和简答应用?

     当违反Java的语义规则的时候,Java虚拟机就会错误表示一个异常。Java的违背语义规则有两种情况:

    一种是Java内置的类库的语义检查,如数组越界,null异常;

   另一种是程序员扩充语义检查,自定义异常,在适当的地方和适当的时候抛出异常。

11.接口的特征

    接口的变量时静态常量,默认是用public static final来修饰;

    接口中的方法是公有的抽象方法,用public abstract来修饰;

    接口中不能有构造函数;

    一个只能继承一个父类,但是可以实现多个接口;

   不允许创建一个接口的实例。

12.抽象类和接口的区别?

    都代表系统的抽象层;

   不能被实例化;

   都可以有抽象的方法;

   一个类可以有实现多个接口,但是只能继承一个类;

   抽象类可以与构造函数,但是接口不能有构造函数;

   类代表的是is a的关系,接口代表的是has a的关系;

   接口的变量都是公有的静态常量,但是抽象类可有各种类型的变量;

  接口中的方法必须是抽象的,但是抽象类的方法可以有实现;

13.static的用法?

   static代表内存中只有一份拷贝,所有的额对象实例共用这一份内存;

   static的变量和方法可以用类名去访问;

  不能用abstract来修饰静态变量和方法;

  静态方法不能使用this,super的关键字;

  静态方法不可以使用成员函数和成员变量;

  在类加载的时候,静态变量会被加载一次,加载的顺序和静态代码块的顺序有关。

14 abstract的使用?

    abstract修饰类,表示这个是抽象类,可有抽象方法,但是抽象类不能被实例化;

    abstract修饰方法,表示这个方法是抽象方法,抽象方法只有声明,没有方法体;

    抽象类和抽象方法不能被final修饰;

15.多态有什么特征?

   对于引用类型的变量,编译器按照它声明的类型处理;

   对于引用类型的变量,运行时Java虚拟机根据它实际引用的类型来处理;

   实例方法和运行时候的实际类型的方法绑定,属于动态绑定,因为运行的时候由Java虚拟机决定的;

   静态方法和引用变量所声明的类型的方法绑定,属于静态绑定,因为在编译的时候已经决定了;

  成员变量和所声明的类型的变量绑定,属于静态绑定,因为在编译的时候已经决定了。

16.静态内部类和内部类的区别?

   静态内部类不依赖于外部类被实例化,而普通的内部类依赖于外部类的实例化。

17.什么是GC?

   GC是垃圾回收器,内存是编程人员很容易出现问题的地方,忘记或者错误的内存管理会导致程序不稳定甚至奔溃,

   Java的GC功能可以自动检测对象是否超过作用域而达到自动回收内存的目的,

18.length()和length?

   数组有length;String有length()的方法;

19.Java中的内置异常原理?

   当违反Java的语义时候,Java的虚拟机就会抛出异常。一种是Java的内置语义检查,一种是程序员扩充的语义检查,如创建自己的异常类。

20.Java虚拟机加载Class文件的机制和原理?

    JVm的类加载是由classLoader和它的子类来完成,在运行的时候查找和加载类。

21.简述Synchronized和lock的异同?

    lock可以实现synchronized的功能;

    lock可以比synchronized有更好的线程语义和线程性能;

    synchronized自动释放内置的锁,Lock要手工释放锁;

22.Java如何进行异常处理?

   Java通过面向对象的方法进行异常处理,把各种不同的异常分类,提供了良好的接口。Java中每一个异常都是对象,它是Throwable类和它的子类。

   当方法遇到异常的时候,JVM就会生成一个异常类,可以通过调用这个异常类的方法来对异常进行处理。

23.Java的可序列化?

     序列化是一种处理对象流的机制,为了解决在对象流进行读写所产生的问题。

24.EJB是基于哪些技术实现的?并说出SessionBean和EntityBean的区别,StatefulBean和StatelessBean的区别。

    EJB包括SessionBean,EntityBean和Message Driven Bean,基于JNDI、RMI、JAT等技术实现。

   实体Bean代表系统要用到的数据;

   SessionBean是J2EE应用程序用来完成服务器端的一些业务操作,例如访问数据库,调用其它EJB组件;

  25.JSP中动态INCLUDE与静态INCLUDE的区别?

     静态INCLUDE不会检查文件的变化,把文件插入到页面执行,<@ include="index.html">
     动态INCLUDE包含的是一个动态文件,相当于调用,就是那个文件编译执行,返回结果,可以传递参数,会检查文件的变化。

26.JavaBean和EJB的区别?

    JavaBean是可重用的组件,对于JavaBean没有严格的规范,理论上,任何一个Java类都可以是JavaBean。JavaBean一般是由如Tomcat这样的容器创建,

    要有一个无参数的构造函数,要实现Serialable接口。EJB是分布式组件,它是基于Java的远程调用技术实现的。EJB容器是EJB的远程代理。

27.EJB包括(SessionBean,EntityBean)说出他们的生命周期,及如何管理事务的?
    SessionBean的生命周期是由容器决定的;

    EntityBean存活时间较长,并且是连续的,只要数据库中的数据存在,EntityBean就存在。

28.数据连接池的工作机制是什么?

   J2EE的服务器启动的时候,会启动一定数目的连接,并且维护不少于此数目的连接。当有连接到来的时候,连接池驱动程序会返回一个未使用的连接并标记为

   忙。如果当前没有空连接,连接池会新建一个连接,标记为忙。当池连接调用完之后,又会重新标记为空闲。

29.JSP的内置对象及方法?

   request表示HttpServletRequest,包含了所有浏览器的请求信息,提供了获取Cookie,Session和Header的方法;

   response表示HttpServletResponse,包含了处理请求的相应方法;

   out是JspWriter的一个实例,提供了几个向浏览器返回结果的方法;

   session是用于保存用户会话的信息;

   aplication表示一个ServletContext对象,有利于查找servlet引擎和servlet环境的信息;

   config表示ServletConfig,用于初始化存取Servlet实例化的参数;

   page表示一个Servlet的实例。

   pageContext表示一个javax.servlet.jsp.PageContext对象。它是用于方便存取各种范围的名字空间、servlet相关的对象的API,并且包装了通用的servlet相关功能的方法。

30.jsp的常用指令?

   <%@ page language="java" contentType="text/html;charset="UTF-8" pageContext="UTF-8">

   <%@  include="path">

   <%@ taglib prefix="tagPrefix" uri="tagURI">

31.页面间对象传递的方法
   request,session,application,cookie

32.JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么?
   jsp的本质是Servlet,翻译后就是类Servlet文件;

   Servlet只有Java代码,逻辑清晰,用于逻辑控制;jsp由HTML和Java代码显示,用于试图显示。

33.四种会话跟踪技术?

   page代表页面相关的对象和属性;

   request代表一个请求相关的对象和属性;

   Session代表会话相关的对象和属性,可以跨多个请求;

   Application代表整个应用程序相关的对象和属性。

34.排序都有哪几种方法?请列举。用JAVA实现一个快速排序.

   / /使用快速排序方法对a[ 0 :n- 1 ]排序

   从a[0:n-1]选取一个数值为middle,作为支点;

   把剩下的元素分割为两段left和right,使得left那段的元素小于middle,right那段的元素大于middle;

   递归地使用快排对left段的元素排序;

   递归地使用快排对right段的元素排序;

35.请对以下在J2EE中常用的名词进行解释(或简单描述)
   web容器:给处于其中的应用程序组件(JSP,SERVLET)提供一个环境,使JSP,SERVLET直接更容器中的环境变量接口交互,不必关注其它系统问题。

   EJB容器:Enterprise java bean 容器。更具有行业领域特色。

  JNDI:(Java Naming & Directory Interface)JAVA命名目录服务:提供一个目录系统,让其他的应用程序在上面留下一个自己的索引,满足快速查找和定位

             分布式应用程序的功能;

  JMS:(Java Message Service)JAVA消息服务:用于应用程序之间的通讯;

  JTA:(Java Transaction API)JAVA事务服务:提供分布式事务管理;

  JAF:(Java Action FrameWork)JAVA安全认证框架;

  RMI/IIOP:(Remote Method Invocation /internet对象请求中介协议)他们主要用于通过远程调用服务。

36.J2EE是什么?

  J2EE是sun提出来的多层,分布式,基于组件的企业级应用模型。它包括客户层,web层,Business层,企业信息系统层。

37.BS和CS的区别和联系?

  C/S是Client/Server的缩写,B/S是Brower/Server的缩写。

  硬件环境不同: 局域网和广域网;

  对安全要求不同:

  程序架构不同:

  软件重用不同:

  系统维护不同:

  用户接口不同

 

你可能感兴趣的:(Java面试)