Java Web 笔试(面试)题
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 笔试(面试)题的更多相关文章
- (Java后端 Java web)面试时如何展示自己非技术方面的能力(其实就是综合能力)
这篇文章的适用范围其实不仅限于Java后端或Java Web,不过其中有些是拿这方面举例的,在其它方面,大家可以举一反三,应该也能得到些启示. 我们在面试时,会发现有些候选人技术不错,比如在Java ...
- Java大厂笔试&&面试集合大全目录
面试技巧 掌握面试技巧,提升自身软实力! HR面试都会问什么问题?(上) HR面试都会问什么问题?(下) 作为一技术人员,面试前都需要做哪些准备? 面试题 Java各个阶段面试题,帮你提升自我,拿到高 ...
- 20道Java实习生笔试面试选择题(内附答案解析)
1.以下对继承的描述错误的是(A) A.Java中的继承允许一个子类继承多个父类 B.父类更具有通用性,子类更具体 C.Java中的继承存在的传递性 D.当实例化子类时会递归调用父类中的构造方法 解 ...
- java第一次笔试+面试总结
今天是自己第一次java笔试和面试,总体感觉比预期好一点. 笔试题第一面是问答题,主要考查java基础,一共有18题,我有6道题没有写出来.第二面主要是算法题,一共有8道题,我大概写出来4道题,第三面 ...
- Java web 前端面试知识点总结
经过几家大厂面试,目前成功拿到唯品会offer,分享一下我的面试知识点总结: 耦合性:也称块间联系.指软件系统结构中各模块间相互联系紧密程度的一种度量.模块之间联系越紧密,其耦合性就越强,模块的独立性 ...
- Java Web Services面试
Q. 应用集成方式有哪些? A. 应用可以采用以下方式集成: 1. 共享数据库 2. 批量文件传输 3. 远程过程调用(RPC) 4. 通过消息中间件来交换异步信息(MOM) Q. 应用集成可以采用的 ...
- 【转】Java Web Services面试问题集锦
Q. 应用集成方式有哪些? A. 应用可以采用以下方式集成: 1. 共享数据库 2. 批量文件传输 3. 远程过程调用(RPC) 4. 通过消息中间件来交换异步信息(MOM) Q. 应用集成可以采用的 ...
- Java Web架构知识整理——记一次阿里面试经历
惭愧,从一次电面说起.我个人在某国企做一名软件设计师,国企大家都懂的,待遇一般而且没啥意思,做的方向基本都是操作系统.驱动和工具软件的开发,语言基本都是C/C++.最近也想跳槽,刚好有幸得到了一次阿里 ...
- java web面试技巧,数据库面试,java web轻量级开发面试教程
我最近看到一本比较好的讲java web方面面试的书,java web轻量级开发面试教程. 其中不仅用案例和视频讲述了Spring MVC,Hibernate, ORM等方面的技巧,而且还实际讲到了面 ...
随机推荐
- ionic ion-tab图标修改, 自定义tab图标
遇到需要自定义tab图标很简单, 只需要自定义相应的css就可以了, 这里要注意的是如何调整背景图片的大小. <ion-view hide-back-button="false&quo ...
- InfluxDB源码阅读之snapshotter服务
操作系统 : CentOS7.3.1611_x64 go语言版本:1.8.3 linux/amd64 InfluxDB版本:1.1.0 服务模块介绍 源码路径: github.com/influxda ...
- etcdv3 集群的搭建和使用
etcd是一个开源的分布式键值对数据库,他的每一个节点都有一份数据的copy,当有节点故障时保证了高可用性.etcd使用Raft算法来保证一致性. 第一次接触etcd是在学习k8s时.k8s用etcd ...
- 修改Linux用户配置之后先验证再退出
在服务器上更改完zsh.SSH连接属性.用户密码之后,我们可能想退出重新登录查看是否配置生效.这时,有一个注意事项:不要关闭旧窗口,而是重新打开一个新窗口尝试登录.否则,如果配置改错了,自己就再也没有 ...
- php 删除cookie有效方法
php 删除cookie有效方法关于删除cookie的说明开始----- bool setcookie ( string name [, string value [, int expire [, ...
- springboot 项目中读取资源文件内容 如图片、文档文件
1 问题描述:在 springboot 项目中有时候会需要读取一些资源文件,例如 office的 docx 文档或者 png.jpg的图片.在多模块项目中资源文件需要放到启动项目的 Resources ...
- python(61):str 和 bytes 转换
str 和 bytes 转换 b = b"example" # str object s = "example" # str to bytes bytes(s, ...
- RESTful API 设计思考
RESTful API 设计思考,内容来源网络加自己的思考 1.RESTful Web API采用面向资源的架构:同一的接口,所以其成员体现为针对同一资源的操作2.SOAP Web API采用RPC风 ...
- Java多线程:volatile 关键字
一.内存模型的相关概念 大家都知道,计算机在执行程序时,每条指令都是在CPU中执行的,而执行指令过程中,势必涉及到数据的读取和写入.由于程序运行过程中的临时数据是存放在主存(物理内存)当中的,这时就存 ...
- Ubuntu命令行快捷启动Matlab
转载:https://blog.csdn.net/striker_v/article/details/52884485 Matlab R2015b默认安装目录/usr/local/MATLAB/R20 ...