请解释线程和协程的区别,你曾经在项目中是如何使用它们的,以及效果?
线程
1)线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。线程间通信主要通过共享内存,上下文切换很快,资源开销较少,但相比进程不够稳定容易丢失数据。
2)协程
协程是一种用户态的轻量级线程,协程的调度完全由用户控制。协程拥有自己的寄存器上下文和栈。协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈,直接操作栈则基本没有内核切换的开销,可以不加锁的访问全局变量,所以上下文的切换非常快。
请简单介绍一下python2和python3的区别,你为什么选择python2或者python3?
1)python2的代码混乱,重复较多 冗余,因为当时来编写的人有C 语言的大牛 和 java的大牛等各种大神 所以里面都含有各种语言的影子;python3统一了代码 源码规范 清晰 简单优美。2)python3:print(“内容”)python2:ptint()或者print ‘内容’;3)python3 编码:utf-8
python2编码: 默认编码:ascii 解决办法:在首行 # -- encoding:utf-8--
4)用户交互 input
python2: raw-input()
python3:input ()
5)python2x :unicode 默认2个字节表示一个字符 可以在LINUX 编译安装时做调整
python3x:unicode 默认是4个字节表示一个字符
6)python2x 没有nonlocal
python3x 加入的
7)python3x 新建的包里面的init文件如果你删除该文件 包照样可以被调用
python2x 新建的包如果没有init文件 则包不能够被调用 直接报错
8)python2 中的经典类 遍历方法是以深度优先 新式类是以广度优先
python3 中不存在经典类 所有的类都是新式类 所以都是广度优先
请解释一下python的线程锁Lock和Rlock的区别,以及你曾经在项目中是如何使用的?
从原理上来说:在同一线程内,对RLock进行多次acquire()操作,程序不会阻塞。
资源总是有限的,程序运行如果对同一个对象进行操作,则有可能造成资源的争用,甚至导致死锁 也可能导致读写混乱
如何用python生成唯一的ID(不同的程序之间也要唯一,长度不得超过32个字节),这些ID是如何排序的?
1)uuid1()——基于时间戳
由MAC地址、当前时间戳、随机数生成。可以保证全球范围内的唯一性,
但MAC的使用同时带来安全性问题,局域网中可以使用IP来代替MAC。
2)uuid2()——基于分布式计算环境DCE(Python中没有这个函数)
算法与uuid1相同,不同的是把时间戳的前4位置换为POSIX的UID。
实际中很少用到该方法。
3)uuid3()——基于名字的MD5散列值
通过计算名字和命名空间的MD5散列值得到,保证了同一命名空间中不同名字的唯一性,和不同命名空间的唯一性,但同一命名空间的同一名字生成相同的uuid。
4)uuid4()——基于随机数
由伪随机数得到,有一定的重复概率,该概率可以计算出来。
5)uuid5()——基于名字的SHA-1散列值算法与uuid3相同,不同的是使用 Secure Hash Algorithm 1 算法
如果让你开发一个电商系统的秒杀活动,后台架构你会怎么设计,以确保系统能支撑活动开始后可能导致的交易高峰?
参考链接:
https://blog.csdn.net/github_37048196/article/details/83573935
电商系统中,从数据库设计的角度,如何保证用户下单成功后,一定能拿到货?
如果让你来设计一个电商系统的商品信息维护模