Java常考面试题整理(五)

81.RMI中的远程接口(Remote Interface)扮演了什么样的角色?

参考答案:

    远程接口用来标识哪些方法是可以被非本地虚拟机调用的接口.远程对象必须要直接或者是间接实现远程接口.实现了远程接口的类应该声明被实现的远程接口,给每一个远程对象定义构造函数,给所有远程接口的方法提供实现.

82.java.rmi.Naming类扮演了什么样的角色?

参考答案:

    java.rmi.Naming类用来存储和获取在远程对象注册表里面的远程对象的引用.Naming类的每一个方法接受一个URL格式的String对象作为它的参数.

83.RMI的绑定(Binding)是什么意思?

参考答案:

    绑定是为了查询远程对象而给远程对象关联或者是注册以后会用到的名称的过程.远程对象可以使用Naming类的bind)或者rebind()方法跟名称想关联.

84.Naming类的bind()和rebind()方法有什么区别?

参考答案:

    bind()方法负责把指定名称绑定给远程对象,rebind(()方法负责把之ID那个对象重新绑定到一个新的远程对象.如果那个名称已经绑定过了,先前的绑定会被替换掉.

85.让RMI程序能正确运行有哪些步骤?

参考答案:

    为了让RMI程序能正确运行必须要包含以下几个步骤:

        编译所有源文件.

        使用rmic生成stub文件.

        启动rmiregistry.

        启动RMI服务器.

        运行后客户端程序.

86.RMI的stub扮演了什么样的角色?

参考答案:

    远程对象的stub扮演了远程对象的代表或者代理的角色.调用者在本地stub上调用方法,它负责在远程对象上执行方法,当stub的方法被调用的时候,会经历以下几个步骤:

        初始化到包含了远程对象的JVM的连接.

        序列化参数到远程的JVM.

        等待方法调用和执行的结果.

        反序列化返回的值或者是方法没有执行成功情况下的异常.

        吧值返回给调用者.

87.什么事分布式垃圾回收(DGC)?它是如何工作的?

参考答案:

    DGC叫做分布式垃圾回收.RMI使用DGC来做自动垃圾回收.因为RMI包含了跨虚拟机对象的引用,垃圾回收是很困难的.DGC使用计数算法来给远程对象提供自动内存管理.

88.RMI中使用RMI安全管理器(RMISecurityManger)的目的是什么?

参考答案:

    RMISecurityManager使用下载好的代码提供可被RMI应用程序使用的安全管理器.如果没有设置安全管理器,RMI的类加载器就不会从远程下载任何的类.

89.解释下Marshaaling和demarshaling.

参考答案:

    当应用程序希望吧内存对象跨网络传递到另一台主机或者是持久化到存储的时候,就必须要把对象在内存里面的表示转化成合适的格式.这个过程就叫做Marshalling,反制就是demarshalling.

90.解释下Serialization和Deserialization.

参考答案:

    Java提供了一种叫做对象序列化的机制,它把对象表示成一连串的字节,里面包含了对象的数据,对象的类型信息,对象内部的数据的类型信息等等.因此,序列化可以看做是为了把对象存储在磁盘上或者是从磁盘上读出来并重建对象而把对象扁平化的一种方式,反序列化是吧对象从扁平状态转化成活动对象的相反的步骤.

91.什么事Servlet?

参考答案:

`    Servlet是用来处理客户端请求并产生动态网页内容的Java类.Servlet主要是用来处理或者是存储HTML表单提交的数据,产生动态内容,在无状态的HTTP协议下管理状态信息.

92.说一下Servlet的体系结构.

参考答案:

    所有的Servlet都必须要实现的核心接口时javax,servlet.Servlet.每一个Servlet都必须要直接或者是间接的实现这个接口,或者是继承javax.servlet.GenericServlet或者是javax.servlet.HTTPServlet.最后,Servlet使用多线程可以并行的多个请求服务.

93.Applet和Servlet有什么区别?

参考答案:

`    Applet是运行在客户端主机的浏览器上的客户端Java程序.而Servlet是运行在Web服务器上的服务端的组件.applet可以使用用户界面类,而Servlet没有用户界面,想法,Servlet是等待客户端的HTTP请求,然后为请求产生响应.

94.GenericServlet和HttpServlet有什么区别?

参考答案:

    GenericServlet类实现了Servlet和ServletConfig接口.实现了除了service()之外的其他方法,在创建Servlet对象时,可以继承GenericServlet类来简化程序代码,但需要实现service()方法.

    HttpServlet类继承了GenericServlet类,为实际开发中大多数Servlet处理HTTP请求的应用灵活的方法.

95.解释下Servlet的生命周期.

参考答案:

    `对每一个客户端的请求,Servlet引擎载入Servlet,调用它的init()方法,完成Servlet初始化,然后,Servlet对象通过每一个请求单独调用service()方法来处理所有随后来自客户端的请求,最后,调用Servlet的destory()方法把Servlet删除掉.

96.doGet()方法和doPost()方法有什么区别?

参考答案:

    doGet:GET方法会吧名称对追加在请求URL后面.因为URL对字符数目有限制,进而限制了用在客户端请求的参数值的数目.并且请求中的参数值是可见,因此,敏感信息不能用这种方式传递.

`    doPost:POST方法通过把请求参数值放在请求体中来克服GET方法的限制,因此,可以发送参数的数目是没有限制的.最后,通过POST请求传递的敏感信息对外部客户端是不可见的.

97.什么是Web应用程序?

参考答案:

    Web应用程序是对web或者是应用服务器的动态扩展,有两种类型的Web应用:面向表现的和面向服务的.面向表现的WEB应用程序会产生包含了很多中标记语言和动态内容的交互的web页面作为对请求的响应.而面向服务的web应用实现了web服务的短点.一般来说,一个web应用可以看成是一组安装在服务端URL名称空间的特定子集下面的Servlet的集合.

98.什么是服务端包含(Server Side Include)?

参考答案:

    服务端包含(SSI)是一种简单的解释型服务端脚本语言,大多数时候仅用在web上,用servlet标签嵌入进来.SSI最常用的情景把一个或者多个文件包含到web服务器的一个web页面中.当浏览器访问web页面的时候,web服务器会用对应的Servlet产生的文本来替换web页面中的servlet.

99.什么是Servlet链(Servlet Chainning)?

参考答案:

`    Servlet链是把一个Servlet的输出发送给另一个Servlet的方法,第二个Servlet的输出可以发送给第三个Servlet,以此类推.链条上最后一个Servlet负责把响应发送给客户端.

100.如何知道是那一个客户端的机器正在请求你的Servlet?

参考答案:

    ServletRequest类可以找出客户端机器的IP地址或者是主机名.getRemoteAddr()方法获取客户端主机的IP地址,getRemoteHost()可以获取主机名.


posted @ 2018-05-03 01:56  邪爵神殇  阅读(196)  评论(0编辑  收藏  举报