1 描述一下python的垃圾回收机制
垃圾回收机制 是Python内置的一个内存管理机制。
如果一个对象引用计数为0(没有被引用),那么它就会被立马回收掉。
针对循环引用的用到标记清除和分代回收。
2 ascii、unicode、utf-8、gbk 分别是什么?
ASCII: 只采用1个字节对应一个英文字符。
GBK: 采用1个字节对应一个英文字符,采用2个字节对应一个中文字符。
unicode: 采用2个字节对应一个字符,(无论是英文还是中文,都是采用2个字符)
utf-8:采用1个字节对应一个英文字符,采用3个字节对应一个中文字符。
3 三元表达式编写格式
value = true if condition else false
4 用一行代码实现数值交换
a,b = b,a
5 xrange 和 range 的区别
只有在python2中才有xrange和range
在python2中,range得到的是一个列表,xrange得到的是一个生成器对象
6 如何实现字符串的反转?如:name="张全蛋"请反转为name= " "
l = list('蛋全张')
l.reverse()
res = "".join(l)
print(res)
7 is 和==的区别
is:比较左右两个的id是否相等
==:比较左右两个的value值是否相等
8 下面代码的输出结果将是什么?
list = ['a', 'b', 'c', 'd', 'e']
print(list[10:])
[]
9 简述Python的深浅拷贝
浅拷贝不区分可变容器类型中的可变不可变类型. 对于可变类型共用一份内存地址, 对于不可变类型在没有修改之前共用一份内存地址
深拷贝对可变容器类型中的可变不可变类型. 对于可变类型创建一份新的内存地址, 对于不可变类型在没有修改之前任然共用一份内存地址
10 有用过with statement(语句)吗?它的好处是什么,自己实现一个(上下文管理器)
用过。
with语句会在嵌套的代码执行之后,自动关闭文件。这种做法的还有另一个优势就是,无论嵌套的代码是以何种方式结束的,它都关闭文件。
with open('a.txt', 'w') as f:
f.write('Hello World!')
11 实现一个Singleton单例类,要求遵循基本语言编程规范(用尽量多的方式)
class Singleton(object):
def __init__(self, *args, **kwargs):
pass
@classmethod
def get_instance(cls, *args, **kwargs):
# 利用反射,看看这个类有没有_instance属性
if not hasattr(Singleton, '_instance'):
Singleton._instance = Singleton(*args, **kwargs)
return Singleton._instance
s1 = Singleton() # 使用这种方式创建实例的时候,并不能保证单例
s2 = Singleton.get_instance() # 只有使用这种方式创建的时候才可以实现单例
s3 = Singleton()
s4 = Singleton.get_instance()
print(id(s1), id(s2), id(s3), id(s4))
12 简述HTTP协议
HTTP就是Hyper Text Transfer Protocol(超文本传输协议)
用来规定服务端和浏览器之间的数据交互的格式...
四大特性:
1.基于请求响应
2.基于TCP/IP 作用与应用程序之上的协议
3.无状态
不保存用户的信息
eg:一个人来了一千次 你都记不住 每次都当他如初见
由于HTTP协议 是无状态的 所以后续出现了一些专门用来记录用户状态的技术:
Cookie、Session、Token...
4.无/短连接
请求来一次 我响应一次 之后就再也没有任何链接和关系了
长链接:双方建立连接后 默认不断开 websocket(后面讲项目的时候会讲)
13 HTTP协议状态码有什么用,列出你知道的HTTP协议的状态码,然后讲出他们都表示什么意思,301和302的区别
用一串简单的数字表示一些复杂的状态或者描述性信息
1xx 服务端已经接收到了你的数据 正在处理 你可以继续提交额外的数据
2xx 服务端成功响应了你想要的数据(200 OK 请求成功)
3xx 重定向(当你在访问一个需要登录之后才能看的页面,会自动跳转到登录页面)
4xx 客户端错误,请求包含语法错误或无法完成请求
404:请求资源不存在
403:当前请求不合法 或者 不符合访问资源的条件
5xx 服务器错误,服务器在处理请求的过程中发生了错误(500,服务器炸了,机房着火了)
301适合永久重定向
302用来做临时跳转
14 什么是MTV?
MTV:Django号称是MTV模型
M:models
T:templates
V:views
Model(模型): 负责业务对象与数据库的对象(ORM)。
Template(模板):负责如何把页面展示给用户。
View(视图):负责业务逻辑,并在适当的时候调用Model和Template。
15 什么是CGI,FastCGI,WSGI,uWSGI,uwsgi
CGI:通用网关接口,一个标准,定义了客户端服务器之间如何传数据
FastCGI:让交互程序与Web服务器通信的协议,CGI的升级版
WSGI:为Python定义的web服务器和web框架之间的接口标准
uWSGI:一个实现了WSGI的服务器
uwsgi:uWSGI自有的一个协议
16 django 对数据查询结果排序怎么做, 降序怎么做
升序
User.objects.all().order_by('id')
降序
User.objects.all().order_by('-id')
17 django 中 values 和 values_list 的区别?
values:返回每行数据为字典格式
values_list: 返回每行数据为元组格式
18 基于django使用ajax发送post请求时,有哪种方法携带csrftoken?
#1.后端将csrftoken传到前端,发送post请求时携带这个值发送
data: {
csrfmiddlewaretoken: '{{ csrf_token }}'
},
#2.获取form中隐藏标签的csrftoken值,加入到请求数据中传给后端
data: {
csrfmiddlewaretoken:$('[name="csrfmiddlewaretoken"]').val()
},
#3.cookie中存在csrftoken,将csrftoken值放到请求头中
headers:{ "X-CSRFtoken":$.cookie("csrftoken")},
19 django 路由系统中 name 的作用
1.根据name生成新的url
2.修改当前url(起别名)
20 django 的 Model 中的 ForeignKey 字段中的 on_delete 参数有什么作用
级联删除,数据库中其他表中的相关联的数据也会被删除
21 django 中 filter 和 exclude 的区别
1. filter :将满足条件的数据提取出来,返回一个新的 QuerySet
2. exclude :排除满足条件的数据,返回一个新的 QuerySet
22 简述 django FBV 和 CBV?
FBV(function base views) 就是在视图里使用函数处理请求。
CBV(class base views) 就是在视图里使用类处理请求。
23 简述django中间件几个方法及其应用场景?
process_request() 发送请求
process_view() 执行完 request 预处理函数并确定待执行的view之后,但在view函数实际执行之前。
process_template_response() 返回一个实现了render方法的响应对象。
process_exception() 收集错误信息,
process_response() 返回 HttpResponse 对象。
24 列举 django orm 中你了解的所有方法?
all() 查询所有结果
filter(**kwargs) 它包含了与所给筛选条件相匹配的对象。获取不到返回None
get(**kwargs) 返回与所给筛选条件相匹配的对象,返回结果有且只有一个。
exclude(**kwargs) 它包含了与所给筛选条件不匹配的对象
order_by(*field) 对查询结果排序
reverse() 对查询结果反向排序
count() 返回数据库中匹配查询(QuerySet)的对象数量
first() 返回第一条记录
last() 返回最后一条记录
exists() 如果QuerySet包含数据,就返回True,否则返回False
values(*field) 返回一个ValueQuerySet
values_list(*field) 它与values()非常相似,它返回的是一个元组序列,values返回的是一个字典序列
distinct() 从返回结果中剔除重复纪录
25 什么是反向解析?
定义url时,需要为include定义namespace属性,为url定义name属性
无论url怎么改变,只要视图函数的名称不变,模板都可以反向解析到该视图函数。
26 Django对数据查询结果排序怎么做,降序怎么做,查询大于某个字段怎么做?
升序:User.objects.all().order_by('id')
降序:User.objects.all().order_by('-id')
大于某个字段:filter(字段名_gt=值)
27 描述cookie,session,token
cookie:存储在浏览器中的用户数据
session:服务器用于验证用户信息的身份标识
token:无状态、可扩展的身份验证
28 简述Django下的(内建的)缓存机制?
浏览器第一次发出请求时,cache会缓存数据到内存中,设置header头部。
再次发送请求时,如果缓存比较新,则会重新请求数据,
如果缓存未过期,就直接返回给客户端。
29 列出你知道的django中models字段类(如:AutoField)
BooleanField() 布尔型字段,默认的表单窗口部件是CheckBoxInput
CharField() 字符型字段,默认的表单窗口部件是TextInput。该字段类型有一个必需参数:max_length 在数据库水平限定了字符串最大长度
DateField() 日期字段,字段的值是python中datetime.date的实例,
DateTimeField() 日期和时间字段,值为datetime.datetime实例。默认的表单窗口以及可选参数同上。
DecimalField() 混合精度的小数型数字字段。
EmailField(max_length=254, **options) 邮件字段,使用EmailValidator进行验证
FileField(upload_to=None, max_length=100, **options) 文件上传字段。
FloatField() 浮点字段,默认的表单窗口部件是NumberInput。和DecimalField经常混淆不清,
ImageField() 图像字段。继承了FileField的所有属性和方法。而且还能自动验证上传的对象是否为合法的图像。
IntegerField 整形字段。
TextField() 与CharField类似,但一般用来存储体积较大的文本。
TimeField(auto_now=False, auto_now_add=False, **options) 时间字段,其值为datetime.time实例
30 (编码题)用django实现,图书的增,删,查
1 需要登陆,未登陆只能查看,登陆后可以删,增
2 通过session实现登陆功能
3 在中间件中控制未登陆跳转到登陆页面
4 不要求页面好看,流程走通即可