flask面试


flask里面的request,session是什么时候创建的?是什么时候销毁的

当请求刚进来的时候回将他两个封装成requestContext()对象,封装之后通过localstack放入local对象中,ctx的session是空的,下一步执行open_session,把cookie重新赋值到ctx里面去,最后返回执行save_session将ctx的session做修改,最后移除save_session

1628503605249.png

flask中有几个local对象:永远只有两个

自己写一个类+列表的技术栈

技术栈应用:flask里面的LocalStack就是基于栈实现的

Python基础部分那些比较重要?
  • 反射
    • cbv
    • django配置文件
    • wtform中
  • 装饰器
    • flask路由\装饰器
    • 认证
    • csrf
  • 生成器、迭代器
  • 面向对象
    • 封装继承多态(简单,一两句概括)
    • 特殊功能
      • 双下划线方法
        • __mro__:找到当前类,寻找属性的顺序
        • __dict__:执行dict、是拿里面的全部
        • __new__:实例化但没有给当前类对象
        • __call__:flask请求入口
        • __iter__:循环所有字段
      • metaclass:指定类由那个类创建,默认type
        • 场景:在类创建之前定制操作
        • 示例:wtform中,对字段进行排序
为什么要学python?
  • 学长建议
  • 自己了解:
    • 简单易学,生态圈强大(不局限应用面),发展趋势好(人工智能,数据分析)
谈谈你对python和其他语言的区别?
  • 解释性
    • python/php
  • 编译型
    • java/c#
  • Python弱类型
数据类型:
  • 字符串、列表、元组、字典每个常用的5个方法?

    1. 字符串:
      1. 1,find通过元素找索引,可切片,找不到返回-1
      2. 2,index,找不到报错。
      3. *3,split 由字符串分割成列表,默认按空格。
      4. 4,captalize 首字母大写,其他字母小写。
      5. ,upper 全大写。
      6. ,lower 全小写。
      7. title,每个单词的首字母大写。
      8. startswith 判断以什么为开头,可以切片,整体概念。
      9. endswith 判断以什么为结尾,可以切片,整体概念。
      10. format格式化输出
    2. 字典:
      1. key: 输出所有的键
        clear:清空
        dic:删除的键如果没有则报错
        pop:键值对删,有返回,没有原来的键会报错(自行设置返回键就不会报错)
        popitem:随机删键值对
        del:删除的键如果没有则报错
        改 update
    3. 列表:
      1. append:在后面添加。
        Insert按照索引添加,
        expend:迭代着添加。
        list.extend(seq) - 在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
        pop 删除 (pop 有返回值)
        remove 可以按照元素去删
        clear 清空列表
    4. 元组
      1. 1、cmp(tuple1, tuple2):比较两个元组元素。
        2、len(tuple):计算元组元素个数。
        3、max(tuple):返回元组中元素最大值。
        4、min(tuple):返回元组中元素最小值。
        5、tuple(seq):将列表转换为元组。、
    函数(必问)
  • 函数参数传递的是什么? ——————引用

  • def func(a,b=[]):pass

    • 函数的第二个默认参数是一个list,当第一次执行的时候实例化了一个list,第三次执行还是用第一次执行的时候实例化的地址存储,所以第一和第三次执行的结果就是相同的,想每次执行只输出当前传入参数 ,默认参数应该设置为None。
  • lambda 表达式

  • 列表生成式 [i for i in range(1)]

  • 生成器表达式 (for i in range(1))

迭代器、生成器、装饰器、可迭代对象(必问)
  • 迭代器:内部实现__next__方法,帮助我们向后一个一个取值。一步一步往前迭代,到相应位置停止,for循环底层依赖迭代器

  • 生成器:一个函数内部存在yield关键字;v = 函数(),v是生成器,不会一次创建,而是一次一次创建

    • 一种特殊的迭代器,底层依赖迭代器
    • 应用场景:range、xrange
      • py2:range(1000)立即创建;xrange(1000)生成器
      • py3:range(1000)生成器
  • 可迭代对象:内部实现__iter__方法且返回一个迭代器

  • class Xx():
         def __iter__(self):
                return iter([11,22,33])
    obj = Xx()        
    
    • 应用场景:
      • wtform中对form对象进行循环时,显示里面的所有字段
      • 列表,元组、字典
      • 总结:如果想要让一个对象可以被for循环,那么就需要在当前类中定义__iter__方法
  • 装饰器:在不改变原函数的代码的基础上,在执行前后进行定制操作

    • 手写:

    • def wapper(func):
          def inner(*args,**kwargs):
              return func(*args,**kwargs)
          return inner
      
      @wapper
      def index(s):
          return s+100
      print(index(10))
      
    • 应用场景:

      • flask路由系统
      • flask before_request
      • csrf
      • django内置认证
      • django缓存
方法函数区别
class Foo(object):
    def fench(self):
        pass
    
    
    
Foo.fench()  #函数

obj = Foo()  #实例化
obj.fench()  #方法
通过类直接调用的是函数
通过实例化对象调用的是方法

对于一个类里面的东西到底是函数还是方法取决于谁调用


文章作者: Kexuan Shi
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Kexuan Shi !
评论
  目录