1 . 什么是HTTP协议?
答:HTTP是在网络上传输HTML的协议,用于浏览器和服务器的通信。
2 . 什么是HTML?
答:HTML是一种用来定义网页的文本,会HTML,就会编写网页.
3 . HTTP协议中常见响应状态码有哪些,分别代表什么意思?
答:100~199:表示服务器成功接收部分请求,要求客户端继续提交其余请求才能完成整个处理 过程。
200~299:表示服务器成功接收请求并已经完成整个处理过程,常用200(ok 请求成功)。
300~399:为了完成请求,客户需要进一步细化请求。例如:请求的资源已经移动到一个新的地址,常用302(所请求的页面已经临时转移到新的url),307和304(使用缓存资源)。
400~499:客户端的请求有错误,常用404(服务器无法找到请求的页面),403(服务器拒绝访问,权限不够)。
500~599:服务器端出现问题,常用500(请求未完成,服务器遇到不可预知的情况)
4 . HTTP协议中常用请求方式有几种,分别代表什么意思?
答:GET:请求指定的页面信息,并且返回实体主体。
POST:向指定资源提交数据进行处理请求(例如提交表单或者上传文件),数据被包含在请i去体中。
5. HTTP响应或者请求如果包含body,通过什么分割?
答: ”、\r\n\r\n"
6. Set-cookie的作用:
答: 在本地设置缓存数据,便于下次用户访问同一网站时,服务器对缓存数据进行处理,比如记住你浏览过的商品。
7. User-Agent的作用?
答:告诉服务器,你请求使用的浏览器版本。
8. HTTP GET请求的格式以及其代表含义。
“”“GET / HTTP/1.1
Headers1:Value1
Headers2:Value2
Headers3:Value3
""""
GET 表示请求方式,/ 表示请求路劲 , Headers和Value是一些基本信息,比如User-agent,Cookie等。
9. 写出tcp的3次握手过程?
答:客户端发出SYN链接请求,服务器返回ACK应答并且有新的SYN请求,然后客户端返回ACK给服务器。
10 . 写出TCP的4次挥手过程。
答:客户端发出断开连接请求FIN,然后服务器发出ACK应答给客户端,然后服务器向客户端发出断开连接请求,然后客户端向服务器返回ACK应答。
11. 多进程服务器要注意什么,让浏览器左上角不会一直转圈?
答:多进程服务器里的子进程会复制一份新的套接字,所以需要关闭复制之前的那个套接字。
12 . 如何设置套接字为非堵塞方式?
答: new_socket.setblocking(False)
13 . 请解释什么是长连接,什么情况下会使用?
答: 长链接就是在一个TCP链接上可以连续发送多个数据包,在TCP链接保持期间,如果没有数据包发送,需要双方发检测包以维持此链接。长链接的步骤是:建立链接---数据传输。。。保持链接。。。数据传输-----关闭链接。长连接多用于操作频繁,点对点的通讯,而且连接数不能太多情况。例如:数据库的链接用于长链接,如果用短链接频繁的通信会造成socket错误,而且频繁的socket 创建也是对资源的浪费。
14. 请解释什么是短链接,什么情况下使用?
答: 短链接的是指通信双方有数据交互时,就建立一个TCP链接,数据发送完毕后,则断开此TCP链接。短链接的操作步骤是:建立连接---数据传输------关闭套接字。。。。建立链接---数据传输----关闭连接。 像web网站的http服务中一般都采用短链接,因为长连接对于服务器来说会耗费一定的资源,像web网站这么频繁的成千上万客户端的链接用短链接会更更省一些资源,所以用户无需频繁操作情况下用短链接好。
15 . I/O 多路复用的特点是什么?
答 : (i/o指的是输入输出)通过一种机制使得一个进程能同时等待多个文件描述符,而这些文件描述符(套接字描述符)其中的任意一个进入读就绪状态,epoll()函数就可以返回。所以IO多路复用本质上不会有并发的功能,因为任何时候还是一个进程进行工作,它之所以能提高效率是因为select\epoll 把进来的socket放到他们的监听列表里,当任何socket有可读数据立马处理,那如果select\epoll 手里同时检测到很多socket,一有动静马上返回给进程处理,总的比一个一个socket过来,堵塞等待来处理的效率高。
16 . 什么是线程?
答:是程序执行流的最小单元,是被系统独立调度和分配的基本单元。
17. 多线程用来做什么的?
答: 多线程是在单个程序中同时运行多个线程完成不同的被划分成一块一块的工作,cpu还是要花同样多的时间去完成所有的事情,但多线程可以让cpu穿插的同时做很多事情,在视觉上让用户觉得计算机在同时帮他处理多件事,更好的改善用户体验。
18 . threading模块中的Thread 怎样创建一个子进程?
from threading import Thread
t = Thread(target=test)
t.test()
19. 父进程与子进程的执行顺序确定么?
答:不确定,根据操作系统来决定,系统调度。
20. 线程和进程的区别?
答: 进程:1.系统进行资源分配和调度的一个独立单元。
2.进程间不共享全局变量,需要进行进程之间的通信。
3.进程在运行过程中为独立的内存单元。
线程: 1.线程是cpu调度和分配的基本单位。
2.同时对一个全局变量进行修改,容易混乱。
3.多线程共享非全局变量不用枷锁。
4.线程依赖进程的存在,线程并发行高,占用资源比进程少。
5.多线程到同一函数执行,函数里的变量各是各的。
21. 什么是单任务,多任务程序?
答:单任务是指一次只能执行一个程序,不能同时运行多个程序。
多任务是指可以同时运行多个程序。
22 .程序和进程有什么区别?
答:代码没有执行之前是一个程序,当运行起来后就是进程。
23. getip 和getppid的作用是什么?
答:getpid 获取当前进程的进程号。
getppid 获取当前进程的父进程的进程号
24. 写出创建一个子进程的基本代码。
from multiprocessing import Process
def mission():
for i in range(5):
print(i)
if __name__=="__main__":
p = Procesing(target=mission) #创建进程实例
p.start() #启动子进程
p.join() # 让父进程等待
25. 什么是进程池,有什么用?
进程池就是创建出一定固定数量和进程,去执行多个任务,节约创建进程和销毁进程所消耗的资源和空间,当某个任务被执行完毕后,利用该进程池再去执行其他的任务,大大提高效率。
26. 为了完成多个任务一起执行,可以创建多个子进程来执行任务,那么为什么还要进程池呢?
答:因为每创建一个进程都会申请内存空间,消耗资源,进程结束后又要收回资源,如果反复创建进程,又结束进程,会严重影响性能,进程池的目的是复用进程,大大提高程序的运行效率。
27. 什么是进程间通信?
答:进程间的资源是不共享,因此如果在不同进程间的任务需要相互使用对方的资源或者信息,那么就需要在进程之间传递信息,传递资源,这就是进程间通信。
28. multiprocessing 模块中的Queue怎样发送数据,取出数据?
答:q = Queue()
q.put(数据)
q.get() # 取出数据
29. yield 的作用是什么?
答:当在函数使用了yield,该函数将变成了一个生成器,当执行到yield时,能返回一个值,并且暂停函数的执行,当使用next或者send时,继续让程序走下午。
30. 当用next取到最后一个数据后,如果再用next会怎样?
答:抛出异常StopIteration
31. send和next有什么区别?
答:send可以向生成器传入一个值,并且让程序继续执行
next 可以理解为send(None)