一、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) # 原有序列并没有改变。  

 

posted on 2018-09-11 23:25  Eric_nan  阅读(165)  评论(0编辑  收藏  举报