Python面试——网络篇

1.三次握手,四次挥手(重点)

1. 客户端通过向服务器端发送一个SYN来创建一个主动打开,作为三路握手的一部分。客户端把这段连接的序号设定为随机数 A。

2. 服务器端应当为一个合法的SYN回送一个SYN/ACK。ACK 的确认码应为 A+1,SYN/ACK 包本身又有一个随机序号 B。

3. 最后,客户端再发送一个ACK。当服务端受到这个ACK的时候,就完成了三路握手,并进入了连接创建状态。此时包序号被设定为收到的确认号 A+1,而响应则为 B+1。


客户端或服务器均可主动发起挥手动作,在socket编程中,任何一方执行close()操作即可产生挥手操作。

(1)客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送。

(2)服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。

(3)服务器B关闭与客户端A的连接,发送一个FIN给客户端A。

(4)客户端A发回ACK报文确认,并将确认序号设置为收到序号加1。

2.http常见的状态码有哪些?

200:服务器成功处理了请求

301、302 :Moved Permanently(重定向)请求的URL已移走。Response中应该包含一个Location URL,说明资源现在所处的位置;

304 :Not Modidied(未修改)客户缓存的资源是最新的,要客户端使用缓存;

404 :Not Found(未找到资源);

501: Internal Server Error 服务器遇到一个错误,使其无法对请求提供服务

3.线程和进程的区别和联系

1.一个程序至少有一个进程,一个进程至少有一个线程(这个线程是主线程)。

2.线程的划分尺度小于进程(资源比进程少),使得多线程程序的并发性高。

3.进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效。

4.线线程不能够独立执行,必须依存在进程中

4.线程进程的优缺点

1.线程和进程在使用上各有优缺点:线程执行开销小,但不利于资源的管理和保护,而进程正相反。

2. 线程运行出错异常后,如果没有捕获,会导致整个进程崩溃,程序退出;如果是进程出问题,只会退出当前进程。一般而言,一个进程就是一个程序;开发软件的过程中,进程里面开多个线程去实现多任务,或者开多个进程实现多任务,区别在于,占用的资源大小不一样。进程占有资源比较多大,二线程很少。

5.死锁

开发过程中使用线程,在线程间共享多个资源的时候,如果两个线程分别占有一部分资源并且同时等待对方的资源,就会造成死锁

6. 说说下面几个概念:同步,异步,阻塞,非阻塞?

同步:多个任务之间有先后顺序执行,一个执行完下个才能执行。

异步:多个任务之间没有先后顺序,可以同时执行有时候一个任务可能要在必要的时候获取另一个

同时执行的任务的结果,这个就叫回调!

阻塞:如果卡住了调用者,调用者不能继续往下执行,就是说调用者阻塞了。

非阻塞:如果不会卡住,可以继续执行,就是说非阻塞的。

同步异步相对于多任务而言,阻塞非阻塞相对于代码执行而言。

7.线程是并发还是并行,进程是并发还是并行?

线程是并发,进程是并行;

进程之间相互独立,是系统分配资源的最小单位,同一个线程中的所有线程共享资源。

8.简述 TCP 和 UDP 的区别以及优缺点

UDP 是面向无连接的通讯协议,UDP 数据包括目的端口号和源端口号信息。

优点:UDP 速度快、操作简单、要求系统资源较少,由于通讯不需要连接,可以实现广播发送

缺点:UDP 传送数据前并不与对方建立连接,对接收到的数据也不发送确认信号,发送端不知道数

据是否会正确接收,也不重复发送,不可靠。

TCP 是面向连接的通讯协议,通过三次握手建立连接,通讯完成时四次挥手

优点:TCP 在数据传递时,有确认、窗口、重传、阻塞等控制机制,能保证数据正确性,较为可靠。

缺点:TCP 相对于 UDP 速度慢一点,要求系统资源较多。

9.cookie 和 session 的区别?

1、cookie 数据存放在客户的浏览器上,session 数据放在服务器上。

2、cookie 不是很安全,别人可以分析存放在本地的 cookie 并进行 cookie 欺骗考虑到安全应当使用

session。

3、session 会在一定时间内保存在服务器上。当访问增多,会比较占用服务器的性能考虑到减轻服务器性能方面,应当使用 cookie。

4、单个 cookie 保存的数据不能超过 4K,很多浏览器都限制一个站点最多保存 20 个 cookie。

5、建议: 将登陆信息等重要信息存放为 SESSION 其他信息如果需要保留,可以放在 cookie 中

10.使用标准的 HTTP 方法:

对于资源的具体操作类型,由 HTTP 动词表示。 常用的 HTTP 动词有四个。

GET SELECT :从服务器获取资源。

POST CREATE :在服务器新建资源。

PUT UPDATE :在服务器更新资源。

DELETE DELETE :从服务器删除资源。

11.select  Poll  epoll区别

Select的3个缺点:

1.连接数受限

2.查找配对速度慢

3.数据由内核拷贝到用户态

Poll 只是改变连接数的限制,后面的缺点没有改变,

Epoll 在poll基础上改了select的3个缺点:

文件描述符数量没有上限;

Epoll只是轮询就绪的文件描述符,不是全部轮询全部的,效率会快很多

Epoll使用mmap(文件对象映射,别映射到多个内存页上),改变了原来的拷贝模式

12.Post 和 Get 请求的区别?

GET 请求,请求的数据会附加在 URL 之后,以?分割 URL 和传输数据,多个参数用&连接。URL 的编码格式采用的是 ASCII 编码,而不是 uniclde,即是说所有的非 ASCII 字符都要编码之后再传输。

POST 请求:POST 请求会把请求的数据放置在 HTTP 请求包的包体中。上面的 item=bandsaw 就

是实际的传输数据。

因此,GET 请求的数据会暴露在地址栏中,而 POST 请求则不会

传输数据的大小:

 在 HTTP 规范中,没有对 URL 的长度和传输的数据大小进行限制。但是在实际开发过程中,对

于 GET,特定的浏览器和服务器对 URL 的长度有限制。因此,在使用 GET 请求时,传输数据会

受到 URL 长度的限制。

 对于 POST,由于不是 URL 传值,理论上是不会受限制的,但是实际上各个服务器会规定对 POST提交数据大小进行限制,Apache、IIS 都有各自的配置。

安全性:

 POST 的安全性比 GET 的高。这里的安全是指真正的安全,而不同于上面 GET 提到的安全方法中的安全,上面提到的安全仅仅是不修改服务器的数据。比如,在进行登录操作,通过 GET 请求,用户名和密码都会暴露再 URL 上,因为登录页面有可能被浏览器缓存以及其他人查看浏览器的历史记录的原因,此时的用户名和密码就很容易被他人拿到了。除此之外,GET 请求提交的数据还可能会造成 Cross-site request frogery 攻击。

13.HTTP 常见请求头?

1. Host (主机和端口号)

2. Connection (链接类型)

3. Upgrade-Insecure-Requests (升级为 HTTPS 请求)

4. User-Agent (浏览器名称)

5. Accept (传输文件类型)

6. Referer (页面跳转处)

7. Accept-Encoding(文件编解码格式)

8. Cookie (Cookie)

9. x-requested-with :XMLHttpRequest (是 Ajax 异步请求)

你可能感兴趣的:(Python面试——网络篇)