最近两个后端同事离职了,帮忙面试了些后端开发的实习生,虽然有过一些后端经验,但我不是主要写后端的,复习了下Django也稍微准备了一些主要是Django相关的面试题,数据库相关部分额外,没有在此举出,但是绝不可忽视。绝非专业,聊以记录,温故知新。

1 什么是wsgi,uwsgi, uWSGI?(简单,可跳过直接问扩展问题)(考察Django处理网络请求流程/生命周期)

wsgi协议:一种实现python解析的通用接口标准/协议,是一种通用的接口标准或者接口协议,实现了python web程序与服务器之间交互的通用性。 利用它,web.py或bottle或者django等等的python web开发框架,就可以轻松地部署在不同的web server上了;

uWSGI 是一个全功能的 HTTP 服务器,他要做的就是把 HTTP 协议转化成语言支持的网络协议。比如把 HTTP 协议转化成 WSGI 协议,让 Python 可以直接使用;

uwsgi 是一种 uWSGI 的内部协议,使用二进制方式和其他应用程序进行通信;

流程关系:

扩展问题1:既然 uWSGI 可以完成 Nginx 功能,那为什么又要用 Nginx

Nginx 更牛逼,能直接在 Nginx 层面就完成很多事情,比如静态文件、反向代理、转发等需求。

扩展问题2:nginx的作用:

1.反向代理,可以拦截一些web攻击,保护后端的web服务器
2.负载均衡,根据轮询算法,分配请求到多节点web服务器
3.缓存静态资源,加快访问速度,释放web服务器的内存占用,专项专用

扩展问题3 django请求的生命周期(请求流程)?

(可从上面的wsgi开始说起)
1.wsgi,请求封装后交给web框架 (Flask / Django)
2.中间件,对请求进行校验或在请求对象中添加其他相关数据,例如:csrf、request.session
3.路由匹配 根据浏览器发送的不同url去匹配不同的视图函数
4.视图函数,在视图函数中进行业务逻辑的处理,可能涉及到:orm、templates => 渲染
5.中间件,对响应的数据进行处理。
6.wsgi,将响应的内容发送给浏览器。

请求过程简单说明:浏览器发起请求–>请求处理–>请求经过中间件–>路由映射–>视图处理业务逻辑–>响应请求(template或response)

2 列举Django常用的内置组件(考察Django常用组件熟悉度)

1. ORM

数据模型与数据库的解耦

  • 根据对象的类型生成表结构
  • 将对象,列表的操作,转换为sql语句
  • 将sql查询到的结果转换为对象,列表

2. 分页器(paginator)

from django.core.paginator import PaginatorPaginator对象:    paginator = Paginator(user_list, 10)
# per_page: 每页显示条目数量
# count:    数据总个数
# num_pages:总页数
# page_range:总页数的索引范围,如: (1,10),(1,200)
# page:     page对象
page对象:page=paginator.page(1)
# has_next              是否有下一页
# next_page_number      下一页页码
# has_previous          是否有上一页
# previous_page_number  上一页页码
# object_list           分页之后的数据列表
# number                当前页
# paginator             paginator对象

3. 中间件 (可从Django的生命周期的第二个周期引申出此问题)

介于request(请求)与response(响应)处理之间的一道处理过程,相对比较轻量级,位于web服务端与url路由层之间

MIDDLEWARE = ['django.middleware.security.SecurityMiddleware',  #一些安全设置,比如xss脚本过滤'django.contrib.sessions.middleware.SessionMiddleware',#session支持中间件,加入这个中间件,会在数据库中生成一个django_session的表。'django.middleware.common.CommonMiddleware',   #通用中间件,会处理一些url'django.middleware.csrf.CsrfViewMiddleware',   #跨域请求伪造中间件,加入这个中间件,在提交表单的时候会必须加入csrf_token,cookie中也会生成一个名叫csrftoken的值,也会在header中加入一个HTTP_X_CSRFTOKEN的值来放置CSRF攻击。'django.contrib.auth.middleware.AuthenticationMiddleware',  #用户授权中间件。他会在每个HttpRequest对象到达view之前添加当前登录用户的user属性,也就是你可以在view中通过request访问user。'django.contrib.messages.middleware.MessageMiddleware',#消息中间件。展示一些后台信息给前端页面。如果需要用到消息,还需要在INSTALLED_APPS中添加django.contrib.message才能有效。如果不需要,可以把这两个都删除。'django.middleware.clickjacking.XFrameOptionsMiddleware',#防止通过浏览器页面跨Frame出现clickjacking(欺骗点击)攻击出现。'A_orm.middlewares.auth.AuthenticationMiddleware',
]内置中间件

4. form组件(一般写HTML前端用的多,考察全栈能力)

主要功能如下:

  • 生成页面可用的HTML标签
  • 对用户提交的数据进行校验
  • 保留上次输入内容

5. ModelForm

作用:

  1. 手动对单表进行增,删,改,查,手动把orm操作获取的数据渲染到模块;(阶段1)
  2. Form组件(类),自动生成标签(input,select),并对用户输入的数据做规则验证;(阶段2)
  3. ModelForm顾名思义就Form和Django的Model数据库模型结合体,可以简单,方便地对数据库进行增加,编辑操作和验证标签的生成

原生用的可能不多,主用DRF框架

6.cookie和session

cookies是浏览器为web服务器存储的一个信息,每次浏览器从某个服务器请求页面时,都会自动带上以前收到的cookie.cookie保存在客户端,安全性较差,注意不要保存没敢信息.

6.1 jsonwebtoken(JWT)(由sesssion/cookie引出来)

考察:原理、数据结构、使用方式、特点…

简述
JWT(Json Web Token)是是目前最流行的跨域认证解决方案,是实现token技术的一种解决方案,JWT由三部分组成: header(头)、payload(载体)、signature(签名)。

使用方法
客户端收到服务器返回的 JWT,可以储存在 Cookie 里面,也可以储存在 localStorage。

此后,客户端每次与服务器通信,都要带上这个 JWT。你可以把它放在 Cookie 里面自动发送,但是这样不能跨域,所以更好的做法是放在 HTTP 请求的头信息Authorization字段里面。

另一种做法是,跨域的时候,JWT 就放在 POST 请求的数据体里面。

参考:http://www.ruanyifeng.com/blog/2018/07/json_web_token-tutorial.html

3 celery(考察后台的定时任务/异步任务)

分布式任务队列,用于实现异步任务处理。
实现参考:https://www.cnblogs.com/wdliu/p/9530219.html

4 Q查询/F查询

4.1引申问题1:关联查询

4.2引申问题2:原始SQL语句

4.3引申问题3:Django中如何配置过多个数据库

主要考察一些数据库sql相关知识。

5ModeviewSet(考察DRF相关)

5.1 drf继承过哪些视图类,他们之间的区别?

第一种:APIView
第一种遵循了CBV的模式,里面的功能比较多但是需要自己写的代码也有很多
提供了免除csrf认证,版本处理、认证、权限、节流、解析器、筛选器、分页、序列化、渲染器


第二种:ListAPIView,RetrieveAPIView,CreateAPIView,UpdateAPIView,DestroyAPIView
第二种则在第一种的基础上,封装了许多我们需要自己的写的代码,许多功能的实现只需要给专属的变量名赋值就可以实现该功能


第三种:GenericViewSet、ListModelMixin,RetrieveModelMixin,CreateModelMixin,UpdateModelMixin,DestroyModelMixin
第三种则重构了APIView中的as_view()方法,结合请求方法和不同Mixin类的方法名从而进行执行不同的功能。与前面两种最主要的区别是url路由中as_view()方法中需要传值。
目前使用的主要目的是把第二种的bug(查询全部数据的功能和查询单个数据的功能无法在一个类中实现)实现在一个类中!

5.2 GenericAPIView视图类的作用(DRF增删查改视图类)

总结:GenericAPIView主要为drf内部帮助我们提供增删改查的类LIstAPIView、CreateAPIView、UpdateAPIView、提供了执行流程和功能,
我们在使用drf内置类做增删改查时,就可以通过自定义 静态字段(类变量)或重写方法(get_queryset、get_serializer_class)来进行更高级的定制。

6 列举常用的Django第三方库?

7 加密模式有哪些?(举例,大致介绍如对称非对称)

8 是否关注新技术啊?golang,rust,numpy,pandas是否了解?

9 django安全防护?(比如csrf)

10常见的设计模式

单例模式、策略模式、代理模式、观察者模式、装饰模式、适配器模式、命令模式、组合模式、简单工厂模式、模板方法模式(简单概述)

Python后端开发(主Django)面试题相关推荐

  1. 下列不属于python第三方库的是-python后端开发工程师考证试题

    原标题:python后端开发工程师考证试题 python开发工程师考证试题 选择题 题目 关于 Python 程序格式框架的描述,以下选项中错误的是 ( A ) A: Python 语言不采用严格的& ...

  2. python适合做后端开发吗-想从事Python 后端开发?

    先说思路,再说操作. 不管你用什么语言,PHP.Python 还是 Java,后端都会涉及到这些东西 1.计算机基础:操作系统.网络系统(协议).数据库系统.数据结构与算法 2.中间件:Nginx.M ...

  3. 专科python应届生工资多少-应届毕业生自述面试15K月薪的Python后端开发经历,希望对你有用...

    原标题:应届毕业生自述面试15K月薪的Python后端开发经历,希望对你有用 前言 马上就要到十二月,2018年也即将过去,众所周知每年的三四月份都是招聘高峰期,俗称:"金三银四" ...

  4. 腾讯后端面试题python_腾讯后端开发,一面面试题分享

    下面要给大家带来的是一组腾讯后端开发的一面面试题,想要了解腾讯一面面经的小伙伴可以来看看下面的相关内容. 注:腾讯.一面 面试时间大约为一个小时左右 一.面试题(一面) 1.自我介绍 2.ArrayL ...

  5. python后端开发技术论坛_python后端开发

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! python软件开发,php软件开发,后端开发,运维自动化系统开发,堡垒机,云管 ...

  6. Python后端开发要求

    关于Python后端开发要求 一.对Python有兴趣,熟悉Python(标准库) 最好阅读过源码 了解Python的优化(熟悉pypy更佳) 二.至少至少一门语言(不说"精通") ...

  7. 如何成为自学成才的PYTHON后端开发人员?

    除非缺少路线图,否则自学成才的PYTHON开发者的路径上会充满挑战 软件开发本质上涉及两个部分:前端开发和后端开发,它们都有自己的挑战.但是,总的来说,后端开发被认为是专家'天堂,新鲜人害怕踩踏.后端 ...

  8. python后端开发学习重点

    python后端开发学习 最近在学习python后端开发,简单的总结了python后端开发所需的技术栈,希望对自学python的同学有一点帮助. 1.python语言基础 python的语法特点 py ...

  9. 自学 Python后端开发 到什么程度可以找工作

    前两天,在群里收到一个群友(强哥)跳槽成功的消息.真心为其感到高兴.为了找到一个更好的平台,为了拿到更理想的薪酬.他在面试前期做了相当多的准备(机会永远是留给有准备的人,这一点值得学习),写了很多关于 ...

  10. 我想找一份python后端开发工作,需要具备哪些技能。

    作为一名 Python 后端开发人员,您应该具备以下技能: 熟练掌握 Python 编程语言 理解 Web 开发技术,如 HTTP 协议.RESTful API 等 经验丰富的数据库编程,比如 MyS ...

最新文章

  1. LeetCode简单题之买卖股票的最‭佳时机
  2. 企业实战之分布式锁方案一步步的演变历程!,Java数据库索引面试题
  3. 配置Exchange 2010 服务器(二)Exchange2010证书配置
  4. python开发应用程序错误_Python 程序员经常犯的 10 个错误
  5. Entity Framework Core 3.1 和 Entity Framework 6.4 发布
  6. 多线程编程(14) - 多线程同步之 WaitableTimer (等待定时器对象)
  7. hive表名命名规范_数据仓库开发规范
  8. 第一个SSCLI范例:echo的调试问题
  9. 蚁群算法(Ant Colony Optimization,ACO)介绍及MATLAB代码(求解旅行商问题TSP)
  10. 2020-11-06
  11. shell脚本学习笔记(二)myplayer添加播放列表的源码
  12. 利用pm2 启动node项目
  13. 分布式集群中大数据的中位数
  14. linux三星电脑开机怎么进入页面,三星Samsung笔记本怎么开机进入BIOS
  15. 分布式事务CAP理论
  16. WIN10计算机不支持3D游戏怎么办,win10电脑3d设置在哪里设置
  17. UVa 10827 - Maximum sum on a torus
  18. 获取比Administrator还高的权限——SYSTEM权限
  19. 【报告分享】2021小红书电商直播趋势报告-千瓜数据(附下载)
  20. C语言打印倒三角形代码

热门文章

  1. java浏览器无界面后台截屏工具
  2. 最快速度找到内存泄漏
  3. 云原生周刊 | 使用 ChatGPT 协助解决 Prometheus 告警
  4. 第1章 沉沦在大学里——《逆袭大学》连载
  5. Git git config 配置使用
  6. Matlab利用牛顿迭代法求解非线性方程组
  7. 如何彻底关闭windows10自动更新,禁用Windows Update
  8. sqlserver数据库安全
  9. kafka的Rebalance问题分析(续)
  10. Java实现 LeetCode 502 IPO(LeetCode:我疯起来连自己都卖)