1、TCP与UDP的区别?
TCP:Transaction Control Protocol (传输控制协议),是一种面向连接的,可靠的,基于IP的传输层协议
UDP:User Datagram Protocol (用户数据报协议),是一种无连接的传输层协议。提供面向事务的简单不可靠信息传送服务。
TCP与UDP都是来自于传输层协议。传输层位于应用层和网络层之间,负责位于不同主机中进程的相互同性。
区别:
1、TCP基于连接 UDP无连接(每个数据报中都给出了完整的地址信息,无需建立发送方和接受方法的连接)
2、TCP要求系统资源多,UDP较少(大小有限制,每个被传输的数据报大小必须在64kb以内 )
3、TCP需要保证数据安全性,UDP可能会产生丢包问题
4、TCP保证数据顺序,UDP不用保证
5、TCP传输数据安全,传输效率低,UDP传输数据不安全,但传输效率高
2、Socket
在计算机领域,Socket被翻译为套接字,它是计算机之间进行通信的一种约定或者一种方式。通过socket这种约定,一台计算机可以接受其他计算机的数据,也可以向其他计算机发送数据。
3、什么是servlet?主要作用有哪些?
servlet是一种运行在服务器端的小程序,Servlet就是一个接口,定义了Java类被浏览器访问到的一种规则(Tomcat识别)。
作用:
1、接受用户端发送的请求
2、调用其他Java程序来处理请求
3、处理结果,返回到服务器中
4、servlet的生命周期?
默认情况下,第一次被访问时,servlet会被Web服务器创建,执行 init()方法
每次访问Servlet时,service方法都会被调用一次,根据请求方式调用doGet()或doPost()方法
服务器关闭时,servlet被销毁,执行destroy()方法
5、什么是JSP?主要作用有哪些?
JSP:Java Server Pages Java服务器页面
JSP经编译后就变成了 servlet ,JSP本质上就是一个Servlet,jvm只能识别Java类,不能识别JSP代码,tomcat会调用servlet的service()方法将JSP编译为Servlet,然后执行Servlrt
主要作用:替代Servlet程序回传html页面数据,因为Servlet程序回传Html页面数据是非常繁琐的,维护和开发成本都非常的高。
6、Servlet线程安全吗?怎么解决?
servlet采用的是单例,也就是整个应用中只有一个实例对象,如果多个线程访问Servlet中的成员变量并且进行写操作就有可能发生线程安全问题。
解决办法:加锁。
7、 JSP的内置对象有哪些?作用分别是什么?
在JSP中不需要创建,直接使用的对象:
out对象:用于向客户端、浏览器输出数据。
request对象:封装了来自客户端、浏览器的各种信息。
response对象:封装了服务器的响应信息。
exception对象:封装了JSP程序执行过程中发生的异常和错误信息。
config对象:封装了应用程序的配置信息。
page对象:指向了当前jsp程序本身。
session对象:用来保存会话信息,可以实现同一用户不同请求之间的共享数据。
application对象:代表了当前应用程序的上下文,可以在不同的用户之间共享信息。
pageContext对象:提供了对JSP页面所有对象以及命名空间的访问。
8 、JSP的四种作用域
pageContext:只在当前页面有效,当用户关闭或者转到其他页面时,page对象将在响应回馈给客户端后释放。
request:在当前请求中有效。
session:当前会话中有效。
application:当前应用程序中都有效。
9、什么是HTTP
客户端和服务端之间数据传输的格式规范,格式简称:超文本传输协议
是一种基于请求与响应模式的、无状态的、应用层的协议、基于TCP的连接方式
10、 三次握手与四次挥手
三次握手的目的是建立可靠的通信信道,通信简单来说就是数据的发送与接受,而三次握手最主要的目的是,确保双方发送与接收时正常的。
第一次握手:客户端给服务器发送一个SYN。客户端发送网络包。服务端收到了,服务器得出结论:客户端的发送能力,服务端的接受能力正常。
第二次握手:服务端手到SYN报文后,会答应一个SYN+ACK报文。服务端发包,客户端收到了。客户端得出结论:服务端的接收和发送能力,客户端的接收和发送能力正常。但此时服务端不能确认客户端的接收能力是否正常。
第三次握手:客户端收到SYN+ACK报文之后,回应一个ACK报文。客户端发包,服务端收到,此次服务端可以得出结论:客户端的接收和发送能力,自己的接收和发送能力都正常。
通过三次握手,双方都确认了对方的接收以及发送能力的正。常。
四次挥手
第一次挥手: 客户端打算断开连接,向服务器发送FIN报文,此后客户端进入FIN-WAIT-1状态。
第二次挥手:服务器接收到连接释放报文段(FIN)后,向客户端发送ACK应答,然后服务器进入CLOSE-WATI(等待关闭状态),此时TCP处于半关闭的状态,客户端到服务器的连接释放。客户端收到来自服务器的ACK应答报文段后,进入FIN-WAIT-2状态。
第三次挥手:服务器也打算断开连接,向客户端发送FIN后,服务器进入LASK-ACK(最后确认状态,等待客户端确认)。
第四次挥手:客户端接收到来自服务器FIN后,会向服务器发送一个ACK应答报文,之后客户端进入TIME-WAIT(时间等待状态),服务器接收到ACK之后就进入了CLOSE(关闭)状态,此时服务器的连接已经完成。
客户端处于TIME-WAIT状态,此时TCP还未释放掉,需要等待2MSL后,客户端才进入CLOSE状态。
11、为什么需要四次挥手?
是由于TCP的半关闭状态,TCP提供了连接的一方在结束它的发送后还能接受来自另一端数据的能力。通俗来说,就是不能发送数据,但是还可以接受数据。
这一特性是由于TCP双向通道互相独立所导致的,也使得关闭连接必须经过四次握手。
12、为什么TIME-WAIT等待时间时2MSL?
MSL(Maximum Segment LifeTime) 是报文的最大生成时间,它是任何报文在网络上存在的最长时间,超过这个时间报文就会被丢弃。
TIME_WAIT等待的2MSL时间,可以理解为数据报一来一回所需要的最大时间。
13、TIME-WAIT状态过多有什么危害?
1、占用过多的系统资源
2、服务器的端口被Time-Wait占用过多会导致无法创建新的连接。
14、HTTP中重定向和请求转发的区别?
请求转发:用request的getRequestDispatcher()方法得到RequestDispatcher对象,调用forward()方法
重定向:调用response的sendRedirect()方法。
区别:
1、重定向是2此请求,请求转发是1此请求
2、重定向地址栏会变,请求转发地址栏不变
3、重定向是浏览器跳转,请求转发是服务器跳转
4、重定向可以跳转到任意网址,请求转发只能跳转当前项目
5、请求转发不hi丢失请求数据,重定向会丢失请求数据
15、Get与Post的区别?
1、get是不安全的,在传输过程,数据会被放在请求的URL中,Post的所有操作对用户来说都是不可见的。
2、get请求传输的数据量较小,主要是因为URL的长度受限,Post请求传输的数据量大。
3、get限制Form表单的数据集必须为ASCII字符。而post支持整个ISO字符集
4、Get执行效率比Post好。Get是form提交的默认方法
16、cookie和session的区别?
1、存储位置不同:
cookie存放在客户端电脑,是一个磁盘文件,ie浏览器可从文件夹中找到。
session是存放在服务器内存中的一个对象。谷歌浏览器进行安全处理,只能通过浏览器找到。session是服务器端会话技术,并且session就是基于cookie实现的。
2、存储容量不同:
单个cookie存储的数据<=4kb,一个站点最多保存20个cookie。
session是没有上限的,但为了性能考虑不会存太多。
3、存储方式不同:
cookie中只能保存ASII字符串,session中能存任何数据类型。
4、隐私策略不同:
cookie对客户端可见,session存储在服务器,不存在敏感信息的泄漏风险。
5、有效期不同:
开发可以通过设置 cookie 的属性,达到使 cookie 长期有效的效果。session 依赖于名为 JSESSIONID 的 cookie,而 cookie JSESSIONID 的过期时间默认为-1,只需关闭窗口该 session 就会失效,因而 session 不能达到长期有效的效果。6、服务器压力不同:
cookie保存在客户端,不占用服务器资源,对于并发用户多的情况较好
session保存在服务器端,每个用户都会产生一个session,假如并发访问的用户是非多,会很耗费内存。
17、如果客户端禁用cookie后session还能用吗?为什么?
可以,可以通过URL重写,吧sessionid作为参数追加到原url中,后续浏览器与服务器交互中携带sessionid。
18、session和cookie的生命周期
cookie:
默认情况下,当浏览器关闭后cookie数据被销毁,可以使用setMaxAge(int seconds)来指定持久化存储,
session:
当浏览第一次发送请求的时候,服务器自动生成了一个session和一个sessionid来唯一标识之歌session。
当浏览器第二次访问时会调用这个session
当服务器被关闭时候,session会调用invalidate()方法。session默认失效时间为30分。
19、如何解决浏览器请求服务器以及服务器响应浏览器乱码?
数据的编码和解码的字符集不一样
请求乱码:
post:在获取参数前,设置request的编码request.setCharacterEncoding("utf-8");
get:get方式:tomcat 8 已经将get方式乱码问题解决了
响应乱码:
字节输出流:设置字符的编码方式为UTF-8,设置响应头Context-Type,让浏览器以UTF-8方式解码。
字节输入流:设置该流的默认编码,设置响应头Context-Type,让浏览器以UTF-8方式解码。
20、在后端如何获取到cookie中的数据?
request.getCookies();
21、Fileter的生命周期?
服务器启动时,被web服务器创建,执行init()方法
每次拦截,doFilter方法都会被调用一次
服务器关闭时,Filter被销毁,执行destroy()方法。
22、过滤器,拦截器,监听器的区别?
过滤器 , 监听器以及Servlet是JAVAWEB的核心三个组件 (Servlet用于处理用户请求 )
监听器用户监听整个应用程序 , 例如 ServletContext容器创建销毁 , Session创建销毁 ,Request创建销毁等
过滤器用于过滤用户请求 , 过滤资源路径可以在web.xml中配置, 也可以使用@WebFilter注解配置
拦截器是SpringMVC中的技术, 对请求进行拦截 , 拦截的是进入到SpringMVC框架内部的请求 , Filter可以拦截所有的web请求