附答案 | 最强Python面试题之Python开发第二弹
写在之前
大家好呀,我是帅蛋。
这里是帅蛋的【最强Python面试题】系列,面试八股文都在这里啦啦啦!
新的一周开始了,继续卷起来呀!今天依然是 Python 后台开发面试题,主要是 Django 专题,大家一定要记得点赞收藏呀!!!
顺便提一句,我所有和面试相关的内容都会放在#帅蛋的面试空间# 中,大家可以关注下这个话题~
我会尽我最大的努力帮助到大家哒!!!
主要内容
这些面试题是我结合自己的经验整理的,主要就是下面这 5 个专题:
- Python 基础面试题
- Python 进阶
- Python 后台开发
- 爬虫
- 机器学习
已完成
Python 基础题
- 附答案 | 最强Python面试题之Python基础题(1)
- 附答案 | 最强Python面试题之Python基础题(2)
- 附答案 | 最强Python面试题之Python基础题(3)
- 附答案 | 最强Python面试题之Python基础题(4)
Python 进阶题
- 附答案 | 最强Python面试题之Python进阶题第一弹
- 附答案 | 最强Python面试题之Python进阶题第二弹
- 附答案 | 最强Python面试题之Python进阶题第三弹
- 附答案 | 最强Python面试题之Python进阶题第四弹
更新中
Python 后台开发
对每道面试题我都会附带详细的答案,有些我觉得重要的内容会详细讲解,虽然是面试八股文,我还是希望大家不是只“知其然”,更得“知其所以然”。
关于更新频率,每天我会更新 10 道题左右,总共会有差不多 200 道。
无论是准备面试还是自己学习,这份面试题绝对值得你去看,去学习。
大家可以关注我,再关注我,使劲关注我,不要错过每天的更新~
以下是正文
Python 后台开发面试题第二弹,大家一定要记得点赞收藏,一起加油!
1、Django 创建项目的命令?
django-admin startproject 项目名称
python manage.py startapp 应用 app 名
2、Django 创建项目后,项目文件夹下的组成部分(对 mvt 的理解)?
项目文件夹下的组成部分:
manage.py 是项目运行的入口,指定配置文件路径。
与项目同名的目录,包含项目的配置文件。
___init.py 是一个空文件,作用是这个目录可以被当作包使用。
settings.py 是项目的整体配置文件。
urls.py 是项目的 URL 配置文件。
wsgi.py 是项目与 WSGI 兼容的 Web 服务器。
3、对 MVC,MVT 解读的理解?
M:Model,模型,和数据库进行交互
V:View,视图,负责产生 Html 页面
C:Controller,控制器,接收请求,进行处理,与 M 和 V 进行交互,返回应答。
1 用户点击注按钮,将要注册的信息发送给网站服务器。
2 Controller 控制器接收到用户的注册信息,Controller 会告诉 Model 层将用户的注册信息保
存到数据库
3 Model 层将用户的注册信息保存到数据库
4 数据保存之后将保存的结果返回给 Model 模型
5 Model 层将保存的结果返回给 Controller 控制器
6 Controller 控制器收到保存的结果之后,或告诉 View 视图,view 视图产生一个 html 页面
7 View 将产生的 Html 页面的内容给了 Controller 控制器
8 Controller 将 Html 页面的内容返回给浏览器
9 浏览器接受到服务器 Controller 返回的 Html 页面进行解析展示
M:Model,模型,和 MVC 中的 M 功能相同,和数据库进行交互
V:view,视图,和 MVC 中的 C 功能相同,接收请求,进行处理,与 M 和 T 进行交互,返回应答
T:Template,模板,和 MVC 中的 V 功能相同,产生 Html 页面
1 用户点击注册按钮,将要注册的内容发送给网站的服务器
2 View 视图,接收到用户发来的注册数据,View 告诉 Model 将用户的注册信息保存进数据库
3 Model 层将用户的注册信息保存到数据库中
4 数据库将保存的结果返回给 Model
5 Model 将保存的结果给 View 视图
6 View 视图告诉 Template 模板去产生一个 Html 页面
7 Template 生成 html 内容返回给 View 视图
8 View 将 html 页面内容返回给浏览器
9 浏览器拿到 view 返回的 html 页面内容进行解析,展示
4、Django 中 models 利用 ORM 对 Mysql 进行查表的语句(多个语句)
字段查询
all():返回模型类对应表格中的所有数据。
get():返回表格中满足条件的一条数据,如果查到多条数据,则抛异常:MultipleObjectsReturned,查询不到数据,则抛异常:DoesNotExist。
filter():参数写查询条件,返回满足条件 QuerySet 集合数据。
条件格式:
模型类属性名__条件名=值
注意:此处是模型类属性名,不是表中的字段名
关于 filter 具体案例如下:
判等 exact
BookInfo.object.filter(id=1) BookInfo.object.filter(id__exact=1)此处的__exact 可以省略
模糊查询 like
例:查询书名包含'传'的图书。contains
contains BookInfo.objects.filter(btitle__contains=’传’)
空查询 where 字段名 isnull
BookInfo.objects.filter(btitle__isnull=False)
范围查询 where id in (1,3,5)
BookInfo.objects.filter(id__in=[1,3,5])
比较查询 gt lt(less than) gte(equal) lte
BookInfo.objects.filter(id__gte=3)
日期查询
BookInfo.objects.filter(bpub_date__year = 1980) BookInfo.objects.filter(bpub_date__gt = date(1980,1,1))
exclude:返回不满足条件的数据。
BookInfo.objects.exclude(id=3)
F 对象
作用:用于类属性之间的比较条件。
from django.db.models import F 例:where bread > bcomment BookInfo.objects.filter(bread__gt =F(‘bcomment’)) 例:BookInfo.objects.filter(bread__gt=F(‘bcomment’)*2)
Q 对象
作用:用于查询时的逻辑条件。可以对 Q 对象进行&|~操作。
from django.db.models import Q BookInfo.objects.filter(id__gt=3, bread__gt=30) BooInfo.objects.filter(Q(id__gt=3) & Q(bread__gt=3)) 例:BookInfo.objects.filter(Q(id__gt=3) | Q(bread__gt=30)) 例:BookInfo.objects.filter(~Q(id=3))
order_by 返回 QuerySet
作用:对查询结果进行排序。
例: BookInfo.objects.all().order_by('id') 例: BookInfo.objects.all().order_by('-id') 例:BookInfo.objects.filter(id__gt=3).order_by('-bread')
聚合函数
作用:对查询结果进行聚合操作。
sum count max min avg
aggregate:调用这个函数来使用聚合。
from django.db.models import Sum,Count,Max,Min,Avg 例:BookInfo.objects.aggregate(Count('id'))
{'id__count': 5} 注意返回值类型及键名
例:BookInfo.objects.aggregate(Sum(‘bread’))
{‘bread__sum’:120} 注意返回值类型及键名
count 函数
作用:统计满足条件数据的数目。
例:统计所有图书的数目。
BookInfo.objects.all().count()
例:统计 id 大于 3 的所有图书的数目。
BookInfo.objects.filter(id__gt = 3).count()
模型类关系
一对多关系
例:图书类-英雄类
models.ForeignKey() 定义在多的类中。
2)多对多关系
例:新闻类-新闻类型类
models.ManyToManyField() 定义在哪个类中都可以。
3)一对一关系
例:员工基本信息类-员工详细信息类
models.OneToOneField() 定义在哪个类中都可以。
5、django 中间件的使用?
Django 在中间件中预置了六个方法,这六个方法的区别在于不同的阶段执行,对输入或输出进行干预,方法如下:
1.初始化:无需任何参数,服务器响应第一个请求的时候调用一次,用于确定是否启用当前中间件。
def __init__(): pass
2.处理请求前:在每个请求上调用,返回 None 或 HttpResponse 对象。
def process_request(request): pass
3.处理视图前:在每个请求上调用,返回 None 或 HttpResponse 对象。
def process_view(request, view_func, view_args, view_kwargs): pass
4.处理模板响应前:在每个请求上调用,返回实现了 render 方法的响应对象。
def process_template_response(request, response): pass
5.处理响应后:所有响应返回浏览器之前被调用,在每个请求上调用,返回 HttpResponse 对象。
def process_response(request, response): pass
6.异常处理:当视图抛出异常时调用,在每个请求上调用,返回一个 HttpResponse 对象。
def process_exception(request,exception): pass
6、Django 项目的优化?
这个答案 web 通用
(1) 优化数据库查询
一次提供所有数据
仅提供相关的数据
(2) 代码优化
简化代码
更新或替代第三方软件包
重构代码
7、谈一下你对 uWSGI 和 nginx 的理解?
uWSGI
uWSGI 是一个 Web 服务器,它实现了 WSGI 协议、uwsgi、http 等协议。Nginx 中 HttpUwsgiModule 的作用是与 uWSGI 服务器进行交换。WSGI 是一种 Web 服务器网关接口。它是一
个 Web 服务器(如 nginx,uWSGI 等服务器)与 web 应用(如用 Flask 框架写的程序)通信的一种
规范。
要注意 WSGI / uwsgi / uWSGI 这三个概念的区分。
(1) WSGI 是一种通信协议。
(2) uwsgi 是一种线路协议而不是通信协议,在此常用于在 uWSGI 服务器与其他网络服务器的数据通信。
(3) uWSGI 是实现了 uwsgi 和 WSGI 两种协议的 Web 服务器。
ngix
nginx 是一个开源的高性能的 HTTP 服务器和反向代理:
(1) 作为 web 服务器,它处理静态文件和索引文件效果非常高;
(2) 它的设计非常注重效率,最大支持 5 万个并发连接,但只占用很少的内存空间;
(3) 稳定性高,配置简洁;
(4) 强大的反向代理和负载均衡功能,平衡集群中各个服务器的负载压力应用。
8、说说 nginx 和 uWISG 服务器之间如何配合工作的?
首先浏览器发起 http 请求到 nginx 服务器,Nginx 根据接收到请求包,进行 url 分析,判断访问的资源类型。
如果是静态资源,直接读取静态资源返回给浏览器。
如果请求的是动态资源就转交给 uwsgi 服务器,uwsgi 服务器根据自身的 uwsgi 和 WSGI 协议,找到对应的 Django 框架,Django 框架下的应用进行逻辑处理后,将返回值发送到 uwsgi 服务器,然后 uwsgi 服务器再返回给 nginx,最后 nginx 将返回值返回给浏览器进行渲染显示给用户。
9、django 开发中数据库做过什么优化?
(1) 设计表时,尽量少使用外键,因为外键约束会影响插入和删除性能
(2) 使用缓存,减少对数据库的访问
(3) 在 orm 框架下设置表时,能用 varchar 确定字段长度时,就别用 text
(4) 可以给搜索频率高的字段属性,在定义时创建索引
(5) Django orm 框架下的 Querysets 本来就有缓存的
(6) 如果一个页面需要多次连接数据库,最好一次性取出所有需要的数据,减少对数据库的查询次数
(7) 若页面只需要数据库里某一个两个字段时,可以用 QuerySet.values()
(8) 在模板标签里使用 with 标签可以缓存 Qset 的查询结果
10、验证码过期时间怎么设置?
将验证码保存到数据库或 session,设置过期时间为 1 分钟,然后页面设置一个倒计时(一般是前端
js 实现 这个计时)的展示,一分钟过后再次点击获取新的信息。
以上就是今天的内容,我是帅蛋,我们明天见~
❤️ 欢迎关注我,有问题,找帅蛋,我最看不得别人迷茫!
❤️ 如果你觉得有帮助,希望爱学习的你不要吝啬三连击哟[点赞 + 收藏 + 评论]~
#帅蛋的面试空间##面试八股文##秋招##Python##python面试#还有小小公众号 【编程文青李狗蛋】,聊聊迷茫吹吹牛皮~