Java面试题汇总(100题) Ⅲ

51 多线程有几种实现方法?同步有几种实现方法?

多线程两种:继承thread类和实现runnable接口
同步两种:synchronized,wait与notify

52 JSP的内置对象和方法

request表示HttpServletRequest对象。它包含了有关浏览器请求的信息,并且提供了几个用于获取cookie、header、session数据的有用的方法。
response表示HttpServletResponse对象,并提供了几个用于设置送回浏览器的响应的方法(比如cookies、头信息等)
out对象是javax.jsp.JspWriter的一个实例,并且提供了几个方法用于向李兰器回送输出结果
pageContext表示一个javax.servlet.jsp.PageContext对象。它是用于方便存取各种范围的命名空间、servlet相关的对象的api,并且包装了通用的servlet相关功能的方法。
session表示是一个请求的javax.servlet.http.HttpSession对象。Session可以存储用户的状态信息。
application表示一个javax.servlet.ServletContext对象,这有助于查找有关servlet引擎和servlet环境的信息。
config表示一个javax.servlet.ServletConfig对象。该对象用于存取servlet实例的初始化参数。
page表示从该页面产生的一个servlet实例。

53 线程的基本概念

线程指的是在程序执行过程中能够执行程序代码的一个执行单位,每个程序至少都有一个线程。
java中的线程有四种状态分别是运行、就绪、挂起、结束

54 JSP常用指令

Jsp包含三个编译指令和七个动作指令
三个编译指令为:page、include、taglib
七个动作指令为:jsp:forward、jsp:param、jsp:include、jsp:plugin、jsp:useBean、jsp:setProperty、jsp:getProperty

编译指令

page指令通常位于jsp页面的顶端,同一个页面可以有多个page指令。
语法格式如下:
〈% @page
language=”Java” 一般情况就是java,代表jsp页面使用的脚本语言

extends=”package.class” 确定 JSP 程序编译时所产生的 Java 类,需要继承的父类,或者需要实现的接口的全限定类名

import= “package. class I package. },…”用来导入包,有几个包是默认自动导入的,不需要显式导入。默认导入的包有:java.lang. 、javax.servlet.、javax.servlet.jsp. 、javax.servlet.http.*

session=”true I false” 设定这个 JSP 页面是否需要 HTIP session

buffer=”none I 8kb I size kb” 指定输出缓冲区的大小,输出缓冲区的 JSP 内部对象:out 用于缓存 JSP页面对客户浏览器的输出,默认值为 8kb,可以设置为 none ,也可以设置为其他值,单位为kb

autoFlush=”true I false”当输出缓冲区即将溢出时,是否需要强制输出缓冲区的内容。设置为true 时为正常输出;如果设置为 false ,会在 buffer 溢出时产生一个异常。

isThreadSafe=”true I false”

info=”text” 设置该 JSP 程序的信息,也可以看做其说明,可以通过 Servlet. getServletInfo()方法获取该值。如果在 JSP 页面中,可直接调用 getServletInfo()方法获取该值 。

errorPage=”relativeURL”指定错误处理页面。如果本程序产生了异常或者错误,而该 JSP 页面没有对应的处理代码,则会自动调用该指令所指定的 JSP 页面

contentType=”mimeType[ ;charset=characterSet]” I”text/html;charset= “808859-1” 用于设定生成网页的文件格式和编码方式,即 MIME 类型和页面字符集类型,默认的 MIME 类型是 text/html; 默认的字符集为 ISO-8859-1
isErrorPage=” true I false” 设置本 JSP 页面是否为错误处理程序。如果该页面本身己是错误处理页面,则无须使用 errorPage 属性。
%〉

include指令

使用 include 指令,可以将一个外部文件嵌入到当前 JSP 文件中,同时解析这个页面中的 JSP 语句(如果有的话)。这是个静态的 include 语旬,不会检查所包含 JSP 页面的变化。
include 既可以包含静态的文本,也可以包含动态的 JSP 页面。静态的编译指令include ,是将被包含的页面加入进来,生成一个完整的页面。
include 编译指令的语法:

〈% @include file=”relativeURLSpec” %〉

如果被嵌入的文件经常需要改变,建议使用< jsp:include>操作指令,因为它是动态的 include 语句。

包含include指令的jsp页面在部署后,经过访问编译生成java文件,在tomcat的 work\Catalina\localhost\project\org\apache\jsp目录下会生成对应的java文件,这些文件与jsp的名字相同,他包含了编译后的代码,甚至include包含的另外一个jsp的代码也被相应的加入了进来。

forward指令

forward 指令用于将页面响应控制转发给另外的页面。既可以转发给静态的 HTML页面,也可以转发到动态的 JSP 页面,或者转发到容器中的 Servlet。
JSP 的 forward 指令的格式如下:
对于 JSP 1.0 ,使用如下语法:
< jsp:forward page=”{relativeURL |<%=expression%>}” />
可使用如下语法:
< jsp:forward page=”{relativeURL |<%=expression%>}”>
{< jsp:param…/>}
< /jsp:forward>
第二种语法用于在转发时增加额外的请求参数。增加的请求参数的值可以通过HttpServletRequest 类的 getParameter方法获取。

jsp:include指令

它是一个动态的指令,可以用于导入某个页面。它的导入会每次检查被导入页面的改变。下面是include指令的使用格式:
< jsp:include page=”{relativeURL |<%=expression%>}” flush=”true” />
或者:
< jsp:include page=”{relativeURL |<%=expression%>}” flush=”true”>
< jsp:param name=”paramName” value=”paramValue”/>
< /jsp:include>
flush 属性用于指定输出缓存是否转移到被导入文件中。如果指定为剧。则包含在被导入文件中;如果指定为false,则包含在原文件中。对于JSP 1.1以下的旧版本,只能设置为false。

< include>和< jsp:include>分别为静态导入和动态导入。他们的的区别:静态导入是将被导入页面的代码完全插入,两个页面生成一个整体的 Servlet; 而动态导入则在 Servlet 中使用动态导入,从而将页面引入。

useBean、setProperty和getProperty指令

这三个指令都是与JavaBean相关的指令,其中useBean用于在jsp页面初始化一个java实例,setProperty用于修改JavaBean实例的属性,getProperty用于获取JavaBean实例的属性。

useBean的语法格式:

< jsp:useBean id=”” class=”” scope=”page | request |session | application” >

Id是JavaBean的实例名,class属性确定JavaBean的实现类。Scope属性确定生存范围【页面、请求、会话、应用】

setProperty的语法格式:

< jsp:setProperty name=”” property=”” value=”” />

name属性确定需要设定

plugin指令

plugin 指令用得少

param指令

param指令用于设置参数值,这个指令本身不能单独使用,因为单独使用没有意义。它可以和以下几个指令合起来使用

jsp:include
jsp:forward
jsp:plugin

55 servlet的生命周期

web容器加载servlet,生命周期开始。通过调用servlet的init()方法进行servlet的初始化。通过调用service方法实现,根据请求的不同调用不同的do方法。
最后web容器调用servlet的destroy()方法

56 如何实现servlet的单线程模式

< %@ page isThreadSafe=”false” % >

57 页面之间对象传递的方法

request session application cookie等

58 JSP和Servlet的相同点和不同点

JSP是Servlet技术的扩展,本质上是Servlet的简易模式。
Servlet和JSP最主要的不同点在于Servlet的应用逻辑实在Java文件中,并且完全从表示层中的html中分离出来,而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。
JSP侧重于视图而Servlet用于控制逻辑

59 四种会话跟踪技术

page:代表与一个页面相关的对象和属性。一个页面由一个编译好的JavaServlet类表示。这既包括Servlet又包括被编译成Servlet的JSP页面
request是代表与web客户端发出的请求相关的对象和属性。一个请求可能跨域多个页面,涉及多个web组件(由于forward指令和include动作的关系)
session是代表与某个web客户端的一个用户体验相关的对象和属性。一个web会话可以跨越多个客户机请求。
application是代表与整个web应用程序相关的对象和属性。这实质上是跨越整个web应用程序、包括多个页面、请求和会话的一个全局作用域。

60 request对象的主要方法

setAttribute(String name,Object) 设置名字为那么的request的参数值

61 J2EE是技术还是平台还是框架

J2EE本身是一个标准,一个为企业分布式应用的开发提供的标准平台
J2EE也是一个框架,包括JDBC、JNDI、RMI、JMS、EJB、JTA等技术

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

public String translate(String str){
    String temp="";
    try{
        temp=new String(str.getBytes("ISO-8859-1"),"GBK");
        temp=temp.trim()
    }catch(Exception e){
    System.err.println(e.getMessage())
    }
    return temp;
}

63 简述逻辑操作(&,|,^)和条件操作(&&,|| )的区别

条件操作只能操作布尔类型的,而逻辑操作不仅可以操作布尔类型,同时可以操作数值型(此时叫位操作)
逻辑操作不会产生短路,而条件操作会产生短路。
使用操作符时,我们会遇到一种“短路”现象。即一旦能够明确无误地确定整个表达式的值,就不再计算表达式余下部分了。因此,整个逻辑表达式靠后的部分有可能不会被运算。

64 XML文档定义有几种形式?它们之间有什么本质区别?解析xml文档有哪几种方式?

  • 两种形式:dtd schema
  • 本质区别:schma本身是xml的,可以被xml解析器解析(这也是从DTD上发展schema的根本目的)
  • 解析XML文档方式有DOM,SAX,STAX等
    DOM:处理大型文件时其性能下降的非常厉害,这个问题是由DOM的树结构所造成的,这种结构占用的内存较多,而且DOM必须在解析文件之前把整个文档装入内存,适合对XML的随机访问。
    SAX:SAX是事件驱动型的xml解析方式。它顺序读取xml,文件不需要一次全部装载整个文件。当遇到像文件开头、文档结束或者标签开头、标签结束时,它会出发一个时间,用于通过在回调事件中写入处理代码来处理xml文件,适合对xml的顺序访问

65 简述synchronized和lock的异同

主要相同点:lock能完成synchronized所实现的所有功能
不同点:lock有比synchronized更加精确的线程语义和更好的性能。synchronized会自动释放锁,而lock要求程序员手动释放,并且在finally中释放

66 Servlet执行的时候一般实现哪几个方法?

public void init(ServletConfig config)
public ServletConfig getServletConfig()
public String getServletInfo()
public void service(ServletRequest request,ServletResponse response)
public void destory()

67 Java 常用设计模式?并且举例说明它们

68 排序都有哪几种方法? 用Java实现一个快速排序法

69 解释下列名词

web容器:
EJB容器:
JNDI:
JMS:
JTA:
JAF:

70 Java语言如何进行异常处理?关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗?

Java通过面向对象的方法进行异常处理,把各种不同的异常进行分类,并提供了良好的接口。在Java中,每个异常都是一个对象,它是throwable类或者其他子类的实例。
当一个方法出现异常后变抛出一个异常对象,该对象中包含有异常信息,调用这个对象的方法可以捕获到这个异常并进行处理。Java的异常处理通过5个关键词来实现的:throws,throw,try,catch,finally
throws和finally一般情况下是用try来执行一段程序,如果出现异常,系统会抛出throw一个异常,这时候可以通过它的类型来catch它,或者在finally语句块中由缺省处理器来处理。
throw用来明确地抛出一个异常
throws用来标明一个成员函数可能抛出的各种异常
finally为了确保一段代码不管发生什么异常都会被执行一段代码

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

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

72 MVC的各个部分都有哪些技术来实现?

Model-view-controller。
model:JavaBean
view:JSP、velocity、freemarker等
controller:servlet(基本不用)在controllerl类名上加@Controller,方法名上加@RequestMapping确定访问的uri

73 Java 中有哪几种类型的流?JDK为每种类型的流提供了哪些抽象类以供继承?

字节流:InputStream、OutputStream
字符流:InputStreamReader、OutputStreamWriter

74 Java会造成内存泄露吗?

java中内存泄露的发生场景,通俗地说,就是程序员可能创建了一个对象,以后一直不再使用这个对象,这个对象却一直被引用,即这个对象无用但是却无法被垃圾回收器回收的,这就是java中的内存泄露,一定要让程序将各种分支情况都完整执行到程序结束,然后看某个对象是否被使用过,如果没有,则才能判定这个对象属于内存泄露。
如果一个外部类的实例对象的方法返回了一个内部类的实例对象,这个内部类对象被长期引用了,即使那个外部类实例对象不再被使用,但由于内部类持久外部类的实例对象,这个外部类对象将不会被垃圾回收,这也会造成内存泄露。

75 Java中实现多态的机制是什么?

overload和override

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