Python基础知识面试回顾

时间:2022-07-24
本文章向大家介绍Python基础知识面试回顾,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
字符串String
方法:
Join  	拼接字符串
Split  	分割字符串
Lower	变小写
Upper	变大写
Insert	指定位置插入元素
Index	索引元素指针
Count	统计子序列元素个数
Len		查看对象长度
Find		查找子序列个数,没找到返回-1
replice	字符串替换
Lstrip	移出左侧空白
Strip		移出两侧空白


列表 List
方法:
append	追加元素,默认添加到最后的位置
pop		移出最后一个元素
Reverse	反转元素
Remove	移出元素
Extend	扩展当前列表
Count	统计元素个数
Len		查看对象长度
切片    a[1:2:3]   起始-结束-步长
Index	索引元素位置
Insert	指定位置插入元素
Sort		排序 reverse=True 正序,倒序


元祖 tuple   (元祖是不可修改的)
方法:
Index 索引元素指针
切片
Count 统计元素个数
Len查看对象个数


字典 dict (无序)
方法:
get		根据key获取value存在则返回不存在则报错
Keys		返回所有的key
Values	返回所有的values
Items	所有元素返回格式(key, value)
Clear	清空字典
Update	更新
Pop		移除

集合 set 无序  且不重复


Lambda 匿名函数
判断x=1返回True 否则 False
result = lambda x:True if x == 1 True else false
       关键字 x参数: 条件成立值 条件
匿名函数是一类无序定义def的函数或子程序,lambda可以接受多个参数并返回表达式的值。


列表推导式
返回偶数	print([i for i in range(10) if i % 2 ==0])


Copy 深拷贝和浅拷贝的区别
浅拷贝:在内存中只额外创建第一层数据
深拷贝:在内存中将所有的数据重新创建一份(排除最后一层)
浅拷贝使用:
Import copy
name_dict = {‘name’:’Wyc’}
Copy_result = copy.copy(name_dict)				# 浅拷贝
deepcopy_result = copy.deepcopy(name_dict)		# 深拷贝


内置函数
abs()			取绝对值			all()		查看对象是否是可迭代,返回True,False
any()		判断可迭代参数是否为False
input()		函数接受一个标准输入数据,返回String类型
open()		函数用于打开一个文件,创建一个file对象
enumerate()	枚举
ord()		返回字母对应的十进制整数 例如:A=65
eval()		用于执行字符串表达式,返回表达式的值    例如: ret = eval(‘3 * 7’)  
sum() 		对系列进行求和计算			例如: sum([1,2,3])
bin()			二进制
iten()		生成迭代器
cmp()		用于比较两个对象,如果X <Y返回-1, x==y返回0, x>y返回1
max()		返回最大值
zip()			用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元祖
例子:
a = [1, 2, 3, 4, 5]
b = [6, 7, 8, 9, 10]
zip_result = zip(a, b)
[(1,6),(2,7),(3,8).....]
min()		返回最小值
oct()		转换成八进制


九九乘法表
for i in range(1, 10):
       for j in range(1, i + 1):
              print(‘{0} * {1} = {2}’.format(i, j, i * j))
print()


Django
1、filter跟get的区别?
答: filter包含了所有筛选条件匹配的对象,get返回筛选条件,筛选出多条或没有则报错
2、django中的大于小于是什么?
答: _gt 大于、 _lt 小于、gte 大于等于 lte 小于等于 exclude 不等于
3、数据库中有2020-01-01之前的数据, 我要取出01-01 ---- 05-02的数据怎么取出?
答: 使用_range(‘起始时间’, ‘结束时间’)
4、django中你用过哪些中间件?
答: 
1、SecurityMiddleware		安全中间件,为请求/响应周期提供了一些安全性增强。
2、SessionMiddleware		会话中间件,可以基于每个站点访问者存储和检索任意数据
3、CommonMiddleware	通用中间件
4、CsrfViewMiddleware		跨站请求伪造,通过向post表单添加隐藏的表单字段,并检查请求的正确值来增强对跨站点请求伪造的保护。
5、MessageMiddleware		消息中间件
6、XFrameOptionsMiddleware	点击劫持保护
7、UpdateCacheMiddleware/FetchFromCacheMiddleware 	开启全站缓存/范围缓存
	任何一个由Django提供的页面将会被缓存,缓存市场可以在CACHE_MIDDLEWARE_SECONDS 中配置。
5、Django整个运行流程
	1、浏览器输入URL进入服务。
2、WSGI拿到请求,封装socket,按照http协议进行解包。
3、解包之后的数据给所有中间件按照顺序执行一遍,如果中间件返回http response,则直接返回,否则继续往下执行。
4、中间件执行完成之后把url进行路由分发映射到对应的views。
5、然后views进行相应的逻辑处理,如果涉及到数据库,则要调用model进行操作,最后返回json。
6、把相应数据给中间件执行,
7、中间件执行完成之后,wsgi按照http协议封装相应数据,返回给浏览器。
6、Celery的任务和beat启动命令是什么?
答: 
Celery worker -A task.name -I info -E  -A 监听任务启动, -i info 输入详细信息
	Celery -A task.task bete -I info
7、Celery运行流程?
答: Client发出消息到队列中,broker将队列中的消息派发给worker来处理。
Client客户端Django
Brokers 是一个消息传输中间件,可以理解为一个邮箱,每当应用程序调用celery的异步任务的时候,会想broker传递消息,而后celery的worker将会取到消息进行对应的程序执行。
Backend 通常消息发送完成之后不知对方是否接受,为此celery实现了一个backend,用于存储这些消息以及celery执行的一些消息和结果。
Worker是celery提供的任务单元,worker并发的运行在分布式的系统节点中。
Celery包含模块:
任务模块 Task、消息中间件 Broker、任务执行单元 Worker、任务结果存储 Backend
消息中间件即任务调度队列,消息存储在redis或者,RabbitMQ中。
UWSGI.ini 常用参数配置
Master = true		启动主进程,来管理其他进程。
Chdir = /www/myproject		指定运行目录
module = myproject.wsgi		加载wsgi模块
Socket = 127.0.0.1 				指定sock文件,也可指定127,监听网络套接字
Processes=2					启动工作进程
Buffer-size					用于uwsgi宝解析的内部缓存区,默认是4K
Log-maxsize					设置最大文件大小
Disable-logging				禁用请求日志记录
Pidfile						指定pid文件
Enable-threads				允许使用内嵌的语言启动线程
8、进程、线程、协程的优缺点
进程:	
同时利用多个CPU,能够同时进行操作
耗费资源(重新开辟内存空间)
线程:
共享内存,IO操作的时候,创造并发操作
协程:
协程极高的执行率,因为主程序切换不是线程切换,而是由程序自身控制,因此,没有线程切换的开销,和多线程比,线程数量越多,协程性能优势就明显。
不需要多线程的锁机制,因为只有一个线程,也不存在同时写变量冲突,在协程中控制资源不加锁,只需要判断状态就行。
因为协程是一个线程执行,哪么怎么利用多核CPU呢?
答: 最简单的方法是多进程+协程,既充分利用多核,又充分发挥协程的高效率,可获得极高的性能。
9、什么是生产者消费者模型?
答:在工作中,可能会碰到这样一种情况,某个功能模块负责产生数据,这些数据由另外一个模块负责处理,产生数据的模块那么就叫生产者,而处理数据的模块就称为消费者,咋生产者之间在加个缓冲区,形象的称之为仓库,生产者负责往仓库中运输商品,而消费者从仓库中取出商品。这就是生产者消费者模型。
10、命名规范
(1)标识符由字母、下划线、和数字组成、且数字不能开头。
(2)Python大小写敏感,A和a是完全不同的。
(3)不能使用内部关键字来命名
11、redis是什么?保存什么样类型的数据?
Redis是一个开源的BSD许可的基于内存的数据结构存储器,可以用做数据库缓存和消息中间件。
它支持存储多种类型的数据结构, 字符串、散列、列表、集合、有序集合。
12、python的特性是什么?
答: 可解释,具有动态特性,面向对象,简明简单,开源,具有强大的社区
13、什么是猴子补丁?
答:在运行期间动态修改一个类或模块。
14、什么是*args和**kwargs?
答:*args可接收元祖列表参数,**kwargs可接收关键字参数。
15、python中是如何管理内存的?
答:引用计数为主、分代回收和标记清除为辅。
分代回收:对标记清除中的链表进行优化,讲那些可能存在循环引用的对象查分到3个链表,每代都可以存储对象和阈值,当达到阈值的时候,就会对相应的链表中的每个对象做一次扫描,除循环引用各自减1并且销毁引用计数器为0的对象。
标记清除:创建特殊链表专门用于保存、列表、元祖、字典、集合、自定义类等对象、之后再去检查这个链表中的对象是否存在循环应用,如果存在则让双方的引用计数器均-1。
引用计数:变量或者对象一但没有引用,内存直接释放。

Django的ORM
单表增
Models.objects.User.create(name=’wyc’) | **user_dict
类实例化增加
User_obj = models.User(name=’wyc’)
User_obj.save()
存在更新不存在则创建
Models.objects.User.update_or_create(**user_dict)
修改
Models.User.objects.filter(id=1).update(**user_dict)
查
Models.User.objects.all()
Models.User.objects.first()	 	取出最新的哪一个
删除
Models.User.objects.filter(id=1).delete()
__in				多条件查询
Moels.User.objects.filter(id__in=[11,22,33])		获取id等于11,22,33的数据

HTTP协议是超文本传输协议,是用于传输诸如HTML的超媒体文档的应用层协议。
HTTP的请求方式
GET: 请求获取request-URL所表示的资源
POST:在request-URL所标识的资源后附加新的数据
HEAD:请求获取由Request-URL所标识的资源的响应信息报头
PUT:请求服务器存储一个资源,并用request-url作为其标识
DELETE: 请求服务器删除Request-URL所标识的资源
TRACE:请求服务器回送收到的请求信息,主要用于测试或诊断
OPTIONS: 请求查询服务器的性能,或者查询与资源相关的选项。


忠告:  不要在一个舒适的圈子呆久了