知识点七

scrapy框架的基本调用方式
    命令行创建爬虫:scrapy startproject youyuan
    命令行创建爬虫:scrapy genspider -t crawl yy 'youyuan.com'
    爬虫名不能跟项目名相同
    运行爬虫:scrapy crawl yy(爬虫名)
    分布式爬虫运行:scrapy runspider yy.py(爬虫文件名)
    分布式发送指令 lpush yyspider:start_urls + 起始网址
with一个对象执行该对象的__enter__方法然后执行__exit__方法,这两个方法需要配合使用。
python的默认解析式html.parser
成员修饰符
    私有属性只能在自己内部直接调用,如果要在外部或者子类中调用方式为_Foo__age_
3. Local的作用?
                类似于threading.local的作用,但是是他的升级版(greentlet.get_current())
                __storage__ = {
                    1231: {},
                    1231: {}
                }
4. LocalStack作用?
                将Local中__storage__的值维护成一下结构:
                __storage__ = {
                    1231: {stack:[],},
                    1231: {stack:[],}
                }

5. 为什么导入request,就可以使用?
                每次执行request.xx方法时,会触发LocalProxy对象的__getattr__等方法,由方法每次动态的使用
                LocalStack去Local中获取数据。               
6.如何学的?
                - 网上找一些博客学习
                    - 春生博客
                - 官方文档
                - 源码
7.flask使用的组件?
    扩展:
            1. flask-session 
            2. DBUtils
            3. wtforms
            4. sqlalchemy
8. metaclass相关
            - 默认类时有谁创建:type创建
            - 类创建2中方式:
                class Foo:pass 
                type('Foo',(object,),{})
            - 执行创建类的mytype
                class Foo(metaclass=MyType):
                    # __metaclass__ = MyType
                    pass 
                
                MyType('Foo',(object,),{})
            - 源码
                如果类以基类中未指定metaclass:
                    - __new__
                    - __init__
                如果类以基类中指定metaclass:
                    - 创建类
                        MyType.__init__ 
                    - 创建对象 
                        MyType.__call__ 
                            - __new__
                            - __init__
9. 令你印象深刻的事(好神奇)。
            class Foo(object):
                def __init__(self,name,age):
                    self.name = name
                    self.__age = age

                def func(self):
                    print(self.__age)

            obj = Foo('oldboy',50)
            print(obj.name)
            print(obj._Foo__age)
            
            PS:私有字段子类中也不能访问
10.索引实现原理
            - B+ tree 
            - hash
11.无法命中索引
            - like
            - 函数 
            - >
            - !=
            - group by 
            - or 
12. 数据库优化方案
            - 避免使用select * 
            - 固定长度在前面
            - 内存代替表,如:性别等
            - 读写分离
            - 分库
            - 分表
                - 水平分表
                - 垂直分表
            - 命中索引
            - 组合索引代替索引合并
            - 尽量使用短索引
            - 如果取一条数据时,使用limit 1
                select id,name from tb where name ='alex' limit 1;
            - 使用连接(JOIN)来代替子查询(Sub-Queries)
            注意:char/varchar区别

 

posted @ 2018-06-22 21:10  liang哥哥  阅读(89)  评论(0)    收藏  举报