python面试题汇总

1、get和post 区别的标准答案

最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数。
GET在浏览器回退时是无害的,而POST会再次提交请求。
GET产生的URL地址可以被Bookmark,而POST不可以。
GET请求会被浏览器主动cache,而POST不会,除非手动设置。
GET请求只能进行url编码,而POST支持多种编码方式。
GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
GET请求在URL中传送的参数是有长度限制的,而POST么有。
对参数的数据类型,GET只接受ASCII字符,而POST没有限制。
GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
GET参数通过URL传递,POST放在Request body中。
(本标准答案参考自w3schools)

2、get和post 的本质区别

GET和POST本质上就是TCP链接,并无差别。但是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同

3、get和post的其他区别

GET产生一个TCP数据包;POST产生两个TCP数据包。
长的说:
对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);
而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。

1、GET与POST都有自己的语义,不能随便混用。
2、据研究,在网络环境好的情况下,发一次包的时间和发两次包的时间差别基本可以无视。而在网络环境差的情况下,两次包的TCP在验证数据包完整性上,有非常大的优点。
3、并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次。

4、TCP的三次握手

(https://blog.csdn.net/Three__Curry/article/details/124003530)

(1)第一次握手 客户端(Client)向服务器(Server)发送一个SYN段(在 TCP 标头中 SYN 位字段为 1 的 TCP/IP
数据包),该段中也包含一个客户端的初始序列号(Sequence number = x,seq)。

(2)第二次握手 服务器端返回一个 SYN +ACK 段(在 TCP 标头中SYN和ACK位字段都为 1 的 TCP/IP
数据包),该段中包含服务器的初始序列号(Sequence number = y)。同时使 Acknowledgment number = x

  • 1来表示确认已收到客户端的 SYN段(Sequence number = y)。

(3)第三次握手 客户端给服务器响应一个ACK段(在 TCP 标头中 ACK 位字段为 1 的 TCP/IP 数据包)(SYN已变为0),
该段中使 Acknowledgment number = y+ 1来表示确认已收到服务器的 SYN段(Sequence number =
y),自己的序列号则是变成seq=x+1。

5、为什么是三次握手,不能是两次握手吗?

如果只是两次握手,那么按照上述C/S模型的流程,第二次握手后服务器端会认为自己已经与客户端建立了连接,假如此时网络出现问题,丢失了第二次握手的报文。那么客户端没有收到应答报文,他认为与服务器端并没有建立连接,那么之后服务器端向客户端发来的消息,客户端并不会接受,而是一直等待应答报文,会形成类似死锁的问题。

5、进程、线程和协程


> 进程是程序执行的过程,也是程序资源管理的最小单位。
> 线程是资源调度的最小单位
> 协程 Coroutines 是一种比线程更加轻量级的微线程
> 协程也可以理解成子程序调用,每个子程序都可以在一个单独的协程内执行。
> 线程是被内核调度,协程的调度完全由用户控制
> 线程是被内核所调度,线程被调度切换到另一个线程上下文的时候,需要保存一个用户线程的状态到内存,恢复另一个线程状态到寄存器,
  然后更新调度器的数据结构,这几步操作设计用户态到内核态转换,开销比较多。
> 协程拥有自己的寄存器上下文和栈,协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈,
  直接操作用户空间栈,完全没有内核切换的开销
> python 中引入 yield/send 表达式用于实现协程,但这种通过生成器的方式使用协程不够优雅。
> python 3.5 之后引入async/await ,简化了协程的使用并且更加便于理解。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值