网络数据库后端框架相关面试题(其四)

31, 在视图函数中,常见的装饰器有哪些?

django.views.decorators.csrf_exempt: 绕过csrf保护

django.views.decorators.http.require_GET: 限定请求方式为get请求

django.views.decorators.http.require_POST: 限定请求方式为post请求

django.views.decorators.http.require_http_methods: 设置限定的请求方式

django.views.decorators.cache.cache: 设置请求

django.util.decorators.method_decorator: 在CBV中类函数中使用装饰器

django.db.transaction.atomic: 保证视图函数事务完整性

32,wsgi和uwsgi的区别

wsgi全名(Python Web service Getway interface)是为python语言定义的Web服务器和Web应用程序或框架之间的一种简单而通用的接口。也可以认为WSGI是一种通信协议。

uWSGI 是一个服务器,它实现了WSGI协议, uWSGI,HTTP等协议。nginx中HttpUwsgiModule 的作用是与uWSGI服务器进行交换。

33,QuerySet 两大特性

惰性执行

创建查询集不会访问数据库,直接调用数据时,才会访问数据库,调用数据的情况包括迭代,序列化与if 合用

缓存

使用同一个查询集,第一次使用时会发生数据库查询,然后Django 会把结果缓存下来,再次使用这个查询集时会使用缓存的数据,减少数据库的查询次数。

34, 简述什么是FBV和CBV

FBV(function base views)就是在视图中使用函数处理请求。

CBV(class base views ) 就是在视图里使用类处理请求

python 是一个面向对象的编程语言,如果只用函数来开发,有很多面向对象的优点就错失了(继承,封装,多态)。所以Django在后来加入Class-Based-View.可以让我们用类写View。这样做的优点主要有以下两种:

1,提高代码的复用性,可以使用面向对象的技术,比如Mixin(多继承)

2,可以使用不同的函数针对不同的HTTP 方法处理,而不是通过很多if判断,提高代码课可读性f

在django中,所有的Queryset 都是惰性的,意思是当创建一个查询集的时候,并没有跟数据库发生任何交互。因此我们可以对查询集进行级联的filter等操作,只有在访问Queryset的内容的时候,django才会真正进行数据库的访问。而多频率,复杂的数据库查询往往是性能问题最大的根源。

不过我们实际开发中,往往需要访问到外键对象的其他属性。如果按照默认的查询方式去遍历取值,那么会造成多次的数据库查询,效率可想而知。

在查询对象集合的时候,把指定的外键对象也一并完整查询加载,避免后续的重复查询

1,select_related 适用于外键和多对一的关系查询

2, prefetch_reated适用于一对多或者多对多的查询

36, session 与 cookie的区别

存储位置:session在服务器中,cookie是在客户端

存储数据大小: session无限制, cookie不同浏览器都会有不同的限制, 大概几KB

安全性:session更安全, cookie在本地容易泄露, 一般需要加密

性能:数据如果全部存在session会造成服务器性能下降,可以选择部分数据使用cookie存到客户端

37, 对django的认识

1, django是走大而全的方向, 它最出名的是其全自动化的管理后台:只需要使用起ORM, 做简单的对象定义,它就能自动生成数据库结构,以及全功能的管理后台。

2, django内置的ORM跟框架内的其他模板耦合程度高。

应用程序必须使用django内置的ORM,否则就不能享受到框架内提供的种种基于其ORM的便利:

理论上可以切换掉其ORM模块,但这就相当于要把装修完毕的房子拆除重新装修,倒不如一开始就去毛坯房做全新的装修。

3,django的卖点就是超高的开发效率,其性能扩展有限;采用django的项目,在流量达到一定规模后,都需要对其进行重构,才能满足性能要求。

4, django适用的是中小型的网站,或者作为大型网站快速实现产品雏形的工具。

5, django模板的设计哲学就是彻底的将代码,样式分离;django从根本上杜绝在模板中进行编码,处理数据的可能。

38, django, flask, tornado的对比

1,django走的是大而全的方向,开发效率高。它的MTV框架,自带ORM,admin后台管理,自带的sqlite数据库和开发测试用的服务器给开发者提高了超高的开发效率。

2, Flask是轻量级的框架,自由,灵活,可扩展性很强,核心基于Werkzeug WSGI 工具和jinja2模板引擎。

3, Tornado走的是少而精的方向,性能优越。它最出名的是异步非阻塞的设计方式

Tornado的两大核心模块:

iostraem:对非阻塞式的socket进行简单的封装

ioloop:对I/O多路复用的封装,它实现了一个单例

39, QuerySet对象的常用方法

all():查询所有结果

filter(**kwargs): 它包含了所给筛选条件相匹配的对象。获取不到返回None

get(**kwargs): 返回与所给筛选条件相匹配的对象,返回结果有且只有一个。获取不到会报错。

如果符合筛选条件的对象超过一个或者没有都会抛出错误。

exclude(**kwargs): 它包含了与所给筛选条件不匹配的对象。

order_by(*field): 对查询结果排序

reverse():对查询结果反向排序

count():返回数据库中匹配查询的对象数量

first():返回第一条记录

exists():如果QuerySet包含数据,就返回True,否则返回False

values(*field): 返回一个ValueQuerySet ------一个特使的QuerySet,运行后得到的并不是一系列model的实例化对象,而是一个可迭代的字典序列

values_list(*field):它与values()非常相似,它返回的是一个元组序列,value返回的是一个字典序列

disrinct():从返回结果中剔除重复记录

40, filter和exclude的区别

取到的值都是QuerySet对象,filter选择满足条件的,exclude排除满足条件的。

相关推荐
ALLSectorSorft1 分钟前
定制客车系统票务管理系统功能设计
linux·服务器·前端·数据库·apache
傻啦嘿哟1 小时前
Django模型开发全解析:字段、元数据与继承的实战指南
数据库·sqlite
lifallen2 小时前
Kafka ISR机制和Raft区别:副本数优化的秘密
java·大数据·数据库·分布式·算法·kafka·apache
加油吧zkf2 小时前
MySQL索引优化全攻略:提升查询性能30%
数据库·mysql
只因在人海中多看了你一眼2 小时前
B.10.01.3-性能优化实战:从JVM到数据库的全链路优化
jvm·数据库·性能优化
程序员JerrySUN3 小时前
四级页表通俗讲解与实践(以 64 位 ARM Cortex-A 为例)
java·arm开发·数据库·redis·嵌入式硬件·缓存
布朗克1683 小时前
MySQL 临时表详细说明
数据库·mysql·临时表
vision_wei_3 小时前
Redis中间件(四):主从同步与对象模型
网络·数据库·c++·redis·缓存·中间件
布朗克1684 小时前
MySQL 复制表详细说明
数据库·mysql·复制表
Code季风7 小时前
Redis 缓存:应对缓存雪崩、缓存击穿和缓存穿透
数据库·redis·分布式·后端·缓存·微服务·mybatis