2017java面试题(常规版)

1、jsp和servlet的区别、共同点、各自应用的范围??
JSP是Servlet技术的扩展,本质上就是Servlet的简易方式。JSP编译后是“类servlet”。Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。JSP侧重于视图,Servlet主要用于控制逻辑。在struts框架中,JSP位于MVC设计模式的视图层,而Servlet位于控制层.
2、cookie和session的作用、区别、应用范围,session的工作原理???
Cookie:主要用在保存客户端,其值在客户端与服务端之间传送,不安全,存储的数据量有限。
Session:保存在服务端,每一个session在服务端有一个sessionID作一个标识。存储的数据量大,安全性高。占用服务端的内存资源。
3、jstl是什么?优点有哪些??
JSTL(JSP Standard Tag Library ,JSP标准标签库)是一个不断完善的开放源代码的JSP标签库,由四个定制标记库(core、format、xml 和 sql)和一对通用标记库验证器(ScriptFreeTLV 和 PermittedTaglibsTLV)组成。优点有:
1、 在应用程序服务器之间提供了一致的接口,最大程序地提高了WEB应用在各应用服务器之间的移植。
2、 简化了JSP和WEB应用程序的开发。
3、 以一种统一的方式减少了JSP中的scriptlet代码数量,可以达到没有任何scriptlet代码的程序。在我们公司的项目中是不允许有任何的scriptlet代码出现在JSP中。
4、 允许JSP设计工具与WEB应用程序开发的进一步集成。相信不久就会有支持JSTL的IDE开发工具出现。
4、j2ee的优越性主要表现在哪些方面?MVC模式
a、 J2EE基于JAVA 技术,与平台无关
b、 J2EE拥有开放标准,许多大型公司实现了对该规范支持的应用服务器。如BEA ,IBM,ORACLE等。
c、 J2EE提供相当专业的通用软件服务。
d、 J2EE提供了一个优秀的企业级应用程序框架,对快速高质量的开发系统打下了基础。
Model模型:应用程序的主体部分,用于表示业务逻辑。
View视图:应用程序中用户界面相关的部分,是用户看到并与之交互的界面。
Controller控制器:用于根据用户的输入,控制用户界面数据显示,更新Model对象状态。
MVC模式的出现不仅实现了功能模块和显示模块的分离,同时还提够了应用系统的可维护、可扩展性、可移植性、和组建的可复用性。
5、Struts的优点
a、实现MVC模式,结构清晰,使开发者只需关注业务逻辑的实现。
b、有丰富的tag可以用,能大大提够开发效率,缩短开发时间。
c、页面导航。通过一个配置文件,即可把握整个系统各部分之间的联系,这对于后期的维护有很大的好处
d、提供Exception处理机制
e、支持L18N
6、为什么要用struts?
  JSP、Servlet、JavaBean技术的出现给我们构建强大的企业应用系统提供了可能。但用这些技术构建的系统非常的繁乱,所以在此之上,我们需要一个规则、一个把这些技术组织起来的规则,这就是框架,Struts便应运而生。
  基于Struts开发的应用由3类组件构成:控制器组件、模型组件、视图组件
7、Sturt1的核心类、核心标签库?
ActionServlet 控制器、ActionMapping状态改变事件 、 Action控制器的一部分、ActionForward用户指向、ActionForm状态改变的数据
Html标签、bean标签、logic标签、tiles标签、nested标签
8、struts1与sturts2的区别(struts2是struts1和webwork的结合体)
1、struts1要求Action类继承一个抽象基类,而不是接口。
struts2的action类可以实现一个action接口,也可以实现其他接口。
2、sturts1 action是单例模式,线程是安全的。
struts2 action线程是不安全的,action为每一个请求都生成了一个实例。
3、sturts1过去依赖serlet API,不容易测试。
struts2不依赖于容器,允许Action脱离容器单独被测试。
4、Struts1 使用ActionForm对象捕获输入。所有的ActionForm必须继承一个基类。
Struts 2直接使用Action属性作为输入属性,消除了对第二个输入对象的需求。
5、Struts1 整合了JSTL,因此使用JSTL EL。这种EL有基本对象图遍历,但是对集合和索引属性的支持很弱。
Struts2可以使用JSTL,但是也支持一个更强大和灵活的表达式语言--”Object Graph Notation Language” (OGNL).
6、Struts 1使用标准JSP机制把对象绑定到页面中来访问。
Struts 2 使用 “ValueStack”技术,使taglib能够访问值而不需要把你的页面(view)和对象绑定起来。
7、Struts 1 ActionForm 属性通常都是String类型。Struts1使用Commons-Beanutils进行类型转换。
Struts2 使用OGNL进行类型转换。提供基本和常用对象的转换器。
8、Struts 1支持在ActionForm的validate方法中手动校验,或者通过Commons Validator的扩展来校验。
Struts2支持通过validate方法和XWork校验框架来进行校验。
9、Struts1支持每一个模块有单独的Request Processors(生命周期),但是模块中的所有Action必须共享相同的生命周期。
Struts2支持通过拦截器堆栈(Interceptor Stacks)为每一个Action创建不同的生命周期。堆栈能够根据需要和不同的Action一起使用。
9、过滤器和拦截器的区别
1、拦截器是基于java的反射机制的,而过滤器是基于函数回调
2、过滤器依赖于servlet容器,而拦截器不依赖于servlet容器
3、拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用
4、拦截器可以访问action上下文、值栈里的对象,而过滤器不能
5、在action的生命周期中,拦截器可以多次被调用,而过滤器只在容器初始化时调用一次
拦截器 :是在面向切面编程的就是在你的service或者一个方法,前调用一个方法,或者在方法后调用一个方法比如动态代理就是拦截器的简单实现,在你调用方法前打印出字符串(或者做其它业务逻辑的操作),也可以在你调用方法后打印出字符串,甚至在你抛出异常的时候做业务逻辑的操作。
过滤器:是在java web中,你传入的request,response提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者struts的 action进行业务逻辑,比如过滤掉非法url(不是login.do的地址请求,如果用户没有登陆都过滤掉),或者在传入servlet或者 struts的action前统一设置字符集,或者去除掉一些非法字符.
10、Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得java程序员可以随心所欲的使用对象编程思维来操纵数据库。
工作原理:
1.读取并解析配置文件2.读取并解析映射信息,创建SessionFactory 3.打开Sesssion 4.创建事务Transation 5.持久化操作6.提交事务7.关闭Session 8.关闭SesstionFactory
优点有:
1. 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。
2. Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作
3、 Hibernate使用Java反射机制而不是字节码增强程序来实现透明性。
4、 Hibernate的性能好,映射的灵活性比较出色。它支持各种关系数据库,从一对一到多对多的各种复杂关系。
11、hibernate的核心类是什么??重要方法是什么??
Configuration、SessionFactory
Session如下方法 Save、 load、 Update、Delete
Query q=CreateQuery(“from Customer where customerName=:customerName”)
beginTransaction、close、Transaction、Commit()
12、session.load()和session.get()的区别
Session.load/get方法均可以根据指定的实体类和id从数据库读取记录,并返回与之对应的实体对象。其区别在于:
如果未能发现符合条件的记录,get方法返回null,而load方法会抛出一个ObjectNotFoundException。
13、hql和sql的区别【可以这样说,hibernate是面向对象语言与关系型数据库之间的桥梁,他使得程序员可以不用关心底层数据库连接的代码,而可以专心写业务逻辑。】
sql是面向数据库表查询
hql是面向对象查询的,其form子句返回的是对象的实例。
14、hibernate与jdbc之间的区别【可以这样说,hibernate是面向对象语言与关系型数据库之间的桥梁,他使得程序员可以不用关心底层数据库连接的代码,而可以专心写业务逻辑。】
Hibernate作为一个O/R Mapping,比JDBC具备的优势有:
1.编程思想上,更加符合人的逻辑思维习惯,面向对象比面向过程更加容易理解,测试和维护
2.开发维护速度上,Hibernate显著的快,代码量显著小
3.通过Annotation进行数据库的字段加密
4.对Sql不熟的菜鸟来说可以自动调优
5.结合Spring,通过声明式事务可以省略事务的控制,事务以横切面形式出现
Jdbc比Hibernate具备的优势有:
1.大数据量访问时,Jdbc的效率显著快
2.直接操作数据库比较灵活
15、Hibernate是如何延迟加载?
当Hibernate在查询数据的时候,数据并没有存在与内存中,当程序真正对数据的操作时,对象才存在与内存中,就实现了延迟加载,他节省了服务器的内存开销,从而提高了服务器的性能。
16、说下Hibernate的缓存机制
  1. 内部缓存存在Hibernate中又叫一级缓存,属于应用事物级缓存
  2. 二级缓存:
  a) 应用及缓存
  b) 分布式缓存
c) 第三方缓存的实现
17、spring工作机制及为什么要用?【spring是一个轻量的控制反转和面向切面的容器框架】
  1.springmvc把所有的请求都提交给DispatcherServlet,它会委托应用系统的其他模块负责对请求进行真正的处理工作。
  2.DispatcherServlet查询一个或多个HandlerMapping,找到处理请求的Controller.
  3.DispatcherServlet把请求提交到目标Controller
  4.Controller进行业务逻辑处理后,会返回一个ModelAndView
  5.Dispathcher查询一个或多个ViewResolver视图解析器,找到ModelAndView对象指定的视图对象
  6.视图对象负责渲染返回给客户端。
IoC就是由容器来控制业务对象之间的依赖关系。控制反转的本质,是控制权由应用代码转到了外部容器,控制器的转移既是所谓的反转。控制权的转移带来的好处就是降低了业务对象之间的依赖程度,即实现了解耦。
DI/IOC,对持久层和表示层的控制与分配,增加系统的灵活性和稳定性. AOP,面向切面,利用代理对程序的有效管理.
spring是一个轻量级的IOC和AOP框架,通过spring的IOC实现松耦合,而作为一个AOP框架他又能分离系统服务,实现内聚开发 Spring 最好的地方是它有助于您替换对象。有了 Spring,只要用 JavaBean 属性和配置文件加入依赖性(协作对象)。然后可以很容易地在需要时替换具有类似接口的协作对象。}
Spring对多种ORM框架提供了很好的支持

1、Tomcat的优化经验

答:去掉对web.xml的监视,把JSP提前编辑成Servlet;有富余物理内存的情况下,加大Tomcat使用的JVM内存。

2、什么是Servlet?

答:可以从两个方面去看Servlet:

a、API:有一个接口servlet,它是servlet规范中定义的用来处理客户端请求的程序需要实现的顶级接口。

b、组件:服务器端用来处理客户端请求的组件,需要在web.xml文件中进行配置。

3、Servlet的生命周期,并说出Servlet和CGI的区别?

答:servlet有良好的生存期的定义,包括加载和实例化、初始化、处理请求以及服务结束。

  这个生存期由javax.servlet.servlet接口中的init、service、destroy方法表达。

 web容器加载servlet,生命周期开始。通过调用servlet的init()方法进行servlet的初始化。通过调用service()方法实现

 根据请求的不同调用不同的do**()方法。结束服务,web容器调用servlet的destroy()方法。

区别:

Servlet处于服务器进程中,它通过多线程运行service()方法,一个实例可以服务于多个请求,并且实例一般不会被销毁;而

CGI对每个请求都产生一个新的进程,服务完成后就销毁,所有效率低于Servlet。

4、Servlet的基本架构

答:

复制代码
public class ServletName extends HttpServlet
{
//初始化方法
public void init()
{
……
}
//GET请求处理的方法
public void doGet(HttpServletRequest request,HttpServletResponse response)
{
……
}
//POST请求处理的方法
public void doPost(HttpServletRequest request,HttpServletResponse response)
{
……
}
//结束服务的方法
public void destroy()
{
……
}
}
复制代码

5、Servlet API中forware()和redirect()的区别?

答:

a、浏览器显示

 重定向会改变URL地址,请求转发不会改变URL地址。

b、资源共享

 重定向不可以资源共享,请求转发可以。

c、功能

重定向可以用URL绝对路径访问其他Web服务器的资源,而请求转发只能在一个Web应用程序内进行资源转发,即服务器内部的一种操作。

d、效率

重定向效率低,相当于再一次请求;请求转发效率相对较高,跳转仅发生在服务器端。

6、什么情况下调用doGet()和doPost()?

答:默认情况是调用doGet()方法,JSP页面中的Form表单的method属性设置为post的时候,调用的为doPost()方法;为get的时候,调用deGet()方法。

7、request.getParameter()和request.getAttribute()的区别?

答:

a、request.getParameter()获取的类型是String;

request.getAttribute()获取的类型是Object

b、request.getPrameter()获取的是POST/GET传递的参数值和URL中的参数;

 request.getAttribute()获取的是对象容器中的数据值/对象

c、request.setAttribute()和request.getAttribute()可以发送、接收对象;

request.getParamter()只能接收字符串,官方不开放request.setParamter()(也就是没有这个方法)

setAttribute()和getAttribute()的传参原理:

setAttribute()是应用服务器把这个对象放在该页面所对应的一块内存中去,当你的页面服务器重定向到另外一个页面时,

应用服务器会把这块内存拷贝到另一个页面所对应的那块内存中。这个就可以通过getAttribute()获取到相应的参数值或者对象。

8、JSP有哪些内置对象?作用分别是什么?

答:JSP一共有9个内置对象:

request:负责得到客户端请求的信息,对应类型:javax.servlet.http.HttpServletRequest

response:负责向客户端发出响应,对应类型:javax.servlet.http.HttpServletResponse

session:负责保存同一客户端一次会话过程中的一些信息,对应类型:javax.servlet.http.httpsession

out:负责管理对客户端的输出,对应类型:javax.serlvet.jsp.jspwriter

application:表示整个应用环境的信息,对应类型:javax.servlet.servletcontext

config:表示ServletConfig,对应类型:javax.servlet.servletconfig

exception:表示页面中发生的异常,可以通过它获得页面异常信息,对应类型:java.lang.exception

pagecontext:表示这个JSP页面上下文,对应类型:javax.servlet.jsp.pagecontext

page:表示当前JSP页面本身。

9、JSP有哪些动作?作用分别是什么?

答:JSP一共有以下6中基本动作

JSP:include (当页面被请求的时候引入一个文件)

JSP:forward (将请求转到另一个页面)

JSP:useBean (获得JavaBean的一个实例)

JSP:setProperty (设置JavaBean的属性)

JSP:getProperty (获得JavaBean的属性)

JSP:plugin (根据浏览器类型为Java插件生成object或者embed两种标记)

10、JSP常用指令有哪些?

答:page、include、taglib

a、page指令:定义页面的一些属性,常用属性:

contentType=”text/html;charset=utf-8”; 向浏览器端输出数据的编码

pageEncoding=”utf-8”; JSP编译成java文件时所用的编码

session=”true” 是否自动创建session

b、include指令:引入一个静态的JSP页面

c、taglib指令:引入一个标签库

11、JSP中动态include和静态include的区别?

答 : a、静态include:语法:<%@ include file=”文件名” %>,相当于复制,编辑时将对应的文件包含进来,当内容变化时,不会再一次对其编译,不易维护。

    b、动态include:语法:<jsp:include page="文件名">,能够自动检查被包含文件,当客户端对JSP文件进行请求时,会重新将对应的文件包含进来,进行实时的更新。

12、页面间对象传递的方法?

答:request、session、application、cookie等。

13、JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么?

答:JSP是Servlet的扩展,本质上是Servlet的简易方式,更强调应用的外表表达。JSP编译后是”类Servlet”。Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在java文件中,并且完全从表示层中的HTML里分离开来。而JSP的情况是java和HTML可以组合成一个扩展名为.jsp的文件。JSP偏重于视图,Servlet偏重于业务逻辑。

14、 详细描述MVC。

答:基于java的web应用系统采用MVC设计模型,即用Model(模型)、View(视图)和Controller(控制)分离设计,这是目前web应用服务系统的主流设置方向。

  Model:处理业务逻辑的模块。

  View:负责页面显示,显示Model的处理结果给用户,主要实现数据到页面的转换过程。

  Controller:负责每个请求的分发,把Form数据传递给Model进行处理,处理完成后,把处理结果返回给相应的View显示给用户。

15、MVC各个部分都有哪些技术实现?如何实现?

答:MVC是Model-View-Controller的简写。Model代表应用的业务逻辑(通过JavaBean、EJB组件实现),View是引用的表示面(由JSP产生),Controller是提供应用的处理过程机制

(一般是一个Servelt),通过这种设计模型把应用逻辑、处理过程和显示逻辑分成不同的组件来实现。这些组件可以交互和重用。

16、我们在web应用开发过程中经常遇到输出某种编码的字符,如iso-8859-1等,如何输出一个某种编码的字符串?

答:下面这个例子是将iso-8859-1转换成utf-8编码方式。

复制代码
public String Translate(String str)
{
String s=”“;
try{
s=new String(str.getBytes(“iso-8859-1”),”UTF-8”);
s=str.trim();
}catch(Exception e){
System.err.println(e.getMessage());
}
return s;
}
复制代码

17、get和post的区别?

a、get是用来从服务器上获取数据,而post是用来向服务器传递数据;

b、get将表单中数据按照variable=value的形式,添加到action所指向的URL后面,并且两者用”?”连接,变量之间用”&”连接;

而post是将表单中的数据放在form的数据体中,按照变量与值对应的方式,传递到action所指定的URL。

c、get是不安全的,因为在传输过程中,数据是被放在请求的URL中;而post的所有操作对用户来说都是不可见的。

d、get传输的数据量小,这主要应为受url长度限制;而post可以传输大量的数据,所有上传文件只能用post提交。

e、get限制form表单的数据集必须为ASCII字符;而post支持整个IS01 0646字符集。

f、get是form表单的默认方法。

18、javascript常用的方面?

答:数据校验、页面特殊效果等。

19、常用的web容器和开发工具?

答:容器:Tomcat、Weblogic

 工具:Eclipse、Jbuilder

20、JSP的四种范围?

答:a、page是代表一个页面相关的对象和属性。一个页面由一个编译好的java servlet类(可以带有include指令,但不可以带有include动作)表示。这既包括servlet又包括编译成servlet的jsp页面。

  b、request是代表与web客户机发出的一个请求相关的对象和属性。一个请求可能跨越多个页面,涉及多个web组件(由于forware指令和include动作的关系)

  c、session是代表与用于某个web客户机的一个用户体验相关的对象和属性。一个web回话也可以经常跨域多个客户机请求。

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

21、应用服务器有哪些?

答:BEA Weblogic Server、IBM WebSphere Application Server、Oracle9i Application Server、JBoss、Tomcat。

22、几种回话跟踪技术?

答:cookie、url重写、hidden表单隐藏域、session

23、Servlet执行时一般实现哪几个方法?

答:

复制代码
public void init(ServletConfig config){}

public ServletConfig getServeltConfig(){}

public String ServletInfo(){}

public void service(HttpServletRequest request,HttpServletResponse response){}

public void destroy(){}
复制代码

24、简述HttpSession的作用、使用方法,可用代码说明。

答:HttpSession中可以跟踪并存储用户信息,把值设置到属性中,有两个方法:setAttribute(“变量/对象”,”变量/对象”);getAttribute(“变量/对象”);例如:在一个方法中用session.setAttribute(“username”,username);在session中设置一个属性名为username的变量或者对象,然后可以在同一个session范围内使用session.getAttribute(“username”); 来得到username属性或者对象。

25、J2EE是什么?

答:J2EE现在叫做Java EE:是(Java platform,Enterprice Edition 企业版)的简称。企业版本开发和部署服务器应用程序。

  J2EE是Sun公司提出的多层(multi-tiered)、分布式(distributed)、基于组件(component-base)的企业级应用模型(Enterprice Application Model)。

  在这样一个应用系统中,可按照功能划分不同的组件,这些组件又可在不同的计算机上,并且处理不同的层次(tier)中。所属层次包括客户层(client tier)、web层和组件、business层和组件、企业信息系统(EIS)层。

26、J2EE是技术、平台还是框架?

答:J2EE本身是一个标准,一个为企业分布式应用的开发提供的标准平台。

 J2EE也是一个框架,包括JDBC、JNDI、RMI、JMS、EJB、JTA等技术。

27、cookie和session的作用、区别、应用范围。

答:a、cookie数据保存在客户端,session数据保存在服务端。

 b、cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,相当重要的数据,应该使用session保存到服务端。

 c、session会在一定时间内保持在服务器上,但是会占用内存资源,当访问的用户过多,会加重服务器的负载,考虑到减轻服务器的压力,可以将不重要的数据放在cookie中持久的保存。

 d、单个cookie保存的数据不能超过4k,很多浏览器都限制站点最多保存20个cookie。

28、JSTL是什么?优点有哪些?

答:JSTL(JSP Standard Tag Library,JSP标准标签库)是一个不断完善的开放源代码的JSP标签库,由四个定制标记库(core、format、xml、sql)和一对通用标记库验证器(ScriptFreeTLV和PermittedTaglibsTLV)组成。优点有:

a、在应用程序服务器之间提供了一致的接口,最大程度的提高了web应用在各应用服务器之间的移植。

b、简化了JSP和web应用程序的开发。

c、以一种统一的方式减少了JSP中scriptlet代码数据,可以达到没有任何scriptlet代码的代码。在我们公司的项目中是不允许任何scriptlet出现在JSP中。

d、允许JSP设计工具与web应用程序开发的进一步集成。相信不久就会有支持JSTL的IDE开发工具出现。

29、J2EE的优越性主要表现在那些方面?

答:a、J2EE基于Java技术,与平台无关。

  b、J2EE提供了一个优秀的企业级应用程序框架,对快速高质量的开发系统打下了基础。

  c、J2EE提供相当专业的通用软件服务。

 d、J2EE拥有开放标准,许多大型公司实现了该规范支持的应用服务器。如:BEA、IBM、Oracle等。

30、JSP页面是如何被执行的?JSP执行效率比Servlet低吗?

答:当客户端向一个JSP页面发出请求时,Web Container将JSP转换成Servlet的源代码(只是第一次请求时),然后编译转化后的Servlet并加载到内存中执行,执行的结果Response到客户端。

JSP只在第一次执行的时候会转化为Servlet,以后的每次执行Web容器都是直接执行编译后的Servlet,所有JSP和Servlet只有第一次执行的时候不一样,JSP慢一点,以后的执行都是相同的。

31、JSP如何处理运行时异常(run-time)exception?

答:可是使用页面的errorPaga属性捕捉没有处理的运行时异常,然后自动转向到一个错误处理页面,代码如下:

猜你喜欢

转载自blog.csdn.net/m0_37852553/article/details/78360548