一、如何抛出异常并且捕获异常
二、常用的Python标准库有哪些,并且说明其作用
三、描述深拷贝和浅拷贝的区别

四、__init__ 和 __new__的区别
  __new__ 会优先调用 且有返回值
  __init__ 没有返回值

五、什么是解释型语言,什么是编译型语言

六、Match和search的区别
  Match:只有在0位置匹配成功的话才有返回, 如果不是开始位置匹配成功的话,返回none
  search:会扫描整个字符串并返回第一个成功的匹配

七、用 Python 匹配 HTML tag 的时候,<.*> 和 <.*?> 有什么区别?

  import re
  s = ‘<html><head><title>Title</title>’
  print(re.match(‘<.*>’, s).group())
  会返回一个匹配<html><head><title>Title</title>而不是<html>

  import re
  s = ‘<html><head><title>Title</title>’
  print(re.match(‘<.*?>’, s).group())
  则会返回<html>

  <.*> 为贪婪匹配
  <.*?> 为非贪婪匹配

八、谈谈你对线程安全的理解

九、什么是僵尸进程和孤儿进程?怎么避免僵尸进程
  孤儿进程:父进程退出,子进程还在运行的的这些子进程都是孤儿进程,孤儿进程将被init进程所 收养,并由init进程对他们完成状态收集工作
  僵尸进程:进程使用fork创建子进程,如果子进程退出,而父进程并没有调用wait或waitpid获取 子进程的状态信息,那么子进程的进程描述符任然保存在系统中的这些进程是僵尸进程
  避免僵尸进程:

    1.fork两次用孙子进程去完成子进程的任务
    2.用wait()函数是父进程阻塞
    3.使用信号量,在signal handler中调用waitpid,这样父进程不用阻塞

十、TCP和UDP的区别

  相同点:都是传输层协议
  TCP:提供的是面向连接,可靠的字节流服务。即客户端与服务端交换数据前,必须双方之间建立一个tcp连接,之后才能传输数据。并且提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端。
  UDP:简单的面向数据报的运输层协议。不提供可靠性,只是把应用程序传给ip层的数据报发送出去,但是不能保证他们能达到目的地。由于udp在传输数据报前不用向客户和服务器之间建立一个连接,且没有超时重发等机制,所以传输速度很快。

十一、画出TCP三次握手的过程
十二、创建一个TCP服务端的流程及关键代码
十三、路由器工作在TCP/IP模型的哪一层?路由器的工作原理
十四、简述浏览器通过 WSGI 请求动态资源的过程(WSGI:web服务器网关接口)
    1.发送http请求动态资源给web服务器
    2.web服务器收到请求后通过WSGI调用一个属性给应用程序框架
    3.应用程序框架通过引用WSGI调用web服务器的方法,设置返回的状态和头信息
    4.调用后返回,此时web服务器保存了刚刚设置的信息
    5.应用程序框架查询数据库,生成动态页面的body的信息
    6.把生成的body信息返回给web服务器
    7.web服务器把数据返回给浏览器

十五、描述用浏览器访问 www.baidu.com 的过程
    1.浏览器向DNS服务器发出解析域名的请求
    2.DNS服务器将“www.baidu.com”域名解析为对应的ip地址,并返回给浏览器
    3.浏览器与百度服务器进行三次握手,建立tcp连接
    4.浏览器发出HTTP请求报文
    5.服务器回复HTPP响应报文
    6.浏览器解析响应报文,渲染HTML内容,并显示在页面上
    7.收发报文结束,释放TCP连接,执行四次挥手

(四次挥手:
(1)TCP客户端发送一个FIN,用来关闭客户到服务器的数据传送。
(2)服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。
和SYN一样,一个FIN将占用一个序号。
(3)服务器关闭客户端的连接,发送一个FIN给客户端。
(4)客户端发回ACK报文确认,并将确认序号设置为收到序号加1。)


十六、Post 和 Get 请求的区别


十七、cookie和session的区别
十八、HTTP 协议状态码有什么用,列出你知道的 HTTP 协议的状态码,然后讲出他们都表示什么意思
十九、HTTP 常见请求头有哪些?
二十、写一个邮箱地址的正则表达式
二十一、srcapy框架的基本内容
二十二、遇到哪些反爬,怎么解决?