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 机制来达到保存标识的目的

Java Web 笔试(面试)题的更多相关文章

  1. (Java后端 Java web)面试时如何展示自己非技术方面的能力(其实就是综合能力)

    这篇文章的适用范围其实不仅限于Java后端或Java Web,不过其中有些是拿这方面举例的,在其它方面,大家可以举一反三,应该也能得到些启示. 我们在面试时,会发现有些候选人技术不错,比如在Java ...

  2. Java大厂笔试&&面试集合大全目录

    面试技巧 掌握面试技巧,提升自身软实力! HR面试都会问什么问题?(上) HR面试都会问什么问题?(下) 作为一技术人员,面试前都需要做哪些准备? 面试题 Java各个阶段面试题,帮你提升自我,拿到高 ...

  3. 20道Java实习生笔试面试选择题(内附答案解析)

    ​1.以下对继承的描述错误的是(A) A.Java中的继承允许一个子类继承多个父类 B.父类更具有通用性,子类更具体 C.Java中的继承存在的传递性 D.当实例化子类时会递归调用父类中的构造方法 解 ...

  4. java第一次笔试+面试总结

    今天是自己第一次java笔试和面试,总体感觉比预期好一点. 笔试题第一面是问答题,主要考查java基础,一共有18题,我有6道题没有写出来.第二面主要是算法题,一共有8道题,我大概写出来4道题,第三面 ...

  5. Java web 前端面试知识点总结

    经过几家大厂面试,目前成功拿到唯品会offer,分享一下我的面试知识点总结: 耦合性:也称块间联系.指软件系统结构中各模块间相互联系紧密程度的一种度量.模块之间联系越紧密,其耦合性就越强,模块的独立性 ...

  6. Java Web Services面试

    Q. 应用集成方式有哪些? A. 应用可以采用以下方式集成: 1. 共享数据库 2. 批量文件传输 3. 远程过程调用(RPC) 4. 通过消息中间件来交换异步信息(MOM) Q. 应用集成可以采用的 ...

  7. 【转】Java Web Services面试问题集锦

    Q. 应用集成方式有哪些? A. 应用可以采用以下方式集成: 1. 共享数据库 2. 批量文件传输 3. 远程过程调用(RPC) 4. 通过消息中间件来交换异步信息(MOM) Q. 应用集成可以采用的 ...

  8. Java Web架构知识整理——记一次阿里面试经历

    惭愧,从一次电面说起.我个人在某国企做一名软件设计师,国企大家都懂的,待遇一般而且没啥意思,做的方向基本都是操作系统.驱动和工具软件的开发,语言基本都是C/C++.最近也想跳槽,刚好有幸得到了一次阿里 ...

  9. java web面试技巧,数据库面试,java web轻量级开发面试教程

    我最近看到一本比较好的讲java web方面面试的书,java web轻量级开发面试教程. 其中不仅用案例和视频讲述了Spring MVC,Hibernate, ORM等方面的技巧,而且还实际讲到了面 ...

随机推荐

  1. 【PMP】项目生命周期和开发生命周期

    一.定义 项目生命周期:指项目从启动到完成所经历的一系列阶段. 开发生命周期:项目生命周期内通常有一个或多个阶段与产品.服务或成果的开发相关,这些阶段称为开发生命周期. 二.生命周期 预测型生命周期( ...

  2. bootstrap响应式前端页面

    技术:HTML+CSS+JS+bootstrap   概述 这套代码响应式前端页面基本写完了,适合初学前端的同学,里面主要运用了HTML+CSS布局和动画,js逻辑较少,页面都是静态,未接入接口.响应 ...

  3. Mac Node.js 配置

    1.Node.js 简介 Node.js® 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,可方便地构建快速,可扩展的网络应用程序的平台.Node.js 使用事件驱动,非阻塞式 ...

  4. IntelliJ IDEA配置

    1.取消idea默认打开工程: 2.导出,导入配置. 导出和导入配置好处:对IDEA配置好后导出配置,方便以后重装电脑或者重装IDEA后可以导入之前配置好的配置.避免重复配置 导出配置:File Ex ...

  5. 远程调试Android手机上网页的记录

    1.手机需要开启USB调试模式: 2.电脑和手机上都要安装最新的Chrome浏览器: 3.手机连接电脑,会出现下载安装驱动的提示并安装成功(并不是所有的手机都会这么顺利,比如我的魅族就无法安装驱动,公 ...

  6. C++数值类型与string的相互转换

    转自:https://www.cnblogs.com/johngu/p/7878029.html 1.数值类型转换为string 1.1使用函数模板+ostringstream 使用函数模板将基本数据 ...

  7. V-Charts中使用extend属性定制词云图

    [本文出自天外归云的博客园] 简介 在Vue中使用E-Charts可以用V-Charts,词云图在V-Charts官网中介绍比较简单,如果想更多定制的话,官网上说要在extend属性中进行扩展. V- ...

  8. 搭建hbase1.2.5完全分布式集群

    简介 有一段时间,没写博客了,因为公司开发分布式调用链追踪系统,用到hbase,在这里记录一下搭建过程 1.集群如下: ip 主机名 角色 192.168.6.130 node1.jacky.com ...

  9. VS调试不能进入断点,提示当前不会命中断点还未为文档加载任何符号

    经过仔细检查后发现,是DLL版本和源码生成的DLL版本不一致,造成的! 复制新的过去,问题就解决了.

  10. 了解cron以及使用cron定时备份MySQL

    cron是一个linux下的定时执行工具,可以在无需人工干预的情况下运行作业.由于Cron 是Linux的内置服务,但它不自动起来,可以用以下的方法启动.关闭这个服务: /sbin/service c ...