美文网首页
【阿里云认证题库】Python高级能力

【阿里云认证题库】Python高级能力

作者: Mead170810 | 来源:发表于2020-08-18 13:52 被阅读0次
    1.怎样解决引入redis产生的缓存穿透问题?
    A. 采用布隆过滤器,将所有可能存在的数据哈希到 一个足够大的bitmap中,一个一定不存在的数据 会被 这个bitmap拦截掉,从而避免了对底层存储 系统的查询压力。
    B. 使用mutex,在缓存失效的时候使用缓存工具的某些 带成功操作返回值的操作,去set一个mutex key, 当操作返回成功时,再进行load db的操作并回设缓存;否则,就重试整个get缓存的方法。
    C. 用加锁或者队列的方式保证来保证不会有大量的线 程对数据库一次性进行读写,从而避免失效时大量 的并发请求落到底层存储系统上。
    D. 将缓存失效时间分散开,比如我们可以在原有的失效时间基础 上增加一个随机值,比如1-5分钟随机,这样每一个缓存的过期 时间的重复率就会降低,就很难引发集体失效的事件。
    答案:A
    [B选项是用来解决缓存击穿,C、D选项是用来解决缓存雪崩]
    
    2.判断值在0-10之间的代码,正确的是
    A. if num >= 0 and num <= 10:
    B. if num >= 0 or num <= 10:
    C. if num >= 0 && num <= 10:
    D. if num >= 0 || num <= 10:
    答案:A
    
    3.下列与标准化方法有关的说法中错误的是()
    A. 离差标准化简单易懂,对最大值和最小值敏感度不高
    B. 标准差标准化是最常用的标准化方法,又名零一均值标准化
    C. 小数定标标准化实质上就是将数据按照-定的比例缩小
    D. 多个特征的数据的K-Means聚类不需要对数据进行标准化
     [离差标准化,是对原始数据的线性变换,使结果落到[0,1]区间,这种方法有一个缺陷就是当有新数据加入时,可能导致max和min的变化,需要重新定义,因此对最大值和最小值比较敏感。]
    
    4.将字符串s中的字母a替换为字母b,以下代码正确的是
    A. s.swap('b', 'a')
    B. s.replace('a','b')
    C. s.match('b','a')
    D. s.replace('b','a')
    答案:B
    [replace()方法替换,第一个参数为被替换的,第二个参数为替换的值]
    
    5.web开发中,以下做法正确的是( )
    A. 后端手机验证码验证通过后,跳转到设置新密码页面,https+post提交用户名、新密码,设置新密码完成密码重置功能
    B. 点击重置密码按钮,系统发送一条重置密码的链接到邮箱,格式为:http://www.xxx.com/password/reset?key=1563785498&username=045g6hgd4771h909uiwq5k001923r2p6(其中key是unix时间戳,username是用户名的md5值)
    C. 某网站的cookie生成方法为:固定字符串+用户名+时间戳的base64编码
    D. 以上都不对
    答案:D
    [A选项,验证码校验和重置密码是不能分开两步提交的,容易绕过;B的问题主要是无法避免数据篡改,需要增加签名sign=f(param + secret)防止数据被篡改;其次md5加密的用户名并不知道是哪个用户,另外敏感数据应该用https;C项base64可逆,解密之后破解规则,可以伪造登录状,无法避免数据篡改]
    
    6.小明在用python实现文件上传功能时,做了如下操作,其中做法不恰当的是( )
    A. 通过黑名单验证上传的文件后缀名称
    B. 设置上传目录不可解析
    C. 重命名上传的文件名称
    D. 使用单独的服务器存放上传的文件
    答案:A
    [黑名单是危险易绕过的,可以使用文件后缀名白名单验证和随机文件名称的方式]
    
    7.阅读下面Flask代码,以商品(good.py)的模块代码为例, 可能会抛出异常的地方是 ( )
                 1. # from flask import Blueprint
                 2.
                 3. good_blueprint = Blueprint( 'good', __name__, url_prefix='/api/good' )
                 4.
                 5. @good_blueprint.route('/')
                 6. def getGoods():
                 7. pass
                 8.
                 9. @good_blueprint.route('/<catagory_id>')
                 10. def getGoodsInCatagory(<catagory_id>):
                 11. pass
    A. 第3行
    B. 第5行
    C. 第9行
    D. 第10行
    答案:D
    [本题考查代码的规范和参数使用在实际项目的易错处, D第10行中的方法中的参数不应该用“<>”, 默认不写或者以元组的形式传入。]
    
    8.以下应对反爬虫的策略中错误的是( )
    A. 对于基本网页的抓取可以自定义headers,添加 headers的数据,代理来解决
    B. 对部分数据进行加密的可以使用查找接口的方式进行抓取。
    C. 针对动态网页的可以使用selenium+phantomjs进行抓取
    D. 对于限制ip抓取的可以使用多个代理ip进行抓取,轮询使用代理
    答案:C
    [查找接口的方式不能解决数据加密,只适用于动态网页的抓取]
    
    9.list1 = list(range(10))
                 print(list1[0:10:2])
                 以上代码输出的结果是
    A. [0,2,4,6,8]
    B. [0,1]
    C. [0,2]
    D. [0.1.2.3.4.5.6.7.8,9]
    答案:A
    [下标从0到10,步长为2]
    
    10.L = [1, 23, "hello", 1] ,L的数据类型是
    A. List
    B. Array
    C. Dictionary
    D. Tuple
    答案:A
    [整体是列表,列表中存储不同的数据]
    
    11.Flask响应流的实现原理就是通过Python的生成器,也就是大家所熟知的yield的表达式,将yield的内容直接发送到客户端。下面有个简单实现:
                 from flask import Flask, Response
                 app = Flask(__name__)
                 @app.route('/large.csv')def generate_large_csv():
                  def generate():
                  for row in range(50000):
                  line = []
                  for col in range(500):
                  line.append(str(col))
                  if row % 1000 == 0:
                  print 'row: %d' % row
                  yield ','.join(line) + '\n'
                  return Response(generate(), mimetype='text/csv')
                 这样写的主要好处是( )
    A. 代码简洁易懂
    B. 代码节省内存
    C. 代码安全可靠
    D. 代码行数较少
    答案:B
    [本题考查生成器的优点和实际使用的用途, 文件上传或导出时最明显的是节省内存,无论多大的文件进行处理时一次只处理一行, 性能得到提升。]
    
    12.a = [1,2,3,None,(),[],]
                 print(len(a))
                 以上代码输出结果为
    A. 4
    B. 5
    C. 6
    D. syntax error
    答案:C
    [列表中元素可以存储任意数据类型]
    
    13.Numpy中能够在[a,b)范围内取一个随机数的表达式是( )
    A. b * numpy.random.random() + a
    B. b * numpy.random.random() + a + 1
    C. (b - a) * numpy.random.random() + a
    D. (b - a - 1) * numpy.random.random() + a + 1
    答案:C
    [随机生成函数np.random.uniform(low, high, size):可以从一个均匀分布[low,high)中随机采样,定义域是左闭右开。]
    
    14.下列关于Django的select_related和prefetch_related的描述中说法正确的是( )
    A. select_related和只有prefetch_related都是针多对一和多对多关系进行优化
    B. select_related通过JOIN语句,在SQL查询内解决问题
    C. 因为select_related()的效率通常比prefetch_related高,所以应该尽可能的用select_related()解决问题
    D. 只有select_related()之前的prefetch_related()是有效的
    答案:C
    [选项A,select_related是针对一对一和多对一关系的优化; 选项B,select_related使用SQL的JOIN语句进行优化,通过减少SQL查询的次数来进行优化、提高性能;prefetch_related是通过JOIN语句,在SQL查询内解决问题; 选项D,只有prefetch_related()之前的select_related()是有效的。]
    
    15.有Django model如下:
                 class Student(models.Model):
                     name = models.CharField(max_length=20)
                     age = models.IntegerField()
                     hobbies = models.ManyToManyField(Hobby)
                     
                 class Hobby(models.Model):
                     name = models.CharField(max_length=20)
                 
                 其中Student与Hobby(爱好)是多对多的关系,则语句Hobby.objects.annotate(student_num=Count('student‘)).order_by('-student_num')[:5]的含义是( )
    A. 统计爱好最多的5个学生
    B. 统计爱好最少的5个学生
    C. 统计最受学生欢迎的5个爱好
    D. 统计最不受学生欢迎的5个爱好
    [先按爱好分组,再统计每组学生数量, 然后按每组学生数量大小对爱好降序排序后取前五个数据。]
    
    16.关于a = b = c = 1 下列说法不正确的是
    A. 三个变量被分配到不同的内存空间上
    B. 三个变量被分配到相同的内存空间上
    C. 三个变量中只有a的值为1
    D. 三个变量中只有c的值为1
    答案:ACD
    [三个变量的值都为1,指向同一个内存地址]
    
    17.Python中,关于字典以下哪个代码是不正确的
    A. {'item1'=>1, 'item2'=>2}
    B. {'item1': 1, 'item2': 2}
    C. ('item1'=>1, 'item2'=>2)
    D. ('item1': 1, 'item2': 2)
    答案:ACD
    [字典使用{}创建,使用逗号分隔key:value]
    
    18.WEB开发中,以下选项中能够在一定程度上防御CSRF攻击的策略是( )
    A. 将cookie设置为HttpOnly
    B. 过滤用户输入的 检查用户输入的内容中是否有非法内容
    C. 验证 HTTP Referer 字段
    D. 在请求地址中添加 token 并验证
    E. 在 HTTP 头中自定义属性并验证
    [CSRF通常从第三方网站发起,被攻击的网站无法防止攻击发生,只能通过增强自己网站针对CSRF的防护能力来提升安全性。答案中的四个选项均可减轻CSRF攻击的风险。]
    
    19.以下创建字典的语句正确的是
    A. {}
    B. dict([1,2],[3,4])
    C. dict(([1,2],[3,4]))
    D. {1:2}
    答案:ACD
    [字典结构为key:value]
    
    20.Django在Ajax请求中提交csrfToken的方法正确的是( )
    A. 将{% csrf_token %}生成的input框的value通过ajax传参来提交
    B. 从获取当前页面的get请求的响应中cookie里获取csrfToken,再写入当前post请求的请求头中;
    C. 手写从cookie中获取/写入csrfToken的js文件,再引入,就不需要做其他参数传递,同get请求一般;
    D. 在ajax请求前加上
    答案:ABCD
    [方式一: django模板标签提供{% csrf_token %}在前端生成input框,如果在settings.py文件中开启了该中间件,每次post请求就需要提交django自动生成的csrfToken; 将{% csrf_token %}生成的input框的value通过ajax传参来提交; 方式二: 从获取当前页面的get请求的响应中cookie里获取csrfToken,再写入当前post请求的请求头中; 需要引入:jquery.cookie.js插件 方式三: 与方式二原理相同,手写从cooki]
    

    相关文章

      网友评论

          本文标题:【阿里云认证题库】Python高级能力

          本文链接:https://www.haomeiwen.com/subject/odcfjktx.html