一、and或orpython
v= 1 and 3 and 2 print(v) 2 v= 1 and 3 and 0 print(v) 0 v = 1 or 2 or 0 print(v) 1 v = 1 and 2 or 0 print(v) 2
Python中的and从左到右计算表达式,若全部的值均为真,则返回最后一个值,若存在假,返回第一个假值mysql
or也是从左到右计算表达式,返回第一个为真的值web
二、GIL锁ajax
全局解释器锁,同一时刻只能有一个线程访问CPU,锁的是线程,线程自己能够在同一时间使用多个CPU,Cpython解释器防止在解释代码的过程当中产生数据不安全问题。sql
三、is和==的区别数据库
Python中包含三个基本元素:ID(身份标识),type(数据类型),value(值)编程
其中ID用来惟一标识一个对象,type标识对象类型,value标识对象的一个值json
is判断的是a对象是否就是b对象,是经过ID来判断跨域
==判断的是a对象的值是否和b对象的值相等,是经过value来判断,,因此is
就是判断两个对象的id是否相同, 而 ==
判断的则是内容是否相同。数组
四、 Python中的可变对象和不可变对象
不可变对象:对象所指向的内存中的值不能被改变,当改变这个变量的时候,原来指向的内存中的值不变,变量再也不指向原来的值,而是开辟一块新的内存,变量指向新的内存。
通俗来说变量值改变,id值也改变,例如:
a = 'hello' print(id(a)) a = a+'hi' print(id(a)) 1579546360552 1579547940488
数值类型int 、float、 字符串str 、元祖tuple、boole 都是不可变对象
可变对象:对象指向的内存中的值会改变,当更改这个变量的时候,仍是指向原来内存中的值,而且在原来的内存值进行原地修改,并无开辟新的内存。
dic = { 'name':'alex', 'age':18 } print(id(dic)) dic['hobby']='lanqiu ' print(id(dic)) 1579542439176 1579542439176
列表list、集合set、字典dict都是可变对象
五、osi七层协议复习总结
六、TCP与UDP的复习总结
TCP:传输控制协议,是一种面向链接的、可靠地字节流服务,当客户端与服务端交换数据时,首先要创建起一个TCP连接,以后才传输数据,TCP提供超市重传,丢弃重复数据,检查数据,流量控制等功能。保证数据从一段传到另外一端。
UDP:用户数据包协议,是一个简单的面向数据包的传输层协议,尽最大努力交付报文。传输速度比较快,容易丢包。
七、阻塞IO,非阻塞IO
IO的操做分为两步,等待数据准备和将数据从操做系统内核拷贝至内存,阻塞IO是指一直等待数据准备好拿到数据。非阻塞IO是指当用户进程发出read操做时,若是kernel中的数据尚未准备好,那么它并不会block用户进程,而是马上返回一个error。从用户进程角度讲 ,它发起一个read操做后,并不须要等待,而是立刻就获得了一个结果。用户进程判断结果是一个error时,它就知道数据尚未准备好,因而它能够再次发送read操做。一旦kernel中的数据准备好了,而且又再次收到了用户进程的system call,那么它立刻就将数据拷贝到了用户内存,而后返回。
八、同步和异步
所谓同步就是一个任务的完成须要依赖另一个任务时,只有等待被依赖的任务完成后,依赖的任务才能算完成,这是一种可靠的任务序列
。要么成功都成功,失败都失败,两个任务的状态能够保持一致。
所谓异步是不须要等待被依赖的任务完成,只是通知被依赖的任务要完成什么工做,依赖的任务也当即执行,只要本身完成了整个任务就算完成了
。至于被依赖的任务最终是否真正完成,依赖它的任务没法肯定,因此它是不可靠的任务序列
。
九、一行代码实现九九乘法表
for i in range(1,10): for j in range(1,i+1): print('{}*{}={}'.format(j,i,i*j) ,end=' ') print('\n',end='')
ret ='\n'.join([ ' '.join(['{}*{}={}'.format(y,x,x*y) for y in range(1,x+1) ]) for x in range(1,10) ]) print(ret)
十、类的继承
十一、*args和**kwargs
*args能够传递任意数量的的位置参数,以元组的形式存储
**kwargs能够传递任意数量的关键字参数,以字典的形式存储
*args和**kwargs能够同时定义在函数中,但必须*args放在**kwargs前面
def foo(*args,**kwargs): print('*args',*args,) print('args',args) print('kwargs',kwargs) foo(1,x=1,**{'name':'dog'}) 结果 *args 1 args (1,) kwargs {'x': 1, 'name': 'dog'}
12 、lambda函数
lambda函数比较方便,匿名函数,通常用来给filter,map这样的函数式编程服务,做为回调函数传递给某些应用,好比消息处理
1三、装饰器
def outer(func,*args): def inner(*args): print('先洗苹果') ret = func() print('吃完了') return ret return inner @outer def eat(): print('吃苹果') eat()
装饰器的本质:装饰器 = 高阶函数 + 函数嵌套 + 闭包
高阶函数:把函数当作参数传给另一个函数,返回值中包含函数。
装饰器的功能:就是在不改变原函数的调用方式的状况下,在这个函数的先后加上扩展功能
1四、做用域
一、做用域即范围:全局范围(内置名称空间和全局名称空间属于该范围):全局存活,全局有效 局部范围(局部名称空间属于该范围):临时存活,局部有效
二、做用域关系是在函数定义阶段就已经固定的,与函数调用的位置无关
三、查看做用域 :globals()全局变量,locals()局部变量
当 Python 遇到一个变量的话他会按照这样的顺序进行搜索:
本地做用域(Local)→当前做用域被嵌入的本地做用域(Enclosing locals)→全局/模块做用域(Global)→内置做用域(Built-in)
1五、闭包函数
定义:若是在一个内部函数里,对在外部做用域(但不是在全局做用域)的变量进行引用,那么内部函数就被认为是闭包
建立一个闭包必须知足如下几点:
def foo(): name = 'foo' def inner(): print(name) return inner ret = foo() ret()
1六、cookies和session的区别
cookie的由来 :因为http请求是没有状态的,每次请求都是独立的。
什么是cookie:就是服务端设置而后保存在浏览器上的字符串、键值对
服务端控制着响应,在想盈利可让浏览器在本地保存cookie键值对,下一次请求时携带这个cookie值。
cookie的应用:一、登陆,七天免登陆。二、记录用户浏览器习惯。3.简单的投票限制。
session是保存在字典里的键值对,必须依赖于cookie。
优点,相对于cookie安全,存数据多,可是占用资源。
1七、Django中的MTV分别表明什么:
M表明什么model(模型):负责业务对象和数据对象
T表明Template(模板):负责如何把页面展现给用户
V表明Views(视图):负责业务逻辑,并在适当的时候调用model和template
1八、什么是同源策略
同源策略是一种约定,它是浏览器最核心也是最基本的安全功能,若是缺乏同源策略,则浏览器的正常功能都会受到影响,能够说web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。
所谓同源是指,域名,协议,端口相同。
1九、jsonp
jsonp是json用来跨域的一个东西,原理是经过script标签的跨域特性来绕过同源策略
jsonp必定是GET请求
20、ajax经常使用的参数
URL:发送请求的地址
data:发送到服务器的数据,当前ajax请求要携带的数据,是一个json的object对象,ajax方法就会默认地把它编码成某种格式
processdata:生命当前data数据是否进行转码或者预处理,默认为True
contentType:默认值“application/x-www-form-urlencoded”,发送请求至服务器时内容编码类型,用来指明当前请求的数据编码格式,若是想以其余方式提交数据,即向服务器发送一个json字符串traditional:通常默认为True,通常是咱们的data数据有数组时会用到 :data:{a:22,b:33,c:["x","y"]},traditional为false会对数据进行深层次迭代;
2一、csrf
{% csrf_token %}
Django中内置了一个专门处理csrf问题的中间件
一、在render返回页面的时候,在页面塞了一个隐藏的input标签,
二、在提交post数据的时候,进行校验,若是校验不经过就拒绝此次请求。
2二、数据库mysql知识点
mysql是基于一个socket编写的C/S架构的软件
视图:用户建立的一张虚拟表,用户只须要使用其名称便可获取结果,只能够作查询用。
触发器:对某张表进行增删改查时,对操做先后自定义操做。
存储过程:为了完成特定功能的sql语句集,进过编译后存储在数据库中,用户经过制定存储过程的名字并制定参数来调用存储过程。
存储过程的优势:
a、用于替代程序写sql语句,实现程序与sql的解耦
b、基于网络传输,传别名的数据量小,而直接传sql的数据量大
事务:事务用于将某些操做的多个SQL做为原子性操做,一旦有某一个出现错误,便可回滚到原来的状态,从而保证数据库数据的完整性
mysql的数据基本类型:
a、数值类型:整数类型,浮点型,位类型,
b、日期类型
c、字符串类型:char类型(固定长度),varchar类型(可变长度)
d、枚举类型(enum)和集合类型(set)
枚举类型(enum):单选,只能在给定的范围选一个值
集合类型(set) :多选,在给定的范围内选一个或者一个以上的值
2二、生成器、迭代器和可迭代对象区别和应用?
生成器:1. 列表生成式的[ ]改成( ) 2. 函数中包含yield 3.生成器能够节省内存 4.生成器就是迭代器的一种
迭代器:可迭代对象执行obj.__iter__()获得的结果就是迭代器对象
为什么要有迭代器?
对于序列类型:字符串、列表、元组,咱们可使用索引的方式迭代取出其包含的元素。但对于字典、集合、文件等类型是没有索引的,若还想取出其内部包含的元素,则必须找出一种不依赖于索引的迭代方式,这就是迭代器
可迭代对象:可迭代对象指的是内置有__iter__方法的对象
23、with 上下文机制原理?
上下文管理器是能够在with语句中使用,拥有__enter__和__exit__方法的对象。
# coding:utf-8 class Foo(): def __enter__(self): print('开始了') def __exit__(self, exc_type, exc_val, exc_tb): print('结束了') obj = Foo() with obj: print('我在中间')
24、staticmethod、classmethod,property
@property属性方法,仅有一个self参数,调用时不用加()。
@classmethod把一个方法变成类方法,不须要依托任何对象,当一个方法只使用了累的静态方法是,就给这个方法加上,默认传cls参数
@staticmethod在彻底面向对象的过程当中,若是一个函数既和对象没有关系,也和类没有关系,那么就用@staticmethod,将这个函数变成一个静态方法。类方法和静态方法都是类调用,类方法有一个默认参数cls,表明这个类,静态方法没有默认参数,就像函数同样。
class Foo(): @classmethod def eat(cls): print('吃屎') @property def play(self): print('打篮球') @staticmethod def get(): print('name is dog') Foo.eat() Foo.get() obj = Foo() obj.play