JAVA三年面试题(Web篇)
1.什么是Servlet?
Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。
2.Servlet生命周期
(1)加载和实例化
当Servlet容器启动或客户端发送一个请求时,Servlet容器会查找内存中是否存在该Servlet实例,若存在,则直接读取该实例响应请求;如果不存在,就创建一个Servlet实例。
(2) 初始化
实例化后,Servlet容器将调用Servlet的init()方法进行初始化(一些准备工作或资源预加载工作)。
(3)服务
初始化后,Servlet处于能响应请求的就绪状态。当接收到客户端请求时,调用service()的方法处理客户端请求,HttpServlet的service()方法会根据不同的请求 转调不同的doXxx()方法。
(4)销毁
当Servlet容器关闭时,Servlet实例也随时销毁。其间,Servlet容器会调用Servlet 的destroy()方法去判断该Servlet是否应当被释放(或回收资源)。
3.什么是Socket?
Socket(套接字):在TCP/IP网络环境中,可以使用套接字来建立网络连接,实现主机之间的数据传输。
4.常用套接字类型?
●流式套接字(SOCK_STREAM)。流式套接字用于提供面向连接、可靠的数据传输服务。该服务将保证数据能够实现无差错、无重复发送,并按顺序接收,数据传输可以是双向的字节流。
● 数据报套接字(SOCK_DGRAM)。数据报套接字用于提供无连接的数据传输服务。该服务并不能保证数据传输的可靠性,数据有可能在传输过程中丢失或重复,且无法保证顺序地接收到数据。由于数据报套接字不能保证数据传输的可靠性,对于有可能出现的数据丢失情况,需要在程序中做相应的处理。
● 原始套接字(SOCK_RAW)。当使用前两种套接字无法完成数据收发任务时,原始套接字提供了更加灵活的数据访问接口,使用它可以在网络层上对Socket进行编程,发送和接收网络层上的原始数据包。
5.套接字通信过程?
1)建立一个Socket。
2)配置Socket。
3)连接Socket(可选)。
4)通过Socket发送数据。
5)通过Socket接收数据。
6)关闭Socket。
6,三次握手和四次挥手?
三次握手:
1)请求端(通常称为客户)发送一个SYN报文段指明客户打算连接的服务器端口号,以及初始序号(Initial Sequence Number,ISN),SYN请求发送后,客户进入SYN_SENT状态。
2)服务器启动后首先进入LISTEN状态,当它收到客户发来的SYN请求后,进入SYN_RCV状态,发回包含服务器的初始序号的SYN报文段作为应答,同时将确认序号设置为客户的初始序号加1,对客户的SYN报文段进行确认。一个SYN将占用一个序号。
3)客户接收到服务器的确认报文后进入ESTABLISHED状态,表明本方连接已成功建立,客户将确认序号设置为服务器的ISN加1,对服务器的SYN报文段进行确认,当服务器接收到该确认报文后,也进入ESTABLISHED状态。
四次挥手:
1)客户的应用进程主动发起关闭连接请求,它将导致TCP客户发送一个FIN报文段,用来关闭从客户到服务器的数据传送,此时客户进入FIN_WAIT_1状态。
2)当服务器收到这个FIN,它发回一个ACK,进入CLOSE_WAIT状态,确认序号为收到的序号加1。与SYN一样,一个FIN将占用一个序号。客户收到该确认后进入FIN_WAIT_2状态,表明本方连接已关闭,但仍可以接收服务器发来的数据。
3)接着服务器程序关闭本方连接,其TCP端发送一个FIN报文段,进入LAST_AC状态,当客户接收到该报文段后进入TIME_WAIT状态。
4)客户在收到服务器发来的FIN请求后,发回一个确认,并将确认序号设置为收到的序号加1。发送FIN将导致应用程序关闭它们的连接,服务器接收到该确认后,连接关闭。这些FIN的ACK是由TCP软件自动产生的。
7. Servlet和Socket的区别 ?
Servlet工作在基于Tcp/ip应用层,Socket基于传输层;
Servlet运行于web容器中,Socket是集成于操作系统内核;
Servlet底层使用Socket,Socket是通信基础。
8. 转发与重定向的区别?
转发在服务器端完成的,重定向是在客户端完成的;
转发的速度快,重定向速度慢;
转发的是同一次请求,重定向是两次不同请求 ;
转发不会执行转发后的代码,重定向会执行重定向之后的代码;
转发地址栏没有变化,重定向地址栏有变化 ;
转发必须是在同一台服务器下完成,重定向可以在不同的服务器下完成。
8. jsp 有哪些内置对象?作用分别是什么?
SP 共有以下9 种基本内置组件:
request:用户端请求,此请求会包含来自GET/POST 请求的参数;
response:网页传回用户端的回应;
pageContext:网页的属性是在这里管理;
session:与请求有关的会话期;
application:servlet 正在执行的内容;
out:用来传送回应的输出;
config:servlet 的构架部件;
page:JSP 网页本身;
exception:针对错误网页,未捕捉的例外。
10. 谈谈mvc?
基于java的web应用系统采用MVC设计模型,即用Model(模型)、View(视图)和Controller(控制)分离设计,这是目前web应用服务系统的主流设置方向。
Model:处理业务逻辑的模块。
View:负责页面显示,显示Model的处理结果给用户,主要实现数据到页面的转换过程。
Controller:负责每个请求的分发,把Form数据传递给Model进行处理,处理完成后,把处理结果返回给相应的View显示给用户。
11. cookie和session的区别?
-
cookie数据保存在客户端,session数据保存在服务端。
-
cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,相当重要的数据,应该使用session保存到服务端。
-
session会在一定时间内保持在服务器上,但是会占用内存资源,当访问的用户过多,会加重服务器的负载,考虑到减轻服务器的压力,可以将不重要的数据放在cookie中持久的保存。
-
单个cookie保存的数据不能超过4k,很多浏览器都限制站点最多保存20个cookie。
12. 如何防止表单重复提交?
要能够防止表单重复提交,就要标识用户的每一次访问请求,使得每一次访问对服务端来说都是唯一确定的。为了标识用户的每次访问请求,可以在用户请求一个表单域时增加一个隐藏表单项,这个表单项的值每次都是唯一的token。
当用户在请求时生成这个唯一的token时,同时将这个token保存在用户的Session中,等用户提交请求时检查这个token和当前的Session中保存的token是否一致。如果一致,说明没有重复提交,否则用户提交上来的token已经不是当前的这个请求的合法token。
13. 一次http请求过程?
1.根据输入网址,进行DNS域名解析获取IP地址
2.根据IP,与对应服务器进行三次握手。
3.建立TCP连接后发起HTTP请求
4.服务器响应HTTP请求,浏览器得到html代码
5.浏览器解析html代码,并请求html代码中的资源(如js、css图片等)
6.浏览器对页面进行渲染呈现给用户