网络和并发编程面试

文章目录

网络编程
  1. Python的底层网络交互模块有哪些?

    答:我用过的有socket和socketserver,还有urllib,requests


  1. socket与socketserver有什么区别?

    答:socketserver是socket的再封装,socket无法支持多用户,而socketserver支持多用户多并发。


  1. 说一下socketserver的使用?

    答:使用socketserver,先导入,然后创建一个请求处理类,比如叫MyTCPServer,让它继承自sockerserver的BaseRequestHandle,重写这个请求处理类里面的handle方法,然后我们实例化sockerserver模块下的ThreadingTCPserver,这样每一个连接进来,服务端都会开一个新的线程来处理,要注意这个类才能实现多并发,实例化TCPserver是不能实现多并发的,然后就可以通过点调用对象的serve_forever()方法。


  1. 什么是C/S架构。什么是B/S架构?

  1. 什么是粘包,为什么会粘包,怎么解决粘包?

    答:粘包就是数据粘在一起,指的是我们调用了两次server.send,本来应该两次独立的发过去,但是有时候会出现这两次发送的数据一起发送过去了,实际只发送了一次的现象叫粘包,主要原因是接受方不知道消息之间的界限,发送的数据量比较小,两次发送数据的间隔又很短的话,就很容易粘包了,简单说粘包其实是我们的系统为了提高效率而做的,因为发一次比发两次效率高,这是一个底层的优化算法。解决粘包一个最直接,最low的办法就是两次发送数据之间进行sleep,间隔时间够长就不会粘包,但这会影响性能,初学者一般是这样做的,学了那个tcp的时候,我们可以在两次发送数据之间,加个recv,等待接收方发给确认信息过来,在进行下一次end,因为recv会进入一个等待状态,所以这样就可以解决粘包了。


  1. socketsocketserver内置的方法有哪些?

    答:首先服务端相关的方法有,我们开发一个socket服务端,先使用server=socket.socket()创建socket对象,然后通过server.bind()绑定IP和端口,在通过server.listen()监听端口,接着通过server.accept()会返回两个值,一个是客户端连过来而在服务端为其生成的一个实例,一个是地址位,然后服务端还可以接受发送数据,还有server.send,server.recv()方法,客户端的话,创建client客户端的socket对象之后,有client.connect连接服务端的方法,这个方法接受一个元组作为参数,元组里面写上我们要连的IP和端口可以连上正在监听的服务端,然后也可以进行收发数据,最后用client.close()关闭连接。基本上我用过的socket的方法就是这些,socketserver也是和socket的内置方法差不多的。


  1. socketserver的底层原理

  1. 用网络编程做过什么?

    答:写过FTP


并发编程
  1. 进程与线程的区别

    答:博客复习

  2. threading模块怎么用?

    答:在上面那篇博客里

  3. 聊一下GIL锁吧?

    答:详解GIL

  4. 生产者消费者模型(问得多),应用场景

  5. 线程死锁是怎么造成的,怎么避免死锁?

  6. 说下GIL对Python性能的影响?

  7. 多线程开发中join与deamon的区别?

原创文章 85 获赞 120 访问量 4万+

猜你喜欢

转载自blog.csdn.net/happygjcd/article/details/104697064
今日推荐