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

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

35, selected_related 与 prefetch_related有什么区别

在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排除满足条件的。

相关推荐

  1. 网络数据库框架相关面试

    2024-06-16 07:10:02       9 阅读
  2. 网络数据库框架相关面试(其四)

    2024-06-16 07:10:02       9 阅读
  3. 开发面试

    2024-06-16 07:10:02       40 阅读
  4. 计算机网络、浏览器相关高频面试

    2024-06-16 07:10:02       41 阅读
  5. 【大数据面试】004 Flink状态是什么

    2024-06-16 07:10:02       31 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-16 07:10:02       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-16 07:10:02       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-16 07:10:02       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-16 07:10:02       18 阅读

热门阅读

  1. k8s pv使用nfs挂载券需要授权

    2024-06-16 07:10:02       8 阅读
  2. HDFS架构

    2024-06-16 07:10:02       7 阅读
  3. 日常排查问题技巧小结

    2024-06-16 07:10:02       8 阅读
  4. Shell脚本实现MySQL线上数据备份

    2024-06-16 07:10:02       8 阅读
  5. 机器 reboot 后 kubelet 目录凭空消失的灾难恢复

    2024-06-16 07:10:02       10 阅读
  6. Python 测试用例

    2024-06-16 07:10:02       7 阅读
  7. 从零开始! jupyter notebook的安装教程

    2024-06-16 07:10:02       7 阅读
  8. Jetson.GPIO 使用教程

    2024-06-16 07:10:02       12 阅读
  9. 19C之前恢复drop 掉的PDB 创建另一个实例

    2024-06-16 07:10:02       8 阅读
  10. 从零开始!如何安装和配置Jupyter Notebook

    2024-06-16 07:10:02       6 阅读
  11. 网站开发常规安全规范(持续更新)

    2024-06-16 07:10:02       8 阅读
  12. 大数据开发语言Scala入门

    2024-06-16 07:10:02       9 阅读
  13. 71、最长上升子序列II

    2024-06-16 07:10:02       9 阅读
  14. HTML5应用程序缓存:构建离线可用的Web应用

    2024-06-16 07:10:02       8 阅读