面试题

a. 为什么要学python?
    - 亲朋/学长 建议
    - 了解:
        - 简单易学
        - 生态圈比较强大
        - 发展趋势:人工智能、数据分析
b. 谈谈你对Python和其他语言的区别?
    - 解释型
        - python/php
    - 编译型
        - c/java/c#
    
    - Python弱类型
    
    
c. 数据类型:
    - 字符串
    - 字典
    - 元组
    - 列表
    - 集合
    - collections
d. 函数
    - 函数参数传递的是什么?
    - def func(a,b=[]):pass
    - lambda 表达式
    - 列表生成式   []
    - 生成器表达式 (for i in range(1))
    - 题: 
        val = [lambda :i+1 for i in range(10)]
        val[0]
        data = val[0]()
        print(data)
    - 常见内置函数:
        - map
        - reduce
        - filter
        - zip
        - instance
        - type
        - 
    - 生成器、迭代器、装饰器、可迭代对象
        - 迭代器,内部实现__next__方法,帮助我们向后一个一个取值。
        - 生成器,一个函数内部存在yield关键字;v = 函数()。
                  应用场景:
                        - range/xrange
                            - py2: range(100000000),立即创建;xrange(100000000)生成器;
                            - py3: range(100000000)生成器;
                        - redis获取值
                            conn = Redis(...)
                            
                            def hscan_iter(self, name, match=None, count=None):
                                """
                                Make an iterator using the HSCAN command so that the client doesn't
                                need to remember the cursor position.
                                ``match`` allows for filtering the keys by pattern
                                ``count`` allows for hint the minimum number of returns
                                """
                                cursor = '0'
                                while cursor != 0:
                                    # 去redis中获取数据:12
                                    # cursor,下一次取的位置
                                    # data:本地获取的12条数数据
                                    cursor, data = self.hscan(name, cursor=cursor,
                                                              match=match, count=count)
                                    for item in data.items():
                                        yield item
                        - stark组件
                            xx.html:
                                {% for item in data %}
                                    <p>{{item.k1}} {{item.name}}</p>
                                {%endfor%}

                            views.py
                                def index(request):
                                    data = [
                                        {'k1':1,'name':'alex'},
                                        {'k1':2,'name':'老男孩'},
                                        {'k1':3,'name':'小男孩'},
                                    ]
                                    
                                    new_data = []
                                    for item in data:
                                        item['email'] = "xxx@qq.com"
                                        new_data.append(item)
                                    return render(request,'xx.html',{'data':new_data})
                                    
                            # ##################################################################
                            xx.html:
                                {% for item in data %}
                                    <p>{{item.k1}} {{item.name}}</p>
                                {%endfor%}

                            views.py
                                def gen_data(data):
                                    for item in data:
                                        item['email'] = "xxx@qq.com"
                                        yield item 
                                def index(request):
                                    data = [
                                        {'k1':1,'name':'alex'},
                                        {'k1':2,'name':'老男孩'},
                                        {'k1':3,'name':'小男孩'},
                                    ]
                                    
                                    new_data = gen_data(data)
                                    
                                    return render(request,'xx.html',{'data':new_data})
                        
        - 可迭代对象,一个类内部实现__iter__方法且返回一个迭代器。
                class Foo(object):
                    def __iter__(self):
                        return iter([11,22,33])
                obj = Foo()
                
                应用场景: 
                    - wtforms中对form对象进行循环时候,显示form中包含的所有字段。
                        class LoginForm(Form):
                            name = simple.StringField(
                                label='用户名',
                                validators=[
                                    validators.DataRequired(message='用户名不能为空.'),
                                    validators.Length(min=6, max=18, message='用户名长度必须大于%(min)d且小于%(max)d')
                                ],
                                widget=widgets.TextInput(),
                                render_kw={'class': 'form-control'}
                            )
                            pwd = simple.PasswordField(
                                label='密码',
                                validators=[
                                    validators.DataRequired(message='密码不能为空.'),
                                    validators.Length(min=8, message='用户名长度必须大于%(min)d'),
                                    validators.Regexp(regex="^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[$@$!%*?&])[A-Za-z\d$@$!%*?&]{8,}",
                                                      message='密码至少8个字符,至少1个大写字母,1个小写字母,1个数字和1个特殊字符')
                                ],
                                widget=widgets.PasswordInput(),
                                render_kw={'class': 'form-control'}
                            )
                        
                        form = LoginForm()
                        for item in form:
                            print(item)
                            
                    - 列表、字典、元组
                    
                    总结:如果想要让一个对象可以被for循环,那么就需要在当前类中定义__iter__
        - 装饰器,在不改变原函数代码的基础上,在执行前后进行定制操作。
            - 手写
            - 应用场景: 
                - flask路由系统
                - flask before_request
                - csrf
                - django内置认证
                - django的缓存

 

复制代码
a. wtforms作用?
b. wtforms涉及到的知识点?哪里用了?
    - metaclass
    - 封装:UnboundField
    - __new__
    - __mro__
    - setattr
    - type(...)
c. ORM和原生SQL比较?
    
d. 你用过的ORM框架有哪些?

e. SQLAlchemy
    - 数据库连接池
    - 原生SQL
    - ORM 
        - 表操作
            - 默认值
            - 索引(联合索引,想要命中必须遵循“最左前缀”的规则)
            - sqlalchemy中设置表:
                - 引擎
                - 编码
        - 记录操作
            - 增删改查
复制代码
posted on 2019-05-14 10:55  斜阳红红  阅读(137)  评论(0编辑  收藏  举报