zoukankan      html  css  js  c++  java
  • 面试题

    面试题

    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-zd$@$!%*?&]{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中设置表:
                    - 引擎
                    - 编码
            - 记录操作
                - 增删改查
    复制代码
  • 相关阅读:
    mysql 状态查看
    Float浮点内存存储方式 转
    printf("%d",5.01)和printf("%f",5)的输出结果
    RMBP
    小D课堂【SpringBoot】接口Http协议开发实战
    尚硅谷【SpringBoot】web(源码讲解太多不建议阅读)
    尚硅谷【SpringBoot】入门
    51cto-spring boot(一Spring4快速入门)
    Eclipse使用Maven时出现:Index downloads are disabled, search results may be incomplete.问题解决
    maven(二)
  • 原文地址:https://www.cnblogs.com/xyhh/p/10861033.html
Copyright © 2011-2022 走看看