Java面试刷题错误笔记:(一)

来源:互联网 发布:java finalize 唤醒 编辑:程序博客网 时间:2024/04/29 09:36

1.ServletConfig接口默认是哪里实现的?(默认是GenericServlet实现的,平时开发中使用HttpServlet用多了,主要确实没有关注继承的问题)

备注:GenericServlet类的实现接口中包括了ServletConfig接口,但是它自身的init(ServletConfig config)方法又需要外界给它传递一个实现ServletConfig的对象,就是说GenericServlet和ServletConfig的依赖关系既是继承关系,也是一种关联关系。(这个好像在网易模拟题中也出现过

public abstract class GenericServletextends java.lang.Objectimplements Servlet, ServletConfig, java.io.Serializable从Servlet 的API文档上面可以看到上面一段,抽象类GenericServlet实现了Servlet, ServletConfig等接口。public abstract class HttpServlet extends GenericServletimplements java.io.Serializable 抽象类HttpServlet 继承自GenericServlet

2.下列哪个选项是Java调试器?如果编译器返回程序代码的错误,可以用它对程序进行调试。(平时好像没有怎么使用bin包下面的工具所以对工具还是不太熟悉)

javac.exe是编译.java文件
java.exe是执行编译好的.class文件
javadoc.exe是生成Java说明文档
jdb.exe是Java调试器
javaprof.exe是剖析工具

3.对于JVM内存配置参数:-Xmx10240m -Xms10240m -Xmn5120m -XXSurvivorRatio=3
,其最小内存值和Survivor区总大小分别是()

-Xmx:最大堆大小(知道。。)
-Xms:初始堆大小(知道。。)
-Xmn:年轻代大小(这个真不清楚)
-XXSurvivorRatio:年轻代中Eden区与Survivor区的大小比值(这个也没有用过。。)
年轻代5120m, Eden:Survivor=3,Survivor区大小=1024mSurvivor区有两个XXSurvivorRatio=3,即Eden:FromSurvivor:ToSurvivor=3:1:1;所以Survivor一共是2048,即将年轻代分为5份,每个Survivor区占一份),总大小为2048m。
-Xms初始堆大小即最小内存值为10240m
总结:如果在平时的工作中没有深入的研究还真记不住这么细致的问题


4.PreparedStatement 和 CallableStatement、Statement的继承关系。(编程的时候不是很清楚它们的继承体系。。)

api:
public interface CallableStatement extends PreparedStatement
public interface PreparedStatement extends Statement
因为PreparedStatement有预编译的过程,所以第一次扫描的集合
PreparedStatement会大于等于Statement
PreparedStatement有预编译的过程,已经绑定sql,之后无论执行多少遍,都不会再去进行编译,

而 statement 不同,如果执行多变,则相应的就要编译多少遍sql,所以从这点看,preStatement 的效率会比 Statement要高一些


5.java中HashTable, Vector, TreeSet, LinkedList哪些线程是安全的?

LinkedList 和 ArrayList 都是不同步的,线程不安全;Vector 和 Stack 都是同步的,线程安全;Set是线程不安全的;Hashtable的方法是同步的,线程安全;HashMap的方法不是同步的,线程不安全;

6.关于死锁的问题

根据操作系统中的定义:死锁是指在一组进程中的各个进程均占有不会释放的资源,但因互相申请被其他进程所站用不会释放的资源而处于的一种永久等待状态。
死锁的四个必要条件:

1互斥条件(Mutual exclusion):资源不能被共享,只能由一个进程使用。
2请求与保持条件(Hold and wait):已经得到资源的进程可以再次申请新的资源。
3非剥夺条件(No pre-emption):已经分配的资源不能从相应的进程中被强制地剥夺。
4循环等待条件(Circular wait):系统中若干进程组成环路,该环路中每个进程都在等待相邻进程正占用的资源。

在对付死锁的策略中,解除死锁通常都是和检测死锁配套使用
产生死锁的原因可归结为竞争资源和进程推进顺序不当
在死锁的解决方法中,由于避免死锁采用静态分配资源策略,所以对资源的利用率不高

7.关键字super的作用是?

用来访问父类被隐藏的成员变量
用来调用父类中被重载的方法
用来调用父类的构造函数

8.AOP的概念是Aspected Oriented Programming 面向方面编程。

好处:AOP将程序分解成各个方面或者说关注点。这使得可以模块化,相当横向上分切了。它可以解决OOP和过程化方法不能够很好解决的横切(crosscut)问题,如:事务、安全、日志等横切关注

实现AOP有几种方式:

1. Spring 1.2版本中通过ProxyFactoryBean来实现aop,即通过动态代理来实现的,Aspect必须继承MethodBeforeAdvice,MethodAfterAdvice等

2. Spring 2.0 AOP需要改的是FBI 这个类,而且它也不需要再实现某些接口

3. 使用标注(@AspectJ)实现AOP

AOP将散落在系统中的“方面”代码集中实现
AOP有助于提高系统可维护性
AOP是一种设计模式,Spring提供了一种实现

9.J2EE中常用的名词解释(这个是java开发的基础,有的没有用过真的不知道是什么)

1.web容器:给处于其中的应用程序组件(JSP,SERVLET)提供一个环境,使JSP,SERVLET直接和容器中的环境变量接接口互,不必关注其它系统问题。主要有WEB服务器来实现。例如:TOMCAT,WEBLOGIC,WEBSPHERE等。该容器提供的接口严格遵守J2EE规范中的WEB APPLICATION 标准。我们把遵守以上标准的WEB服务器就叫做J2EE中的WEB容器。
2.Web container:实现J2EE体系结构中Web组件协议的容器。这个协议规定了一个Web组件运行时的环境,包括安全,一致性,生命周期管理,事务,配置和其它的服务。一个提供和JSP和J2EE平台APIs界面相同服务的容器。一个Web container 由Web服务器或者J2EE服务器提供。
3.EJB容器:Enterprise java bean 容器。更具有行业领域特色。他提供给运行在其中的组件EJB各种管理功能。只要满足J2EE规范的EJB放入该容器,马上就会被容器进行高效率的管理。并且可以通过现成的接口来获得系统级别的服务。例如邮件服务、事务管理。一个实现了J2EE体系结构中EJB组件规范的容器。这个规范指定了一个Enterprise bean的运行时环境,包括安全,一致性,生命周期,事务, 配置,和其他的服务。
4.JNDI:(Java Naming & Directory Interface)JAVA命名目录服务。主要提供的功能是:提供一个目录系统,让其它各地的应用程序在其上面留下自己的索引,从而满足快速查找和定位分布式应用程序的功能。
5.JMS:(Java Message Service)JAVA消息服务。主要实现各个应用程序之间的通讯。包括点对点和广播。
6.JTA:(Java Transaction API)JAVA事务服务。提供各种分布式事务服务。应用程序只需调用其提供的接口即可。
7.JAF:(Java Action FrameWork)JAVA安全认证框架。提供一些安全控制方面的框架。让开发者通过各种部署和自定义实现自己的个性安全控制策略。
8.RMI/IIOP:(Remote Method Invocation /internet对象请求中介协议)他们主要用于通过远程调用服务。例如,远程有一台计算机上运行一个程序,它提供股票分析服务,我们可以在本地计算机上实现对其直接调用。当然这是要通过一定的规范才能在异构的系统之间进行通信。RMI是JAVA特有的。RMI-IIOP出现以前,只有RMI和CORBA两种选择来进行分布式程序设计。RMI-IIOP综合了RMI和CORBA的优点,克服了他们的缺点,使得程序员能更方便的编写分布式程序设计,实现分布式计算。首先,RMI-IIOP综合了RMI的简单性和CORBA的多语言性(兼容性),其次RMI-IIOP克服了RMI只能用于Java的缺点和CORBA的复杂性(可以不用掌握IDL)。

10.有关JSP内置对象的描述(没有记得那么全)
JSP内置对象和属性列举如下:
1.request对象
     客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应。它是HttpServletRequest类的实例。
2.response对象
     response对象包含了响应客户请求的有关信息,但在JSP中很少直接用到它。它是HttpServletResponse类的实例。
3.session对象
     session对象指的是客户端与服务器的一次会话,从客户连到服务器的一个WebApplication开始,直到客户端与服务器断开连接为止。它是HttpSession类的实例.
4.out对象
     out对象是JspWriter类的实例,是向客户端输出内容常用的对象
5.page对象
     page对象就是指向当前JSP页面本身,有点象类中的this指针,它是java.lang.Object类的实例
6.application对象
     application对象实现了用户间数据的共享,可存放全局变量。它开始于服务器的启动,直到服务器的关闭,在此期间,此对象将一直存在;这样在用户的前后连接或不同用户之间的连接中,可以对此对象的同一属性进行操作;在任何地方对此对象属性的操作,都将影响到其他用户对此的访问。服务器的启动和关闭决定了application对象的生命。它是ServletContext类的实例。
7.exception对象
   exception对象是一个例外对象,当一个页面在运行过程中发生了例外,就产生这个对象。如果一个JSP页面要应用此对象,就必须把isErrorPage设为true,否则无法编译。他实际上是java.lang.Throwable的对象
8.pageContext对象
pageContext对象提供了对JSP页面内所有的对象及名字空间的访问,也就是说他可以访问到本页所在的SESSION,也可以取本页面所在的application的某一属性值,他相当于页面中所有功能的集大成者,它的本 类名也叫pageContext。
9.config对象
config对象是在一个Servlet初始化时,JSP引擎向它传递信息用的,此信息包括Servlet初始化时所要用到的参数(通过属性名和属性值构成)以及服务器的有关信息(通过传递一个ServletContext对象)

11.抽象类和接口
相同点:都不能被实例化,位于继承树的顶端,都包含抽象方法
不同点:1、设计目的:接口体现的一种规范,类似与整个系统的总纲,制订了系统各模块应该遵循的标准,因此接口不应该经常改变,一旦改变对整个系统是辐射性的。
               抽象类作为多个子类的共同父类,体现的是一种模板式设计,可以当作系统实现过程中的中间产品,已经实现了系统部分功能。
            2、使用不同:(1)接口只能包含抽象方法,抽象类可以包含普通方法。
                                   (2)接口里不能定义静态方法,抽象类可以。
                                   (3)接口只能定义静态常量属性不能定义普通属性,抽象类可以。
                                   (4)接口不包含构造器,抽象类可以(不是用于创建对象而是让子类完成初始化)。
                                   (5)接口里不能包含初始化块,抽象类完全可以。
                                   (6)接口多继承,抽象类但继承(只能有一个直接父类)。
总结:接口所有方法全是抽象方法只能 public abstract修饰 (默认public abstract修饰 ),属性默认public static final修饰。
             抽象类除了包含抽象方法外与普通类无区别。


0 0