Java Web面试题集

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,其工作原理是什么,有什么优点?

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框 架提供了很好的支持


18、ArrayList,Vector, LinkedList的存储性能和特性HashMap和Hashtable的区别:

ArrayList Vector:以数组的方式存储,增、删慢,查、改快
ArrayList:线程不安全,速度快
Vector:线程安全,速度慢(synchoronized)
LikedList: 以单链表的方式存储,增、删快,查、改慢
HashMap与Hashtable都实现的Map接口,HashTable线程安全,HashMap线程不安全。

19、集合的通用方法有那些?通用方法是什么?(操作)

(1)集合List 的遍历方法有:
Iterator:
Enumeration
For
Get
set
(2)Collection的通用方法有:
Iterator()
Add()
Clear();
remove()


20、Java面向对象

1、抽象类和接口的区别?
(1)接口可以被多重implements,抽象类只能被单一extends
(2)接口只有定义,抽象类可以有定义和实现
(3)接口的字段定义默认为:public static finl,
(4)抽象类是典型的一个模板方法
2、java中常见的异常类:
(1). java.lang.nullpointerexception “程序遇上了空指针”,
(2). java.lang.arrayindexoutofboundsexception “数组下标越界”,
(3). java.lang.IndexOutOfBoundsException 索引越界异常。当访问某个序列的索引值小于0或大于等于序列大小时,抛出该异常。
(4). java.lang.OutOfMemoryError 内存不足错误。当可用内存不足以让Java虚拟机分配给一个对象时抛出该错误。

21、线程

1、sleep() 和 wait() 有什么区别
Sleep是指休眠给定的时间,当这个时间达到之后,线程会再次醒来。
Wait是等待状态,多长时间不清楚,由另一个线程将其唤醒。

、启动一个线程是用run()还是start()?
启动一个线程是调用start()方法,启动线程并调用run方法。

2、线程的基本概念、线程的基本状态以及状态之间的关系
线程是进程内的并发,没有自已内存空间,共享进程的,线程间的通信成本较低。
Java中的线程有四种状态分别是:运行、就绪、挂起、结束。
3、多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么? 用什么关键字修饰同步方法?stop()和suspend()方法为何不推荐使用?

多线程有两种实现方法,分别是继承Thread类与实现Runnable接口
同步的实现方面有两种,分别是synchronized,wait与notify
反对使用stop(),是因为它不安全。它会解除由线程获取的所有锁定,而且如果对象处于一种不连贯状态,那么其他线程能在那种状态下检查和修改它们。结果很难检查出真正的问题所在。suspend()方法容易发生死锁。调用suspend()的时候,目标线程会停下来,但却仍然持有在这之前获得的锁定。此时,其他任何线程都不能访问锁定的资源,除非被”挂起”的线程恢复运行。对任何线程来说,如果它们想恢复目标线程,同时又试图使用任何一个锁定的资源,就会造成死锁。所以不应该使用suspend(),而应在自己的Thread类中置入一个标志,指出线程应该活动还是挂起。若标志指出线程应该挂起,便用wait()命其进入等待状态。若标志指出线程应当恢复,则用一个notify()重新启动线程。

22、JSP中动态INCLUDE与静态INCLUDE的区别?

jsp:include:在运行时调用另一个页面,变量是可以重复的。
< %@include file=””%>:在转译时合在一起,会成为同一个类,变量不可以重复。

23、forward和redirect的区别?

forward: 转发,在下一个页面中,request保留上一个页面中的request的所有值
redirect: 跳转,不传递request对象。

24、请罗列jsp中的脚本、指令及动作?

指令
<%@page contentType=”text/html;charset=utf-8” language=”java” import=””%> 配置字符集错误页面等等
<%@include file=””%> 包含一下js jsp等
<%@taglib uri=”” prefix=””%> 导包
动作:
<jsp:useBean class=”” id=”” scope=””> 在scope中如果没有实例化一个对象,如果有直接用以前的。
<jsp:getProperty name=”” property=””> 向一个bean中设置属性值
<jsp:forward > jsp页的转发
<jsp:include page=””> 导入一个jsp页面


  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值