python之面试复习
待整理:osi七层协议,tcp三次握手四次挥手
1、Http协议(超文本传输协议)
是一种传输数据的格式。
- 建立在TCP之上
- 一次请求一次响应,然后断开连接(短连接,无状态)
- 请求:请求头 \r\n\r\n 请求体,响应:响应头 \r\n\r\n 响应体
常见请求头 请求体
2、Django的请求生命周期
-- WSGI,web服务网关接口,是一套协议,实现协议的模块(wsgiref、werkzeug)实际上就是socket服务端,用于接受用户请求,并进行初次封装,然后将请求交给web矿建,一般web框架都基于wsgi实现,这样实现关注点的分离。
--中间件,帮助我们对请求进行校验或者添加其他相关数据(csrf、session、request)
--路由匹配
--视图函数,进行业务逻辑处理,可能涉及到orm、template
--中间件,对响应的数据进行处理。
--WSGI,将响应的内容发送给浏览器。
4、Django的中间件是什么?
五个方法:process_request,process_response
是在视图执行之前,定制的一些操作,内置的有session、csrf等,也可以自定义,如:
权限设置:当用户登陆时,获取当前用户所有的权限储存在session中,当访问其他url时,获取当前url并在session中进行匹配,如果没有则返回没有权限。
登陆认证:不再需要在每个函数前加装饰器。
跨域:见下方
提问:如何根据字符串实例化类?
- class CSRF():
- def process_request(self,request):
- ")
- path = "views.csrf.CSRF" #根据这个路径字符串找到这个类?
- import importlib
- module_path , class_name = path.rsplit(".",maxsplit=1)
- m = importlib.import_module(module_path)
- getattr(m,class_name)
5、跨域
-- jsonp:浏览器的同源策略不禁止script标签,jsonp就是动态创建一个script标签,缺点是不能发get请求。
-- cors:添加响应头。 应用:本地的前后端分离。
-- 复杂请求:先发送一个option请求进行预检
6、视图(CBV/FBV)
分别基于函数和类,本质上都是基于函数,CBV是基于反射的方式通过method的不同找到不同的函数方法。所以CBV更适合做接口。
7、restful 规范 (和语言不绑定)
什么是接口?
(1)根据method不同,进行不同操作 GET / POST / DELETE / PATCH / PUT
(2)面向资源编程,把一切当成资源(url)(url后缀尽量使用名词)
(3)体现版本
(4)体现是API
(5)使用https(安全,但是要花钱)
(6)响应时添加状态码 return HttpResponse("asdasd",status=404)
(7)条件 (http://asdasdasdasd/?page=1&size=2)
(8)返回的数据 (建议:GET返回列表,POST返回添加的数据······)
(9)返回错误信息 {"code":1000, "data":"xxx", "error":"xxxx"}
(10)Hypermedia API
8、django rest framework框架
作用:帮助快速开发基于restful规范的接口。
常见继承关系:View——APIView——GenericAPIView——GenericViewSet(继承了ViewSetMixin,as_view中可以添加参数)——ModelViewSet
- class GenericAPIView(views.APIView):
- """
- Base class for all other generic views.
- """
- # You'll need to either set these attributes,
- # or override `get_queryset()`/`get_serializer_class()`.
- # If you are overriding a view method, it is important that you call
- # `get_queryset()` instead of accessing the `queryset` property directly,
- # as `queryset` will get evaluated only once, and those results are cached
- # for all subsequent requests.
- queryset = None
- serializer_class = None
- 。。。。
- class GenericViewSet(ViewSetMixin, generics.GenericAPIView):
- """
- The GenericViewSet class does not provide any actions by default,
- but does include the base set of generic view behavior, such as
- the `get_object` and `get_queryset` methods.
- """
- pass
- class ModelViewSet(mixins.CreateModelMixin,
- mixins.RetrieveModelMixin,
- mixins.UpdateModelMixin,
- mixins.DestroyModelMixin,
- mixins.ListModelMixin,
- GenericViewSet):
- """
- A viewset that provides default `create()`, `retrieve()`, `update()`,
- `partial_update()`, `destroy()` and `list()` actions.
- """
- pass
功能和组件:
(1)路由
(2)视图
(3)版本控制
(4)序列化
(5)认证
(6)权限
(7)频率
(8)分页
(9)解析器
(10)渲染器
http://www.cnblogs.com/aaronthon/p/9319981.html
9、如何实现访问频率限制?
创建一个字典,以IP为键,每次访问的时间戳组成的列表为值,每次访问时,把列表中小于(当前时间戳 - 访问限制时间范围) 的值去除,再根据列表长度是否小于规定时间可访问次数来判断是否超出频率。
但是这种方法只能在一定程度上限制,无法控制匿名用户,因为用户可以换代理IP。
10、orm操作补充
-- only 指定查询的列,取出的是queyset,且其中的每个数据都是对象。values取出的里面是列表
-- defer 排除查询的列
-- selected_related:主动做连表查询(主动做join)。 可以提高连表查询的性能,但是如果连表多,性能会越来越差。
-- prefetch_related:是多次单表操作,先取到一张表中的数据,再构造条件在第二张表中取和第一章表相关的数据。
-- F:对数据进行更新。
-- Q:构造复杂筛选条件。
-- orm写原生sql三种方式:extra、.raw方法、原生
11、git的作用和命令
git rebase的作用?保持提交记录的整洁。
git 如何做协同开发? 每个成员创建一个分支,分别开发,合并。一般一到两天合并一次,防止出现太多冲突。
开发过程出现bug怎么办? 创建一个bug分支来解决。
是否做review? 提交到review分支。
如何给开源代码贡献代码? foke
12、数据库的特点
数据库分页,页码越大,速度越来越慢。解决:1、限制页数。 2、记住当前页数据的最大和最小id
13、redis的特点
对内存进行管理
可以做持久化。aof(快照)、rdb(记录所有的命令和记录),各有利弊。
单进程、单线程
五大数据类型
14、原生ajax:XMLHttpResponse
15、购物车
为什么使用redis而不是数据库?
临时状态,并且更新频繁。
字典是如何构造的?
16、路飞学城相关:
1、购物车如何实现?
把用户的购物信息放入redis中,构造一个数据结构存放相关信息。
2、商品是否有个数?
没有。但是有价格策略,以时间为单位。
3、redis中的结构?
4、购物车中的数量是否有限制?购物车是否设置超时时间?(一定要二选一)(防止恶意存放大数量数据)
5、为什么使用redis?
因为这是一个临时状态,且更新频繁,放在redis中直接操作内存比频繁操作数据库效率更高。
6、具体的购物车的逻辑?
添加:用户选择课程和价格策略——获取课程和价格策略ID并进行合法性校验——构造一个以“shopping_car_+用户ID+课程ID”为键的字典,将数据以字典形式保存到redis中。
修改:用户选择价格策略——校验合法性——更新价格策略。
删除:用户选择删除的课程——校验——删除。
查询:通过scan_iter查询该用户所有购物车信息(构造“shopping_car_ID_* ”为键)
7、原则:
简单逻辑先处理
try异常捕获 + 自定义异常
导入模块美观
文件名、类名、project名、函数名格式
对功能分类
17、谈谈Django和Flask的认识
Flask短小精悍,体量小,用很少的代码就能实现一个网页,响应的它提供的内置功能也少,但是他可扩展性强,提供了很多第三方组件。
Django的自带组件:ORM,admin,from,分页
18、Django和Flask最大的不同点
Django通过参数传递request,session依附于request
Flask直接导入request和flask
19、Flask知识点
1、请求上下文管理:request,session
请求到来后wsgi会调用__call__方法,由__call__方法再调用wsgi_app方法。
在wsgi_app中首先做
20、什么是偏函数?应用场景
21、面向对象中的方法
__new__:在执行__init__之前执行
__call__:在Flask和Django请求的入口
__setattr__、__getattr__:通过对象点来取值赋值,在Flask的Local对象中
__setitem__、__getitem__:通过对象加中括号来取值赋值,Django的request.session['sss'] = 123
__mro__
__slots__:只能访问相应字段
python之面试复习的更多相关文章
- linux常用命令大全(linux基础命令入门到精通+命令备忘录+面试复习+实例)
作者:蓝藻(罗蓝国度) 创建时间:2018.7.3 编辑时间:2019.4.29 前言 本文特点 授之以渔:了解命令学习方法.用途:不再死记硬背,拒绝漫无目的: 准确无误:所有命令执行通过(环境为ce ...
- [转帖]linux常用命令大全(linux基础命令入门到精通+实例讲解+持续更新+命令备忘录+面试复习)
linux常用命令大全(linux基础命令入门到精通+实例讲解+持续更新+命令备忘录+面试复习) https://www.cnblogs.com/caozy/p/9261224.html 总结的挺好的 ...
- Python自动化面试必备 之 你真明白装饰器么?
Python自动化面试必备 之 你真明白装饰器么? 装饰器是程序开发中经常会用到的一个功能,用好了装饰器,开发效率如虎添翼,所以这也是Python面试中必问的问题,但对于好多小白来讲,这个功能 有点绕 ...
- linux常用命令大全(linux基础命令+命令备忘录+面试复习)
linux常用命令大全(linux基础命令+命令备忘录+面试复习)-----https://www.cnblogs.com/caozy/p/9261224.html
- Java秋招面试复习大纲(二):Spring全家桶+MyBatis+MongDB+微服务
前言 对于那些想面试高级 Java 岗位的同学来说,除了算法属于比较「天方夜谭」的题目外,剩下针对实际工作的题目就属于真正的本事了,热门技术的细节和难点成为了面试时主要考察的内容. 这里说「天方夜谭」 ...
- Java && Python 算法面试常用类以及方法总结
数据结构 逻辑结构上: 包括集合,线性结构,非线性结构. 存储结构: 顺序存储,链式存储,索引存储,散列存储. Java 常见数据结构 大专栏 Java && Python 算法面试 ...
- 实验8、31个最重要的Python Flask面试问题和答案
实验介绍 1. 实验内容 内容涵盖了31个最热门的Flask面试问题,帮助学生更好的理解Flask. 2. 实验要点 了解面试Flask开发人员的常见问题 实验内容 Flask面试问答 Q:Flask ...
- [Java面试一]面试复习大纲.
一.Java基础部分 (搞定所有技术之后才考虑复习的技术点) 1.数组中的排序问题(笔试或者机试,前者可能性更大) 2.面向对象的理解 3.集合相关的问题,比如hashmap跟hashtable的区别 ...
- python基础面试
1 请用自己的算法, 按升序合并如下两个list, 并去除重复的元素: list1 = [2, 3, 8, 4, 9, 5, 6]list2 = [5, 6, 10, 17, 11, 2] 答案: ...
随机推荐
- linux环境下vim创建java文件,并编译运行
一.前提 安装Java 二.创建工作目录并编辑java文件 三.编译 四.运行
- Flutter获取屏幕宽高和Widget大小
我们平时在开发中的过程中通常都会获取屏幕或者 widget 的宽高用来做一些事情,在 Flutter 中,我们可以使用如下方法来获取屏幕或者 widget 的宽高. MediaQuery 一般情况下, ...
- Mint-ui 脱坑日记
Field表单组件 这个组件真是大坑特坑 带默认背景边框 找了半天才找到 原生属性 :attr="{ maxlength:10 }" 是可以设置原生属性的 注意此处限制的输入长度 ...
- NPOI的基本用法,导出Excel
void DownloadForAccountIndex(IReadOnlyList<AccountInfoView> list) { NPOI.HSSF.UserModel.HSSFWo ...
- JDK源代码学习-基础类
一.概述 1.Java,是一套语言规范,例如规定了变量如何定义.控制语句如何写等,提供基本的语法规范.JDK是java自带的一套调用组件,是对基本java语法规范的进一步封装,jdk中都是使用java ...
- 2018年第九届蓝桥杯题目(C/C++B组)汇总
第一题 标题:第几天 2000年的1月1日,是那一年的第1天. 那么,2000年的5月4日,是那一年的第几天? 注意:需要提交的是一个整数,不要填写任何多余内容. 解题思路: 1. 判断2月有几天, ...
- python 去重方法
待补充:https://www.cnblogs.com/zknublx/p/6042295.html 一.使用集合直接去重 ids = [1,4,3,3,4,2,3,4,5,6,1]ids = lis ...
- django xadmin(1)
filter_horizontal 从‘多选框’的形式改变为‘过滤器’的方式,水平排列过滤器,必须是一个 ManyToManyField类型,且不能用于 ForeignKey字段,默认地,管理工具使用 ...
- <el-upload></el-upload>组件上传图片到七牛云
[01]搭建好页面结构.定义数据与接口 <el-upload method="post" ref="upload" :action="domai ...
- 题解:YNOI/GZOI2019 与或和
题目大意: 1. 求所有的子矩阵的and之和2. 求所有子矩阵的or之和 由于是位运算,那么久直接拆位,于是就变成了求全0子矩阵的个数和全1子矩阵的个数那么题目就变成了简单的单调栈问题 #includ ...