java面试总结(二)--web

1、forword和redirect的区别
  请求转发是一次请求一次响应,而重定向是两次请求两次响应
  请求转发地址栏不发生变化,重定向地址栏改变
  请求转发只能在本网站内部,重定向可以定位到任何网站
2、TCP的三次握手和四次挥手
  TCP的连接和建立都是采用客户端服务器方式。主动发起连接建立的进程叫做客户端(Client)。被动等待连接建立的叫做服务器(Server)。
三次握手
  第一次握手:客户端向服务端发送连接请求,在连接包中标志位SYN=1,发送序号SEQ=x,客户端进入SYN_SEND状态,等待服务端确认
  第二次握手:服务端接收到客户端连接请求,服务端将SYN标志位和ACK标志位都设置为1,将ACK序号设置为x+1,并随机生成一个发送序号y,之后将数据包发给客户端,服务端进入SYN_RCVD状态
  第三次握手:客户端接收到数据后,检查ACK序号是否为x+1,ACK标记为是否为1,若正确,则将ACK标志位置为1,ACK序号设置位y+1,之后将数据包发给服务端,服务端检查ACK序号是否为y+1,ACK标志位是否为1,若正确,则连接建立成功
TCP四次挥手
  第一次挥手:当客户端要断开TCP连接时,发送一个包,其中标志位FIN=1,ACK=1,发送序号SEQ=X,确认序号ACK=Z,Client进入FIN_WAIT状态。
  第二次挥手:服务端接收到客户端请求,发送一个确认包,其中标志位ACK=1,发送序号SEQ=Z确认序号ACK=x+1,Server进入CLOSE_WAIT状态。
  第三次挥手:服务端断开TCP连接,此时发送一个包,其中,标志位FIN=1,发送序号SEQ=Y,服务端进入LAST_ACK状态。
  第四次挥手:客户端接收到服务端的包,进入TIME_WAIT状态,等待 2 MSL(最大报文存活时间)后释放连接,接着发送一个确认包,标志位ACK=1,发送序号SEQ=x+1,确认序号ACK=Y+1,服务端进入CLOSE状态。
3、TCP断开连接为什么需要四次挥手?
  客户端发送了 FIN 连接释放报文之后,服务器收到了这个报文,就进入了 CLOSE-WAIT 状态。这个状态是为了让服务器端发送还未传送完毕的数据,传送完毕之后,服务器会发送 FIN 连接释放报文。
客户端接收到服务器端的 FIN 报文后进入TIME_WAIT状态,此时并不是直接进入 CLOSED 状态,还需要等待一个时间计时器设置的时间 2MSL。
4、TCP建立连接为什么需要三次握手?
  防止已经失效的连接请求报文突然又传送到了服务器,从而产生错误。
5.为什么TCP断开连接时客户端进入TIME_WAIT状态还需等待2MSL才会关闭?
  MSL(Maximum Segment Lifetime),TCP允许不同的实现可以设置不同的MSL值。
  第一,保证客户端发送的最后一个ACK报文能够到达服务器,因为这个ACK报文可能丢失,站在服务器的角度看来,我已经发送了FIN+ACK报文请求断开了,客户端还没有给我回应,应该是我发送的请求断开报文它没有收到,于是服务器又会重新发送一次,而客户端就能在这个2MSL时间段内收到这个重传的报文,接着给出回应报文,并且会重启2MSL计时器。
  第二,防止类似与“三次握手”中提到了的“已经失效的连接请求报文段”出现在本连接中。客户端发送完最后一个确认报文后,在这个2MSL时间中,就可以使本连接持续的时间内所产生的所有报文段都从网络中消失。这样新的连接中不会出现旧连接的请求报文。
6、TCP为什么连接是三次握手,断开需要四次挥手?
  建立连接的时候, 服务器在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。
  而关闭连接时,服务器收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据,而自己也未必把全部数据都发送给对方了,所以己方可以立即关闭,也可以发送一些数据给对方后,再发送FIN报文给对方来表示同意现在关闭连接,因此,己方ACK和FIN一般都会分开发送,从而导致多了一次。
7、TCP与UDP的异同点
 相同点:都能实现两台计算机之间的通信,通信两端都需要创建socket对象
 不同点:UDP只有发送端和接收端,不区分服务端和客户端,计算机之间可以任意的发送数据;
    TCP通信严格区分客户端和服务端,通信时,必须先由客户端去连接服务端才能实现通信,服务端不可以主动连客户端,并且服务端程序需要事先启动等待客户端连接
8、GET和POST的区别?
  GET:请求的参数会显示在地址栏,通常有大小限制,没有请求体
  POST:请求参数在请求体中,没有大小限制
get&post
9、什么是Servlet的生命周期?
  Servlet从创建到销毁的过程
10、Servlet何时被创建,何时被销毁?
  Servlet第一次被访问时会被实例化,只要Servlet一被实例化就会调用init()方法(init方法只会执行一次)。任何一次从客户端发来的请求,会调用一次service方法(根据不同的请求方式调用doGet或doPost方法),当Servlet从服务器移除或者服务器关闭时Servlet对象会被销毁,destory方法会执行,然后等待垃圾回收
11、web项目配置完成启动时加载init方法
  web.xml中配置load-on-startup
12、文件上传的三要素
  表单提交方式必须为post,表单中需要有< input type=”file”>标签(即要有文件上传项),表单enctype=”multipart/form-data”
13、session的生命周期
  创建:使用jsp时自动创建;访问servlet时,调用request.getSession()才会创建
  销毁:tomcat默认30分钟销毁;手动调用invalidate方法
14、window.onload和$(document).ready()的区别
  加载时机不同,window.onload是js的方法,要等到html文件及引用文件全部加载完成后才会启动,$(document).ready()是jquery的方法,在html的dom树形成之后机会触发;
  编写个数不同,window.onload写多个会被最后一个覆盖,$(document).ready()则不会;
$(document).ready()可简写为$(function(){})
15、cookie的生命周期
  创建:session创建之后服务器会自动创建一个cookie,把session的id存入cookie中,并相应给浏览器,也可以手动创建cookie并响应给浏览器
  销毁:默认是关闭浏览器就销毁,可以进行持久化,持久化之后会保存到硬盘中,浏览器关闭也不会销毁
16、cookie和session的区别
  (1)cookie一般由服务器创建,保存在浏览器端的一小段文本,session则是保存在服务器内存中
  (2)cookie默认是会话级别,浏览器关闭就销毁,session一般在容器中有默认时间(tomcat中默认是30分钟)
17、网络传输七层协议
  应用层、表示层、会话层、传输层、网络层、数据链路层、物理层
18、http和https的区别
  (1)、http是明文传输的,安全性较差,https数据传输过程是加密的,安全性好
  (2)、https需要到CA机构申请证书,会涉及一些费用
  (3)、http页面响应速度比https快,http基于tcp建立连接需要三次握手,但https除了三次握手,还需要ssl的握手,额外需要9个包

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值