Java校招复习-计算机网络

229 阅读10分钟

HTTP 和 HTTPS 的区别

加密的角度

URI和URL的区别是什么

URI包括URL,URL还包括路径的具体地址。

HTTP 1.0和HTTP 1.1的主要区别

  1. 长连接、短连接
  2. 节省带宽,http1.1支持请求对象的一部分,可能和序列化有关系把。
  3. HOST域,就是虚拟域名,根据域名从DNS找到对应的ip地址,http有一个Host头域,http1.0没有。
  4. 状态响应码更多了。

解释一下什么是长连接

使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。可以在不同的服务器中设置连接的时间。

HTTP是不保存状态的协议,如何保存用户状态

http是无状态协议,不能保存通信的信息,简单理解为向服务器发送的第二次请求不会包括上一次请求的信息,每次请求都有一个新的request。举例子,登陆成功后,访问服务端,服务端不会知道你已经登陆了。

可以通过session,session保存在服务端中,对每一个连接创建一个sessionId,每个sessionId对应一个session,根据不同的sessionId找到对应的session。

sessionId存放在哪里

Cookie 中附加一个 Session ID 来方式来跟踪。

Cookie被禁用了怎么办

最常用的就是利用 URL 重写把 Session ID 直接附加在URL路径的后面。

Cookie的作用是什么?和Session有什么区别?

Cookie的信息保存在浏览器,session的信息保存在服务端。

Cookie存储的信息不安全,session存储的信息比较安全,

从使用场景说一下,比如说cookie用来登录。购物车使用session来保存当前下单的用户是谁。

301和302状态码有什么区别

301是永久性重定向,表示一个旧的网址所代表的资源已经被永久地移除了,不能再访问了,并且搜索引擎在获取新的资源的同时也将旧的网址转换为重定向之后的地址。

302是临时重定向,这个重定向只是临时地从一个旧的地址跳转到一个新的地址,旧的地址的资源还在,还可以继续访问,搜索引擎会获取资源并保存旧的地址。

GET和POST有什么区别?

都属于http的提交方式,Get被建议用在获取数据上,POST被建议用于传输数据。

get请求传递的参数存放在url上,Post请求的参数放在body中。所以说POST请求更安全一点。

POST的数据存放在body中所以可以用来传输大数据,而GET通常由于浏览器和服务端对url参数的限制,不能传递太大的数据。

TCP三次握手 四次挥手 重点!!!!!!!!!!!

没有固定答案,能扯多深就扯多深。

TCP,UDP 协议的区别?

UDP反着说。适合于QQ 语音、 QQ 视频 、直播等等即时通信

TCP需要建立连接,更安全,速度慢,性能低(滑动窗口,重传机制、阻塞)。每一个点详细说一下。适合于文件传输。

TCP 协议如何保证可靠传输

应用数据被分割成 TCP 认为最适合发送的数据块。

校验和: TCP 将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP 将丢弃这个报文段和不确认收到此报文段。

TCP 的接收端会丢弃重复的数据。

流量控制: TCP 连接的每一方都有固定大小的缓冲空间,TCP的接收端只允许发送端发送接收端缓冲区能接纳的数据。当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失。TCP 使用的流量控制协议是可变大小的滑动窗口协议。 (TCP 利用滑动窗口实现流量控制)

拥塞控制: 当网络拥塞时,减少数据的发送。

ARQ协议: 也是为了实现可靠传输的,它的基本原理就是每发完一个分组就停止发送,等待对方确认。在收到确认后再发下一个分组。

超时重传: 当 TCP 发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。

延伸问题:ARQ协议是什么? 自动重传请求(Automatic Repeat-reQuest,ARQ)是OSI模型中数据链路层和传输层的错误纠正协议之一。它通过使用确认和超时这两个机制,在不可靠服务的基础上实现可靠的信息传输。如果发送方在发送后一段时间之内没有收到确认帧,它通常会重新发送。ARQ包括停止等待ARQ协议和连续ARQ协议。

停止等待ARQ协议

停止等待协议是为了实现可靠传输的,它的基本原理就是每发完一个分组就停止发送,等待对方确认(回复ACK)。如果过了一段时间(超时时间后),还是没有收到 ACK 确认,说明没有发送成功,需要重新发送,直到收到确认后再发下一个分组; 在停止等待协议中,若接收方收到重复分组,就丢弃该分组,但同时还要发送确认; 优点: 简单

缺点: 信道利用率低,等待时间长

连续ARQ协议

连续 ARQ 协议可提高信道利用率。发送方维持一个发送窗口,凡位于发送窗口内的分组可以连续发送出去,而不需要等待对方确认。接收方一般采用累计确认,对按序到达的最后一个分组发送确认,表明到这个分组为止的所有分组都已经正确收到了。

优点: 信道利用率高,容易实现,即使确认丢失,也不必重传。

缺点: 不能向发送方反映出接收方已经正确收到的所有分组的信息。 比如:发送方发送了 5条 消息,中间第三条丢失(3号),这时接收方只能对前两个发送确认。发送方无法知道后三个分组的下落,而只好把后三个全部重传一次。这也叫 Go-Back-N(回退 N),表示需要退回来重传已经发送过的 N 个消息。

延伸问题:滑动窗口和流量控制 TCP 利用滑动窗口实现流量控制。流量控制是为了控制发送方发送速率,保证接收方来得及接收。 接收方发送的确认报文中的窗口字段可以用来控制发送方窗口大小,从而影响发送方的发送速率。将窗口字段设置为 0,则发送方不能发送数据。

延伸问题:拥塞控制 在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏。这种情况就叫拥塞。拥塞控制就是为了防止过多的数据注入到网络中,这样就可以使网络中的路由器或链路不致过载。拥塞控制所要做的都有一个前提,就是网络能够承受现有的网络负荷。拥塞控制是一个全局性的过程,涉及到所有的主机,所有的路由器,以及与降低网络传输性能有关的所有因素。相反,流量控制往往是点对点通信量的控制,是个端到端的问题。流量控制所要做到的就是抑制发送端发送数据的速率,以便使接收端来得及接收。

为了进行拥塞控制,TCP 发送方要维持一个 拥塞窗口(cwnd) 的状态变量。拥塞控制窗口的大小取决于网络的拥塞程度,并且动态变化。发送方让自己的发送窗口取为拥塞窗口和接收方的接受窗口中较小的一个。

TCP的拥塞控制采用了四种算法,即 慢开始 、 拥塞避免 、快重传 和 快恢复。在网络层也可以使路由器采用适当的分组丢弃策略(如主动队列管理 AQM),以减少网络拥塞的发生。

慢开始: 慢开始算法的思路是当主机开始发送数据时,如果立即把大量数据字节注入到网络,那么可能会引起网络阻塞,因为现在还不知道网络的符合情况。经验表明,较好的方法是先探测一下,即由小到大逐渐增大发送窗口,也就是由小到大逐渐增大拥塞窗口数值。cwnd初始值为1,每经过一个传播轮次,cwnd加倍。

拥塞避免: 拥塞避免算法的思路是让拥塞窗口cwnd缓慢增大,即每经过一个往返时间RTT就把发送放的cwnd加1.

快重传与快恢复: 在 TCP/IP 中,快速重传和恢复(fast retransmit and recovery,FRR)是一种拥塞控制算法,它能快速恢复丢失的数据包。没有 FRR,如果数据包丢失了,TCP 将会使用定时器来要求传输暂停。在暂停的这段时间内,没有新的或复制的数据包被发送。有了 FRR,如果接收机接收到一个不按顺序的数据段,它会立即给发送机发送一个重复确认。如果发送机接收到三个重复确认,它会假定确认件指出的数据段丢失了,并立即重传这些丢失的数据段。有了 FRR,就不会因为重传时要求的暂停被耽误。  当有单独的数据包丢失时,快速重传和恢复(FRR)能最有效地工作。当有多个数据信息包在某一段很短的时间内丢失时,它则不能很有效地工作。

什么是tcp包

也叫做数据包,存放发送放和接收方的地址,以及一些数据。

tcp的粘包和拆包问题

由于tcp的滑动窗口机制,所以一个完整的包可能发生拆包问题,就是说滑动窗口的大小放不下整个包,就会放到两个窗口中进行数据的传输。

二个完整的包可能发生粘包问题,就是说滑动窗口的大小可以放得下一个半包,此时包就被拆分了。

解决方案:应用层协议:http

自己解决的话:定义消息头,记录长度/或者把每个包都规定成定长。

七层协议/四层协议/简单说一下流程。

DNS-IP-MAC-二进制,解析的话就反着。

JDBC基本步骤

加载驱动

通过DriverManager对象获取连接对象Connection

通过连接对象获取会话,有2种方式Statement、PreparedStatement

通过会话进行数据的增删改查,封装对象

关闭资源、关闭会话、关闭连接

servlet的生命周期

第一次请求servlet时-调用destory()方法时

forward()和redirect()区别

forward是服务器内部跳转。redirect是通知浏览器重新发送一个新的请求。

解释一下原理。共享数据方面。地址栏显示来说。从效率来说。

request.getAttribute()和 request.getParameter()有何区别

getParameter()通常用在表单提交,只能传字符串。 getAttribute()通常用在服务端向前端传输数据,主要传Object对象

jsp九大内置对象

request、response、session、page、out、application Servelt。

AJAX有哪些优点和缺点?

最大的一点是页面无刷新,用户的体验非常好。

使用异步方式与服务器通信,具有更加迅速的响应能力。

安全问题 AJAX暴露了与服务器交互的细节。