2022计算机应届面试

本文深入探讨了网络协议的OSI七层模型和TCP/IP四层模型,重点讲解了HTTP协议及其各种版本,包括keep-alive长连接和多路复用技术。此外,还介绍了服务端推送、HTTP请求方法和状态码,以及对称与非对称加密在HTTPS中的应用,详述了HTTPS加密认证过程。同时,文章还涵盖了TCP与UDP的区别、TCP连接的建立与释放、DNS服务及安全问题,以及操作系统中进程的状态和同步异步概念。
摘要由CSDN通过智能技术生成

网络协议

OSI七层模型

分层设计,不同层实现不同功能

  1. 应用层:为计算机用户提供接口和服务
  2. 表示层:数据处理(编码解码,加密解密)
  3. 会话层:管理通信会话
  4. 传输层:管理端到端的通信连接
  5. 网络层:管理数据路由
  6. 数据链路层:管理相邻节点之间的数据通信
  7. 物理层:数据通信的光电物理特性

TCP/IP四层模型

在这里插入图片描述

应用层

应用层提供不同应用之间的通信,定义了运行在不同端系统上的应用程序进程如何相互传递报文。
HTTP协议,FTP协议,SMTP协议,DNS协议。

传输层

传输层提供主机间不同进程的通信,向应用层提供通信服务。
TCP协议,UDP协议。

网络层

网络层提供主机之间的通信,提供灵活的,无连接数据报服务,网络层不提供服务质量的承诺。
IP协议,ICMP协议。

网络层特点:

  1. 不需要建立连接。
  2. 不提供可靠的连接。
  3. 每个数据报是单独路由。
  4. 每个数据报有完整的目标地址。

HTTP版本

在这里插入图片描述

keep-alive长连接

  1. 大大减少客户端与服务器端通信的时间
  2. 减少TCP连接建立和连接释放的时间成本

多路复用

在一个信道上传输多路信号或数据流的过程和技术。

  • 可以并行在一个TCP连接中交互多种类型信息
  • 多请求并行,不依赖多TCP连接

服务端推送

不等客户端发送请求,服务端主动推送资源。

  • 能更加快速的渲染页面
  • 增加用户体验

HTTP请求方法

在这里插入图片描述

  1. GET:请求服务器发送某个资源
  2. HEAD:类似GET,但只返回响应头(用于客户端对服务器的接口检查)
  3. POST:向服务器写入数据
  4. PUT:向服务器写入资源
  5. DELETE:请求服务器删除资源
  6. OPTIONS:返回服务器支持操作资源的方法

幂等操作:任意多次执行所产生的影响均与一次执行的影响相同
幂等函数:可以使用相同的参数重复执行,并能获得相同结果的函数

HTTP状态码

在这里插入图片描述

  1. 200:OK,请求成功,响应报文包含了请求的资源
  2. 204:No Content,响应报文包含头部和状态行,但没有响应体
  3. 304:Not Modified,所请求的资源未修改,服务器不会返回资源。(资源从服务器获取重定向到从本地获取)
  4. 400:Bad Request,客户端请求语法错误
  5. 401:Unauthorized,客户端请求时未提供身份认证
  6. 403:Forbidden,请求被服务器拒绝
  7. 404:Not Found,资源找不到
  8. 500:Internal Server Error,服务器内部错误
  9. 502:Bad Gateway,网关或代理服务器向远端服务器执行请求错误
  10. 503:Service Unavailable,服务器宕机
  11. 504:Gateway Timeout,网关或代理服务器请求远端服务器超时
    在这里插入图片描述

对称/非对称加密

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
密钥a,密钥b是拥有一定数学关系的一组密钥

密钥a:公钥给大家使用,对外公开。
密钥b:私钥自己使用,不对外公开。

对称加密非对称加密
密钥同一串密钥一组密钥(公钥,私钥)
效率
安全性较高更高

散列算法(哈希算法)

哈希算法是一种可以从任何一种数据中创建更小的数字指纹的方法,它把消息或数据压缩成摘要,使得数据量变小,将数据的格式固定。

哈希碰撞:原文和哈希算法的结果为多对一关系。
加盐操作:明文+自定义字符《Hash》->xxxxxx(确保数据安全性)

在这里插入图片描述
哈希散列算法不算加密算法

HTTPS加密认证的过程(TLS技术)

HTTPS(Secure)是安全的HTTP协议
http(s)://<主机>:<端口号>/<路径>

HTTP和HTTPS区别

HTTPHTTPS
安全性不安全安全
复杂度
效率
端口号80443

TLS:传输层安全性协议

TLS是介于传输层和应用层之间的协议

  • 保证数据安全和数据完整
  • 对传输层数据进行加密后传输(结合了对称/非对称加密技术)
    在这里插入图片描述
    SSL安全参数握手:
    在这里插入图片描述
    在这里插入图片描述

DNS服务

DNS(domain name system)域名系统:它是一项互联网服务,存储域名和IP地址相互映射的关系。

域名由点,字母和数字组成。点分割不同的域。
www.baidu.com,
三级域名:www
二级域名:baidu
顶级域名:com
在这里插入图片描述

DNS工作原理

在这里插入图片描述
在这里插入图片描述
(迭代查询)

  1. 先查本地的缓存有无IP地址
  2. 若没有再查询本地域名服务器
  3. 本地域名服务器向根域名服务器查询顶级域名服务器在哪里
  4. 根域名服务器返回目标顶部域名服务器IP
  5. 本地域名服务器向顶部域名服务器查询权威域名服务器在哪里
  6. 顶级域名服务器返回目标权威域名服务器IP
  7. 本地域名服务器向权威域名服务器查询具体的IP是什么
  8. 权威域名服务器返回目标具体IP
  9. 本地域名服务器再返回给本地PC

DNS安全

将正常站点解析到恶意页面

DNS胁持:黑客攻击本地DNS服务
DNS欺骗:黑客冒充(权威)域名服务器,将查询到的IP地址进行替换
DDOS攻击:让DNS服务宕机
在这里插入图片描述

TCP与UDP协议

传输层提供主机间不同进程的通信
识别具体进程:套接字(Socket)=IP地址+端口(0~65535)

在这里插入图片描述
差别:

  1. 协议头部复杂度不同
  2. TCP提供的是可靠有连接服务
  3. UDP提供的是不可靠无连接服务
    可靠传输指无差错,不丢失,不重复,并且按序到达。

TCP连接建立(三次握手)

TCP提供的是可靠的有连接的服务。
ACK:确认位,ACK=1,确认号才生效。
SYN:同步位,SYN=1,表示连接请求报文。
在这里插入图片描述
第一次:SYN=1,请求同步并告诉对方自己的数据序列号。
第二次:SYN=1、ACK=1,确认对方的数据并告诉对方自己的数据序列号。
第三次:ACK=1,确认对方的数据(可以开始传输数据了)

TCP连接释放(四次挥手)

FIN:终止位,FIN=1,表示释放连接。
在这里插入图片描述
第一次:FIN=1,主动方主动请求中断连接。
第二次:ACK=1,表示确认收到中断报文
第三次:FIN=1,ACK=1,被动方请求中断连接
第四次:ACK=1,确认中断连接。

TIME−WAIT状态

指第四次挥手后,主动方中断连接方所处的状态,此状态下,主动方尚未完全关闭TCP连接,端口不可复用。TIME-WAIT需要等待2MSL

为什么TIME-WAIT需要等待2MSL?

  1. 确保第四次挥手的报文一定正确到达对方。
  2. 2MSL时间内,如果没有到达对方,那么对方会重新进行第三次挥手,确保连接正常释放。
  3. 确保当前连接所有的报文都已经过期。

操作系统

进程

  1. 进程是系统资源分配和调度的基本单位
  2. 进程作为程序独立运行的载体,保障程序正常运行
  3. 进程使得操作系统资源的利用率大幅提升

进程状态

在这里插入图片描述
1.就绪状态:当进程被分配到除CPU以外的所有必要资源,只差CPU资源的状态
2.执行状态:进程获得CPU资源后,程序正在执行的状态
3.阻塞状态:进程因某种原因无法执行而放弃CPU资源的状态

同步和异步

同步:等上一个任务完成,才能执行下一个任务(顺序执行),适用CPU密集的操作。效率低但是安全。
[CPU密集:CPU利用率高,耗处理器资源]

异步:不同任务之间不互相等待,互相抢占资源,适用IO密集的操作。效率高但是有安全隐患。
[IO密集:频繁读写网络,磁盘等任务]

并发和并行

并发:系统只有一个CPU处理器,多个线程在同一时间间隔内运行(交替运行)
并行:系统有多个CPU处理器,多个线程在同一时刻运行(同时执行)

线程

  1. 提高程序并发的能力
  2. 线程是操作系统进行运行调度的最小单位
  3. 包含在进程中,一个进程可并发多个线程

进程与线程

在这里插入图片描述

协程

在这里插入图片描述
协程为什么叫做协作式线程?
在这里插入图片描述

  1. 由用户自行调度
  2. 协作运行,相互让步

优缺点:
调度,切换,管理更加轻量
减少了上下文切换的成本(用户态实现)
内核无法感知协程的存在(CPU多核优势丢失)
主要运用在IO密集场景

存储器的层次结构

  1. 缓存:集成在CPU中的高速缓存
  2. 主存:内存条
  3. 辅存:固态硬盘,磁盘
    在这里插入图片描述

局部性原理

CPU在访问存储器时,无论是存取指令还是存取数据,所访问的存储单元都趋于聚集在一个较小的连续区域中。
在这里插入图片描述
在这里插入图片描述

死锁

死锁的概念:两个或两个以上的进程,在执行过程中,由于竞争资源或者由于彼此通信(调度顺序不当)而造成的一种阻塞的现象,若无外力的作用,他们都将无法推进下去。这些永远在互相等待的进程称为死锁进程。

发生死锁的四个必要条件:

  • 互斥条件
  • 请求保持条件
  • 不可剥夺条件
  • 环路等待条件

1、互斥条件

  • 进程或线程对资源的使用是一种排他性的使用
  • 某个资源只能由一个进程或线程使用,其他进程或线程需要使用只能等待。

2、请求保持条件

  • 进程至少保持一个资源,又提出新的资源请求
  • 新资源被占用,请求被阻塞。
  • 被阻塞的进程不释放自己保持的资源

3、不可剥夺条件

  • 进程获得的资源在未完成使用前不能提前被剥夺
  • 获得的资源只能由进程自身释放

4、环路等待条件
在这里插入图片描述

预防死锁:破坏四个必要条件之一即可

  1. 摒弃请求保持条件
    系统规定进程运行之前,一次性申请所有需要的资源
    使得进程在运行期间不会提出新的资源请求,从而摒弃请求保持条件。

  2. 摒弃不可剥夺条件
    当一个进程请求新的资源得不到满足时,必须强制释放其占有的资源。

  3. 摒弃环路等待条件
    可用资源线性排序,递增申请。

在这里插入图片描述

悲观锁/乐观锁

在这里插入图片描述
悲观锁每次操作都加锁,乐观锁默认不加锁
悲观锁适合写操作的场景。
乐观锁适合读操作的场景。

互斥锁/共享锁

互斥锁指该锁一次只能被一个线程所持有
共享锁指该锁可被多个线程所持有,获得共享锁的线程只能读数据,不能修改数据

同步问题

生产者消费者问题

  • 一组生产者进程,一组消费者进程,中间还有一个缓冲区。
  • 生产者在缓冲区溢出前,不断向缓冲区生产数据。
  • 消费者在缓冲区为空前,不断向缓冲区消费数据。
    在这里插入图片描述

哲学家进餐问题

在这里插入图片描述
在这里插入图片描述

临界资源

一些虽作为共享资源,却又无法同时被多个进程同时访问的共享资源。当有进程在使用临界资源时,其他进程必须依据同步机制等待其释放该共享资源,才可重新竞争使用共享资源。

基础数据结构

链表,数组,栈,队列

链表

链表是一种物理存储单元上非连续,非顺序的存储结构。
逻辑顺序通过指针链接次序实现。

单向链表:每个节点包含当前节点的值和下一个节点的引用。

双向链表:每个节点包含当前节点的值,还有上一个节点和下一个节点的引用。

区别:已知一个节点的值,要找到它上一个节点的值,双向链表的时间复杂度是O(1),单向链表的时间复杂度是O(N)。空间换时间的概念

增删改:单向链表的时间复杂度都是O(N),头尾是O(1)。双向链表的时间复杂度都是O(1)。
查:单双链表的时间复杂度都是O(N)

数组

  1. 固定长度(不支持增,删)
  2. 内存连续
  3. 访问任意元素时间复杂度为O(1),通过下标访问。

后进先出

队列

先进先出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值