最近,小编在整理python面试基础知识,看了很多博客、文章和咨询了一些大厂公司大牛。了解到,在python面试的时候,不仅要求你有项目经验,还要考试代码呢!今天,小编和大家分享一下python面试基础知识,希望帮忙大家找到理想的工作!
一、简述TCP/UDP的区别?
TCP和UDP是OSI模型中的运输层中的协议。
回答这个问题主要从一下几点来说:
1、是否面向连接
TCP面向连接,UDP面向非连接即发送数据前不需要建立链接
2、可靠性
TCP提供可靠的服务(数据传输),UDP无法保证
3、有序性
TCP有序,UDP无序
4、速度
TCP数据传输慢,UDP数据传输快
5、量级
二、能说一下你了解的端口及对应的服务?
21 FTP
22 SSH
80 HTTP
443 HTTPS
3306 MySQL
6379 Redis
三、能说几个常见HTTP状态码及其含义吗?
2xx 正常
3xx 重定向
4xx 客户端出现错误
403 权限被拒绝
404 请求资源不存在
5xx 服务器异常
503 服务器暂时处于超负载或正在进行停机维护,无法处理请求
四、简单说说TCP的三次握手和四次挥手
1、三次握手示意
第一次握手:客户端发送SYN包(seq=x)到服务器,并进入SYN_SEND状态,等待服务器确认
第二次握手:服务器受到SYN包,必须确认客户的SYN(ack=x+1),同时自己也发送一个SYN包(seq=y),即SYN+ACK包。此时服务器进入SYN_RECV状态
第三次握手:客户端受到SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器端进入ESTABLISHED状态,完成三次握手
2、四次挥手示意图
第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态
第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1,Server进入CLOSE_WAIT状态
第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态
第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手
五、为什么需要三次握手才能建立连接?
为了初始化Sequence Number的初始值
六、为什么需要四次挥手才能断开连接?
因为服务器与客户端是全双工,即发送方和接收方都需要FIN报文和ACK报文
七、为什么会有TIME_WAIT状态(2MSL)?
1、确保有足够的时间让对方收到ACK包
2、避免新旧连接混淆
八、TCP如何保证可靠性传输的?
校验和
序列号
确认应答
超时重传
连接管理
流量控制
拥塞控制
九、POST和GET请求的区别
1.GET请求的数据会附在URL之后,以?分割URL和传输数据,参数之间以&相连,POST把提交的数据则放置在是HTTP包的包体中。
2.GET的长度受限于url的长度,而url的长度限制是特定的浏览器和服务器设置的,理论上GET的长度可以无限长。
3.POST是没有大小限制的,HTTP协议规范也没有进行大小限制,起限制作用的是服务器的处理程序的处理能力
4.在ASP中,服务端获取GET请求参数用Request.QueryString,获取POST请求参数用Request.Form。
5.POST的安全性要比GET的安全性高
十、HTTP和HTTPS的区别
http的中文叫做超文本传输协议,它负责完成客户端到服务端的一系列操作,是专门用来传输注入HTML的超媒体文档等web内容的协议,
它是基于传输层的TCP协议的应用层协议
https:https是基于安全套接字的http协议,也可以理解为是http+ssl/tls(数字证书)的组合
http和https的区别:
1、HTTP 的 URL 以 http:// 开头,而 HTTPS 的 URL 以 https:// 开头
2、HTTP 是不安全的,而 HTTPS 是安全的
3、HTTP 标准端口是 80 ,而 HTTPS 的标准端口是 443
4、在 OSI 网络模型中,HTTPS的加密是在传输层完成的,因为SSL是位于传输层的,TLS的前身是SSL,所以同理
5、HTTP无需认证证书,而https需要认证证书
十一、 为什么HTTPS安全
HTTPS是HTTP和SSL组合而成的,在传输层使用了SSL进行加密,保证了只有拥有私钥的才能看到信息
十二、一个页面从输入 URL 到页面加载显示完成,这个过程中都发生了什么?
1.在浏览器端输入网站的url地址
只有知道了一个网站的url地址才能访问到这个网站
2.浏览器查找缓存
浏览器会查找浏览器缓存,系统缓存,路由缓存,如果没有的话 继续下一步,如果有的话,直接显示
注意:浏览器会把访问过得web网站资源(html 图片)缓存起来,而判断是否使用缓存的条件有以下几种:
是否有这个网站的缓存
这个网站的缓存是否过期,具体看Cache-Control 中缓存的有效时间
跟服务器进行协商是否使用缓存,如果上次缓存的时候有Last-modified 和 Etag 字段,本次请求就会加上If-Modified-Since(上次请求资源的时间)和If-None-Match(上次资源的修改时间)
3.通过DNS获取url对应的ip地址
现在本机的host文件中查找是否有这个url对应的ip,如果没有的话,就请求DNS进行ip地址的获取
4.建立TCP链接
http在工作之前,需要客户端和服务端建立链接,这个链接的建立是通过tcp(三次握手)来完成的,因为http是比tcp更高层的协议,在网络协议的建立中,不谈底层谈高层都是在耍流氓,所以想要让http进行工作,需要tcp首先建立链接
5.浏览器向web服务器发送请求
一旦链接已经建立,浏览器就可以给web服务器发送请求命令,比如 : GET/deom/hello.jsp HTTP/1.1
6.浏览器给web服务器发送请求头信息
浏览器在发送了请求后,还要给web服务器请求头信息,比如accept-charset(浏览器端指定的字符集),最后发送一个空的请求头代表请求发送完毕,注意:如果是post提交,则会继续提交请求体
7.web服务器进行应答
应答的第一部分是http版本号,第二部分是协议的状态码,比如:HTTP/1.1 200 OK
8.web服务器发送应答头消息
web服务器给浏览器发送应答头消息,也就是关于web服务器自己的信息,最后发送一个空白行代表应答结束
9.web服务器发送数据
以应答头里面的content-type所描述的格式发送数据
10.web服务器关闭链接
web服务器向浏览器发送了应答数据之后,就要关闭tcp链接(tcp四次握手关闭链接),如果添加了connection:keep-alive,那么就还会保持链接状态
以上,就是python面试基础知识,小编还会陆续更新哦!希望大家都能找到合适的工作!
————————————————
版权声明:本文为CSDN博主「单车欲问边」的原创文章。