① 互斥锁和GIL的区别
互斥锁在多线程的情况下,确保当前线程执行完之后,继续下个任务,如果说当前任务仍然在执行的时候,下个任务会阻塞
GIL锁是保证在同一时间有一个线程,当释放掉GIL的时候,会继续下一个线程
但是也有可能是IO流阻塞,并没有完成该线程任务就直接释放,该线程的任务分多少次执行完这个会安装GIL默认策略。
互斥锁是必须保证当前任务在当前线程的完成
GIL锁是不一定在当前线程完成任务 情况是IO流阻塞的时候,直接停止当前线程继续下次线程
② python高并发解决方案有哪些 并且使用的原因?
1.cdn 内容分发 解决的问题就是 尽量避开有可能影响数据传输速度和未定型的瓶颈环节,是内容传输的更加快更加稳定
目的是 cdn的目的就是尽可能减少资源在转发传输链路抖动的情况下顺利保证信息的连贯性
cdn就是扮演着护航者和加速者的角色更加快准狠的触发信息和触达每一个用户,带来更加极致的用户体验
2.精灵图 css精灵 主要是将网页中零星的图片集中到一个大的图片中
使用的原因:减少对浏览器的请求次数,避免网页的延迟
方便统一对小图标的管理
3.后台数据库使用mysql+redis 持久化+缓存 大大提升了高数据量web访问的访问速度
redis提供了大量的数据结构 str list set hash-set sorted
4.数据库的优化 sql优化 索引的优化 分库分表 读写分离
使用drf自带的缓存 django rest framework 自带的缓存
5.集群化的部署 django + uwsgi +nginx
6.分布式+异步 celery是分布式异步的解决方案
7.语言层面 在一些并发量更多的地方,改用golang语言编写
③ 不定长参数的理解
*args 位置参数 定义函数的时候在形参前面加一个,代表可以接收多个参数
用元组的形式接受保存所有数据 一般写成def function(*args)
**kwargs key value 代表可以接受任意多个命名参数 字典类型保存
④ 缺省参数的理解*
如果调用函数的时候,传递了对应位置的实参,那就是用了这个传递的值,
如果没有传递对应的值,那就使用缺省参数的值
⑤ break 和 continue 的区别
break和continue是嵌套在while循环中的
break是结束整个循环 结束整个while循环
continue 是结束此次循环继续下次循环 结束内层的while循环但并没有结束整个循环。
⑥ is和==的区别是
is是判断两个值的id内存地址和值是否相同
==是仅仅判断两个值是否相同
⑦ __new__ __init__的区别
__init__ 创建参数 使对象初始化
__new__ 是有参数有返回值的
new作用与init之前,前者可以决定是否调用后者可以决定调用哪个类的init方法
⑧ range和xrange的区别是
range和xrange的用法相同 判断范围 循环
但是xrange返回的是生成器 yield next 生成器是特殊的迭代器 next
⑨ yield和return的不同点和共同点
共同点是 都是返回程序执行的结果
yield 返回执行结果并不中断程序执行
return 在返回执行结果的同时中断程序执行
⑩ 举例5个常用的python标准库并说明他的作用
time 时间模块
math 数学运算
os 操作系统相关联的函数
sys 命令函参数
re 正则表达式
datetime 日期时间
11.几种常用设计模式
单例模式 single 保证一个类仅有一个实例 , 并且提供一个访问它的全局访问点,比如框架中的数据库连接
装饰器模式 函数嵌套不修改元类代码和继承的情况下动态扩展类的功能,框架中的每个controller文件会提供before和after方法
迭代器模式 iterator 提供一个方法顺序访问一个聚合对象中的各个元素
命令模式 将请求封闭成对象以便使用不同的请求,
队列或者日志来参数化其他对象,命令模式也支持可撤销操作
12.python2和python3的区别
python2 python3
编码 ascii utf8
输入 raw_input input
输出 print 'content' print('content')
数字表示 python自动转化为长整型+long加L int 没有long长整型
整型除法 只保留整数位 全部保留所有内容
range/xrange 不会在内存中立即创建而是边循环边创建 只有range 相当于xrange中的range
在内存中将所有的值创建 不会在内存中立即创建而是边循环边创建
包的定义 python2中必须要有init.py文件 不需要有init.py
map/filter 返回列表直接创建值通过索引取值 返回迭代器,不直接创建值,通过循环边循环边创建
str 相当于python3的字节类型 字符串类型unicode编码
unicode 相当于python3的字符串类型 没有unicode
字节类型 python没有字节码类型 bytes字节码
13.列表和元组的区别
列表 是可变的数据类型 list 用中括号的 列表可被用于保存多个相互独立的对象的数据集合
元组 是不可变的数据类型 tuple 用小括号的 声明只有一个元素的元组时需要在后面添加一个逗号
元组只要是被定义和赋值之后不能像列表一样添加,删除修改。也就是说元组在程序运行过程中不可以进行修改
元组是用于描述一个不会更改的事物的多个属性
列表是动态数组 不可变且可以重设长度 改变内部元素的个数
元组是静态数组 不可变内部数据一旦创建就不可以改变
元组缓存于python运行时的环境这意味着我们每次使用元组的时候无需访问内核去分配内存
有疑问加站长微信联系(非本文作者)