1、C/S和B/S架构
C/S:客户端-服务器架构
B/S:浏览器-服务器架构
2、URL是什么
统一资源定位符
- 标准格式: 协议://服务器IP:端⼝/路径1/路径N ?key1=value1 & key2=value2
- 协议:不同的协议有不同的解析⽅式
- 服务器ip: ⽹络中存在⽆数的主机,要访问的哪⼀台,通过公⽹ip区分
- 端⼝: ⼀台主机上运⾏着很多的进程,为了区分不同进程,⼀个端⼝对应⼀个进程,http默认的端⼝是80
- 路径: 资源N多种,为了更进⼀步区分资源所在的路径(后端接⼝,⼀般称为 “接⼝路径”,“接⼝”)
3、http 超文本传输协议
协议:协议是⼀种约定,规定好⼀种信息的格式,如果发送⽅按照这种请求格式发送信息,那么接收端就要按照这样的格式解析数据,这就是协议
4、什么是http协议
超文本传输协议,是建立在tcp协议上的一种应用
显著特点是客户端发送的每次请求都需要服务器返回,从建立连接到关闭连接的过程称为一次连接
特点:
应用层协议,使用tcp进行数据传输
简单、灵活,多种语言具有http专门接口
无状态,数据传输过程中不记录传输内容
有丰富的请求类型
可以传输多种数据类型
5、响应码
1xx:信息
2xx:200成功,请求正常
3xx:重定向
4xx:客户端错误404 not found
服务器无法找到被请求的页面
5xx:服务器错误503,服务器挂了或者不可用
服务器502网关错误
6、HTTP和HTTPS的关系
主要组成:http+SSL/TLS
比http安全,可防止数据在传输过程中部被窃取、修改,确保数据的完整性,增加破解成本
缺点:相同网络环境,HTTPS协议使页面的加载时间延长,增加额外的计算机资源消耗,不过利大于弊
如果是软件压测:直接压力测试内网IP,通过压测公⽹域名,不管是http还是https,都会带来额外的损耗导致结果不准确
7、http协议的请求结构
(1)请求行:具体请求类别和请求内容
GET / HTTP/1.1 请求类别 请求内容 协议版本
(2)请求头:对请求的进一步解释和描述
accept
content-type
语言
host
connection
(3)空行
(4)请求体
8、http协议的响应结构
(1)响应行:反馈基本的响应情况
(2)响应头:对响应内容的描述
date
content-type
(3)空行
(4)响应体:响应的主体内容
9、http协议的九种请求方法介绍
http1.0定义了三种:
GET: 向服务器获取资源,⽐如常⻅的查询请求
POST: 向服务器提交数据⽽发送的请求Head: 和get类似,返回的响应中没有具体的内容,⽤于获取报头
http1.1定义了六种
PUT:⼀般是⽤于更新请求,⽐如更新个⼈信息、商品信息全量更新
PATCH:PUT ⽅法的补充,更新指定资源的部分数据
DELETE:⽤于删除指定的资源
OPTIONS: 获取服务器⽀持的HTTP请求⽅法,服务器性能、跨域检查等
CONNECT: ⽅法的作⽤就是把服务器作为跳板,让服务器代替⽤户去访问其它⽹⻚,之后把数据原原本本的返回给⽤户,⽹⻚开发基本不⽤这个⽅法,如果是http代理就会使⽤这个,让服务器代理⽤户去访问其他⽹⻚,类似中介
TRACE:回显服务器收到的请求,主要⽤于测试或诊断
10、OSI七层模型
tcp/ip模型
11、什么是网络协议
网络数据传输中,需要遵循的一种执行规则
ipv4 ipv6
IP地址 : 即在网络中标识一台计算机的地址编号。
IP地址分类
- IPv4 : 192.168.1.5
- IPv6 :fe80::80a:76cf:ab11:2d73
IPv4 特点
- 分为4个部分,每部分是一个整数,取值分为0-255
IPv6 特点(了解)
- 分为8个部分,每部分4个16进制数,如果出现连续的数字 0 则可以用 ::省略中间的0
12、查看IP地址的命令
Linux系统:ifconfig、ping[ip]
windows:ipconfig
端口号
网络地址的一部分,0-65535,tcp有65536个端口,udp也是65535
2的16次方个
13、UDP协议传输特点
可能会出现数据丢失
传输过程简单,实现起来容易
数据以数据包的形式传输
数据传输效率高
14、TCP协议传输特点
面向连接的传输服务
传输特征:可靠数据传输,可靠性指的是数据无丢失、无失序、无差错、无重复
可靠性如何保证:通信前建立连接、确认应答机制、通信结束正常断开连接
15、三次握手(建立连接)
客户端向服务器发送消息报文syn请求连接
服务器接收请求后,回复报文syn+ack,确定可以连接
客户端收到回复报文,发送最终报文连接建立
16、 四次挥手(断开连接)
客户端和服务端都可以是主动方,另一方就是被动方
主动方发送报文给被动方,请求断开连接
被动方接收报文,立即回复,准备断开连接
被动方准备完成,再次发送报文表示可以断开了
主动方收到确认可以断开后,发送最终报文完成断开
17、tcp粘包
原因:tcp是字节流数据传输,数据在传输过程中,收发的速度不一致导致
发送时没有消息边界
解决办法:人为的添加消息边界,分割消息,控制发送的速度
18、TCP和UDP对比
可靠数据传输 不可靠的数据传输 字节流 数据包 需要建立连接 不需要建立连接 数据量大而且准确的场景
文件传输
邮件收发
点对点传输
传输数据小,对可靠性要求低的场景
视频流传输如直播、视频聊天
广播如网络广播
实时传输如游戏的画面
19、什么是进程
程序在计算机中一次执行过程,是动态的过程描述
20、进程模块
multiprocessing
21、进程的状态
三态
就绪:进程具备执行的条件,等待系统调度分配CPU资源
运行:进程占用CPU正在运行
等待:进程被阻塞,此时让出CPU资源
五态
新建:创建一个进程,获取资源的过程
终止:结束一个进程,释放资源的过程
22、常用的进程命令
ps -aux
- USER : 进程的创建者
- PID : 操作系统分配给进程的编号,大于0的整数,系统中每个进程的PID都不重复。PID也是重要的区分进程的标志。
- %CPU,%MEM : 占有的CPU和内存
- STAT : 进程状态信息,S I 表示阻塞状态 ,R 表示就绪状态或者运行状态
- START : 进程启动时间
- COMMAND : 通过什么程序启动的进程
进程树形结构展示
pstree
23、什么是孤儿进程
父进程在子进程之前退出,子进程就变成孤儿进程
系统进程自动收养子进程,孤儿进程退出系统进程会自动处理
24、什么是僵尸进程
子进程在父进程之前退出,父进程又没有处理子进程的退出,子进程就变成僵尸进程
僵尸进程太多会浪费大量的系统资源
25、如何避免僵尸进程产生
使用join()回收
在父进程使用signal方法处理
26、为什么要创建进程池
单个进程创建和销毁消耗的资源多
任务很多而且任务在短时间完成,需要频繁创建和销毁
导致计算机压力大,进程池能解决此问题
27、进程池的原理
创建一定数量的进程来处理多个事件,事件处理完进程不退出,继续处理事件,直到所有的事件都处理完成,统一退出进程,降低资源消耗/28进程如何通信
进程空间独立,资源不共享,如果要在进程间进行数据传输就需要特殊手段
比如消息队列、套接字等
29、什么是线程
线程被称为轻量级的进程
也可以利用计算机的多CPU资源
线程可以理解为进程中的分支任务
30、线程的特征
一个进程包含多个线程
线程也是动态的,一种运行行为,消耗计算机资源
一个进程中的多个线程,共享此进程的资源
多个线程之间各自独立运行,互不影响
线程创建和销毁的资源远小于进程
31、线程的模块
threading
32、线程如何通信
线程之间使用全局变量进程通信
33、共享资源争夺
多个进程或线程都能操作的资源被称为共享资源,对共享资源操作的代码被称为临界区
带来的影响:对共享资源的无序操作会带来混乱,或者操作错误,需要同步互斥机制协调顺序
34、同步互斥机制
同步:多进程或多线程之间协调,按照必要的步骤有序执行操作,协助关系
互斥:当进程或线程正在使用资源的时候,会对资源加锁,其他的进线程就无法操作,直到解锁,制约关系
35、死锁的概念
死锁:指的是两个或多个线程在执行过程中,竞争资源或者彼此通信造成的阻塞现象,如果没有外力干扰,都会被阻塞的状态被称为死锁状态
36、什么条件下会产生死锁
互斥条件:线程使用互斥方法,使用资源并加锁
请求和保持条件:线程在操作一个资源的同时,还去操作另外的资源,在获取新资源时不释放自己保持的资源
不剥夺条件:没有线程外部干扰,比如系统强制终止线程
环路等待:发发生死锁,线程之间必然存在一个资源的环形链,如 T0正在等待一个T1占用的资源;T1正在等待T2占用的资源,……,Tn正在等待已被T0占用的资源。
37、如何避免死锁
逻辑清晰,不要同时出现死锁的4个条件
测试工程师进行死锁检测
38、GIL全局解释器锁
什么是GIL
由于python解释器设计中加入了解释器锁,导致python解释器同一时刻只能解释执行一个线程,大大降低了线程的执行效率
导致后果 因为遇到阻塞时线程会主动让出解释器,去解释其他线程。所以python多线程在执行多阻塞任务时可以提升程序效率,其他情况并不能对效率有所提升
结论
- GIL问题与Python语言本身并没什么关系,属于解释器设计的历史问题。
- 在无阻塞状态下,多线程程序执行效率并不高,甚至还不如单线程效率。
- Python多线程只适用于执行有阻塞延迟的任务情形
39、进程与线程的区别及关系
两者都都是多任务编程方式,可以使用计算机多核资源
进程的创建销毁消耗的资源远大于线程
进程空间独立,数据互不干扰,专门通信办法如消息队列、套接字;线程通信使用全局变量
一个进程可以有多个分支线程,包含关系
多个线程共享进程资源,在操作共享资源时存在同步互斥机制
Python存在GIL全局解释器锁,进程没有