前端面试题总结之(五):综合知识点(陆续更新)

前言

你好,我是Dr.叶子,用心写最优美的博客,弹最好听的钢琴!

最近更新:

  • 2020年10月10日

1. TCP三次握手、四次挥手流程

在这里插入图片描述

seq: 序号,TCP 是面向字节流的,在一个 TCP 连接中传输的字节流中的每个字节都按照顺序编号。
ack(小写): 确认号,表示期望收到对方下一个报文段的序号值;


TCP的标志位

  • SYN: 同步标志位,当 SYN = 1 的时候,表明这是一个请求连接报文段;
  • FIN: 完成标志位,当 FIN = 1 时,表示此报文段的发送方的数据已经发送完毕,并要求释放 TCP 连接;
  • ACK(大写): 确认标志位,对已接收的数据包进行确认,TCP 规定,在连接建立后所有传送的报文段都必须把 ACK 设置为 1;
  • PSH: 推送标志位,表示该数据包被对方接收后应立即交给上层应用,而不在缓冲区排队;
  • RST: 重置标志位,用于连接复位、拒绝错误和非法的数据包;
  • URG: 紧急标志位,表示数据包的紧急指针域有效,用来保证连接不被阻断,并督促中间设备尽快处理;

具体参考: 理解 TCP 和 UDP.

在这里插入图片描述

步骤:

  1. 客户端,把 SYN 标志位置为 1 ,并随机产生序号 seq = x,组成 SYN 报文发送给服务端,表示向服务端发起连接,之后客户端处于 SYN-SENT 状态;(报文不包含应用层数据
  2. 服务端,收到客户端的 SYN 报文后,首先随机产生序号 seq = y,其次将确认号 ack = x + 1,然后把 SYN 和 ACK 标志位置为 1,组成报文发给客户端,之后服务端处于 SYN-RCVD 状态;(报文不包含应用层数据
  3. 客户端,收到服务端报文后,首先将 ACK 标志位置为 1 ,其次确认号 ack = y + 1 ,组成应答报文发送给服务端,之后客户端处于 ESTABLISHED状态。服务端收到应答报文后,也进入 ESTABLISHED状态。(可以携带数据

在这里插入图片描述

步骤:

  1. 客户端,准备关闭连接,将 FIN 标志位置为 1 ,产生随机序号 seq = x,组成 FIN 报文发送给服务端,之后客户端进入 FIN_WAIT_1 状态;
  2. 服务端,收到该报文后,将 ACK 标志位置为 1,确认号 ack = x + 1,产生随机序号 seq = y,组成应答报文向客户端发送 ,之后服务端进入 CLOSED_WAIT 状态;
    客户端,接收到应答报文后进入 FIN_WAIT_2 状态;
  3. 服务端,处理完数据后,也向客户端发送 FIN 报文,之后服务端进入 LAST_ACK状态;
  4. 客户端,收到服务端的 FIN 报文后,回一个 ACK 应答报文,之后进入 TIME_WAIT状态;
    服务端,收到了 ACK 应答报文后 , 进入 CLOSE状态,服务端完成关闭;
    客户端,过 2MSL 最大生存时间后,进入 CLOSE状态,客户端完成关闭。

2. 为什么三次握手?

  • 避免历史连接
  • 同步双方初始序号
  • 避免资源浪费

3. 为什么四次挥手?

  • 关闭连接时,客户端向服务端发送 FIN 时,仅仅表示客户端不再发送数据了但是还能接收数据。
  • 服务器收到客户端的 FIN 报文时,先回一个 ACK 应答报文,而服务端可能还有数据需要处理和发送,等服务端不再发送数据时,才发送 FIN 报文给客户端来表示同意现在关闭连接。

注:服务端,通常需要等待完成数据的发送和处理。


4. 同步&异步的概念


5. 进程、线程

  • 进程(Process): 指在系统中能独立运行并作为资源分配的基本单位,它是由一组机器指令、数据和堆栈等组成的,是一个能独立运行的活动实体。

  • 线程(Thread): 是进程中的一个实体,作为系统任务调度的基本单位

【形象描述】
进程=火车,线程=车厢
1. 线程在进程下行进。(单纯的车厢无法运行)
2. 一个进程可以包含多个线程。(一辆火车可以有多个车厢)
3. 不同进程间数据很难共享。(一辆火车上的乘客很难换到另外一辆火车,比如站点换乘)
4. 同一进程下不同线程间数据很易共享。(A车厢换到B车厢很容易)
5. 进程要比线程消耗更多的计算机资源。(采用多列火车相比多个车厢更耗资源)
6. 进程间不会相互影响,一个线程挂掉将导致整个进程挂掉。(一列火车不会影响到另外一列火车,但是如果一列火车上中间的一节车厢着火了,将影响到所有车厢)
7. 进程可以拓展到多机,进程多适合多核。(不同火车可以开在多个轨道上,同一火车的车厢不能在行进的不同的轨道上)
8. 进程使用的内存地址可以上锁,即一个线程使用某些共享内存时,其他线程必须等它结束,才能使用这一块内存。(比如火车上的洗手间)-“互斥锁”
9. 进程使用的内存地址可以限定使用量。(比如火车上的餐厅,最多只允许多少人进入,如果满了需要在门口等,等有人出来了才能进去)-“信号量”

  • 为什么要用多线程?
  1. 线程是独立调度的基本单位,进程是拥有资源的基本单位,不仅进程之间可以并发执行,并且线程之间也可以并发执行,使得操作系统具有更好的并发性,因为线程不拥有系统资源故使用线程调度时系统开销小

  2. 进程是与资源有关的,而进程又是动态的,因此进程切换时需要占用系统较多的开销,影响了系统的并发性能,引入线程,尽量减小程序在并发执行时所付出的时空开销,提高操作系统的并发性能

  • Windows 编程中创建进程耗时大

创建一个进程,在进程中往内存写若干数据,然后读出该数据,然后退出。此过程重复 1000 次,相当于创建/销毁进程 1000 次。测试结果是:

  • Ubuntu / Linux:耗时 0.8 秒
  • Windows7:耗时 79.8 秒
  • 多线程使用场景?
  1. 需要频繁创建销毁的优先用线程(进程的创建和销毁开销过大)
  2. 需要进行大量计算的优先使用线程(CPU频繁切换)
  • Java中的多线程是可以利用多核的,真正的多线程!
  • Python中的多线程只能利用单核,假的多线程!

6. 负载均衡

  • 当系统面临大量用户访问,负载过高的时候,通常会使用增加服务器数量来进行横向扩展,使用集群和负载均衡提高整个系统的处理能力;

7. 什么是CDN缓存

  • CDN 是一种部署策略,根据不同的地区部署类似nginx 这种服务服务,会缓存静态资源;
  • 前端优化,一般在静态资源上加上一个 hash 值,每次更新改变这个 hash,会去重新取资源;

8. 跨域问题

  • 产生:
    浏览器的同源策略导致了跨域,用于隔离潜在恶意文件的一种安全机制;

  • 解决:
    ① 使用 jsonp ,允许 script 加载第三方资源;
    ② 使用 nginx 反向代理(配置 Access-Control-Allow-Origin *);
    ③ 使用 cors 前后端分离模式,设置请求头 Access-Control-Allow-Origin 等;
    ④ 使用 iframe 嵌套通讯;


9. GET 与 POST 通讯的区别

GETPOST
能缓存不能能缓存
传输数据少传输数据多
请求的参数在URL,不安全URL不显示参数,相对安全
请求参数受URL长度限制无限制

10. 堆、栈(内存)

  • 栈区(stack): 由编译器自动分配释放,存储函数的参数值,局部变量的值等,其操作方式类似于数据中的栈,先进先后。

  • 堆区(heap):——一般由程序员分配释放,若程序员不分配也就没有堆,不释放,程序结束时可能由OS回收。

堆内存(heap)栈内存(stack)
存储的是实体对象存储的是局部变量
更新速度慢更新速度快(因为局部变量的生命周期很短)
实体会被垃圾回收机制不定时的回收变量生命周期一旦结束就会被释放
线程共有的线程私有的
在二级缓存中,生命周期由虚拟机的垃圾回收算法决定使用一级缓存,通常是被调用时处于存储空间,调用完立即释放
先进先出先进后出
空间大空间小

在这里插入图片描述

堆和栈的概念和区别 .


 

推荐阅读

【1】一文彻底搞懂 TCP三次握手、四次挥手过程及原理.
【2】图解TCP三次握手和四次挥手!(简单易懂).
【3】wireshark抓包图解 TCP三次握手/四次挥手详解.


 

系列文章

前端面试题总结之(一):HTML篇.

前端面试题总结之(二):CSS篇.

前端面试题总结之(三):JavaScript篇.

前端面试题总结之(四):Vue开发相关.

前端面试题总结之(五):综合知识点.


 

后语

  1. 原创内容,转载说明出处哦!
  2. 以上内容本人整理,亲测可行,如有任何问题,敬请指正,谢谢~~
  3. 点赞、收藏、也欢迎打赏,我弹钢琴你听呀~~哈哈!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值