一、python相关
1、range和xrange的区别是什么?
python 2.x系列中有range、xrange两种类型:
range:生成的是一个序列,list对象
xrange:生成的是一个迭代器(iterator)
python 3.x系列中只有range类型,没有xrange:
range:生成的是一个迭代器(iterator),与python 2中的xrange是一样的
python 2中使用range会直接开辟所有数据的内存空间,使用xrange只有在需要用到的时候才会开辟对应的内存空间,python 3中的range效果等同于python 2中的xrange
2、python中的yield关键字有什么作用?
yield能把正常的列表list等函数变成生成器,每次调用时只会返回一个值
好处:正常函数当执行时会直接开辟出一块所需要的内存空间,生成器执行时只会一个一个内存空间开辟,用到哪开辟到哪,不会一次性开辟需要的全部内存空间,使用生成器函数,能节省很多时间、内存空间的开销
3、用python匹配HTML tag的时候,<.*>和<.*?>有什么区别?
<.*>:贪婪匹配模式,会尽量多的匹配数据,只要能匹配成功的都会匹配上
<.*?>:非贪婪匹配模式,尽量少的匹配数据,要么没匹配到,要么只匹配到一个
4、python中,哪些数据类型是可变类型,哪些是不可变类型?
list、dict是可变类型,int、float、string、tuple等是不可变类型
5、进程和线程的区别?
进程拥有一个完整的虚拟地址空间,不依赖于线程而独立存在;反之,线程是进程的一部分,没有自己的地址空间,与进程内的其他线程一起共享分配给该进程的所有资源
6、为什么说python的线程是伪线程?
在python的原始解释器CPython中存在着GIL(Global Interpreter Lock,全局解释器锁),因此在解释执行python代码时,会产生互斥锁来限制线程对共享资源的访问,直到解释器遇到I/O操作或者操作次数达到一定数目时才会释放GIL。
所以,虽然CPython的线程库直接封装了系统的原生线程,但CPython整体作为一个进程,同一时间只会有一个线程在跑,其他线程则处于等待状态。这就造成了即使在多核CPU中,多线程也只是做着分时切换而已
7、python的extend和append有什么区别?
extend() 接受一个列表参数,把参数列表的元素逐个添加到列表的尾部
append() 接受一个对象参数,把对象参数整体(不改变原结构)添加到列表的尾部
8.、列表推导式、字典推导式?
列表推导式:d = [v for v in iterable]
字典推导式:d = {key:value for (key,value) in iterable}
9、简述__new__和__init__的区别?
创建一个新实例时调用__new__ ,初始化一个实例时调用__init__,这是它们最本质的区别
new方法会返回所构造的对象,init则不会
new函数必须以cls作为第一个参数,而init则以self作为其第一个参数
13、单例模式?
14、python中的作用域?
当python遇到一个变量时,它会按照这样的顺序进行搜索:
本地作用域(local)→当前作用域被嵌入的本地作用域(Enclosing locals)→全局/模块作用域(Global) →内置作用域(Built-in)
二、后端相关
1、linux下创建定时任务使用什么指令?
crontab
2、数据库mysql和MongoDB的区别?
mysql是关系型数据库,MongoDB是文档型数据库。MongoDB占用空间大,典型的用空间换时间原则的类型。mysql相对比较成熟。
3、你知道的加密算法有哪些?
AES(对称算法)、RSA(非对称算法)、MD5(Hash算法)等
4、操作系统中进程的调度策略有哪几种?
调度:优先级调度、轮转法调度、先来先服务调度、多级反馈轮转调度
调度策略:
SCHED_FIFO:实时进程,基于优先级调度的先来先服务调度策略
SCHED_RR :实时进程,基于优先级调度的轮转法调度策略
SCHED_OTHER:一般进程,基于优先级调度的轮转法调度策略
5、Unix进程间通信方式有哪些?
管道 、 命名管道 、 信号 、 信号量 、 消息队列 、 socket套接字 、 内存共享 、 内存映射
6、TCP/IP协议分为几层(OSI网络模型)?
TCP/IP协议分为四层:网络接口层、 网际层 、 传输层 、 应用层
OSI分为七层:物理层 、 数据链路层 、 网络层 、 传输层 、 会话层 、 表示层 、 应用层
五层体系结构:物理层 、 数据链路层 、 网络层 、 传输层 、 应用层
7、IP地址分为哪几类?
共有五类:
1. A类IP地址 一个A类IP地址由1字节的网络地址和3字节主机地址组成,网络地址的最高位必须是“0”, 地址范围从1.0.0.0 到126.0.0.0。可用的A类网络有126个,每个网络能容纳1亿多个主机。
2. B类IP地址 一个B类IP地址由2个字节的网络地址和2个字节的主机地址组成,网络地址的最高位必须是“10”,地址范围从128.0.0.0到191.255.255.255。可用的B类网络有16382个,每个网络能容纳6万多个主机 。
3. C类IP地址 一个C类IP地址由3字节的网络地址和1字节的主机地址组成,网络地址的最高位必须是“110”。范围从192.0.0.0到223.255.255.255。C类网络可达209万余个,每个网络能容纳254个主机。
4. D类地址用于多点广播(Multicast)。 D类IP地址第一个字节以“lll0”开始,它是一个专门保留的地址。它并不指向特定的网络,目前这一类地址被用在多点广播(Multicast)中。多点广播地址用来一次寻址一组计算机,它标识共享同一协议的一组计算机。224.0.0.0到239.255.255.255用于多点广播 。
5. E类IP地址 以“llll0”开始,为将来使用保留。240.0.0.0到255.255.255.254
,255.255.255.255用于广播地址
全零(“0.0.0.0”)地址对应于当前主机。全“1”的IP地址(“255.255.255.255”)是当前子网的广播地址。
在IP地址3种主要类型里,各保留了3个区域作为私有地址,其地址范围如下: A类地址:10.0.0.0~10.255.255.255 B类地址:172.16.0.0~172.31.255.255 C类地址:192.168.0.0~192.168.255.255
8、HTTP协议请求包含那几个部分?
(请求行:GET /index.html HTTP/1.1)
包含:请求方法 、 请求头 、 请求体
9、HTTP协议响应包含哪几个部分?有哪些常见的响应状态码?
(状态行:HTTP/1.1 200 OK)
包含:状态行 、 响应头 、 响应体
常见状态码:
200:页面请求成功
304:页面请求成功,但客户端存有缓存,客户端自行更新页面
400:BAD_REQUEST ,错误的请求
401:无权限 ,权限不够
403:forbidden,服务器理解请求,但拒绝执行它
404:not found ,请求失败,页面不存在
500:服务端相关的错误信息
10、关系型数据库的ACID指的是什么?
1、A (Atomicity) 原子性
原子性很容易理解,也就是说事务里的所有操作要么全部做完,要么都不做,事务成功的条件是事务里的所有操作都成功,只要有一个操作失败,整个事务就失败,需要回滚。
比如银行转账,从A账户转100元至B账户,分为两个步骤:1)从A账户取100元;2)存入100元至B账户。这两步要么一起完成,要么一起不完成,如果只完成第一步,第二步失败,钱会莫名其妙少了100元。
2、C (Consistency) 一致性
一致性也比较容易理解,也就是说数据库要一直处于一致的状态,事务的运行不会改变数据库原本的一致性约束。
例如现有完整性约束a+b=10,如果一个事务改变了a,那么必须得改变b,使得事务结束后依然满足a+b=10,否则事务失败。
3、I (Isolation) 独立性
所谓的独立性是指并发的事务之间不会互相影响,如果一个事务要访问的数据正在被另外一个事务修改,只要另外一个事务未提交,它所访问的数据就不受未提交事务的影响。
比如现有有个交易是从A账户转100元至B账户,在这个交易还未完成的情况下,如果此时B查询自己的账户,是看不到新增加的100元的。
4、D (Durability) 持久性
持久性是指一旦事务提交后,它所做的修改将会永久的保存在数据库上,即使出现宕机也不会丢失。
11、redis简单介绍?
12、简述三次握手、四次握手的流程?
Django | 从请求到响应:
* random库:
1)random.random
random.random()用于生成一个0到1的随机符点数: 0 <= n < 1.0
2)random.randint
random.randint()的函数原型为:random.randint(a, b),用于生成一个指定范围内的整数。其中参数a是下限,参数b是上限,生成的随机数n: a <= n <= b
3)random.randrange
random.randrange的函数原型为:random.randrange([start], stop[, step]),从指定范围内,按指定基数递增的集合中 获取一个随机数。如:random.randrange(10, 100, 2),结果相当于从[10, 12, 14, 16, ... 96, 98]序列中获取一个随机数。random.randrange(10, 100, 2)在结果上与 random.choice(range(10, 100, 2) 等效。
4)random.choice
random.choice从序列中获取一个随机元素。其函数原型为:random.choice(sequence)。参数sequence表示一个有序类型。这里要说明 一下:sequence在python不是一种特定的类型,而是泛指一系列的类型。list, tuple, 字符串都属于sequence。下面是使用choice的一些例子:
print(random.choice("学习Python")) print(random.choice(["JGood", "is", "a", "handsome", "boy"])) print(random.choice(("Tuple", "List", "Dict")))
5)random.sample
random.sample的函数原型为:random.sample(sequence, k),从指定序列中随机获取指定长度的片断。sample函数不会修改原有序列。
list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] slice = random.sample(list, 5) # 从list中随机获取5个元素,作为一个片断返回 print(slice) print(list) # 原有序列并没有改变。