python开发题库-进阶(持续更新2020-3-18)

文章目录

1.网络相关
01 IP地址的正则

模糊:^(\d{1, 3}.){3}{\d}{1, 3}$

精确:^(( 25[0-5] | 24[0-9] | [01]?[0-9] [0-9]? ) .) {3}( 25[0-5] | 24[0-9] | [01]?[0-9] [0-9]? )$

03 三次握手四次挥手全过程 为什么握手不是三次或者两次

画图(一定要自己画图才能理解!!!);关键词:全双工,握手/挥手建立通信都需要双方确认对方收到自己发送的报文;两次不足以建立双端通信,三次足够,中间一次握手同时包含 syn 和 ack 因此不需要四次;但是 挥手的时候必须四次,因此 fin 和 ack 一般不能同时发送,ack是立即发送的,而fin需要等服务端当前报文发送完毕才能发送,因此挥手是四次。

04 使用python打开百度页面

1.导入 selenium(web自动化工具)包 的 webdriver 模块(from … import …)

2.将chrome 的启动文件作为webdriver参数,使用webdiiver模拟chrome

05 进程 线程 协程

进程:资源分配最小单位; 多进程 切换和进程通信消耗大。

线程:系统调度的最小单位;线程之间的切换系统调度,会有损耗;(基于cpython解释器)python的多线程为伪多线程,

一旦处理任何一个计算密集型任务,都会导致性能极低。

协程:用户态的轻量级线程,协程切换的控制权在用户手中;使用多进程+协程发挥多核CPU的性能优势

06 IO多路复用

概念:多个网络IO复用1路或者多路线程来处理TCP连接

1984 select: 1.1024连接上限 2.使用轮询的方式 3.会修改传入的参数 4.非线程安全;

1997 poll:修改了 1024上限;不会修改传入的参数;仍然采用 轮询方式 并且 非线程安全;

2002 epoll:线程安全,并且 改用事件触发的方式,节省了系统资源;

07 TCP和UDP的区别

TCP:面向连接,安全,数据不丢失;基于字节流的传输,消息无边界;传输速率较慢(类比于打电话,发电报)

UDP:非连接,不安全,数据可能丢失;基于消息传输,有边界;传输速率较快;(类比于直播)

09 get和post post和put

(1)

get: 用来发起请求,获取数据;幂等性(无论操作多少次结果都一样),安全;

post: 提交数据(表单形式),一般是没有的,重新创建

put: 更新数据;幂等性;

delete:删除操作;幂等性;

(2)

get 和 post 具体区别:

​ get post

url参数可见性: 可见 不可见

数据传输: 拼接url进行传递参数 通过body传输参数

缓存性: 可缓存 不能缓存

传输数据大小: 一般2-4K 根据配置而定,理论上无限大

安全性: 暴露url参数 ,原则上不安全 安全

10 有一个文件,这个文件只能被同时打开一个。这是什么软件模式 ??

单例模式

12 标准的分层(七层模型) ,mac地址在哪层,ip地址在哪层,arp协议是干嘛(为什么要有arp)

(1)

应用层 访问网络服务的接口 (http,ftp,telnet,snmp,dns)

表示层 数据格式转换服务

会话层 建立端连接,提供访问验证,会话管理(session)

传输层 提供应用进程之间的逻辑通信 (tcp,udp,socket)

网络层 数据在结点之间传输创建逻辑链路,并分组转发数据 (ip,32位。路由器,交换机)

链路层 通信的实体间建立数据链路连接 (mac,48位,arp)

物理层 为数据端设备提供原始比特流的传输的通路 (传输介质,如 网线,RJ45)

(2)

ARP协议是地址解析协议,工作在数据链路层,根据IP地址来获取物理地址的一个协议。

13 http和https 的区别 HTTPS实现的原理过程,SSL加密,非对称加密和对称加密在HTTPS中是怎么用到的

(1)http是一种传输协议,全名是超文本传输协议;用于从万维网传输超文本到本地浏览器的协议。

https相当于http的安全版,加入了安全加密传输协议ssl,相比http他更安全;两者连接方式完全不一样,用的端口也不一样,http是80,https是443;https需要用到ca申请证书,一般免费证书较少,需要一定费用;并且每次消息的加密十分耗时,消耗系统资源。

(2) 对称性加密:服务器和客户端使用同一个秘钥,即加密和解密都使用一个秘钥;

优:算法公开,计算量小;加密速度快,加密效率高;

缺点:使用前需要双方协商好秘钥,并且保存好不能泄露;每对用户要使用其他用户不知道的秘钥。会使得秘钥管理成为负担。

非对称性解密:加密和解密使用一对秘钥,公钥和秘钥,互为加锁和解锁。公钥能够公开(给对方),秘钥自己保管,不能外泄。(服务端和客户端都有自己的公钥和秘钥)。客户端在发送消息前,先用服务器的公钥进行加密,服务器收到后再用自己的私钥进行解密。

优:安全 缺点:慢

原理:https使用非对称加密进行证书验证,使用对称加密进行数据传输。

详解:1.证书验证阶段: 浏览器发起 https 请求;服务端返回 https 证书;客户端验证证书是否合法,如果不合法则报警。 2.数据传输阶段:证书合法后,客户端本地生成随机数;通过(服务端)公钥加密随机数,并把加密后的随机数传输到服务端;服务端通过私钥对随机数进行解密获得客户端传入的随机数;服务端通过客户端传入的随机数构造对称加密算法,对返回结果内容进行加密后传输,客户端根据本地随机数进行解密。

数据传输使用对称加密的目的:非对称加密效率低;大量数据的传送使用非对称加密效率无法接受;另外非对称加密,一对公钥,私钥用于加密,解密,是单向的,而数据传输是双向,这也是为什么效率低的原因。

使用ca证书的目的:需要一个认证机构,防止伪造,防止任何人都可以制造证书而造成中间人攻击。(相当于一个资格认证)。

如果有人伪造证书呢:即使伪造证书,因为非对称加密存在,无法通过公钥生成私钥,所以伪造人无法拿到客户端生成的随机数。

ca包含:颁发机构信息,公钥,公司相关信息,域名,有效期,指纹等;

ssl(secure socket layer 安全套接层):融合 对称加密,非对称加密,数字证书来达到性能与安全与最大化的整合技术。

14 打开了一个浏览器,输入www.baidu.com发生了些什么过程?

15 常用 http 状态码

(1) 状态码格式

1xx:临时响应 2xx:成功 3xx:重定向(需要进一步操作) 4xx:请求错误 5xx:服务器错误

(2)常用http状态码

200 OK 服务器成功返回网页

301 永久跳转 请求的网页跳转到新的位置

302 临时移动 服务端临时从不同位置响应,但是请求者应继续使用原有位置进行请求

400 服务器不理解的请求语法(字段不合法之类的)

401 未授权 请求要求身份验证

403 服务器拒绝请求

404 服务器找不到请求的页面

500 内部服务器错误

502 坏的网关(后端没有按照http协议正确返回)

503 服务不可用 (可能是超载或者停机维护)

504 网关超时(后端没有在特定时间内完服务)

16 tcp/udp,tcp中发生是否会丢包,如何解决,udp丢包会发生什么情况

(1)TCP是一种面向连接的,可靠的,基于字节流的传输层协议;基于不可靠的网路实现可靠的传输。

TCP丢包可能的原因:

1.程序发送过程或者接受过程出现问题。

2.多线程同步问题

3.缓冲区溢出

TCP丢包解决办法:数据分片(接收到重组),到达确认,超时重发,数据校验,失序处理,重复处理

17 arp协议在哪一层 什么意思 免费的arp什么意思 作用?

(1)ARP:地址解析协议 链路层 根据ip地址获取物理地址

(2)免费ARP:

免费ARP是一个Sender IP和Target IP字段相同的广播请求报文,相当于请求自己IP地址的mac地址,大部分时候发送者不希望收到ARP回复。

作用:1.验证IP是否冲突 2.双击热备 3.网关定时刷新

18 http的报文结构,哪些报文头。get和post的区别是什么。

(1)请求报文:请求行,请求头部,空行,请求数据

响应报文:响应行,响应头,空行,响应体

请求报文头:Accept (客户端

告诉服务器接受的响应类型);cookie;Refer(请求的URL来源);cache_control 缓存控制;

响应报文头:Cache-Control 缓存控制;Etag 代表响应的服务端资源版本;Location 重定向作用;

(2)略

19 状态码的含义以及出现场景,301,302,404,500,502,504等

20 从url请求到返回,中间经历了什么

1.DNS解析,由域名获得真实IP地址;

2.客户端向IP指向的服务器发起TCP三次握手,建立同步;

3.客户端发送http请求,请求数据包

4.服务端根据请求进行响应,返回数据

5.客户端收到HTTP响应

6.客户端读取页面内容,浏览器渲染,解析html原码,css样式,js交互

21 TCP为什么可靠(直接背)

1.确认和重传机制

建立连接时三次握手同步双方的“序列号+确认号+窗口大小信息”,是确认重传,流控的基础。传输过程中,如果checksum校验失败,丢包或者延时,发送端重传

2 流量控制(滑动窗口)

窗口和计时器的使用。TCP窗口中会指明双方能够发送的最大数据量。

3 拥塞控制

拥塞控制相对于流量控制来说考虑的是整个网络的控制。

拥塞控制有四个核心算法组成:慢启动,拥塞避免,快速重传,快速恢复。

22 TCP拥塞控制(直接背)

拥塞控制相对于流量控制来说考虑的是整个网络的控制。

拥塞控制有四个核心算法组成:慢启动,拥塞避免,快速重传,快速恢复

23 浏览页面过程client和server做了什么?

(已建立TCP三次握手连接情况下) 客户端:http请求,ajax轮询 服务端:http响应

备注:多个HTTP请求并不代表有多个TCP连接,当然这个场景肯定会有多个TCP连接

http2.0 可以通过多路复用计数,允许通过单一的http请求连接发起多重请求-响应消息,即同一次传输中发送多个css,js,图片等资源

24 Accept发生在TCP三次握手的哪个阶段?connect,listen函数?

1.accept():从处于established 状态的队列中取出完成的连接,当队列中没有完成连接时候,会形成阻塞,直到取出队列中已完成连接的用户连接为止。(Accept默认阻塞进程,直到有一个客户建立连接为止。)。established阶段。

2.客户端调用connect来发送syn报文。默认阻塞进程,直到连接成功。同步发送阶段。

3.服务器调用listen进行监听。非阻塞函数。建立三次握手之前。closed阶段。

25 Server能不能提前close,会有什么结果(?)

不能;

如果服务器还没发送FIN就关闭;会导致导致此时响应给客户端的报文不完整;

如果还没收到客户端对服务端关闭报文的响应就关闭:客户端没有办法确认服务端是否关闭,造成非正常关闭。

26 TIME_WAIT过多是因为什么;

原因:服务器处理高并发短连接,严重影响服务器的处理能力,甚至耗尽可用的socket。(占用大量端口,短连接本身时间很短)

解决:调整参数,缩短Time_wait的时间。

27 socket长连接是什么意思;

1次socket连接成功之后,无论是否使用socket连接,不断开socket连接(进行多次HTTP事务)。

28 当打开浏览器输入一个网址时,用到了哪些网络协议。

域名解析:DNS协议(应用层)

TCP三次握手:TCP协议

建立TCP连接时需要发送数据:IP协议

OSPF:IP数据包在路由器之间,路由选择使用OSPF协议

ARP:路由器在于服务器通信时,需要将IP地址转换为MAC地址,需要使用ARP协议

HTTP:TCP建立连接完成后,使用HTTP协议访问网页

2.python机制
01 深拷贝浅拷贝区别

02 python2 与 python3 之间的区别

(1)核心区别: 编码方式,字符串类型,类的区别,缩进,import方式(2相对,3绝对)

(2)废弃类区别:

raw_input函数弃用,统一使用input函数;

print语句弃用,统一使用print函数;

xrange弃用,统一使用range(同python2中的xrange);(保留生成器功能)

exec,execfile语句被弃用,使用exec函数;(将字符串转化为执行代码)

long整数类型被废弃,统一使用Int

file函数被废弃,统一使用open来处理文件

字典has_key函数被废弃,统一使用in关键字

keys(),values(),items();zip(),map(),filter(),不在返回list对象,而是iterable对象,但可以通过list方法转化为list

(3)修改类区别:

/ 修改: 2中有浮点数参与结果为浮点数,全整为整数;3中根据实际结果而定类型。

for循环: 2会改变同名外部相同名称变量的值;3不会;

round函数; 2返回float类型,而3返回int类型。

比较操作符:2不同类型对象可以比较(ASCII码的比较),3只有统一数据类型可以比较。

03 不使用内置函数,将字符串转换成整数C
def trans_int(strvar)
intvar = 0
for i in strvar:
	temp1 = len(strvar) - strvar.index(i) - 1 
	temp2 = int(i) * pow(10, temp1)
	intvar += temp2
return intvar
06 python的垃圾回收机制

引用计数,分代回收;

解决循环引用:手动回收,弱引用;

07 计算函数具体的执行时间,怎么做,比如50个函数

import time

def wraper(func):

​ t1 = time.time()

​ func()

​ t2 = time.time()

​ print(“耗时:{:.8f}s”).format(t2- t1))

@wraper

def func():

​ pass

09 字符串拼接的方式,以及每种方式的优缺点

1 + : 适用于拼接的字符串较小,数量较少 空间复杂度O(n);如果数据量很大,效率较低;

2 .join(): 缺点:只适用于拼接列表对象; 优点:数据量很大时效率较高,只申请一次内存,节省空间;

3 格式化拼接 % : 不适合数据量较大,可读性一般;

4 格式化拼接 .format: 可用于代替% 功能更强大(设置下标,控制填补),可读性较强;格式要求高:{} 与 字符串数量一致;(python3.6之后的)

5 空格号: 可读性较差,不适于数据量较大;

6 *操作符: 只能用于同一字符串的多次拼接,原理同+,不适合于数据量较大;

7 f-strings: 速度很快;仅限于 python3.6 版本以上;

11 手写继承,要求子类与父类有相同的属性,改变子类属性的同时改变父类的属性
class father():
    __name = 'haha'
    
class son(father):
    __name = 'miemie'
    
    
12 Python常用字符串操作

查:len() count() index() startswith() endswith() isupper() islower() isalpha() isdigit()

改:centre() strip() replace()

拼接: +;*;f-strings;%;{} .format;.join(); ’ ’ , ;

转化:split()

13 锁机制 GIL

14 python的底层实现,用到的排序函数

sort() 普通内置函数,对列表排序,直接在原列表进行修改;

sorted() python中的高级函数;sorted(iterable, reverse=True, func) 返回排序后的结果;排序对象为可迭代对象,并可按照函数进行排序,生成新的列表。

16 io多路复用

19 python 中装饰器的用法,怎么去构造一个装饰器

20 python函数中如果传入确定的参数那么python在运行这个程序的时候他是在什么时期被确定下来的,如果确定的参数是一个列表,那么后面可能会遇到什么坑
  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值