复习总结

1、and或or复习总结:

Python中的and从左到右计算表达式,若所有的值均为真,则返回最后一个值,若存在假,返回第一个假值

or也是从左到右计算表达式,返回第一个为真的值

2、描述Python中GIL的概念复习总结:

GIL:全局解释器锁,每一个线程在执行的过程都需要先获取GIL,保证同一时刻只有一个线程可以执行字节码。

3、Python中单引号,双引号,三引号的区别总结复习:

单引号:单引号中可以使用使用双引号,中间会当字符串输出,    

双引号:双引号中可以使用单引号,中间会当字符串输出,

三单引号,和三双引号中间的字符串,在输出是保持原来的格式

4、is和==的区别复习总结:

Python中包含三个基本元素:ID(身份标识),type(数据类型),value(值)

其中ID用来唯一标识一个对象,type标识对象类型,value标识对象的一个值

is判断的是a对象是否就是b对象,是通过ID来判断

==判断的是a对象的值是否和b对象的值相等,是通过value来判断

5、可变对象和不可变对象的复习总结:

元组(tupe),数值型(number),字符串(string)均为不可变对象

字典(dict),列表(list)是可变对象

6、PEP8编码规范复习总结:

1、代码编排:缩进,4个空格的缩进。最大长度79,换行可以使用反斜杠

2、文档编排。。。。

3、空格的使用:各种括号前不要加空格,逗号,分号,冒号前不要加空格,

4、注释:块注释,在一段代码前增加的注释。在‘#’后加一空格。段落之间以只有‘#’的行间隔,如:

# Description : Module config.
# 
# Input : None
#
# Output : None

5、文档描述

6、字符串不要以空格收尾

7、osi七层协议复习总结:

互联网协议按照功能不同分为osi七层或tcp/ip五层或tcp/ip四层

8、TCP与UDP的复习总结:

TCP:TCP是基于链接的,必须先启动服务端,然后在启动客户端去链接服务端(TCP有粘包现象)

UDP:UDP是无连接的,先启动那一端都不会报错(UDP没有粘包现象)

9、阻塞IO与非阻塞IO 总结复习:

IO阻塞:资源不可用是IO 请求一直阻塞,直到反馈结果

非阻塞IO:资源不可用时IO 请求离开返回,返回数据标识,资源不可用

10、同步IO 与异步IO复习总结:

同步IO :应用阻塞在发送和接受数据的状态,直到数据传输成功或返回失败

异步IO :应用发送或者接受数据立刻返回,数据写入OS 缓存,有OS完成数据的发送和接受,并返回成功和失败的信息给应用

11、网络编程中三次握手,四次挥手复习总结:

首先由服务端,和客户端。服务端先进行初始化Socket,在端口进行监听,等待客户端的连接,在这时,如果有客户端初始化socket,然后就开始连接服务端,如果连接成功,

这时客户端与服务端的连接就建立了,客户端发送数据请求,服务端就开始接受并处理请求,然后把回应数据发送个客户端,客户端读取数据,最后关闭连接。

12、一行代码实现九九乘法表的复习总结:

print('
'.join([ ' '.join( [ '{}*{} = {}'.format(x,y,x*y) for y in range(1,x+1)] ) for x in range(1,10)]) )

13、函数的复习总结:

函数分为:

              1、内置函数:Python解释器已经为我们定义好的函数成为内置函数

              2、自定义函数:内置函数为我们提供的功能是有限的,这就需要我们根据自己的需求,定制好我们自己的函数来实现某种功能。以后,在遇到应用场景是,调用自定义的函数即可

函数调用的规则:先定义,在调用

定义函数的三种形式:

             1、无参:定义时没有参数,意味着调用的时候无需传入参数

             2、有参:定义的时候有参数,意味调用的时候必须传入参数

             3、空函数

函数的调用:函数名加括号(先找到自己的名字,根据自己的名字调用代码)

函数返回值:

            1、无return                    返回None

            2、return1个值              返回一个值

            3、return逗号多个值     返回多个值

14、函数的参数复习总结:

            1、位置参数:按照从左到右的顺序依次定义参数

                                      a、位置形参:必选参数

                                      b、位置实参:按照位置给形参传值

            2、关键字参数:按照key=value的形式定义实参(无需按照位置为形参传值)

                注意的问题:a、关键字实参必须在位置实参右面

                                      b、对同一个形参不能重复传值

           3、默认参数:形参在定义的时候就已经为其赋值(可以传值也可以不传值)

               注意的问题: a、只在定义时赋值一次

                                      b、默认参数的定义应该在位置形参右面

                                      c、默认参数通常应该定义成不可变类型

           4、可变长参数:可变长参数指的是实参值得个数不固定(存放可变长参数的分别是:*args,**kwargs)

           5、命名关键字参数:*后定义的参数,必须被传值(有默认值除外),且必须按照关键字实参的形式传递     

内置函数的复习总结:内置函数的ID()可以返回一个对象的身份,返回值为整数。内置函数type()则返回一个对象类型

面向对象的复习总结:

          1、面向过程的核心设计是 过程,过程值得是:解决问题的步骤

          2、 面向过程的优点:极大的降低了程序的复杂度,只需要顺着要执行的步骤,堆叠代码即可

          3、面向过程的缺点:一套流水线或者流程就是来用来解决一个问题,代码牵一发而动全身

          4、面向对象的核心设计是对象,

15、面向对象的三大特性:

   一、继承:

          1、继承:是一种创建新类的方式,在Python中,新建的类可以继承一个个或多个父类,父类又称为基类或者超类,新建的类称为派生类或者子类

          2、Python中类的继承分为:单继承或多继承

          3、继承的两种用途:

                      a、继承基类的方法,并且做出自己的改变或者扩展,

                      b、声明某个子类兼容于某基类,定义一个接口类Interface,接口类中定义了一些接口名(就是函数名)且并未实现接口的功能,子类继承接口类,并且实现接口中的功能

         4、继承的顺序:

                      a、Python的类如果继承了多个类,那么其寻找方法的方式有两种,分别是:深度优先或广度优先

         5、继承的作用:

                     a、减少代码的重用

                     b、提高代码的可读性

                     c、规范编程模式

 二、封装:

         ----将同一类的方法和属性封装到类中

         ----将数据封装到对象中

         1、隐藏对象的属性和实现细节,仅对外提供公共方式

         2、封装的好处:

                    a、将变化隔离

                    b、便于使用

                    c、提高复用性

                    d、提高安全性

         3、封装原则

                    a、将不需要对外提供的内容都隐藏起来

                    b、把属性都隐藏,提供公共的方法对其访问

 三、多态

      ----多态指:一类事物有多种形态

类的内置方法复习总结:

     __call__(在那用过,单例模式,用类做装饰器,Flask源码中用过__call__方法)

     __new__(在那用过,单例模式,自定义Form验证,wtforms源码,Django rest-framework中序列化源码用过)

     __init__

    __del__

    __iter__(在那用过,对象要被for循环,stark组件组合搜索中用过)

    __getattr__(在那用过,Flask源码,自定义的‘本地线程’,local,rest-framework request中取值中用过)

    __getitem__(在那用过,Session源码中用过)

    __dict__(在那用过,自定义form)

    __add__(在那用过,

                           data = obj1 + obj2
                            # obj1.__add__(obj2))

    __metaclass__(在那用过,wtforms源码中用过)

16、*args和**kwargs的复习总结:

*args可以传递任意数量的的位置参数,以元组的形式存储

**kwargs可以传递任意数量的关键字参数,以字典的形式存储

*args和**kwargs可以同时定义在函数中,但必须*args放在**kwargs前面

17、什么是lambda函数,它的好处复习总结:

通常是在需要一个函数,但是有的去命名一个函数的场合下使用,也就是匿名函数

lambda的好处:lambda函数比较方便,匿名函数,一般用来给filter,map这样的函数式编程服务,作为回调函数传递给某些应用,比如消息处理

18、装饰器的的复习总结:

装饰器的本质:闭包函数

装饰器的功能:就是在不改变原函数的调用方式的情况下,在这个函数的前后加上扩展功能

装饰器的开放封闭原则:1、对扩展是开放的   2、对修改是封闭的

装饰器的固定方式:

def timer(func):
    def inner(*args,**kwargs):
        '''执行函数之前要做的'''
        re = func(*args,**kwargs)
        '''执行函数之后要做的'''
        return re
    return inner

19、迭代器的复习总结:

1、可迭代:字符串,列表,集合、字典、元组这些都可以被for循环,说明他们是可迭代的

2、迭代就是:将某个数据集内的数据一个挨一个的取出来,就叫做可迭代

3、可迭代的标志:_iter_

4、迭代协议:希望这个数据类型里的东西也可以使用for循环被一个一个的取出来那我们就必须满足for的要求,这个要求就叫做协议

5、可迭代协议:凡是可迭代的内部都有__iter__方法

6、迭代器协议:内部实现了__iter__,__next__方法(迭代器里面既有__iter__方法,又有__next__方法)

7、迭代器:通过iter得到的结果就是一个迭代器(迭代器大部分都是在Python的内部去使用,我们直接拿来用就可以了,它的内置有__iter__,和__next__方法)

8、迭代器遵循迭代器协议:必须有__iter__和__next__方法

9、不管是迭代器还是可迭代对象,都可以被for循环遍历。迭代器的出现的原因是帮你节省内存

10、迭代器和可迭代的相同点:都可以被for循环

11、迭代器和可迭代的不同点:迭代器多实现了一个__next__方法

12、判断可迭代和迭代器的方法:1、判断内部是不是实现了__next__方法 2、用 Iterable(可迭代),Iterator(迭代器) 来判断

20、生成器的复习总结:

1、生成器函数:常规函数定义,使用yield语句而不是return语句返回结果,函数内部有yield关键字,那么函数名()得到的结果就是生成器,并且不会执行函数内部代码(生成器就是迭代器)

2、生成器表达式:类似于列表推导,但是生成器返回按需产生结果的一个对象,而不是一次构建一个结果列表

3、列表推导式:

l =[i*i for i in range(100)]
print(l)

21、作用域复习总结:

1、作用域即范围:全局范围(内置名称空间和全局名称空间属于该范围):全局存活,全局有效      局部范围(局部名称空间属于该范围):临时存活,局部有效

2、作用域关系是在函数定义阶段就已经固定的,与函数调用的位置无关

3、查看作用域 :globals()全局变量,locals()局部变量

22、闭包复习总结

1、什么是闭包:内部函数包含对外部作用域而非全局作用域的引用

2、闭包的意义与应用:

                               1、闭包的意义:返回的函数对象,不仅仅是一个函数对象,在该函数外还包裹一层作用域,这使得,该函数无论在何处调用,

                                                          有先使用在外层函数包裹的作用域

                               2、应用   领域:在延迟计算

23、Cookie和Session的区别、优缺点

1、cookie数据存放在客户的浏览器上,session数据放在服务器上。 
2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗 
考虑到安全应当使用session 
3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能 
考虑到减轻服务器性能方面,应当使用COOKIE 
4、单个cookie在客户端的限制是3K,就是说一个站点在客户端存放的COOKIE不能3K。

24、cookies和session的区别复习总结:

cookies的数据是放在客户的浏览器上的,session的数据是放在服务器上的

25、http协议总结复习:

http是一个基于TCP/IP通信协议来传递数据,HTTP是一个属于应用层的面向对象的协议,HTTP协议工作于客户端-服务端架构为上。

HTTP响应有四个部分组成,分别是:状态行,消息报头,空行和响应正文

请求头和请求体分割:

请求体:

GET无请求体

请求头代表的意义:user-agent:来源,referer:防盗链,context-type:请求体是什么格式

26、post与get的区别复习总结:

根据http协议规范,get一般用于获取/查询资源信息,而post一般用于更新资源信息

get是在URL中传送数据,数据放在请求头上,post是在请求体上传送数据

27、视图函数包含两个对象的复习总结:

request:------>请求信息

HttpResponse:----->响应字符串

28、request包含哪些数据的复习总结:

request.GET:GET请求的数据()

request.POST:POST请求的数据()

request.method:请求的方式:POST或GET

键值对的值是多个的时候,比如:chexbox类型,select类型,需要用:request.POST.getlist()

29、django中模板语法变量复习总结:

在Django模板中遍历复杂数据结构的关键字是句点符:.

如果字符串多余指定的数量,那么会被截断,截断的字符串将以可翻译的省略号序列("...")结尾用truncatechars,如:{{value|truncatechars:9}

如果一个变量为空或者false,使用给定的默认值,否则使用变量的值,如:{{li|default:"nothing"}}

循环序号可以用{{forloop}}显示:

forloop.counter0 从0开始

forloop.revcounter0 反向从直到0

forloop.revcounter 反向开始

对象可以调用自己的属性

30、Django的生命周期复习总结:

wsgi -->中间件-->路由-->视图-->(数据,模板)

渲染工作在Django中执行完成后,字符串返回给浏览器

但是js,css额外再发一次请求仅仅获取静态文件

31、在Django中对比render与redirect复习总结:

render:只是返回页面内容,但是末发送请求

redirect:发送了第二次请求,URL更新

32、Django中的MTV分别代表什么:

M代表什么model(模型):负责业务对象和数据对象

T代表Template(模板):负责如何把页面展示给用户

V代表Views(视图):负责业务逻辑,并在适当的时候调用model和template

33、Django之缓存复习总结

由于Django是动态网站,所有每次请求均会去数据进行相应的操作,当程序访问量大时,耗时必然会更加明显,最简单解决方式是使用:缓存,缓存将一个某个views的返回值保存至内存或者memcache中,5分钟内再有人来访问时,则不再去执行view中的操作,而是直接从内存或者Redis中之前缓存的内容拿到,并返回。

Django中提供了6种缓存方式:

  • 开发调试
# 此为开始调试用,实际内部不做任何操作
    # 配置:
        CACHES = {
            'default': {
                'BACKEND': 'django.core.cache.backends.dummy.DummyCache',     # 引擎
                'TIMEOUT': 300,                                               # 缓存超时时间(默认300,None表示永不过期,0表示立即过期)
                'OPTIONS':{
                    'MAX_ENTRIES': 300,                                       # 最大缓存个数(默认300)
                    'CULL_FREQUENCY': 3,                                      # 缓存到达最大个数之后,剔除缓存个数的比例,即:1/CULL_FREQUENCY(默认3)
                },
                'KEY_PREFIX': '',                                             # 缓存key的前缀(默认空)
                'VERSION': 1,                                                 # 缓存key的版本(默认1)
                'KEY_FUNCTION' 函数名                                          # 生成key的函数(默认函数会生成为:【前缀:版本:key】)
            }
        }


    # 自定义key
    def default_key_func(key, key_prefix, version):
        """
        Default function to generate keys.

        Constructs the key used by all other methods. By default it prepends
        the `key_prefix'. KEY_FUNCTION can be used to specify an alternate
        function with custom key making behavior.
        """
        return '%s:%s:%s' % (key_prefix, version, key)

    def get_key_func(key_func):
        """
        Function to decide which key function to use.

        Defaults to ``default_key_func``.
        """
        if key_func is not None:
            if callable(key_func):
                return key_func
            else:
                return import_string(key_func)
        return default_key_func
View Code
  • 内存
# 此缓存将内容保存至内存的变量中
    # 配置:
        CACHES = {
            'default': {
                'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
                'LOCATION': 'unique-snowflake',
            }
        }

    # 注:其他配置同开发调试版本
View Code
  • 文件
# 此缓存将内容保存至文件
    # 配置:

        CACHES = {
            'default': {
                'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
                'LOCATION': '/var/tmp/django_cache',
            }
        }
    # 注:其他配置同开发调试版本
View Code
  • 数据库
# 此缓存将内容保存至数据库

    # 配置:
        CACHES = {
            'default': {
                'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
                'LOCATION': 'my_cache_table', # 数据库表
            }
        }

    # 注:执行创建表命令 python manage.py createcachetable
View Code
  • Memcache缓存(python-memcached模块)
# 此缓存使用python-memcached模块连接memcache

    CACHES = {
        'default': {
            'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
            'LOCATION': '127.0.0.1:11211',
        }
    }

    CACHES = {
        'default': {
            'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
            'LOCATION': 'unix:/tmp/memcached.sock',
        }
    }   

    CACHES = {
        'default': {
            'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
            'LOCATION': [
                '172.19.26.240:11211',
                '172.19.26.242:11211',
            ]
        }
    }
View Code
  • Memcache缓存(pylibmc模块)
# 此缓存使用pylibmc模块连接memcache
    
    CACHES = {
        'default': {
            'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache',
            'LOCATION': '127.0.0.1:11211',
        }
    }

    CACHES = {
        'default': {
            'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache',
            'LOCATION': '/tmp/memcached.sock',
        }
    }   

    CACHES = {
        'default': {
            'BACKEND': 'django.core.cache.backends.memcached.PyLibMCCache',
            'LOCATION': [
                '172.19.26.240:11211',
                '172.19.26.242:11211',
            ]
        }
    }
View Code

34、什么是同源策略复习总结:

同源策略是一种约定,它是浏览器最核心也是最基本的安全功能,如果缺少同源策略,则浏览器的正常功能都会受到影响,可以说web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。

所谓同源是指,域名,协议,端口相同。

35、jsonp的复习总结:

jsonp是json用来跨域的一个东西,原理是通过script标签的跨域特性来绕过同源策略

jsonp一定是GET请求

36、js作用域的复习总结:

js作用域(全局变量,局部变量)内部可以访问外部,但外部不能访问内部

37、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会对数据进行深层次迭代;

38、数据库的复习总结:

1、数据库的存储过程:存储过程包含一些列可执行的sql语句,存储过程存放于MYSQL,通过调用它的名字可以执行其执行内部的一堆sql

2、存储过程的优点:

              a、用于替代程序写sql语句,实现程序与sql的解耦

              b、基于网络传输,传别名的数据量小,而直接传sql的数据量大

3、触发器:使用触发器可以定制用户对表进行【增,删,改】操作是前后的行为,注意,没有查询。

4、事务:事务用于将某些操作的多个SQL作为原子性操作,一旦有某一个出现错误,即可回滚到原来的状态,从而保证数据库数据的完整性

5、索引本质:通过不断缩小想要获取的数据的范围来筛选出最终想要的结果,同时吧随机事件变成顺序事件,,也就是说,有了这种索引机制,我们总是用同一种方式来锁定数据

6、mysql常用的索引:

              a、普通索引:加速查找

              b、唯一索引:加速查找+约束(不能重复)

              c、主键索引:加速查找+约束(不能为空,不能重复)

              d、联合索引:

                            -PRIMARY KEY(id,name):联合主键索引

                            -UNIQUE(id,name):联合唯一索引           

              -INDEX(id,name):联合普通索引

7、使用索引

     a、索引末命中

     b、索引命中

8、数据库创建表

   a、数据库文件夹的操作

create database db1           增加文件夹
show databases 查看所有数据库
show create database db1 查看db1文件夹
drop database db1 删除db1文件夹

   b、操作文件

use db1                     切换文件夹
c 取消命令
create table t1(id int,name char(10);) 创建表
show table 查看当前下的所有表
show create table t1 查看表
alter table t1 add age int 增加字段
desc t1 查看表结构
drop table t1 删除表结构

    c、操作文件的一行行内容

insert into db1.t1 values(1,'mqj'),(2,'mqj1')     增加记录
select * from t1 查看所有字段对应的值
select * from t1 where id > 2 查看id大于2 的字段
select name from t1 查看单个字段
update t1 set name='SB' where id=3 改里面的记录
delect from t1 where id=3 删除一条记录
truncate t1 整体删除

 9、mysql是什么

mysql是基于一个socket编写的C/S架构的软件

10.mysql的数据基本类型:

       a、数值类型:整数类型,浮点型,位类型,

       b、日期类型

    c、字符串类型:char类型,varchar类型

       d、枚举类型(enum)和集合类型(set)

              枚举类型(enum):单选,只能在给定的范围选一个值

              集合类型(set)    :多选,在给定的范围内选一个或者一个以上的值

39、redis和memecache的不同在于: 

1、存储方式: 
memecache 把数据全部存在内存之中,断电后会挂掉,数据不能超过内存大小 
redis有部份存在硬盘上,这样能保证数据的持久性,支持数据的持久化(笔者注:有快照和AOF日志两种持久化方式,在实际应用的时候,要特别注意配置文件快照参数,要不就很有可能服务器频繁满载做dump)。 
2、数据支持类型: 
redis在数据支持上要比memecache多的多。 
3、使用底层模型不同: 
新版本的redis直接自己构建了VM 机制 ,因为一般的系统调用系统函数的话,会浪费一定的时间去移动和请求。 
4、运行环境不同: 
redis目前官方只支持LINUX 上去行,从而省去了对于其它系统的支持,这样的话可以更好的把精力用于本系统 环境上的优化,虽然后来微软有一个小组为其写了补丁。但是没有放到主干上

40、redis的数据类型复习总结

redis有五大数据类型:字符串,哈希,列表,集合,有序集合



原文地址:https://www.cnblogs.com/mengqingjian/p/8527605.html