Java Web 面试题2

1、Servlet 的生命周期,并说出 Servlet 与 CGI 的区别

Web 容器加载 Servlet 并将其实例化后,Servlet 生命周期开始,容器运行其 init 方法进行 Servlet 的初始化,请求到达时运行其 service 方法,service 方法自动派遣,运行请求的 doXXX 方法(doGet、doPost),当服务器决定将实例销毁的时候调用其 Destroy 方法。与 CGI 的区别在于,Servlet 处于服务器进程中,它通过多线程方式运行其 service 方法,一个实例可以运行多个请求,并且其实例一般不会销毁,而 CGI 对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于 Servlet。

 

2、forward 与 redirect 的区别

forward 是控制权的转向,是服务器请求资源,服务器直接请求目标地址的 URL,把那个 URL 的响应内容读取过来,然后把这些内容再发给浏览器。浏览器不知道服务器发送的内容是哪儿来的,所以它的地址还是原来的地址。redirect 就是服务器端根据逻辑,发送一个状态码,告诉浏览器去请求一个新的地址,浏览器地址栏上显示的是新的请求地址。forward 更高效。有些情况下,如果需要使用其它服务器上的资源,则必须使用 redirect

 

3、JSP 中动态 include 与静态 include 的区别

动态 include 用 jsp:include 动作实现:<jsp:include page="test.jsjp" flush="true"/>,它总是检查所包含文件中的变化,适用于包含动态页面,并且可以带参数;静态 include 用 include 伪代码实现,它不会检查所含文件的变化,适用于包含静态页面:<%@ include file="test.html" %>

 

4、JSP 有哪些内置对象,作用是什么

request:同 Servlet 里的request

response:同 Servlet 里的response

session:同 request.getSession()

application:同 request.getServletContext

out:同 response.getWriter()

config:同 Servelt 的 init 方法里的 ServletConfig 参数

page:表示该页面产生的一个 Servlet 实例

exception:针对错误网页,未捕捉的除外

 

5、JSP 的常用指令

<%@ page language="java" pageEncoding="utf-8" contentType="text/html;charset=utf-8" %>

<%@ include file="test.html" %>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/fmt" %>

 

6、JSP 有哪些动作,分别是什么

JSP 共有以下 6 种动作

jsp:include 在页面被请求时引用一个文件

jsp:useBean 寻找或实例化一个 JavaBean

jsp:setProperty 设置 JavaBean 的属性

jsjp:getProperty 输出某个 JavaBean 的属性

jsp:forward 转发

jsp:plugin 根据浏览器类型为 Java 插件生成 object 标记

 

7、GET 与 POST 的区别

form 中的 get 和 post 方法,在数据传输过程中分别对应了 http 协议中的  GET 与 POST 方法。

GET 是用来从服务器上获取数据,而 POST 是用来向服务器上传数据

GET 将表单中数据按 variable=value 的形式,添加到 action 所指向的 URL 后面,两者使用“?”连接,而多个变量之间使用“&”连接;POST 是将表单中的数据放在 form 的数据体中,按照变量和值相对应的方式,传递到 action 所指向的 URL

GET 是不安全的,因为在传输过程,数据被放在请求的 URL 中;POST 的所有操作对用户来说是不可见的

GET传输的数据量小,这主要是因为受 URL 长度限制;POST 可以传输大量的数据,所以上传文件只能使用 POST

GET 限制 form 表单的数据集必须为 ASCII 字符,而 POST 支持整个 ISO10646 字符集

GET 是 form 的默认方法

 

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

最常用的容器:tomcat、weblogic

开发工具:eclipse、jbuilder、ItelliJ IDEA

 

9、Web Application 的基本目录结构

webapps

    application

        jsp 页面

        WEB-INF

            classes

            lib

            web.xml

            jsp 页面

        META-INF

 

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

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

 

11、JSP 的四种数据共享范围

pageContext 是代表与一个页面相关的对象和属性。一个页面由一个编译好的 Servlet 类(可以带有任何的 include 指令,没有 include 动作)表示。这既包括 Servlet 又包括被编译成 Servlet 的 JSP 页面

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

Session 是代表与用于某个 web 客户机的一个用户体验相关的对象和属性。一个 web 会话可以也经常或跨越多个客户机请求

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

 

12、对 MVC 的理解,MVC 有什么优缺点,结合Struts,说明在一个 Web 应用中如何去使用

基于 Java 的 Web 应用系统采用 MVC 架构模式,即 model(模型)、view(视图)、control(控制器)分离设计;这是目前 Web 应用服务系统的主流设计方向

MVC 设计模式:应用观察者模式的框架模式

model:处理业务逻辑的模块,每一种处理一个模块(模型,操作数据的业务处理层,并独立于表现层)

view:负责页面显示,显示 model 处理结果给用户,主要实现数据到页面转换过程(视图,通过客户端数据类型显示数据,并回显模型层的执行结果)

control:负责请求分发,把 form 数据传递给 model 处理,把处理结果的数据传递给 view 显示(控制器,视图层和模型层的桥梁,控制数据的流向,接受视图发出的事件,并重绘视图)

JSP + Servlet + JavaBean,以控制器为核心,JSP 只负责显示和收集数据,Servlet,连接视图和模型,将视图层数据发送给模型层,JavaBean,分为业务类和数据实体,业务类处理业务数据,数据实体承载数据,基本上大多数的项目都是使用这种 MVC 的实现模式

 

13、会话跟踪技术

Cookie、URL 重写、设置表单隐藏域

 

14、过滤器有哪些作用

验证客户是否来自可信网络

对客户提交的数据进行重新编码

过滤掉客户的某些不应该出现的词汇

验证用户是否可以登录

验证客户的浏览器是否支持当前的应用

记录系统日志

 

15、web.xml 的作用

用户配置 web 应用的信息,如 listener、filter、Servlet

 

16、常用的 JSTL 标签

<c:if>

<c:choose>、<c:when>、<c:otherwise>

<c:forEach>

<c:set>

 

17、中间件

中间件就是程序中可植入的,可重用的,与业务逻辑无关的各种组件

中间件是基础软件的一大类,属于可复用软件的范畴。顾名思义,中间件处于操作系统软件与用户的应用软件的中间。中间件在操作系统、网络和数据库之上,应用软件的下层,总的作用是为处于自己上层的应用软件提供运行与开发的环境,帮助用户灵活、高效的开发和集成复杂的应用软件

中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源,中间件位于客户机服务器的操作系统之上,管理计算资源和网络通信。

举例:

RMI(Remote Method Invocation)远程调用

Load Balancing 负载均衡,将访问符合分散到各个服务器中

Treasparent Fail-over 透明的故障切换

Clustering 集群,用多个小的服务器代替大型机

Back-end-Integration 后端集成,用现有的、新开发的系统如何去集成遗留的系统

Transaction 事务(全局事务:分布式事务)(局部事务:在同一数据库连接内的事务)

Dynamic Redeployment 动态重新部署,在不停止原系统的情况下,部署新的系统

System Managerment 系统管理

Threading 多线程处理

Message-oriented Middleware 面向消息的中间件(异步的调用编程)

Component Life Cycle 组件的生命周期管理

Resource pooling 资源池

Security 安全

Caching 缓存

 

18、如何输出某种编码的字符串

String str = new String("testABC".getBytes("iso-8859-1"), "utf-8");

 

19、J2EE 是技术还是平台还是框架

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

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

 

20、什么是 ORM

对象关系映射(Object-Relational Mapping)是一种为了解决面向对象与面向关系数据库存在的互不匹配的技术,简单说,ORM 是通过使用描述对象和数据库之间映射的元数据,将 Java 程序中的对象自动持久化到关系数据库中,本质上就是将数据从一种形式转换到另一种形式

 

21、Hibernate 的 5 个核心接口

Configuration:配置 Hibernate,根据其启动 Hibernate,创建 SessionFactory 对象

SessionFactory:初始化 Hibernate,充当数据存储源的代理,创建 session 对象,SessionFactory 是线程安全的,意味着它的同一个实例可以被应用的多个线程共享,是重量级、二级缓存

Session:负责保存、更新、删除、加载和查询对象,是线程不安全的,避免多个线程共享一个 session,是轻量级、一级缓存

Query 和 Criteria:执行数据库的查询

 

22、Hibernate 是如何处理事务的

Hibernate 的事务实际上是底层的 JDBC Transaction 的封装或者是 JTA Transaction 的封装,默认情况下使用 JDBC Transaction

 

23、Connection 类中有哪几个事务处理方法

setAutoCommit(boolean autoCommint):设置是否自动提交事务,默认为自动提交

commint():提交事务

rollback():回滚事务

 

24、JDBC 中访问数据库的步骤、Statement 和 PreparedStatement 的区别

Java 中访问数据库的步骤如下

1)注册驱动

2)建立连接

3)创建 Statement

4)执行 sql 语句

5)处理结果集(若 sql 语句为查询语句)

6)关闭连接

Statement、PreparedStatement 区别

1) 创建时的区别:

    Statement stm = con.createStatement();

    PreparedStatement pstm = con.prepareStatement(sql);

执行的时候:

    stm.execute(sql);

    pstm.execute();

2) PreparedStatement 一旦绑定了 SQL,此 pstm 就不能执行其它的 SQL,即只能执行一条 SQL 命令;Statement 可以执行多条 SQL 命令。

3) 对于执行同构的 SQL(只有参数值不同,其它SQL 结构都相同),用 PreparedStatement 的执行效率比较高,支持预编译,可以执行批量处理任务;对于异构的SQL 语句,Statement 的执行效率较高。

4) 代码的可读性和可维护性;(例如一个insert 的 SQL 语句,stm 在 SQL 中需要用字符形式写入传递的参数,pstm 提供方法传递参数,并且过滤掉SQL 中的特俗字符“ ’”,“-”)。

5) PreparedStatement 提高了安全性,防止了SQL 注入,但 Statement 不能实现,只能做判断和过滤。

 

25、Hibernate 中 Java 对象的三种状态,对象分别如何进入某种状态

1)临时状态(transient)

特征:

不处于 Session 缓存中

数据库中没有对象记录

Java 对象如果进入临时状态:

通过 new 语句创建一个对象时

当调用 session 的 delete() 方法,从 session 缓存删除一个对象时

2)持久化状态(persisted)

特征:

处于 session 缓存中

数据库中有对象记录

session 在特定时刻会保持二者同步

Java 对象如何进入持久化状态

session 的 save() 从临时状态到持久化状态

session 的 load(), get() 方法返回的对象

session 的 find() 返回的 list 集合中存放的对象

session 的 update(), saveOrUpdate() 使游离态到持久化状态

3)游离状态(detached)

特征:

不再位于 session 缓存中

游离对象由持久化状态转变而来,数据库中可能还有对应记录

Java 对象如何从持久化状态到游离状态

session 的 close() 方法

session 的 evict() 方法,从缓存中删除一个对象。 提高性能,少用。

 

26、JDBC 相对于 Hibernate 的优势

JDBC 效率高、直接操作数据库比较灵活

 

27、Hibernate 如何延时加载

当 Hibernate 在查询数据的时候,数据并没有存在内存中,当程序真正对数据进行操作时,对象才存在内存中,就实现了延时加载。节省了服务器的内存开销,从而提高了服务器的性能

 

28、session.load() 与 session.get() 的区别

都可以根据指定的实体类和 id 从数据库读取记录,并返回与之对应的实体对象

如果没有发现符合条件的记录,get 方法返回 null,而 load 方法会抛出一个 ObjectNotFundException

 

29、cookie 机制与 session 机制的区别

cookie 机制采用的是在客户端保持状态的方案,而 session 机制采用的是在服务器端保持状态的方案。由于服务器端保持状态的方案也需要在客户端保存一个标识,所有,session 机制可能需要借助于 cookie 机制来达到保存标识的目的

 

转发495303098的,供参考学习

posted @ 2018-07-03 17:24  LuoBaiLin  阅读(130)  评论(0编辑  收藏  举报