Java面试题全集中.docx

上传人:b****3 文档编号:3949130 上传时间:2022-11-26 格式:DOCX 页数:26 大小:39.10KB
下载 相关 举报
Java面试题全集中.docx_第1页
第1页 / 共26页
Java面试题全集中.docx_第2页
第2页 / 共26页
Java面试题全集中.docx_第3页
第3页 / 共26页
Java面试题全集中.docx_第4页
第4页 / 共26页
Java面试题全集中.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

Java面试题全集中.docx

《Java面试题全集中.docx》由会员分享,可在线阅读,更多相关《Java面试题全集中.docx(26页珍藏版)》请在冰豆网上搜索。

Java面试题全集中.docx

Java面试题全集中

Java面试题全集(中)

这部分主要是与JavaWeb和WebService相关的面试题。

96、阐述Servlet和CGI的区别?

 

答:

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

补充:

SunMicrosystems公司在1996年发布Servlet技术就是为了和CGI进行竞争,Servlet是一个特殊的Java程序,一个基于Java的Web应用通常包含一个或多个Servlet类。

Servlet不能够自行创建并执行,它是在Servlet容器中运行的,容器将用户的请求传递给Servlet程序,并将Servlet的响应回传给用户。

通常一个Servlet会关联一个或多个JSP页面。

以前CGI经常因为性能开销上的问题被诟病,然而FastCGI早就已经解决了CGI效率上的问题,所以面试的时候大可不必信口开河的诟病CGI,事实上有很多你熟悉的网站都使用了CGI技术。

97、Servlet接口中有哪些方法?

 

答:

Servlet接口定义了5个方法,其中前三个方法与Servlet生命周期相关:

 

-voidinit(ServletConfigconfig)throwsServletException 

-voidservice(ServletRequestreq,ServletResponseresp)throwsServletException,java.io.IOException 

-voiddestory() 

-java.lang.StringgetServletInfo() 

-ServletConfiggetServletConfig()

Web容器加载Servlet并将其实例化后,Servlet生命周期开始,容器运行其init()方法进行Servlet的初始化;请求到达时调用Servlet的service()方法,service()方法会根据需要调用与请求对应的doGet或doPost等方法;当服务器关闭或项目被卸载时服务器会将Servlet实例销毁,此时会调用Servlet的destroy()方法。

98、转发(forward)和重定向(redirect)的区别?

 

答:

forward是容器中控制权的转向,是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。

redirect就是服务器端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,因此从浏览器的地址栏中可以看到跳转后的链接地址,很明显redirect无法访问到服务器保护起来资源,但是可以从一个网站redirect到其他网站。

forward更加高效,所以在满足需要时尽量使用forward(通过调用RequestDispatcher对象的forward()方法,该对象可以通过ServletRequest对象的getRequestDispatcher()方法获得),并且这样也有助于隐藏实际的链接;在有些情况下,比如需要访问一个其它服务器上的资源,则必须使用重定向(通过HttpServletResponse对象调用其sendRedirect()方法实现)。

99、JSP有哪些内置对象?

作用分别是什么?

 

答:

JSP有9个内置对象:

 

-request:

封装客户端的请求,其中包含来自GET或POST请求的参数; 

-response:

封装服务器对客户端的响应; 

-pageContext:

通过该对象可以获取其他对象; 

-session:

封装用户会话的对象; 

-application:

封装服务器运行环境的对象; 

-out:

输出服务器响应的输出流对象; 

-config:

Web应用的配置对象; 

-page:

JSP页面本身(相当于Java程序中的this); 

-exception:

封装页面抛出异常的对象。

补充:

如果用Servlet来生成网页中的动态内容无疑是非常繁琐的工作,另一方面,所有的文本和HTML标签都是硬编码,即使做出微小的修改,都需要进行重新编译。

JSP解决了Servlet的这些问题,它是Servlet很好的补充,可以专门用作为用户呈现视图(View),而Servlet作为控制器(Controller)专门负责处理用户请求并转发或重定向到某个页面。

基于Java的Web开发很多都同时使用了Servlet和JSP。

JSP页面其实是一个Servlet,能够运行Servlet的服务器(Servlet容器)通常也是JSP容器,可以提供JSP页面的运行环境,Tomcat就是一个Servlet/JSP容器。

第一次请求一个JSP页面时,Servlet/JSP容器首先将JSP页面转换成一个JSP页面的实现类,这是一个实现了JspPage接口或其子接口HttpJspPage的Java类。

JspPage接口是Servlet的子接口,因此每个JSP页面都是一个Servlet。

转换成功后,容器会编译Servlet类,之后容器加载和实例化Java字节码,并执行它通常对Servlet所做的生命周期操作。

对同一个JSP页面的后续请求,容器会查看这个JSP页面是否被修改过,如果修改过就会重新转换并重新编译并执行。

如果没有则执行内存中已经存在的Servlet实例。

我们可以看一段JSP代码对应的Java程序就知道一切了,而且9个内置对象的神秘面纱也会被揭开。

JSP页面:

<%@pagepageEncoding="UTF-8"%><%Stringpath=request.getContextPath();StringbasePath=request.getScheme()+":

//"+request.getServerName()+":

"+request.getServerPort()+path+"/";

%>

DOCTYPEhtml>

">

首页

*{font-family:

"Arial";}

Hello,World!


Currenttimeis:

<%=newjava.util.Date().toString()%>

对应的Java代码:

/*

*GeneratedbytheJaspercomponentofApacheTomcat

*Version:

ApacheTomcat/7.0.52

*Generatedat:

2014-10-1313:

28:

38UTC

*Note:

Thelastmodifiedtimeofthisfilewassetto

*thelastmodifiedtimeofthesourcefileafter

*generationtoassistwithmodificationtracking.

*/

packageorg.apache.jsp;

importjavax.servlet.*;

importjavax.servlet.http.*;

importjavax.servlet.jsp.*;

publicfinalclassindex_jspextendsorg.apache.jasper.runtime.HttpJspBase

implementsorg.apache.jasper.runtime.JspSourceDependent{

privatestaticfinaljavax.servlet.jsp.JspFactory_jspxFactory=javax.servlet.jsp.JspFactory

.getDefaultFactory();

privatestaticjava.util.Map_jspx_dependants;

privatejavax.el.ExpressionFactory_el_expressionfactory;

privateorg.apache.tomcat.InstanceManager_jsp_instancemanager;

publicjava.util.MapgetDependants(){

return_jspx_dependants;

}

publicvoid_jspInit(){

_el_expressionfactory=_jspxFactory.getJspApplicationContext(

getServletConfig().getServletContext()).getExpressionFactory();

_jsp_instancemanager=org.apache.jasper.runtime.InstanceManagerFactory

.getInstanceManager(getServletConfig());

}

publicvoid_jspDestroy(){

}

publicvoid_jspService(

finaljavax.servlet.http.HttpServletRequestrequest,

finaljavax.servlet.http.HttpServletResponseresponse)

throwsjava.io.IOException,javax.servlet.ServletException{

//内置对象就是在这里定义的

finaljavax.servlet.jsp.PageContextpageContext;

javax.servlet.http.HttpSessionsession=null;

finaljavax.servlet.ServletContextapplication;

finaljavax.servlet.ServletConfigconfig;

javax.servlet.jsp.JspWriterout=null;

finaljava.lang.Objectpage=this;

javax.servlet.jsp.JspWriter_jspx_out=null;

javax.servlet.jsp.PageContext_jspx_page_context=null;

try{

response.setContentType("text/html;charset=UTF-8");

pageContext=_jspxFactory.getPageContext(this,request,response,

null,true,8192,true);

_jspx_page_context=pageContext;

application=pageContext.getServletContext();

config=pageContext.getServletConfig();

session=pageContext.getSession();

out=pageContext.getOut();

_jspx_out=out;

out.write('\r');

out.write('\n');

Stringpath=request.getContextPath();

StringbasePath=request.getScheme()+":

//"

+request.getServerName()+":

"+request.getServerPort()

+path+"/";

//以下代码通过输出流将HTML标签输出到浏览器中

out.write("\r\n");

out.write("\r\n");

out.write("

DOCTYPEhtml>\r\n");

out.write("\r\n");

out.write("\r\n");

out.write("

out.print(basePath);

out.write("\">\r\n");

out.write("首页\r\n");

out.write("\r\n");

out.write("\t*{font-family:

\"Arial\";}\r\n");

out.write("\r\n");

out.write("\r\n");

out.write("\r\n");

out.write("\r\n");

out.write("

Hello,World!

\r\n");

out.write("


\r\n");

out.write("

Currenttimeis:

");

out.print(newjava.util.Date().toString());

out.write("

\r\n");

out.write("\r\n");

out.write("\r\n");

}catch(java.lang.Throwablet){

if(!

(tinstanceofjavax.servlet.jsp.SkipPageException)){

out=_jspx_out;

if(out!

=null&&out.getBufferSize()!

=0)

try{

out.clearBuffer();

}catch(java.io.IOExceptione){

}

if(_jspx_page_context!

=null)

_jspx_page_context.handlePageException(t);

else

thrownewServletException(t);

}

}finally{

_jspxFactory.releasePageContext(_jspx_page_context);

}

}

}

100、get和post请求的区别?

 

答:

 

①get请求用来从服务器上获得资源,而post是用来向服务器提交数据; 

②get将表单中数据按照name=value的形式,添加到action所指向的URL后面,并且两者使用"?

"连接,而各个变量之间使用"&"连接;post是将表单中的数据放在HTTP协议的请求头或消息体中,传递到action所指向URL; 

③get传输的数据要受到URL长度限制(1024字节);而post可以传输大量的数据,上传文件通常要使用post方式; 

④使用get时参数会显示在地址栏上,如果这些数据不是敏感数据,那么可以使用get;对于敏感数据还是应用使用post; 

⑤get使用MIME类型application/x-www-form-urlencoded的URL编码(也叫百分号编码)文本的格式传递参数,保证被传送的参数由遵循规范的文本组成,例如一个空格的编码是"%20"。

101、常用的Web服务器有哪些?

 

答:

Unix和Linux平台下使用最广泛的免费HTTP服务器是Apache服务器,而Windows平台的服务器通常使用IIS作为Web服务器。

选择Web服务器应考虑的因素有:

性能、安全性、日志和统计、虚拟主机、代理服务器、缓冲服务和集成应用程序等。

下面是对常见服务器的简介:

 

-IIS:

Microsoft的Web服务器产品,全称是InternetInformationServices。

IIS是允许在公共Intranet或Internet上发布信息的Web服务器。

IIS是目前最流行的Web服务器产品之一,很多著名的网站都是建立在IIS的平台上。

IIS提供了一个图形界面的管理工具,称为Internet服务管理器,可用于监视配置和控制Internet服务。

IIS是一种Web服务组件,其中包括Web服务器、FTP服务器、NNTP服务器和SMTP服务器,分别用于网页浏览、文件传输、新闻服务和邮件发送等方面,它使得在网络(包括互联网和局域网)上发布信息成了一件很容易的事。

它提供ISAPI(IntranetServerAPI)作为扩展Web服务器功能的编程接口;同时,它还提供一个Internet数据库连接器,可以实现对数据库的查询和更新。

 

-Kangle:

KangleWeb服务器是一款跨平台、功能强大、安全稳定、易操作的高性能Web服务器和反向代理服务器软件。

此外,Kangle也是一款专为做虚拟主机研发的Web服务器。

实现虚拟主机独立进程、独立身份运行。

用户之间安全隔离,一个用户出问题不影响其他用户。

支持PHP、ASP、ASP.NET、Java、Ruby等多种动态开发语言。

 

-WebSphere:

WebSphereApplicationServer是功能完善、开放的Web应用程序服务器,是IBM电子商务计划的核心部分,它是基于Java的应用环境,用于建立、部署和管理Internet和IntranetWeb应用程序,适应各种Web应用程序服务器的需要。

 

-WebLogic:

WebLogicServer是一款多功能、基于标准的Web应用服务器,为企业构建企业应用提供了坚实的基础。

针对各种应用开发、关键性任务的部署,各种系统和数据库的集成、跨Internet协作等Weblogic都提供了相应的支持。

由于它具有全面的功能、对开放标准的遵从性、多层架构、支持基于组件的开发等优势,很多公司的企业级应用都选择它来作为开发和部署的环境。

WebLogicServer在使应用服务器成为企业应用架构的基础方面一直处于领先地位,为构建集成化的企业级应用提供了稳固的基础。

 

-Apache:

目前Apache仍然是世界上用得最多的Web服务器,其市场占有率很长时间都保持在60%以上(目前的市场份额约40%左右)。

世界上很多著名的网站都是Apache的产物,它的成功之处主要在于它的源代码开放、有一支强大的开发团队、支持跨平台的应用(可以运行在几乎所有的Unix、Windows、Linux系统平台上)以及它的可移植性等方面。

 

-Tomcat:

Tomcat是一个开放源代码、运行Servlet和JSP的容器。

Tomcat实现了Servlet和JSP规范。

此外,Tomcat还实现了Apache-Jakarta规范而且比绝大多数商业应用软件服务器要好,因此目前也有不少的Web服务器都选择了Tomcat。

 

-Nginx:

读作"enginex",是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。

Nginx是由IgorSysoev为俄罗斯访问量第二的Rambler站点开发的,第一个公开版本0.1.0发布于2004年10月4日。

其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。

在2014年下半年,Nginx的市场份额达到了14%。

102、JSP和Servlet是什么关系?

 

答:

其实这个问题在上面已经阐述过了,Servlet是一个特殊的Java程序,它运行于服务器的JVM中,能够依靠服务器的支持向浏览器提供显示内容。

JSP本质上是Servlet的一种简易形式,JSP会被服务器处理成一个类似于Servlet的Java程序,可以简化页面内容的生成。

Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML分离开来。

而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。

有人说,Servlet就是在Java中写HTML,而JSP就是在HTML中写Java代码,当然这个说法是很片面且不够准确的。

JSP侧重于视图,Servlet更侧重于控制逻辑,在MVC架构模式中,JSP适合充当视图(view)而Servlet适合充当控制器(controller)。

103、讲解JSP中的四种作用域。

 

答:

JSP中的四种作用域包括page、request、session和application,具体来说:

 

-page代表与一个页面相关的对象和属性。

 

-request代表与Web客户机发出的一个请求相关的对象和属性。

一个请求可能跨越多个页面,涉及多个Web组件;需要在页面显示的临时数据可以置于此作用域。

 

-session代表与某个用户与服务器建立的一次会话相关的对象和属性。

跟某个用户相关的数据应该放在用户自己的session中。

 

-application代表与整个Web应用程序相关的对象和属性,它实质上是跨越整个Web应用程序,包括多个页面、请求和会话的一个全局作用域。

104、如何实现JSP或Servlet的单线程模式?

 

答:

 

对于JSP页面,可以通过page指令进行设置。

<%@pageisThreadSafe=”false”%>

对于Servlet,可以让自定义的Servlet实现SingleThreadModel标识接口。

说明:

如果将JSP或Servlet设置成单线程工作模式,会导致每个请求创建一个Servlet实例,这种实践将导致严重的性能问题(服务器的内存压力很大,还会导致频繁的垃圾回收),所以通常情况下并不会这么做。

105、实现会话跟踪的技术有哪些?

 

答:

由于HTTP协议本身是无状态的,服务器为了区分不同的用户,就需要对用户会话进行跟踪,简单的说就是为用户进行登记,为用户分配唯一的ID,下一次用户在请求中包含此ID,服务器据此判断到底是哪一个用户。

 

①URL重写:

在URL中添加用户会话的信息作为请求的参数,或者将唯一的会话ID添加到URL结尾以标识一个会话。

 

②设置表单隐藏域:

将和会话跟踪相关的字段添加到隐式表单域中,这些信息不会在浏览器中显示但是提交表单时会提交给服务器。

 

这两种方式很难处理跨越多个页面的信息传递,因为如果每次都要修改URL或在页面中添加隐式表单域来存储用户会话相关信息,事情将变得非常麻烦。

 

③cookie:

cookie有两种,一种是基于窗口的,浏览器窗口关闭后,cookie就没有了;另一种是将信息存储在一个临时文件中,并设置存在的时间。

当用

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1