【Jsp精品源码栏目提醒】:以下是网学会员为您推荐的Jsp精品源码-软件开发面试题及答案 - 招聘面试,希望本篇文章对您学习有所帮助。
1、 请讲一下 struts 的流程 答: 用户提交表单 Struts 根据表单的请求路径,在 web.xml 中指定 servlet并根据元素读 取 servlet 的配置信息 ActionServlet 或者扩展的 ActionServlet 接收请求,并根据请求的路径来判断调用哪 一个 action即 action 元素中的 path 路径,再根据 action 元素中的 type 属性,用来指定处 理请求的逻辑 action(属于控制器部分),再根据其 name 属性来绑定 form-bean,即创建一 个 HelloForm 对象,并把用户提交的表单数据传给 ActionForm 对象,这个对象保存在 scope 设置的范围内。
如果 action 的 validate 属性设置为 true,则 ActonServlet 就调用 HelloForm 对象的 validate方法,对表单进行验证。
ActionServlet 查找 action 是否存在,如果不存在就创建一个实例,然后调用 HelloAction 的 execute方法。
通过 execute方法中的逻辑验证后,执行相关的业务逻辑,最后调用 “SayHello” ActionMapping.findForward 方法。
其中的参数 SayHello 与 struts-config.xml 文件中的 action 元素的 forword 属性值对应,则就将请求转发到“hello.
jsp”页面,结束。
2、 一条 SQL 语句的执行顺序是怎么样的? 答:1、from 子句组装来自不同数据源的数据; 2、where 子句基于指定的条件对记录行进行筛选; 3、group by 子句将数据划分为多个分组; 4、使用聚集函数进行计算; 5、使用 having 子句筛选分组; 6、计算所有的表达式; 7、使用 order by 对结果集进行排序。
3、 CMM 是什么? CMM 是指 “能力成熟度模型”,其英文全称为 Capability Maturity Model for Software,英文缩写为SW-CMM,简称 CMM。
它是对于软件组织在定义、实施、度量、控制和改善其软件过程的实践中各个发展阶段的描述。
CMM 的核心是把软件开发视为一个过程,并根据这一原则对软件开发和维护进行过程监控和研 究,以使其更加科学化、标准化、使企业能够更好地实现商业目标。
4、 XML 有几种解析方式?答:有 DOMSAXSTAX 等DOM:处理大型文件时其性能下降的非常厉害。
这个问题是由 DOM 的树结构所造成的,这种结构占用的内存较多,而且 DOM 必须在解析文件之前把整个文档装入内存适合对 XML 的随机访问 SAX:不现于 DOMSAX 是事件驱动型的 XML 解析方式。
它顺序读取 XML 文件,不需要一次全部装载整个文件。
当遇到像文件开头,文档结束,或者标签开头与标签结束时,它会触发一个事件,用户通过在其回调事件中写入处理代码来处理 XML 文件,适合对 XML 的顺序访问5、 EJB 分为几种 BEAN 答:EJB 依照特性的不同,目前区分为三种,分别是 Session Bean ,Entity Bean ,以及 Message Driven Bean 。
6、 什么是 UML? 答:统一建模语言(UML 是 Unified Modeling Language 的缩写)是用来对软件密集系统进行可视化 建模的一种语言。
UML 为面向对象开发系统的产品进行说明、可视化、和编制文档的一种标准语言。
7、 你使用过 UML 哪些?答:UML 中包括九种图:用例图、类图、对象图、状态图、时序图、协作图、活动图、组件图、配置图。
1)用例图(Use Case Diagram)它是 UML 中最简单也是最复杂的一种图。
说它简单是因为它采用了面向对象的思想,又是基于用户视角的,绘制非常容易,简单的图形表示让人一看就懂。
说它复杂是因为用例图往往不容易控制,要么过于复杂,要么过于简单。
用例图表示了角色和用例以及它们之间的关系。
2)类图(Class Diagram) 是最常用的一种图,类图可以帮助我们更直观的了解一个系统的体系结构。
通过关系和类表示的类图,可以图形化的方式描述一个系统的设计部分。
3)对象图()对象图是类图的实例,几乎使用与类图完全相同的标识。
它们的不同点在于对象图显示类的多个对象实例,而不是实例的类。
一个对象图是类图的一个实例。
由于对象存在生命周期,因此对象图只能在系统某一时间段存在。
4)状态图描述一个实体基于事件反应的动态行为,显示了该实体如何根据当前所处的状态对不同的时间做出反应的。
通常创建一个 UML 状态图是为了以下的研究目的:研究类、角色、子系统、或组件的复杂行为。
5)时序图又称顺序图,描述了对象之间动态的交互关系,着重体现对象间消息传递的时间顺序。
顺序图由一组对象构成,每个对象分别带有一条竖线,称作对象的生命线,它代表时间轴,时间沿竖线向下延伸。
顺序图描述了这些对象随着时间的推移 相互之间交换消息的过程。
消息用从一务垂直的对象生命线指向另一个对象的生命线的水平箭头表示。
图中还可以根据需要增加有关时间的说明和其他注释。
6)协作图协作图用于显示组件及其交互关系的空间组织结构,它并不侧重于交互的顺序。
协作图显示了交互中各个对象之间的组织交互关系以及对象彼此之间的链 接。
与序列图不同,协作图显示的是对象之间的关系。
另一方面,协作图没有将时间作为一个单独的维度,因此序列号就决定了消息及并发线程的顺序。
协作图是一 个介于符号图和序列图之间的交叉产物,它用带有编号的箭头来描述特定的方案,以显示在整个方案过程中消息的移动情况。
协作图用途:通过描绘对象之间消息的移动情况来反映具体的方案。
显示对象及其交互关系的空间组织结构,而非交互的顺序。
7)活动图(Activity Diagram)UML 活动图记录了单个操作或方法的逻辑,单个用户案例,或者单个业务流程的逻辑。
描述系统中各种活动的执行顺序,通常用于描述一个操作中所要进行的各项活动的执行流程。
同时,它也常被用来描述一个用例的处理流程,或者某种交互流程。
活动图由一些活动组成,图中同时包括了对这些活动的说明。
当一个活动执行完毕之后,控制将沿着控制转移箭头转向下一个活动。
活动图中还可以方便地描述控制转移的条件以及并行执行等要求。
8)组件图(Component Diagram)组件图是用来反映代码的物理结构。
从组件图中,可以了解各软件组件(如源代码文件或动态链接库)之间的编译器和运行时依赖关系。
使用组件图可以将系统划分为内聚组件并显示代码自身的结构。
组件图的主要目的是显示系统组件间的结构关系。
9)配置图配置图描述系统中硬件和软件的物理配置情况和系统体系结构。
在配置图中,用结点表示实际的物理设备,如计算机和各种外部设备等,并根据它们之间的连接关系,将相应的结点连接起来,并说明其连接方式。
在结点里面,说明分配给该结点上运行的可执行构件或对象,从而说明哪些软件单元被分配在哪些结点上运行8、 存储过程和函数的区别? 答:存储过程是用户定义的一系列 sql 语句的集合,涉及特定表或其它对象的任务,用户可以调用存 储过程,而函数通常是数据库已定义的方法,它接收参数并返回某种类型的值并且不涉及特定用户表。
9、 事务是什么?答:事务是作为一个逻辑单元执行的一系列操作,一个逻辑工作单元必须有四个属性,称为 ACID(原子性、一致性、隔离性和持久性)属性,只有这样才能成为一个事务:原子性:事务必须是原子工作单元;对于其数据修改,要么全都执行,要么全都不执行。
一致性:事务在完成时,必须使所有的数据都保持一致状态。
在相关数据库中,所有规则都必须应用于事务的修改,以保持所有数据的完整性。
事务结束时,所有的内部数据结构(如 B 树索引或双向链表)都必须是正确的。
隔离性:由并发事务所作的修改必须与任何其它并发事务所作的修改隔离。
事务查看数据时数据所处的状态,要么是另一并发事务修改它之前的状态,要么是另一事务修改它之后的状态,事务不会查看中间状态的数据。
这称为可串行性,因为它能够重新装载起始数据,并且重播一系列事务,以使数据结束时的状态与原始事务执行的状态相同。
持久性:事务完 成之后,它对于系统的影响是永久性的。
该修改即使出现系统故障也将一直保持。
10、游标的作用?如何知道游标已经到了最后? 答:游标用于定位结果集的行,通过判断全局变量FETCH_STATUS 可以判断是否到了最后,通常此变 量不等于 0 表示出错或到了最后。
11、触发器分为事前触发和事后触发,这两种触发有和区别。
语句级触发和行级触发有何区别。
答:事前触发器运行于触发事件发生之前,而事后触发器运行于触发事件发生之后。
通常事前触发器 可以获取事件之前和新的字段值。
语句级触发器可以在语句执行前或后执行,而行级触发在触发器所 影响的每一行触发一次。
12、和的区别 答:是位运算符,表示按位与运算,是逻辑运算符,表示逻辑与(and)13、Collection 和 Collections 的区别 答:Collection 是集合类的上级接口,继承于他的接口主要有 Set 和 List. Collections 是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线 程安全化等操作。
14、Overload 和 Override 的区别。
Overloaded 的方法是否可以改变返回值的类型? 答:方法的重写 Overriding 和重载 Overloading 是 Java 多态性的不同表现。
重写 Overriding 是父类 与子类之间多态性的一种表现,重载 Overloading 是一个类中多态性的一种表现。
如果在子类中定义 某方法与其父类有相同的名称和参数,我们说该方法被重写 Overriding。
子类的对象使用这个方法 时,将调用子类中的定义,对它而言,父类中的定义如同被屏蔽了。
如果在一个类中定义了多个同 名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载Overloading。
Overloaded 的方法是可以改变返回值的类型。
15、error 和 exception 有什么区别 答:error 表示恢复不是不可能但很困难的情况下的一种严重问题。
比如说内存溢出。
不可能指望程 序能处理这样的情况。
exception 表示一种设计或实现问题。
也就是说,它表示如果程序运行正常, 从不会发生的情况。
16、ArrayList 和 Vector 的区别HashMap 和 Hashtable 的区别 答:就 ArrayList 与 Vector 主要从二方面来说. 一.同步性:Vector 是线程安全的,也就是说是同步的,而 ArrayList 是线程序不安全的,不是同步的 二.数据增长:当需要增长时Vector 默认增长为原来一培,而 ArrayList 却是原来的一半 就 HashMap 与 HashTable 主要从三方面来说。
一.历史原因:Hashtable 是基于陈旧的 Dictionary 类的,HashMap 是 Java 1.2 引进的 Map 接口的一个 实现 二.同步性:Hashtable 是线程安全的,也就是说是同步的,而 HashMap 是线程序不安全的,不是同步 的 三.值:只有 HashMap 可以让你将空值作为一个表的条目的 key 或 value。
17、谈谈 final finally finalize 的区别 答:final—修饰符(关键字)如果一个类被声明为 final,意味着它不能再派生出新的子类,不能作 为父类被继承。
因此一个类不能既被声明为 abstract 的,又被声明为 final 的。
将变量或方法声明 为 final,可以保证它们在使用中不被改变。
被声明为 final 的变量必须在声明时给定初值,而在以 后的引用中只能读取,不可修改。
被声明为 final 的方法也同样只能使用,不能重载 finally—再异常处理时提供 finally 块来执行任何清除操作。
如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话) finalize—方法名。
Java 技术允许使用 finalize 方法在垃圾收集器将对象从内存中清除出去之前 做必要的清理工作。
这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。
它是 在 Object 类中定义的,因此所有的类都继承了它。
子类覆盖 finalize 方法以整理系统资源或者 执行其他清理工作。
finalize 方法是在垃圾收集器删除对象之前对这个对象调用的。
18、面向对象的特征有哪些方面 答:1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。
抽 象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。
抽象包括两个方面,一是 过程抽象,二是数据抽象。
2.继承: 继承是一种联结类的层次模型,并且允许和鼓励类的重用,它提供了一种明确表述共性的方法。
对象 的一个新类可以从现有的类中派生,这个过程称为类继承。
新类继承了原始类的特性,新类称为原始 类的派生类(子类),而原始类称为新类的基类(父类)。
派生类可以从它的基类那里继承方法和实 例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。
3.封装: 封装是把过程和数据包围起来,对数据的访问只能通过已定义的界面。
面向对象计算始于这个基本概 念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其 他对象。
4. 多态性: 多态性是指允许不同类的对象对同一消息作出响应。
多态性包括参数化多态性和包含多态性。
多态性 语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。
19、int 和 Integer 有什么区别 答:Java 提供两种不同的类型:引用类型和原始类型(或内置类型)。
Int 是 java 的原始数据类型, Integer 是 java 为 int 提供的封装类。
Java 为每个原始类型提供了封装类。
原 始 类 型 封 装 类 booleanBooleancharCharacterbyteByteshortShortintIntegerlongLongfloatFloatdoubl eDouble 引用类型和原始类型的行为完全不同,并且它们具有不同的语义。
引用类型和原始类型具有不同的特 征和用法,它们包括:大小和速度问题,这种类型以哪种类型的数据结构存储,当引用类型和原始类 型用作某个类的实例数据时所指定的缺省值。
对象引用实例变量的缺省值为 null,而原始类型实例变 量的缺省值与它们的类型有关20、什么是 JDK,举出几个公司开发的 JDK。
答:JDKJava Development Kit是整个 Java 的核心,包括了 Java 运行环境(Java Runtime Envirnment), 一堆 Java 工具和 Java 基础的类库rt.jar。
不论什么 Java 应用服务器实质都是内置了某个版本的 JDK。
因此掌握 JDK 是学好 Java 的第一步。
最主流的 JDK 是 Sun 公司发布的 JDK,除了 Sun 之外,还 有很多公司和组织都开发了自己的 JDK,例如 IBM 公司开发的 JDK,BEA 公司的 Jrocket,还有 GNU 组 织开发的 JDK 等等。
21、什么是应用服务器App Server?简要介绍几种常用的 App Server。
App 答: Server 是运行 Java 企业组件的平台,构成了应用软件的主要运行环境。
当前主流的 App Server 是 BEA 公司的 Weblogic Server 和 IBM 公司的 Websphere 以及免费的 Jboss。
22、说出 Servlet 的生命周期。
答:Servlet 被服务器实例化后,容器运行其 init 方法,请求到达时运行其 service 方法,service 方法自动派遣运行与请求对应的 doXXX 方法(doGet,doPost)等,当服务器决定将实例销毁的时候调 用其 destroy 方法。
23、说出 ArrayListVector LinkedList 的存储性能和特性 答:ArrayList 和 Vector 都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和 插入元素,它们都允许直接按序号索引元素,但是插 入元素要涉及数组元素移动等内存操作,所以索 引数据快而插入数据慢,Vector 由于使用了 synchronized 方法 , (线程安全) 通常性能上较 ArrayList 差,而 LinkedList 使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据 时只需要记录本项的前后项即 可,所以插入速度较快。
24、forward 和 redirect 的区别 答:forward 是服务器请求资源,服务器直接访问目标地址的 URL,把那个 URL 的响应内容读取过来, 然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏 中还是原来的地址。
redirect 就是服务端根据逻辑发送一个状态码告诉浏览器重新去请求那个地址,一般来说浏览 器会用刚才请求的所有参数重新请求,所以 sessionrequest 参数都可以获取。
25、EJB 与 JAVA BEAN 的区别? 答:Java Bean 是可复用的组件,对 Java Bean 并没有严格的规范,理论上讲,任何一个 Java 类都可 以是一个 Bean。
但通常情况下,由于 Java Bean 是被容器所创建(如 Tomcat)的,所以 Java Bean 应 具有一个无参的构造器,另外,通常 Java Bean 还要实现 Serializable 接口用于实现 Bean 的持久性。
Java Bean 实际上相当于微软 COM 模型中的本地进程内 COM 组件,它是不能被跨进程访问的。
Enterprise Java Bean 相当于 DCOM,即分布式组件。
它是基于 Java 的远程方法调用(RMI)技术的,所以 EJB 可 以被远程访问(跨进程、跨计算机)。
但 EJB 必须被布署在 诸如 Webspere、WebLogic 这样的容器中, EJB 客户从不直接访问真正的 EJB 组件,而是通过其容器访问。
EJB 容器是 EJB 组件的代 理,EJB 组 件由容器所创建和管理。
客户通过容器来访问真正的 EJB 组件。
26、
JSP 中动态 INCLUDE 与静态 INCLUDE 的区别? 答:动态 INCLUDE 用
jsp:include 动作实现 它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数。
静态 INCLUDE 用 include 伪码实现定不会检查所含文件的变化,适用于包含静态页面27、Java 中的异常处理机制的简单原理和应用 答:当 JAVA 程序违反了 JAVA 的语义规则时,JAVA 虚拟机就会将发生的错误表示为一个异常。
违反语 义 规 则 包 括 2 种 情 况 。
一 种 是 JAVA 类 库 内 置 的 语 义 检 查 。
例 如 数 组 下 标 越 界 会 引 发 IndexOutOfBoundsException访问 null 的对象时会引发 NullPointerException。
另一种情况就是 JAVA 允许程序员扩展这种语义检查,程序员可以创建自己的异常,并自由选择在何时用 throw 关键字 引发异常。
所有的异常都是 java.lang.Thowable 的子类。
28、请说出你所知道的线程同步的方法 答:wait:使一个线程处于等待状态,并且释放所持有的对象的 lock。
sleep: 使 一 个 正 在 运 行 的 线 程 处 于 睡 眠 状 态 , 是 一 个 静 态 方 法 , 调 用 此 方 法 要 捕 捉 InterruptedException 异常。
notify:唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切的唤醒某一个等 待状态的线程,而是由 JVM 确定唤醒哪个线程,而且不是按优先级。
Allnotity:唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的锁,而是让它们 竞争。
29、
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 可以存贮用户的状态 信息 applicaton 表示一个 javax.servle.ServletContext 对象。
这有助于查找有关 servlet 引擎和 servlet 环境的信息 config 表示一个 javax.servlet.ServletConfig 对象。
该对象用于存取 servlet 实例的初始化参 数。
page 表示从该页面产生的一个 servlet 实例30、四种会话跟踪技术 答:会话作用域 ServletsJSP 页面描述 page 否是代表与一个页面相关的对象和属性。
一个页面由一个编译好的 Java servlet 类(可以带有 任何的 include 指令,但是没有 include 动作)表示。
这既包括 servlet 又包括被编译成 servlet 的
JSP 页面 request 是是代表与 Web 客户机发出的一个请求相关的对象和属性。
一个请求可能跨越多个页面,涉 及多个 Web 组件(由于 forward 指令和 include 动作的关系) session 是是代表与用于某个 Web 客户机的一个用户体验相关的对象和属性。
一个 Web 会话可以也 经常会跨越多个客户机请求 application 是是代表与整个 Web 应用程序相关的对象和属性。
这实质上是跨越整个 Web 应用程序, 包括多个页面、请求和会话的一个全局作用域