来源:牛客网面经
计算机网络面试题总结
目录
计算机网络
1.概述
问题: 七层OSI模型或TCP/IP协议模型(各层分别实现了什么协议)
物理层、数据链路层(HDLC、SDLC、PPP、ARP)、网络层(RIP、OSPF、IP)、传输层(UDP、TCP)、应用层(FTP、DNS、HTTP)
应用层: 指的是应用程序
表示层:用于数据格式交换、数据加解密、数据压缩和恢复。
会话层:用于建立、维持和断开网络会话
传输层(报文): 负责端到端(进程到进程)之间数据的传输控制
网络层(分组): 传送分组,主要负责主机到主机的数据传输以及分组的选路,实现路由选择、拥塞控制、网络互连的功能
数据链路层(帧): 数据在一段链路上的相邻结点间的传输。传输数据时,链路层将网络层的数据封装成帧(framing),从而实现以帧为传输单位,采用简单的差错控制方法,使有差错的物理线路变成无差错的数据链路。
封装帧时加上必要的控制信息,控制信息作用:
(1)使得接收端能够知道一个帧从哪个比特开始和到哪结束,从而接收端的数据链路层可以提取出数据,交给网络层;
(2)控制信息还可以检测帧中是否有差错。发现差错,链路层丢弃该帧,以免续传下去浪费网络资源。
(3)如果需要改正错误,则需要传输层的TCP协议来完成。
物理层: 利用物理传输介质为数据链路层提供物理连接,透明地传输比特流。物理传输介质:双绞线、光纤、无线信道等。PDU称为比特流
2.应用层
(1)在浏览器网址输入一个url后直到浏览器显示页面的过程?
DNS解析、 TCP连接、 发送HTTP请求、 服务器处理请求并返回HTTP报文、 浏览器解析渲染页面、 连接结束
DNS解析: 浏览器缓存、 找本机的 hosts 文件、 路由缓存、 找 DNS 服务器(本地域名、顶级域名、根域名) 迭代查询、递归查询
(2)HTTP
在万维网客户程序与万维网服务器程序之间进行交互所使用的协议 , 是议 超文本传送协议HTTP(HyperText Transfer Protocol) 。 HTTP 是一个应用层协议 , 它使用TCP 连接进行可靠的传送。
HTTP 工作过程
– 服务器有一个 服务进程 ,不断 监听80 端口 ,从而。 发现是否有浏览器(客户端)发出连接建立请求。
– 服务端监听到连接建立请求后,进行 三次握手建立 TCP 连接。 。
– 客户端浏览器 向服务器 发出浏览 某个页面的 请求
– 服务端返回客户端所请求的 页面作为响应
– TCP 连接释放掉。
– 客户端显示请求页面。
– 整个过程中,浏览器和服务器之间的请求和响应的交互,必须 按照规定的格式和规则 ,这就是HTTP 协议。
1. http协议和tcp协议的区别
2. https和http的区别
https安全,加密http和https区别
3. https的请求过程
HTTPS 建立连接的详细过程
4. 常见状态码:HTTP状态码
200 OK //客户端请求成功
400 Bad Request //客户端请求有语法错误,不能被服务器所理解
401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
403 Forbidden //服务器收到请求,但是拒绝提供服务
404 Not Found //请求资源不存在,eg:输入了错误的URL
500 Internal Server Error //服务器发生不可预期的错误
503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常
Http状态码302、204(无内容)、500、504、403
5. get请求和post请求的区别
是http发送数据请求的两种方式。get请求的数据会附在URL之后,不安全,长度限制
Get与Post的区别?(面试官最想听到的答案)发送的数据包不同
6.http协议的发展历程 ??
3.传输层
(1)TCP三次握手,四次挥手
1. tcp三次握手和四次挥手的过程(为什么不可以两次握手,为什么握手要三次,挥手需要四次)
两次握手会发生什么?TCP三次握手过程,如果两次握手会怎么样?
2. TCP 连接必须经过时间 2MSL 后才真正释放掉?
A 还需等待 2MSL 时间后,方可结束这次 TCP 连接。 这个时间保证 A 发送的最后一个 ACK 确认报文段能够到达B 。
MSL 叫做最长报文段寿命( Maximum Segment Lifetime )
为什么tcp的TIME_WAIT状态要维持2MSL
TIME_WAIT至少需要持续2MSL时长,这2个MSL中的第一个MSL是为了等自己发出去的最后一个ACK从网络中消失,而第二MSL是为了等在对端收到ACK之前的一刹那可能重传的FIN报文从网络中消失。
(1)尽量保证被动关闭的一端收到它自己发出去的FIN报文的ACK确认报文;
(2)处理延迟的重复报文,这主要是为了避免前后两个使用相同四元组的连接中的前一个连接的报文干扰后一个连接。
(2)TCP如何实现可靠传输
3. tpc如何实现可靠传输(如何实现udp的可靠传输)。
要解决(1)无差错(2)速率合适
可靠传输协议: (1)停止等待协议(2)流水线传输协议:连续ARQ和滑动窗口
(1)停止等待协议:每发送完一个分组就停止发送,等待对方的确认,在收到确认后再发送下一个分组。也被称为自动重传请求ARQ(Automatic Repeat reQuest )
a.无差错情况A->B B->A
b.如果A->B出现差错,A超时重传
c.B->A确认丢失,A超时重传,B丢弃重复
d.B->A确认迟到,B丢弃重复,A 对重复的确认收下后就丢弃
优点:简单 。缺点: 信道利用率太低 。每发送完一个分组就停顿下来等待对方的确认。
(2)流水线传输协议:发送方 连续发送多个分组 ,不必每发完一个分组就停顿下来等待对方的确认。
(2.1)连续ARQ: 发送方利用 发送窗口 ,一次发送多个分组。同时,发送方 每收到一个确认 ,发送 窗口就向前移动一个
分组的位置。
流量控制: (点对点通信量)让发送方的发送速率不要太快,既要让接收 方来得及接收,也不要使网络发生拥塞。 利用 滑动窗口机制 可以很方便地在 TCP 连接上实现流量控制。
TCP 双方交互数据时,都会携带各自目前的缓存大小。
死锁产生:非0窗口通告传输中丢失。死锁避免:收到非0时,启动持续计时器,到期后。发送方发送零窗口探测报文。
拥塞控制 :(全局性)对资源需求的总和 > 可用资源,发送拥塞。控制的目的是防止过多的数据进入到网络中,使网络中的路由器或链路不致过载。
原理:发送方维持一个叫做 拥塞窗口cwnd (congestion window) 的状态变量。拥塞窗口的大小取决于网络的拥塞程度,并且动态地在变化。
慢开始:在主机刚刚开始发送报文段时可先设置拥塞窗口cwnd = 1 。 在 每收到一个 对新的报文段的 确认 后 , 将 拥塞窗口 加1。每经过一个 传输轮次 ,拥塞窗 口cwnd 就加倍。
拥塞避免:拥塞避免算法的思路 是让拥塞窗口cwnd 缓慢地增大,即每经过一个往返时间 RTT 就把发送方的拥塞窗口 cwnd 加 1, 而不是加倍 ,使拥塞窗口cwnd 按 线性规律缓慢增长。
当 cwnd < ssthresh (门限状态变量)时, 使用慢开始算法。 。
当 cwnd > ssthresh 时,停止使用慢开始算法而改用拥塞避免算法。 。
当 cwnd = ssthresh 时,既可使用慢开始算法,也可使用拥塞避免算法。
只要出现拥塞(没有按时收到确认),就要把 慢开始门限 ssthresh 设置为出现拥塞时的发送方窗口值的一半 (但不能小于2 )。
4. tcp和udp的区别
4.网络层
路由信息协议RIP:算法是基于分布式的距离向量的路由选择。
开放最短路径优先协议(OSPF): 适用情况:适用于规模很大的自制系统;SPF计算路径时,要求路由器发送本路由器与哪些路由器相邻和链路状态的度量。度量主要是指:费用、距离、延时、带宽等;使用Dijskstra的最短路径算法。
数据结构–Dijkstra算法最清楚的讲解
边界网关协议(Border Gateway Protocol, BGP)
其他
各种io模型的知识(BIO,NIO,AIO)
lvs,nginx,HA在七层网络协议中分别作用于哪层,各自的区别
四层和七层负载均衡的特点及常用负载均衡Nginx、Haproxy、LVS对比
操作系统
1.基本特征、作用、功能
特征:并发、共享、虚拟、异步。
并发与并行:并行性 是指两个或多个事件在 同一时刻。并发性 是指两个或多个事件
在同一时间间隔内发生。
共享:互斥共享方式、同时访问方式
虚拟:通过某种技术把一个物理实体变为若干个逻辑上的对应物。
异步:在 多道程序环境下, 允许多个进程并发执行, , 但只有进程在获得所需的资源后方能执行 。
操作系统的功能
(1)处理机管理功能:进程管理、进程同步、进程通信、进程调度
(2)存储器管理功能:内存分配、内存保护(内存保护的主要任务, , 是确保每道用户程序都只在自己的内存空间内运行, 彼此互不干扰 )地址映射、内存扩充(虚拟存储技术)
提高利用率 、 方便用户使用 、 提供足够的存储空间 、 方便进程并发运行 。
(3)设备管理功能:缓冲管理、设备分配、设备处理
完成用户进程提出的 I/O 请求;
为用户进程分配其所需的 I/O 设备;
提高 CPU 和 I/O 设备的利用率;
提高 I/O 速度;
方便用户使用 I/O
(4)文件管理功能: 文件存储空间的管理、目录管理、文件的读/写
对用户文件 和 系统文件 进行管理 ,以方便用户使用并保证文件安全 。
(5)用户接口:提供一个友好的用户访问操作系统的接口。
操作系统的作用
OS 作为用户与计算机硬件系统之间的接口(用户观点)
OS 作为计算机系统资源的 管理者 (设计者观点)
OS实现了对计算机资源的抽象(虚拟机观点)
2.进程管理
进程定义: 进程是进程实体的运行过程, , 是系统进行 资源分配和调度的一个独立单位
进程三种基本状态: 就绪、执行、阻塞。
就绪 (Ready) 状态:进程已获得除处理机外的所需资源。
执行 (Running) 状态:就绪状态的进程获得了处理机。
阻塞 (Blocked) 状态:由于进程等待某种事件( ( 如 I/O 请求或进程同步) ) ,在事件发生之前无法继续执行。
系统态和用户态:
处理机的执行状态分 系统态 和 用户态 两种: :
(1) 系统态( 管态、核心态)) :有较高特权,能执行一切指令,访问所有寄存器和存储区。
(2) 用户态( 目态 ) :有较低特权,能执行规定指令,访问指定寄存器和存储区。
用户程序运行在用户态,不能执行 OS 指令及区域。
OS 内核运行在系统态,进程控制是由 OS 内核实现的。
引起进程阻塞和唤醒的事件
(1) 请求共享资源失败
(2) 等到某种操作的完成
(3) 新数据尚未到达
(4) 等待新任务的到达
同步与互斥的区别
(1) 间接相互制约关系
源于资源共享。如 A 、B共享打印机,若A申请打印时,打印机已分配给B,则A只能阻塞,等B释放后再改为就绪,又称为 “ 互斥 ” 。
(2) 直接相互制约关系
源于进程之间的合作关系。如进程A向B提供数据,当输入缓冲空时,B不能得到数据而阻塞;反之当缓冲满时,A 无法写入而阻塞,又称为 “ 同步 ”
信号量机制
信号量就是 OS 提供的管理公有资源的有效手段。信号量代表 可用资源实体的数量 。
整型信号量, 除 初始化 外,仅能通过两个标准的 原子操作wait(S) 和signal(S) 来访问。也称为P 、V 操作。
经典同步问题:
生产者-消费者、哲学家进餐
进程调度算法
(1)先来先服务调度算法(FCFS)
按照作业进入系统的 先后次序 进行调度,先进入系统者先调度;即启动等待时间最长的作业。FCFS 算法比较有利于长作业( 进程 ), , 而不利于短作业( 进程 ) 。
(2)短进程优先调度算法(SPF)
SPF :从就绪队列中选出 一个 估计运行时间最短的进程,将处理机分配给它,使它立即执行并一直执行到完成,或发生某事件而被阻塞放弃处理机时,再重新调度。缺点:对长作业不利,未考虑优先级,估计时间不准,无法人机交互。
(3)优先级调度算法(PSA)非/抢占式优先权调度算法
(4)高响应比优先调度算法 (HRRN)
该算法是 FCFS 和 SJF 的结合,克服了两种算法的缺点。响应比最高的作业先启动。
优先权=(等待时间+要求服务时间)/要求服务时间
死锁
如果一组进程中的每个进程都在等待仅由该组进程中的其它进程才能引发的事件,那么该组进程是死锁的( Deadlock )。
死锁必要条件
互斥条件、请求和保持、不剥夺、环路(循环)等待
方法
预防、避免、检测和解除
预防死锁:
(1)破坏请求和保持条件:进程开始之前,一次性申请所需的所有资源。优点:简单、安全确定:资源浪费、进程运行延迟
(2)破坏不剥夺条件:当一个已经保持了某些资源的进程申请新资源而不能得到满足时, , 必须放弃已有资源,缺点:代价昂贵
(3)破坏环路等待:规定序号排队确定:序号固定,限制新设备类型增加,限制序号限制用户编程
避免死锁:银行家算法。允许进程 动态地 申请资源, , 但系统在进行资源分配之前, , 应先 计算 此次资源分配的 安全性 。 若此次分配不会导致系统进入不安全状态, , 则将资源分配给进程 ; 否则, 令进程等待。是否能找到安全序列。
1.线程和进程的区别(可能会问到协程) 进程和线程的使用场景
分别阐述进程、线程、协程的区别和联系
2.进程的调度算法 手写LRU
【面试题】进程常用调度算法
【每日一道算法题】Leetcode之LRU Cache LRU缓存问题 Java HashMap+双向链表
3.进程的通信方式 进程通信中的管道原理
进程间的五种通信方式介绍
4.线程的七态模型 七??
进程的三态和五态模型以及Java中线程的六种状态
5.进程间同步与互斥的区别,线程同步的方式
6.死锁的定义以及如何避免死锁(银行家算法)
3.内存管理
用户程序处理步骤: 编译–>链接–>装入
链接程序把目标程序以及所需的功能库等转换成一个可执行的装入程序。
链接:
静态链接在程序运行前,先将各 目标模块及所需的库函数链接成一个完整的 装入模块,以后不再拆开。
动态链接:装入时动态链接将用户的源程序编译后所得的一组目标模块在装入内存时采用 边装入边链接 的方式。各目标模块分开存放。
优点: (1) 便于目标模块的修改和更新(2) 便于实现对目标模块的共享
问题 :将所有可能要运行到的模块都全部装入内存,在装入时全部链接在一起。
运行时动态链接对某些模块的 链接在执行中需要该模块时,才对它进行链接。
凡在执行过程中未被用到的目标模块,都不会被调入内存和被链接到装入模块上。
优点:加快程序的装入过程 ,节省大量的内存空间
对换
对换: 把内存中暂时不能运行的进程或者暂时不用的程序和数据,调出到外存上,再把已具备运行条件的进程或进程所需要的程序和数据,调入内存。对换是 提高内存利用率 的有效措施。
离散分配方式:
连续分配方式要求为一个进程分配连续的内存空间( 整体装入) ,形成许多 “ 碎片 ” 而 浪费, “ 紧凑 ” 操作会付出相当大的代价。 分页式、分段式
分段和分页的主要区别:
(1)页是信息的物理单位,是为了消减内存的外零头,提高内存的利用率,系统管理的需要;段是信息的逻辑单位,分段的目的是为了更好地满足用户的需要。
(2)页的大小固定,且由系统自动决定;段的大小不固定,决定于用户所编写的程序。
(3)分页的作业地址空间是一维的;分段的作业地址空间是二维的。
分页地址包括 页号 和业内地址。分段地址包括段号、段内地址。段页式管理中,逻辑地址由 段号 、 段内页号及页内地址三部分所组成。
虚拟内存
虚拟内存的作用? 可以对换,让用户不用担心内存不够的问题。
虚拟存储器是指具有 请求调入 和 置换功能 ,能从逻辑上 对内存容量加以扩充的一种存储器系统。
页面置换算法
(1)最佳置换算法:理论上被淘汰的页面是在(未来) 最长时间内不再被访问的页面。
(2)先进先出置换算法(FIFO):淘汰在内存驻留时间最长的页
特点:这种算法简单 , 实现容易;貌似公平 , 实际上不公平;不切实际 , 有些页面经常被访问 , 可能先被淘汰 。
(3)最近最久未使用置换算法(LRU) 基本思想 :如果某一页被访问了,那么它很可能马上又被访问;反之 , 如果某一页很长时间没有被访问 ,那么最近也不太可能会被访问 。 局部性原理 。当需要置换一页时, , 选择在 最近一段时间最久未使用的页面予以淘汰缺点:这种算法需要对每一页的使用情况跟踪记录 , 系统开销较大 。
(3)最少使用 (LFU:Least Frequently Used) 置换算法:该算法选择在最近使用最少的页面作为淘汰页。
分页,分段,段页的区别
介绍共享内存通信方式,内存管理说一下你的了解。
4.I/O
linux中几种io模型(select,poll,epoll) 操作系统I/O模型了解吗?epoll模型了解吗?
Linux 网络编程的5种IO模型:多路复用(select/poll/epoll)
动态链接库与静态链接库的区别
BIO AIO NIO的区别?
同步和异步:同步和异步是相对于操作结果来说,会不会等待结果返回。
阻塞和非阻塞:阻塞和非阻塞是相对于线程是否被阻塞。
BIO:Blocking I/O 同步阻塞 I/O模式,数据的读取写入必须阻塞在一个线程内等待其完成。这就是典型的 一请求一应答通信模型 。缺点:如果这个连接不做任何事情的话就会造成不必要的线程开销,资源浪费。接进来一个客户端,长期维护一个线程。
NIO:NIO是一种同步非阻塞 的I/O模型,在Java 1.4 中引入了NIO框架,对应 java.nio 包,提供了 Channel , Selector(多路复用器),Buffer等抽象。每有一个客户端连接,建立一个通道,selector轮询所有channel,如果有数据传输,建立一个线程处理。结束后,线程销毁。
AIO:在 Java 7 中引入了 NIO 的改进版 NIO 2,它是异步非阻塞的IO模型 。异步 IO 是基于事件和回调机制实现的,也就是应用操作之后会直接返回,不会堵塞在那里,当后台处理完成,操作系统会通知相应的线程进行后续的操作。
参考:Java面试常考的 BIO,NIO,AIO 总结
计算机网络-其他面试题
各种协议与HTTP协议之间的关系
HTTP、HTTP2.0、HTTPS,http请求头,有状态无状态?如何做权限校验?
HTTPS的SSL(TLS)协议
HTTP长连接、短连接
TCP状态转换图,画一下。
TCP状态转换图
哪些可以用udp
CDN 原理
伪造请求吗,安全性怎么解决
从计算机网络到服务器内部技术实现流程。
IP地址的分类
如果已经建立了连接,但是客户端突然出现故障了怎么办?
说说静态路由和动态路由有什么区别。
了解交换机、路由器、网关的概念,并知道各自的用途
websocket是用tcp还是udp?
单点登录了解过吗?