关于java:Java面试问题汇总计网

36次阅读

共计 7572 个字符,预计需要花费 19 分钟才能阅读完成。

1.OSI 七层协定模型、TCP/IP 四层模型和五层协定体系结构之间的关系

一、OSI 七层协定模型

OSI 的七层协定次要包含:

  • 物理层(physical layer)
  • 数据链路层(data link layer)
  • 网络层(network layer)
  • 运输层(transport layer)
  • 会话层(session layer)
  • 表示层(presentation layer)
  • 应用层(application layer)

二、TCP/IP 四层协定模型

TCP/IP 是一个四层的体系结构,他包含(从下到上程序):网络接口层、网际层 (用网际层这个名字是强调这一层是为了解决不同的网络的互联问题)、 运输层、应用层 。不过从本质上讲,TCP/IP 只有最下面的三层,因为 最上面的网络接口层并没有具体内容


三、五层协定体系结构

五层体系的协定构造是综合了 OSI 和 TCP/IP 的长处的一种协定,包含(从下到上):物理层、数据链路层、网络层、运输层、应用层 。(最 底下两层能够称为网络接口层
注:五层协定的体系结构只是为介绍网络原理而设计的,理论利用还是 TCP/IP 四层体系结构。


OSI因为 体系比较复杂 ,而且设计先于实现,有 许多设计过于思维化 ,不太不便计算机软件实现,因此齐全实现 OSI 参考模型的零碎不多, 利用的范畴无限。而 TCP/IP 协定最早在计算机系统中实现,在 Linux、Windows 平台中都有稳固的实现,并且提供了简略不便的编程接口(API),能够在其上开发出丰盛的应用程序,因而失去了宽泛的利用。TCP/IP 协定已成为目前互联网事实上的国际标准和工业规范。


四、每一层的协定如下:

物理层:RJ45、CLOCK、IEEE802.3(中继器、集线器)
数据链路层:PPP、FR、HDLC、VLAN、MAC(网桥、交换机)
网络层:IP、ICMP、ARP、RARP、OSPF、IPX、RIP、IGRP(交换机)
传输层:TCP、UDP、SPX
会话层:NFS、SQL、NETBIOS、RPC
表示层:JPEG、MPEG、ASII
应用层:FTP、DNS、Telnet、SMTP、HTTP、WWW、NFS


五、每一层的作用如下:

1、物理层
次要 定义物理设施规范 ,例如网线的接口类型、光线的接口类型、各种传输介质的传输速率等。他的次要作用是传入比特流(就是由 1、0 转化为电流强弱来进行传输,达到目的地后再转化为 1、0,也就是咱们通常所说的数模转换与模数转换)。这一层的数据叫做比特流。。
2、数据链路层
定义了 如何让数据格式化进行传输 ,以及 如何让管制对物理介质的拜访 。这一层通常还提供了谬误检测和纠正,以保证数据的牢靠传输。
3、网络层
在位于 不同地理位置的网络中的两个主机之间提供连贯和门路抉择 。Internet 的倒退使得从世界各站点访问信息的用户数大大增加,而网络层正是治理这种连贯的层。
4、运输层
定义了一些 传输数据的协定和端口号(WWW 端口 80 等),如:TCP(传输控制协议 TCP,传输效率低,可靠性强,用于传输可靠性要求高,数据量大的数据)和 UDP(用户数据报协定 UDP,与 TCP 个性恰恰相反,用于传输可靠性要求不高、数据量小的数据,如 QQ 聊天数据就是通过这种形式传输的)。次要是将从上层的接管的数据进行分段和传输,达到目的地后再进行传输。经常把这一层数据叫做段。
5、会话层
通过运输层(端口号:传输端口与接管端口)建设数据传输的通路 。次要在你的零碎之间发动会话或者就受会话申请(设施之间须要互相意识能够是 IP 地址也能够是 MAC 地址或者主机名)。
6、表示层
能够 确保一个零碎的应用层所发送的信息能够被另一个零碎的应用层读取 。例如,PC 程序与另一台程序计算机进行通信,其中一台计算机应用扩大二一十进制替换码(EBCDIC),而另一台则应用美国信息替换规范码(ASCII)来示意雷同的字符。如有必要,表示层会通过应用一种通用格局来实现多种数据格式之间的转换。
7、应用层
最靠近用户 的 OSI 层。这一层为用户的 应用程序(如:电子邮件、文件传输和仿真终端)提供网络服务。

运输层

1.TCP 三次握手

字段含意
URG紧急指针是否无效。为 1,示意某一位须要被优先解决
ACK确认号是否无效,个别置为 1。
PSH提醒接收端应用程序立刻从 TCP 缓冲区把数据读走。
RST对方要求从新建设连贯,复位。
SYN申请建设连贯,并在其序列号的字段进行序列号的初始值设定。建设连贯,设置为 1
FIN心愿断开连接。


第一次握手:建设连贯时,客户端发送 syn 包(syn=x)到服务器,并进入 SYN_SENT 状态,期待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。

第二次握手:服务器收到 syn 包,必须确认客户的 SYN(ack=x+1),同时本人也发送一个 SYN 包(syn=y),即 SYN+ACK 包,此时服务器进入 SYN_RECV 状态;

第三次握手:客户端收到服务器的 SYN+ACK 包,向服务器发送确认包 ACK(ack=y+1),此包发送结束,客户端和服务器进入ESTABLISHED(TCP 连贯胜利)状态,实现三次握手。

2.TCP 四次挥手

  1. 客户端过程收回连贯开释报文,并且进行发送数据。开释数据报文首部,FIN=1,其序列号为 seq=u(等于后面曾经传送过去的数据的最初一个字节的序号加 1),此时,客户端进入 FIN-WAIT-1(终止期待 1)状态。TCP 规定,FIN 报文段即便不携带数据,也要耗费一个序号。
  2. 服务器收到连贯开释报文,收回确认报文,ACK=1,ack=u+1,并且带上本人的序列号 seq=v,此时,服务端就进入了 CLOSE-WAIT(敞开期待)状态。TCP 服务器告诉高层的利用过程,客户端向服务器的方向就开释了,这时候处于半敞开状态,即客户端曾经没有数据要发送了,然而服务器若发送数据,客户端仍然要承受。这个状态还要继续一段时间,也就是整个 CLOSE-WAIT 状态继续的工夫。
  3. 客户端收到服务器的确认申请后,此时,客户端就进入 FIN-WAIT-2(终止期待 2)状态,期待服务器发送连贯开释报文(在这之前还须要承受服务器发送的最初的数据)。
  4. 服务器将最初的数据发送结束后,就向客户端发送连贯开释报文,FIN=1,ack=u+1,因为在半敞开状态,服务器很可能又发送了一些数据,假设此时的序列号为 seq=w,此时,服务器就进入了 LAST-ACK(最初确认)状态,期待客户端的确认。
  5. 客户端收到服务器的连贯开释报文后,必须收回确认,ACK=1,ack=w+1,而本人的序列号是 seq=u+1,此时,客户端就进入了 TIME-WAIT(工夫期待)状态。留神此时 TCP 连贯还没有开释,必须通过 2∗∗MSL(最长报文段寿命)的工夫后,当客户端撤销相应的 TCB 后,才进入 CLOSED 状态。
  6. 服务器只有收到了客户端收回的确认,立刻进入 CLOSED 状态。同样,撤销 TCB 后,就完结了这次的 TCP 连贯。能够看到,服务器完结 TCP 连贯的工夫要比客户端早一些。

3. 为什么连贯的时候是三次握手,敞开的时候却是四次握手?

因为当 Server 端收到 Client 端的 SYN 连贯申请报文后,能够间接发送 SYN+ACK 报文。其中 ACK 报文是用来应答的,SYN 报文是用来同步的。然而敞开连贯时,当 Server 端收到 FIN 报文时,很可能并不会立刻敞开 SOCKET,所以只能先回复一个 ACK 报文,通知 Client 端,” 你发的 FIN 报文我收到了 ”。只有等到我 Server 端所有的报文都发送完了,我能力发送 FIN 报文,因而不能一起发送。故须要四步握手。

4. 为什么 TIME_WAIT 状态须要通过 2MSL(最大报文段生存工夫)能力返回到 CLOSE 状态?

尽管按情理,四个报文都发送结束,咱们能够间接进入 CLOSE 状态了,然而咱们必须假想 网络是不牢靠 的,有 可能最初一个 ACK 失落。所以TIME_WAIT 状态就是用来重发可能失落的 ACK 报文。在 Client 发送出最初的 ACK 回复,但该 ACK 可能失落。Server 如果没有收到 ACK,将一直反复发送 FIN 片段。所以 Client 不能立刻敞开,它必须确认 Server 接管到了该 ACK。Client 会在发送出 ACK 之后进入到 TIME_WAIT 状态。Client 会设置一个计时器,期待 2MSL 的工夫。如果在该工夫内再次收到 FIN,那么 Client 会重发 ACK 并再次期待 2MSL。所谓的 2MSL 是两倍的 MSL(Maximum Segment Lifetime)。MSL 指一个片段在网络中最大的存活工夫,2MSL 就是一个发送和一个回复所需的最大工夫。如果直到 2MSL,Client 都没有再次收到 FIN,那么 Client 推断 ACK 曾经被胜利接管,则完结 TCP 连贯。

5. 为什么不能用两次握手进行连贯?

3 次握手实现两个重要的性能,既要单方做好发送数据的筹备工作(单方都晓得彼此已筹备好),也要容许单方就初始序列号进行协商,这个序列号在握手过程中被发送和确认。

当初把三次握手改成仅须要两次握手,死锁是可能产生的。作为例子,思考计算机 S 和 C 之间的通信,假设 C 给 S 发送一个连贯申请分组,S 收到了这个分组,并发 送了确认应答分组。依照两次握手的协定,S 认为连贯曾经胜利地建设了,能够开始发送数据分组。可是,C 在 S 的应答分组在传输中被失落的状况下,将不晓得 S 是否已筹备好,不晓得 S 建设什么样的序列号,C 甚至狐疑 S 是否收到本人的连贯申请分组。在这种状况下,C 认为连贯还未建设胜利,将疏忽 S 发来的任何数据分 组,只期待连贯确认应答分组。而 S 在收回的分组超时后,反复发送同样的分组。这样就造成了死锁.

6. 如果曾经建设了连贯,然而客户端忽然呈现故障了怎么办?

TCP 还设有一个 保活计时器 ,显然,客户端如果呈现故障,服务器不能始终等上来,白白浪费资源。服务器 每收到一次客户端的申请后都会从新复位这个计时器 ,工夫通常是设置为 2 小时, 若两小时还没有收到客户端的任何数据 ,服务器 就会发送一个探测报文段 ,当前每隔 75 秒钟发送一次。 若一连发送 10 个探测报文依然没反馈 ,服务器就 认为 客户端出了 故障 ,接着就 敞开连贯

7.TCP 和 UDP 区别

  • 区别:

    UDP 是无连贯的,即发送数据之前不须要建设连贯

    UDP 应用尽最大致力交付,即不保障牢靠交付,同时也不应用拥塞管制

    UDP 是面向报文的,没有拥塞管制,适宜多媒体通信要求

    UDP 反对一对一,一对多,多对一和多对多的交互通信

    UDP 首部开销小,只有 8 个字节

    TCP 是面向连贯的运输层协定

    TCP 只能一对一连贯

    TCP 提供牢靠的交付服务,提供全双工通信

    TCP 面向字节流,头部最低 20 个字节

8. 应用 TCP 协定的意义

对网络通讯品质有要求 的时候,比方:整个数据要准确无误的传递给对方,这往往用于一些要求牢靠的利用,比方 HTTP、HTTPS、FTP 等传输文件的协定,POP、SMTP 等邮件传输的协定

9.http 申请中的 304 状态码的含意

304(未修改)自从上次申请后,申请的网页未修改过。服务器返回此响应时,不会返回网页内容。如果网页自请求者上次申请后再也没有更改过,您应将服务器配置为返回此响应(称为 If-Modified-Since HTTP 标头)。服务器能够通知 Googlebot 自从上次抓取后网页没有变更,进而节俭带宽和开销。

10.http1.1 和 1.0 的区别

缓存解决,在 HTTP1.0 中次要应用 header 里的 If-Modified-Since,Expires 来做为缓存判断的规范,HTTP1.1 则引入了更多的缓存控制策略例如 Entity tag,If-Unmodified-Since, If-Match, If-None-Match 等更多可供选择的缓存头来管制缓存策略。

带宽优化及网络连接的应用,HTTP1.0 中,存在一些节约带宽的景象,例如客户端只是须要某个对象的一部分,而服务器却将整个对象送过来了,并且不反对断点续传性能,HTTP1.1 则在申请头引入了 range 头域,它容许只申请资源的某个局部,即返回码是 206(Partial Content),这样就不便了开发者自在的抉择以便于充分利用带宽和连贯。

谬误告诉的治理,在 HTTP1.1 中新增了 24 个谬误状态响应码,如 409(Conflict)示意申请的资源与资源的以后状态发生冲突;410(Gone)示意服务器上的某个资源被永久性的删除。

Host 头解决,在 HTTP1.0 中认为每台服务器都绑定一个惟一的 IP 地址,因而,申请音讯中的 URL 并没有传递主机名(hostname)。但随着虚拟主机技术的倒退,在一台物理服务器上能够存在多个虚拟主机(Multi-homed Web Servers),并且它们共享一个 IP 地址。HTTP1.1 的申请音讯和响应音讯都应反对 Host 头域,且申请音讯中如果没有 Host 头域会报告一个谬误(400 Bad Request)。

长连贯,HTTP 1.1 反对长连贯(PersistentConnection)和申请的流水线(Pipelining)解决,在一个 TCP 连贯上能够传送多个 HTTP 申请和响应,缩小了建设和敞开连贯的耗费和提早,在 HTTP1.1 中默认开启 Connection:keep-alive,肯定水平上补救了 HTTP1.0 每次申请都要创立连贯的毛病。

11.http 和 https 的区别

  • 1)https 协定要申请证书到 ca,须要肯定经济老本;
  • 2)http 是明文传输,https 是加密的平安传输;
  • 3)连贯的端口不一样,http 是 80,https 是 443;
  • 4)http 连贯很简略,没有状态;
  • 5)https 是 ssl 加密的传输,身份认证的网络协议,绝对 http 传输比拟平安。

12. 浏览器从接管到一个 URL,到最初展现出页面,经验了哪些过程

  1. DNS 解析
  2. TCP 连贯
  3. 发送 HTTP 申请
  4. 服务器解决申请并返回 HTTP 报文
  5. 浏览器解析渲染页面

网络层

1.arp 协定和 arp 攻打

地址解析协定。ARP 攻打的第一步就是 ARP 坑骗。ARP 协定根本没有对网络的安全性做任何思考,过后人们思考的重点是如何保障网络通信可能正确和疾速的实现——ARP 协定工作的前提是 默认了其所在的网络是一个凶恶的网络,每台主机在向网络中发送应答信号时都是应用的实在身份。不过起初,人们发现ARP 应答中的 IP 地址和 MAC 地址中的信息是能够伪造的,并不一定是本人的实在 IP 地址和 MAC 地址,由此,ARP 坑骗就产生了

2.icmp 协定

它是 TCP/IP 协定族的一个 子协定,用于在IP 主机、路由器之间传递管制音讯。管制音讯是指网络通不通、主机是否可达、路由是否可用等网络自身的音讯。这些管制音讯尽管并不传输用户数据,然而对于用户数据的传递起着重要的作用。

3. 路由器和交换机

交换机用于同一网络外部数据的疾速传输转发决策通过查看二层头部实现转发不须要批改数据帧工作在 TCP/IP 协定的二层 —— 数据链路层工作简略,间接应用硬件解决路由器用于不同网络间数据的跨网络传输转发决策通过查看三层头部实现转发须要批改 TTL,IP 头部校验和须要从新计算,数据帧须要从新封装工作在 TCP/IP 协定的三层 —— 网络层工作简单,应用软件解决。

应用层


1.DNS 的寻址过程

  1. 在浏览器中输出 www.qq.com 域名,操作系统会先查看本人本地的 hosts 文件是否有这个网址映射关系,如果有,就先调用这个 IP 地址映射,实现域名解析。
  2. 如果 hosts 里没有这个域名的映射,则查找本地 DNS 解析器缓存,是否有这个网址映射关系,如果有,间接返回,实现域名解析。
  3. 如果 hosts 与本地 DNS 解析器缓存都没有相应的网址映射关系,首先会找 TCP/ip 参数中设置的首选 DNS 服务器,在此咱们叫它本地 DNS 服务器,此服务器收到查问时,如果要查问的域名,蕴含在本地配置区域资源中,则返回解析后果给客户机,实现域名解析,此解析具备权威性。
  4. 如果要查问的域名,不禁本地 DNS 服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个 IP 地址映射,实现域名解析,此解析不具备权威性。
  5. 如果本地 DNS 服务器本地区域文件与缓存解析都生效,则依据本地 DNS 服务器的设置(是否设置转发器)进行查问,如果未用转发模式,本地 DNS 就把申请发至 13 台根 DNS,根 DNS 服务器收到申请后会判断这个域名 (.com) 是谁来受权治理,并会返回一个负责该顶级域名服务器的一个 IP。本地 DNS 服务器收到 IP 信息后,将会分割负责.com 域的这台服务器。这台负责.com 域的服务器收到申请后,如果本人无奈解析,它就会找一个治理.com 域的下一级 DNS 服务器地址 (qq.com) 给本地 DNS 服务器。当本地 DNS 服务器收到这个地址后,就会找 qq.com 域服务器,反复下面的动作,进行查问,直至找到 www.qq.com 主机。
  6. 如果用的是转发模式,此 DNS 服务器就会把申请转发至上一级 DNS 服务器,由上一级服务器进行解析,上一级服务器如果不能解析,或找根 DNS 或把转申请转至上下级,以此循环。不论是本地 DNS 服务器用是是转发,还是根提醒,最初都是把后果返回给本地 DNS 服务器,由此 DNS 服务器再返回给客户机。

从客户端到本地 DNS 服务器是属于递归查问,而 DNS 服务器之间就是的交互查问就是迭代查问。

2. 负载平衡 反向代理模式的长处、毛病

  • (1)反向代理(Reverse Proxy)形式是指以代理服务器来承受 internet 上的连贯申请,而后将申请转发给外部网络上的服务器,并将从服务器上失去的后果返回给 internet 上申请连贯的客户端,此时代理服务器对外就体现为一个服务器。
  • (2)反向代理负载平衡技术是把将来自 internet 上的连贯申请以反向代理的形式动静地转发给外部网络上的多台服务器进行解决,从而达到负载平衡的目标。
  • (3)反向代理负载平衡能以软件形式来实现,如 apache mod_proxy、netscape proxy 等,也能够在高速缓存器、负载均衡器等硬件设施上实现。反向代理负载平衡能够将优化的负载平衡策略和代理服务器的高速缓存技术联合在一起,晋升动态网页的访问速度,提供无益的性能;因为网络内部用户不能间接拜访实在的服务器,具备额定的安全性(同理,NAT 负载平衡技术也有此长处)。
  • (4)其毛病次要体现在以下两个方面

    • 反向代理是处于 OSI 参考模型第七层利用的,所以就必须为每一种应用服务专门开发一个反向代理服务器,这样就限度了反向代理负载平衡技术的利用范畴,当初个别都用于对 web 服务器的负载平衡。
    • 针对每一次代理,代理服务器就必须关上两个连贯,一个对外,一个对内,因而在并发连贯申请数量十分大的时候,代理服务器的负载也就十分大了,在最初代理服务器自身会成为服务的瓶颈。

一般来讲,能够用它来对连贯数量不是特地大,但每次连贯都须要耗费大量解决资源的站点进行负载平衡,如 search 等。

正文完
 0