一、计算机网络
1、TCP/IP网络模型
TCP/IP网络模型是一个用于描述网络通信过程中不同层次功能的模型,它通常被分为四层或五层。具体来说:
- 应用层:这是最接近用户的一层,负责处理特定的应用程序细节。例如,HTTP用于网页传输,FTP用于文件传输等。
- 传输层:这一层负责提供端到端的通信服务。在TCP/IP模型中,主要协议有TCP(传输控制协议)和UDP(用户数据报协议)。TCP提供可靠的、面向连接的服务,而UDP则提供一种无连接的服务。
- 网络层:也称为互联网层,负责数据包的发送和接收,包括地址分配和路由选择。主要协议有IP(互联网协议)、ICMP(互联网控制消息协议)等。
- 数据链路层:这一层处理数据帧的传输,负责物理寻址以及数据的可靠传输。例如,ARP(地址解析协议)用于将IP地址映射到物理地址。
- 物理层:这层涉及实际的物理介质(如电缆、光纤等),负责比特流的传输。
2、HTTP报文包括几个部分
请求行(Request Line):它包含了请求方法(如GET、POST等)、请求资源的路径以及HTTP协议的版本。这部分信息以标准的格式呈现,例如“GET /index.html HTTP/1.1”中,“GET”是请求方法,“/index.html”是请求资源路径,“HTTP/1.1”是使用的HTTP协议版本。
请求头(Headers):请求头包含客户端与服务器之间的附加信息,例如用户代理(User-Agent)、主机名(Host)、接受的语言(Accept-Language)等。这些信息用于描述请求的具体情况和客户端的一些特性,以便服务器能更好地处理请求。
请求体(Body):请求体不是所有HTTP请求的必要部分,它通常用于携带需要发送到服务器的数据,比如在POST请求中上传表单数据。如果请求方法是GET,则通常没有请求体。
3、TCP和HTTP的区别?
HTTP协议和TCP协议分属于不同的层次,HTTP协议属于应用层,TCP协议属于传输层,且HTTP要在建立TCP连接的基础上来进行数据的传输,TCP是一种可靠的传输协议。
4、UDP和TCP的区别?各自的应用场景
- TCP协议:
- 面向连接:在数据传输前需要建立连接,确保数据能够按顺序、可靠地到达目的地。
- 可靠性:通过错误检测和重传机制,保证数据无差错、不丢失、不重复。
- 流量控制与拥塞控制:内置了流量控制和拥塞控制机制,避免网络拥堵时的数据丢失。
- 开销较大:由于更多的控制机制,TCP的头部开销相对较大,最少20字节。
- 点对点通信:设计为点对点的通信模式,即一个发送端到一个接收端。
- UDP协议:
- 无连接:不需要建立连接就可以直接发送数据,适用于快速通信。
- 不可靠性:虽然尽最大努力交付,但不保证数据一定能到达目的地。
- 缺乏控制机制:没有流量控制和拥塞控制,即使在网络质量不佳的情况下也能保持恒定的发送速率。
- 开销较小:头部固定只有8字节,适合对实时性要求高的应用。
- 支持多播和广播:除了一对一,还支持一对多和多对多的通信模式。
TCP适用于发送准确性要求高的,比如邮件;UDP适合一些要求不高场景 比如视频电话
5、TCP三次握手是什么?为什么一定要三次?
具体来说,三次握手的过程如下:
- 第一次握手:客户端向服务器发送一个SYN报文(同步序列编号),其中包含一个随机的序列号A。
- 第二次握手:服务器收到客户端的SYN报文后,会返回一个SYN-ACK报文(同步和确认),其中包含确认号A+1和服务器自己的随机序列号B。
- 第三次握手:客户端收到服务器的SYN-ACK报文后,会发送一个ACK报文(确认),其中包含确认号B+1。
此外,在完成这三次报文交换之后,客户端和服务器就成功建立了连接,并可以开始数据传输。这个过程的目的是为了防止旧的重复连接初始化请求在网络中延迟到达服务器,从而避免潜在的错误和资源浪费。
为什么要一定要三次:第一次发送,服务端确认到客户端可以发送信息,自己也可以正常接收信息;服务端接收客户端信息后发起第二次传输,发送ACK和SYN以及随机序号,这时客户端成功接收,确认了服务端可以正常发送和收到,自己也可以正常发送和收到;第三次客户端给服务端发送信息ACK,服务端确认自己可以正常发送信息,客户端也可以正常接收信息。至此双方都知道彼此可以正常的发送和接收信息。
6、TCP四次挥手是什么?为什么一定要四次?
TCP四次挥手的流程如下:
- 第一次挥手:主动方(想要关闭连接的一方)发送一个FIN报文给被动方,表示它已经完成了数据发送。
- 第二次挥手:被动方收到FIN报文后,发送一个ACK报文作为应答。这个报文表明被动方已经接收到了主动方的关闭请求。
- 第三次挥手:被动方处理完所有的数据后,也会发送一个FIN报文给主动方,表示它也准备好关闭连接了。
- 第四次挥手:主动方收到被动方的FIN报文后,发送一个ACK报文作为应答,并且进入TIME_WAIT状态。被动方收到这个ACK报文后,进入CLOSED状态,而主动方等待一段时间后也进入CLOSED状态。
为什么一定要四次?
因为服务端还有一些信息没有发送完毕,需要一定的时间来处理剩余的信息,所以需要隔一会再发送FIN到客户端。
7、键入URL的过程发生了什么?
浏览器输入URL地址->通过DNS协议找到对应的IP地址->根据IP地址和端口号发起TCP连接请求->TCP连接后向服务端发送HTTP请求报文->服务端返回响应报文->客户端解析响应代码,加载初步的HTML页面->客户端还有部分图片的URL没有加载完成,继续给服务端发送请求->服务端解析后返回响应报文->客户端接收,加载剩余的页面,至此加载完毕
8、HTTP基于TCP还是UDP?
HTTP3.0之前都是基于TCP协议的,但是HTTP3.0是基于UDP的
9、HTTP和HTTPS的区别
- 端口号:HTTP 默认是 80,HTTPS 默认是 443。
- URL 前缀:HTTP 的 URL 前缀是
http://
,HTTPS 的 URL 前缀是https://
。 - 安全性和资源消耗:HTTP 协议运行在 TCP 之上,所有传输的内容都是明文,客户端和服务器端都无法验证对方的身份。HTTPS 是运行在 SSL/TLS (安全套接字和安全传输协议)之上的 HTTP 协议,SSL/TLS 运行在 TCP 之上。所有传输的内容都经过加密,加密采用对称加密,但对称加密的密钥用服务器方的证书进行了非对称加密。所以说,HTTP 安全性没有 HTTPS 高,但是 HTTPS 比 HTTP 耗费更多服务器资源。
10、HTTP1.0和HTTP1.1的区别?
首先,HTTP 1.1默认使用持久连接,这意味着在同一个连接上可以发送多个请求和响应,而不需要每次都重新建立连接。这提高了数据传输的效率。
HTTP/1.0 中,存在一些浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了,并且不支持断点续传功能,HTTP/1.1 则在请求头引入了 range 头域,它允许只请求资源的某个部分,即返回码是 206(Partial Content),这样就方便了开发者自由的选择以便于充分利用带宽和连接。
HTTP/1.1 中新加入了大量的状态码,光是错误响应状态码就新增了 24 种。
11、HTTP1.1和HTTP2.0的区别?
HTTP/1.1 和 HTTP/2.0 是两个不同版本的 HTTP 协议,它们在性能、功能和实现方面有一些显著的区别。以下是它们之间的主要区别:
-
多路复用(Multiplexing):
- HTTP/1.1:每个 TCP 连接只能处理一个请求-响应过程,而且在同一时间只能处理一个请求。这导致了队头阻塞(Head-of-Line Blocking)的问题,其中一个请求的延迟会影响到其他请求的响应时间。
- HTTP/2.0:支持多路复用,允许在一个 TCP 连接上并行发送多个请求和响应,而无需按照顺序进行排队。这样可以显著提高资源利用率和页面加载速度。
-
头部压缩(Header Compression):
- HTTP/1.1:每个请求和响应都包含大量的重复头部信息,如 Cookie、User-Agent 等,这会占用带宽和增加延迟。
- HTTP/2.0:引入了 HPACK 算法进行头部压缩,通过使用静态表和动态表,可以显著减少重复头部信息的传输,从而减少带宽占用和网络延迟。
-
二进制传输(Binary Framing):
- HTTP/1.1:基于文本的协议,请求和响应消息都是以明文的方式传输,容易受到网络中的不稳定因素的影响。
- HTTP/2.0:使用二进制格式对消息进行编码,包括帧(Frames)和流(Streams),这样可以更有效地在客户端和服务器之间传输数据,并提高了协议的可靠性和安
12、HTTP2.0和HTTP3.0的区别?(底层协议发生变化的一代)
HTTP/2.0 和 HTTP/3.0 是两个不同版本的 HTTP 协议,它们在一些关键方面有着显著的不同。以下是它们之间的主要区别:
-
底层传输协议:
- HTTP/2.0:基于 TCP 协议。在 TCP 上实现了多路复用、头部压缩等功能,但仍然受到 TCP 的一些限制,如队头阻塞和慢启动等。
- HTTP/3.0:基于 UDP 协议。使用了 QUIC(Quick UDP Internet Connections)作为底层传输协议,QUIC 解决了 TCP 的一些问题,如连接建立的延迟、队头阻塞等,同时提供了更好的安全性和错误恢复机制。
-
连接建立方式:
- HTTP/2.0:使用 TCP 的三次握手建立连接。
- HTTP/3.0:使用 QUIC 的一种快速连接建立方式,可以显著减少连接建立的延迟。
-
多路复用(Multiplexing):
- HTTP/2.0:在一个 TCP 连接上实现了多路复用,允许并行发送多个请求和响应。
- HTTP/3.0:使用了 QUIC 的多路复用功能,类似于 HTTP/2.0,但由于 QUIC 使用了 UDP,因此可以更灵活地处理连接中断和重传等情况。
-
头部压缩(Header Compression):
- HTTP/2.0:使用 HPACK 算法对头部进行压缩。
- HTTP/3.0:QUIC 提供了自己的头部压缩机制,通常称为 QPACK。
13、网络请求常见的除了get和post还有什么?框架中怎么用?
还有put和delete。put通常用于更新操作,delete用于删除。
14、get请求和post请求有什么区别?
get常用于获取信息,post常用于更新或添加新信息;get相对于post是不安全的,其传输信息直接暴露在URL中,post则隐藏在请求体中;get请求受 URL 长度限制,因为 URL 的长度有限,因此传输的数据量较小,而post请求没有 URL 长度的限制,可以传输较大量的数据,适合用于上传文件或提交表单等操作。
15、PING是什么?
PING 是一种网络诊断工具,用于测试主机之间的网络连接是否正常以及网络延迟情况。PING 是基于 ICMP(Internet Control Message Protocol,互联网控制消息协议)的工具,它发送 ICMP 数据报给目标主机,并等待目标主机的响应。
- 测试网络连接:通过发送 ICMP 数据包,可以确定目标主机是否可达,以及网络连接的稳定性。
- 测量网络延迟:通过记录 ICMP 数据包的往返时间(RTT),可以估计网络延迟,即数据从发送到接收所需的时间。
- 诊断网络故障:当网络出现问题时,PING 可以用于诊断故障的原因,如网络拥塞、丢包等。
16、HTTP状态码有什么?
二、操作系统
1、进程调度算法包括哪些?
进程调度算法是操作系统中用于决定哪个进程应该被执行的一种策略。这些算法的目标通常是优化系统的性能指标,如响应时间、吞吐量和公平性。以下是几种常见的进程调度算法:
-
先来先服务(FCFS):按照进程到达的顺序进行调度,即先到达的进程先执行,这是最简单的调度算法之一。
-
最短作业优先(SJF):选择下一个执行的进程时,优先选择估计执行时间最短的进程。这可以最大程度地减少平均等待时间,但可能导致长作业等待时间过长(即饥饿问题)。
-
最短剩余时间优先(SRTF):在SJF算法的基础上,允许正在执行的进程被抢占。如果新到达的进程的估计执行时间比当前正在执行的进程的剩余执行时间还要短,就会进行切换。
-
优先级调度:每个进程都有一个优先级,调度器选择具有最高优先级的进程来执行。可以是静态优先级(由管理员分配)或动态优先级(根据进程属性或运行情况动态调整)。
-
轮转调度(Round Robin):按照时间片的大小(预先定义的固定时间段)轮流调度各个进程。当时间片用完时,当前进程会被暂停并移到就绪队列的末尾,然后选择下一个进程执行。
-
多级反馈队列调度:将进程按照优先级划分成多个队列,每个队列具有不同的时间片大小。新到达的进程首先进入最高优先级队列,如果它没有在该时间片内完成,就会被移到下一个较低优先级的队列。
2、内存管理中分页分段机制?
分页(Paging)和分段(Segmentation)是内存管理中常用的两种机制,用于将进程的逻辑地址空间映射到物理内存空间。它们各有特点,可以单独使用,也可以结合使用。
-
分页(Paging):
- 在分页机制下,进程的逻辑地址空间被划分为固定大小的页面(Page),而物理内存空间也被划分为相同大小的物理页面。操作系统维护一个页表(Page Table),将逻辑页面映射到物理页面。
- 分页机制的主要优点是简单且灵活,不需要连续的内存空间,可以有效地解决外部碎片问题。另外,操作系统可以以页面为单位进行页面置换,提高了内存的利用率。
- 分页的缺点是会引入内部碎片问题,因为页面大小固定,一个页面中可能会有部分未被使用的空间。
-
分段(Segmentation):
- 在分段机制下,进程的逻辑地址空间被划分为若干段(Segment),每个段具有独立的含义和长度。与分页不同,段的长度可以动态变化,不需要固定大小。
- 分段机制的主要优点是能够更好地反映程序的逻辑结构,提高了程序的可读性和可维护性。另外,段的长度可以根据程序的需求动态调整,更加灵活。
- 分段的缺点是容易引入外部碎片问题,因为段的长度不固定,可能会产生不连续的空间。
在实际应用中,通常会将分页和分段结合使用,以克服各自的缺点。这种组合通常称为分页分段机制(Paging with Segmentation),它将进程的逻辑地址空间首先划分为若干段,然后每个段再被划分为若干页面。这样可以结合分段的灵活性和分页的内存管理优势,同时克服各自的缺点。
3、操作系统中分页机制里为啥要设置缓存页啊?(缓存页就是快表!)
在分页系统中,程序使用的是虚拟地址,操作系统通过页表将虚拟地址转换为物理地址。缓存页可以帮助快速查找页表中的项,从而加速地址转换的过程。
4、死锁的产生条件?怎么解决?
四必要。
处理方法:预防(破坏四必要)、避免(银行家算法)、检测、解除
4、除了Windows和Linux你还见过什么操作系统?
苹果开发的macOS、安卓手机上广泛使用的安卓系统、苹果手机上广泛使用的IOS系统
三、数据结构
1、本科学过哪些数据结构?
开始吟唱:数组、链表、栈、队列、二叉树、查找中二分查找;树形查找包括二叉查找树、AVL树、红黑树、B树、B+树等。排序算法:插入排序、冒泡排序、快速排序、希尔排序、归并排序。。。
2、数组和链表的区别?
从查询时间复杂度和插入删除时间复杂度两方面来答。
3、排序算法?
八大排序建议能够手写代码
4、图这种数据结构,你说说你对它的的理解
图数据结构在许多领域和应用中都有广泛的应用,以下是一些常见的应用场景:
-
社交网络分析:
- 社交网络中的用户和其之间的关系可以表示为图,每个用户是图中的节点,而用户之间的关系(如好友关系、关注关系等)可以表示为图中的边。图数据结构可以用于分析社交网络的拓扑结构、发现社区结构、识别关键节点等。
-
路由算法:
- 在计算机网络中,路由算法用于确定数据包从源节点到目标节点的最佳路径。图数据结构可以表示网络拓扑结构,各个节点表示网络中的路由器或交换机,而边表示网络中的连接。经典的路由算法,如最短路径算法(Dijkstra 算法、Bellman-Ford 算法)、最小生成树算法(Prim 算法、Kruskal 算法)等都是基于图数据结构的。
-
推荐系统:
- 在电子商务、社交媒体等应用中,推荐系统用于向用户推荐可能感兴趣的商品、文章、朋友等。图数据结构可以用于表示用户和商品之间的关系,然后利用图算法来发现用户可能感兴趣的内容。
-
网络流量分析:
- 在网络安全领域,图数据结构常用于分析网络流量、检测异常行为、发现攻击模式等。网络流量可以表示为图中的节点和边,利用图算法可以识别异常流量模式、分析攻击路径等。
-
语义分析:
- 在自然语言处理和信息检索领域,图数据结构可以用于构建语义网络,将单词、短语或文档表示为图中的节点,而它们之间的语义关系表示为图中的边。利用图算法可以进行语义分析、相似性计算、文本分类等任务。
-
地理信息系统(GIS):
- 地理信息系统用于存储、分析和展示地理空间数据。地图数据可以表示为图中的节点和边,节点表示地理位置,而边表示位置之间的连接关系。图数据结构可以用于路径规划、区域划分、地理数据可视化等。