物理层、数据链路层、网络层、传输层 (TCP/UDP)、会话层、表示层、应用层
详细解析: OSI 7层模型和TCP/IP 4层模型 - 知乎
2、简单描述三次握手四次挥手的过程三次握手:客户端发起SYN,服务端接受到建立连接信号发送SYN+ACK,服务端接收到信号发送ACK
四次挥手:客户端发送FIN,服务端接受到断开信号发送ACK确认信号,传递完剩余的数据之后再发送FIN结束信号,客户端接收到信号之后再发送一次ACK确认
详细解析: 图解 TCP三次握手四次挥手_李俊的博客的博客-CSDN博客_图解三次握手四次挥手
3、什么是socket?简述基于TCP协议的套接字通信过程?socket就是一个抽象接口层,通过这些接口就可以调用底层协议实现数据包的接收和发送
TCP服务端:通过调用socket()获取socket对象,然后通过bind()绑定端口,使用listen()进行端口监听,调用accept()进行信号接收,然后调用read()、write()进行数据读取和写入
TCP客户端:通过socket()获取socket对象,使用connec()t与服务端进行连接
通过python socket模块实现简单聊天系统_李俊的博客的博客-CSDN博客_python socket 聊天
4、什么是IO多路复用?以及IO多路复用的作用?IO多路复用实现方式?什么是IO多路复用:
- IO 多路复用是一种同步IO模型,实现一个线程可以监视多个文件句柄;
- 一旦某个文件句柄就绪,就能够通知应用程序进行相应的读写操作;
- 没有文件句柄就绪就会阻塞应用程序,交出CPU。
IO多路复用的作用:可以实现更高的并发请求
IO多路复用的实现方式:select、poll、epoll(解决了前两种方式的缺陷,性能更好,nginx可以使用epoll方式实现更高的并发)
详细解析:彻底理解 IO 多路复用实现机制 - 掘金
5、什么是GIL锁?有什么影响?GIL锁是python语言的特性,GIL锁主要是限制同一个CPU在同一时刻只能有一个线程在执行
因为GIL锁的存在使得在运行CPU密集型的程序,使用多进程不仅不能加快响应速度,反而会降低响应速度,所以我们通常通过多进程的方式进行解决。
6、解释一下你对 同步/异步、阻塞/非阻塞 的理解? 6.1 同步与异步同步和异步关注的是消息通信机制 (synchronous communication/ asynchronous communication)
同步:就是在发出一个调用时,在没有得到结果之前, 该调用就不返回。
异步:调用在发出之后,这个调用就直接返回了,所以没有返回结果
6.2 阻塞与非阻塞阻塞和非阻塞关注的是程序在等待调用结果(消息,返回值)时的状态.
阻塞调用:指调用结果返回之前,当前线程会被挂起。调用线程只有在得到结果之后才会返回。
非阻塞调用:指在不能立刻得到结果之前,该调用不会阻塞当前线程。
详细解析:怎样理解阻塞非阻塞与同步异步的区别? - 知乎
7、进程间如何通信?进程间通信主要分为5大类:管道(匿名管道、有名管道)pipe、socket 、共享内存、信号、消息队列
Python 系统线程和进程详解_李俊的博客的博客-CSDN博客
8、什么是协程?asynio是什么?请使用Python 内置语法async实现一个协程?什么是协程:使用 async/await 语法编写的函数称为协程,是一种允许在函数内碰到阻塞任务先执行其他任务,在合适的时候再执行阻塞任务的工作模式
什么是asynio:asyncio是Python 3.4版本引入的标准库,直接内置了对异步IO的支持。
>>> import asyncio
>>> async def main():
... print('hello')
... await asyncio.sleep(1)
... print('world')
>>> asyncio.run(main())
hello
world
参考链接:协程与任务 — Python 3.9.13 文档
协程 - 廖雪峰的官方网站
9、谈谈你对 gunicorn 和 gevnet 的理解?在 python 的 web 部署中,经常会使用 gunicorn 启动 web 服务,同时,为了并发效率更高,一般会使用 -w 指定多个工作进程 (worker processes) , 同时可以通过 -k 指定工作进程的类型,目前支持的工作进程的类型包括: sync, eventlet, gevent, tornado, gthread,gevent 是底层是依赖 greenlet 实现并发提升效率的,而 greenlet 是一个协程机制的实现。
参考链接:深入了解 gevent - 易迟的博客 | Bryan Blog
10、什么是RPC 以及应用场景? 10.1 什么是RPCRPC 是一种框架或者说一种架构,主要目标就是让远程服务调用更简单、透明,调用远程就像调用本地一样。
10.2 应用场景随着我们的业务越来越多,应用也越来越多,应用与应用相互关联调用,发现有些功能已经不能简单划分开,此时可能就需要用到 RPC
参考链接:RPC是在什么场景使用? - 知乎



