首页 > 编程语言 >Python企业面试题5 —— 网络编程和并发

Python企业面试题5 —— 网络编程和并发

时间:2024-04-22 22:36:28浏览次数:26  
标签:面试题 协程 Python 编程 并发 线程 time 进程 服务器

1. 简述进程、线程和协程的区别以及应用场景?
# 进程:拥有自己独立的堆和栈,既不共享堆,也不共享栈,进程由操作系统调度。
# 线程:拥有自己独立的栈和共享的堆,线程也由操作系统调度。
# 协程和线程:协程避免了无意义的调度,由此可以提高性能;但同时协程失去了线程使用多CPU的能力。

进程与线程的区别:

  • 地址空间:线程是进程内的一个执行单位,进程内至少有一个线程,他们共享进程的地址空间,而进程有自己独立的地址空间。
  • 资源拥有:进程是资源分配和拥有的单位,同一个进程内线程共享进程的资源。
  • 线程是处理器调度的基本单位,但进程不是。
  • 二者均可并发执行。
  • 每个独立的线程有一个程序运行的入口。

协程与线程:

  • 一个线程可以有多个协程,一个进程也可以单独拥有多个协程,这样python中则能使用多核CPU。
  • 线程进程都是同步机制,而协程是异步机制。
  • 协程能保留上一次调用时的状态。
2. GIL锁是什么?

GIL锁本质就是一把互斥锁,所有的互斥锁本质都一样,都是将并发运行变成串行,以此来控制同一时间内共享数据只能被一个任务修改,进而保证数据的安全。GIL锁保护的是解释器级的数据,保护用户自己的数据则需要自己加锁处理。

应用(总结):
多线程用于IO密集型,如socket,爬虫,web
多进程用于计算密集型,如金融分析
1. 每个cpython进程内都有一个GIL。
2. GIL导致同一进程内多个进程同一时间只能有一个运行。
3. 之所以有GIL,是因为cpython的内存管理不是线程安全的。
4. 对于计算密集型用多进程,多IO密集型用多线程。
3. python如何使用线程池?

线程池:

from concurrent.futures import ThreadPoolExecutor
import time

def run(i):
    print('%s 开始' % i)
    time.sleep(2)
    print('%s 结束' % i)

start_time = time.time()
print(start_time)
# 创建线程池的三种方式
pool = ThreadPoolExecutor(3)    # 指定最大任务数
# 方式一 把所有任务放入线程池
for i in range(12):
    pool.submit(run, i)
# 方式二 列表推导式
# tasks = [pool.submit(run, i) for i in range(12)]
# 方式三 使用 map
# pool.map(run, range(9))

# 阻塞等待
pool.shutdown()
print(time.time()-start_time)
4. 什么是并发和并行?
  • 并发:同一时刻只能处理一个任务,但一个时间段内可以对多个任务进行交替处理(一个处理器同时处理多个任务)
  • 并行:同一时刻可以处理多个任务(多个处理器或者是多核的处理器同时处理多个不同的任务)
类比:并发是一个人同时吃三个馒头,而并行是三个人同时吃三个馒头。
5. 线程锁的作用?

当有多个线程,且它们同时访问同一资源时,需要考虑如何避免线程冲突。解决办法是使用线程锁。锁由Python的threading模块提供,并且它最多被一个线程所持有。当一个线程试图获取一个已经锁在资源上的锁时,该线程通常会暂停运行,直到这个锁被释放。

6. 什么是异步非阻塞?

非阻塞:不等待,不需要进程等待下去,继续执行其他操作,不管其他进程的状态。

即遇到IO阻塞不等待(setblooking=False),(可能会报错->捕捉异常)
	- sk=socket.socket()
	- sk.setblooking(False)

异步:回调,当达到某个指定的状态之后,自动调用特定函数

异步体现在回调上,回调就是有消息返回时告知一声,进程进行处理。
7. 路由器和交换机的区别?
1. 交换机:负责内网里的数据传递(arp协议)根据MAC地址寻址
路由器:在网络层,路由器根据路由表寻找该IP的网段
2. 路由器:可以处理TCP/IP协议
3. 交换机:可以把很多主机连起来,这些主机对外各有各的IP
路由器:可以把一个IP分配给很多主机使用,这些主机对外只表现出一个IP。
4. 交换机:是做端口扩展的,也就是让局域网可以连进来更多的电脑。
路由器:是用来做网络连接的,也就是连接不同的网络。
8. 什么是域名解析?

在互联网上,所有的地址都是IP地址,现阶段主要是IPv4(比如:110.110.110.110)。但是这些IP地址太难记了,所以就出现了域名(比如 http://baidu.com )。域名解析就是将域名转换为IP地址的这样一种行为。

9. 什么是CDN?

CDN即内容分发网络,目的是使用户可以就近到服务器取得所需内容,解决Internet网络拥挤的状况,提高用户访问网站的响应速度。

10. LVS是什么及其作用?

LVS:Linux虚拟服务器
作用:主要用于多服务器的负载均衡。
它工作在网络层,可以实现高性能,高可用的服务器集群技术。
它廉价,可把许多低性能的服务器组合在一起形成一个超级服务器。
它易用,配置非常简单,且有多种负载均衡的方法。
它稳定可靠,即使在集群的服务器中某台服务器无法正常工作,也不影响整体效果。
另外可扩展性也非常好。

11. 什么是负载均衡?

多在高并发情况下需要使用。其原理就是将数据流量分摊到多个服务器执行,减轻每台服务器的压力,多台服务器(集群)共同完成工作任务,从而提高了数据的吞吐量。

12. Nginx是什么及其作用?

Nginx是一个轻量级、高性能、稳定性高、并发性好的HTTP和反向代理服务器。也是由于其的特性,其应用非常广。
作用:

  • 反向代理:是用来代理服务器的,代理我们要访问的目标服务器。代理服务器接受请求,然后将请求转发给内部网络的服务器(集群化),并将从服务器上得到的结果返回给客户端,此时代理服务器对外就表现为一个服务器。
    Nginx在反向代理上,提供灵活的功能,可以根据不同的正则采用不同的转发策略。
  • 负载均衡:Nginx可使用的负载均衡策略有:轮询(默认)、权重、ip_hash、url_hash(第三方)、fair(第三方)
  • 动静分离:
    Nginx提供的动静分离是指把动态请求和静态请求分离开,合适的服务器处理相应的请求,使整个服务器系统的性能、效率更高。Nginx可以根据配置对不同的请求做不同转发,这是动态分离的基础。静态请求对应的静态资源可以直接放在Nginx上做缓冲,更好的做法是放在相应的缓冲服务器上。动态请求由相应的后端服务器处理。

标签:面试题,协程,Python,编程,并发,线程,time,进程,服务器
From: https://www.cnblogs.com/zczhaod/p/18149693

相关文章

  • linux系统是未来_大小写敏感_case_sensitive_编程原生态
    修改py文件......
  • 实验3 C语言函数应用编程
    //task1.c#include<stdio.h>#include<stdlib.h>#include<time.h>#include<windows.h>#defineN80voidprint_text(intline,intcol,chartext[]);//函数声明voidprint_spaces(intn);//函数声明voidprint_blank_lines(intn);//函数声明in......
  • Mac搭建appium环境及python运行代码示例
    Appium主要是通过调用安卓提供的接口来执行命令的,所以需要安装Java和安卓SDK。1.安装Appium服务端appium的服务端是基于node的,直接使用npm(node包管理器)安装即可,比较简单。npminstall-gappium2.安装Python客户端pipinstallAppium-Python-Client同样直接使用pip安装......
  • 实验3 C语言函数应用编程
    实验任务11#include<stdio.h>2#include<stdlib.h>3#include<time.h>4#include<windows.h>5#defineN8067voidprint_text(intline,intcol,chartext[]);//函数声明8voidprint_spaces(intn);//函数声明9voidprint......
  • 结对编程心得
    结对编程心得要求如下所示:小学老师要每周给同学出300道四则运算练习题。这个程序有很多种实现方式:C/C++C#/VB.net/JavaExcelUnixShellEmacs/Powershell/VbscriptPerlPython两个运算符,100以内的数字,不需要写答案。需要检查答案是否正确,并且保证答案在0..100之间......
  • python+appium+pytest做app自动化测试
    我在另一篇博客中写了使用unittest做app自动化测试的,包含了前期的环境的环境搭建,请参考如下链接:python+appium+unittest做app自动化测试这里,我们使用pytest框架再改写一个版本,因为pytest做测试报告看着更加好看,代码改良如下:fromappiumimportwebdriverimportpytest@pytest......
  • Python Numpy 矩阵运算
    目录1前言2点积与矩阵乘法2.1np.dot()2.2np.matmul()和@2.3np.multiply和*3矩阵的逆4Ref1前言Python中经常涉及到矩阵运算,其借助于Numpy库进行,因此本文记录一些基于Numpy的矩阵运算2点积与矩阵乘法矩阵的点积(dotproduct),又称为内积(innerproduct)$a=(x_1,y_1)......
  • python+appium+unittest做app自动化测试
    1.需要安装一些列的软件:(1)java(2)androidsdk:  https://www.cnblogs.com/chenxiaomeng/p/16544481.html(3)AppiumServerGUI(4)AppiumInspector (3和4老版本是一个)2.打开AppiumServerGUI直接点击startServer即可,使用默认配置 3.打开 AppiumInspectorremot......
  • python监控MongoDB服务进程,故障钉钉告警
     服务器1xx.168.8x.77#!/usr/bin/python#!_*_coding:utf-8_*_importosimportsysimporttimemongo_ip='192.168.xx.77'ports=['x001','x002']defport(ip,port):  response=os.popen("tcping %s%s|grepopen|awk-F'&......
  • 在Python中的for循环
    在Python中的for循环for循环:用于遍历序列(如列表、元组、字典、集合或字符串)或其他可迭代对象。pythonforiinrange(10):#这将循环10次,i的值从0到9print(i)while循环:当给定条件为真时,重复执行代码块。pythoni=0whilei<10:#这将循环10次print(i)i......