企业真题

十二章企业真题实战

一、360 面试题

  1.  请拿出B 表中的accd,(A 表中和B 表中的一样的数据)?
    select * from B inner join on B.name = A.name
  2. a = “abbbccc”,用正则匹配为abccc,不管有多少b,就出现一次?
    1. 思路:不管有多少个b 替换成一个
    2. re.sub(r'b+', 'b', a)
  3. xpath 使用的什么库?

     lxml

  4. redis 里面list内容的长度?
    len key_name
  5. 多线程交互,访问数据,如果访问到了就不访问了,怎么避免重读?

     创建一个已访问数据列表,用于储存已经访问过的数据,并加上互斥锁,在多线程访问数据之前,查看是否已经存在已访问的列表中,若已存在就直接跳过。

  6. Mysql 怎么限制IP访问?

    grant all privileges on .to "数据库中用户名" @“ip地址”  identified by "数据库密码";

  7.  带参数的装饰器?
    代偿参数的装饰器
    def new_func(func):
        def warppedfun(usernaem,password):
            if username =='root' and password == '123456'print("通过认证!")
                    print("开始执行附加功能")
                    return func()
            else:
                    print("用户名账号密码错误")
                    return
        return warppedfun
    
    @new_func
    def orign():
        print("开始执行函数")
    orign('root', '123456')

    带不定长参数的装饰器。

    def new_func(func):
        def warppedfun(*parts):
            if parts:
                counts = len(parts)
                print("本系统包含", end='')
                for part in parts:
                    print(part, '', end='')
                print('', counts, '部分')
            else:
                print('用户名或者密码错误')
                return func()
        return warpperfun
    
    @new_func
    def orign():
        print('开始执行函数')
    
    orign('硬件', '软件', ‘用户数据’)

    同时带不定长、关键字参数的装饰器。

    def new_func(func):
        def warppedfun(*args, **kwargs):
            if args:
                counts = len(args)
                print('本系统包含', end='')
                for arg in args:
                    print(arg, '', end='')
                print('', counts, '部分')
                if kwargs:
                    for k in kwargs:
                        v = kwargs[k]
                        print(k, '为:', v)
                return func()
            else:
                if kwargs:
                    for kwarg in kwargs:
                        print(kwarg)
                        k, v = kwarg
                        print(k, '为:', v)
                    return func()
            return warppedfun
    
    @ new_func
    def orign():
        print('开始执行函数')
    
    orign('硬件', '软件', ‘用户数据’, 总用户数=5, 系统版本= ‘centos’)

二、妙计旅行面试题

  1. python主要的内置数据内置数据类型?
    str, int, float, tuple, list, dict, set
  2. print(dir('a'))输出的是什么?
    会打印出字符型的所有的内置方法
    1. ['__add__', '__class__', '__contains__', '__delattr__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__',
    '__getnewargs__', '__getslice__', '__gt__', '__hash__', '__init__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__',
    '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__',
    '_formatter_field_name_split', '_formatter_parser', 'capitalize', 'center', 'count', 'decode', 'encode', 'endswith', 'expandtabs',
    'find', 'format', 'index', 'isalnum', 'isalpha', 'isdigit', 'islower', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'partition',
    'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate',
    'upper', 'zfill']
  3. 给定两个list,A和B,找出相同元素和不同元素?
    A、B中相同元素:print(set(A)&set(B))
    A、B中不同元素:print(set(A)^set(B))
  4. 请反转字符串?
    new_str = old_str[::-1]
  5. 用select语句输出每个城市中心大于20km酒店数量?
    slecet count(hotel) from hotel_table where distance > 20 group by city
  6. 给定一个有序列表,请输出要插入值k所在的索引位置?
    def instance(list, key):
      if key < list[0]:
        position = 0
           elif  key > list[-1]:
                   position = len(list) -1
           else:
           for  index in range(list):
                if key > list[index] and list[index] > key:
                position = index
  7. 正则表达式贪婪匹配与非贪婪匹配的区别?
    在形式上非贪婪匹配模式有一个“?”作为该部分的结束标记
    在功能上贪婪模式是尽可能多的匹配当前正则表达式,可能会包含好几个满足表达式的字符串,非贪婪模式,在满足所有正则表达式的情况下尽可能减少当前匹配表达式
  8. 写出开头匹配字母和下划线,末尾是数字的正则表达式?
    ^[A-Za-z]|_.*d$
  9. 请署名HTTP状态码的用途,请说明常见状态码及其意义?
    通过状态码告诉客户端服务器的执行状态,以判断下一步改执行什么操作。
    常见的状态机器码有:

    100-199:表示服务器成功接收部分请求,要求客户端继续提交其余请求才能完成整个处理过程。
    200-299:表示服务器成功接收请求并已完成处理过程,常用200(OK 请求成功)。
    300-399:为完成请求,客户需要进一步细化请求。302(所有请求页面已经临时转移到新的url),
    304、307(使用缓存资源)。
    400-499:客户端请求有错误,常用404(服务器无法找到被请求页面),403(服务器拒绝访问,
    权限不够)。
    500-599:服务器端出现错误,常用500(请求未完成,服务器遇到不可预知的情况)。

  10. 当输入http://www.baidu.com 时,返回页面的过程中发生了什么?
    1>浏览器想DNS服务器发送baidu.com域名请求;
    2>DNS服务器返回解析后的ip发送给客户端浏览器,浏览器向该ip发送页面请求;
    3>DNS服务器接收到请求后查询该页面,并将页面发送给客户端浏览器;
    4>客户端浏览器接收到页面后,解析页面中的引用,并再次向服务器发送引用资源请求;
    5> 服务器接收到资源请求后,查询并返回资源给客户端;
    6> 客户端浏览器接收到资源后,渲染,输出页面展现给用户
  11. 有一个多层嵌套列表A=[1,2,[3.4["434",[...]]]]请写一段代码遍历A 中的每一个
    元素并打印出来

    a= ["a","b",["1","3",["4","haha"]]]
    for b in a :
        for c in b :
            for d in c :
                print(d)            
  12. 关系型数据库中,表和表之间有左连接,内连接,外连接,分别解释下塔恩的含义和区别?
    内连接查询:查询结果为两个表匹配到的数据
    右链接:查询的结果为两个表匹配到的数据,右表特有的数据,对于左表中不存在的数据使用null填充
      

    左连接查询:查询结果为两个表匹配到的数据,左表特有的数据,对于右表中不存在的数据使用null填充
             

  13. 如何定时启动你的爬虫项目?
    1.最简单的方法:直接使用timer类

    import time
    import os
    while 1:
        os.system("scrapy crawl News")
    
    time.sleep(86400)

    2.使用sched

    import sched
    # 初始化sched模块的scheduler类
    # 第一个参数是一个可以返回时间戳的函数,第二个参数可以定时未到之前阻塞
    schedule = sched.scheduler(time.time, time.sleep)
    
    #被周期性调度出发的函数
    def fun():
        os.system("scrapy crawl News")
    
    def perform1(inc):
        schedule.enter(inc,0, perform1, (inc,))
        func()  # 需要周期执行函数
    
    def mymain():
        schedule.enter(0,0, perform1, (86400))
    
    if __name__ = "__main__":
        mymain()
        schedule.run() # 开始运行,直到计划时间队列变为空为止

    3. 使用Crontab

    0 */24 * * * cd /data/spider && scrapy crawl article 

    参考博客:https://blog.csdn.net/gaoshanliushui131/article/details/72721704

  14. 什么是scrapy-redis中的指纹,是如何去重的?
    指纹:通过shal加密。把请求体,请求方式,请求url放在一起,然后进行16进制的转义符字符串生成指纹,生成一个字符串,放到一个字符串中,梵高数据库中作为唯一标识
    去重:urll中按照url去重:1.按照url去重,有一个列表,发送请求之前从数据表中看一下这个url有没有请求过,有请求过就不用看了。2. 内容判断:从数据库中查询数据的表示,如果请求过了就不在请求

  15. 优化代码主要从哪些方面考虑?
    具体的链接:http://python.jobbole.com/81956/
    1.优化算法时间复杂度
    2.减少冗余数据
    3.合理使用copy和deepcopy
    4.使用dict或set查找元素
    5.合理使用生成器(generator)和yield
    6.优化循环
    7.优化包含多个判断表达式的顺序
    8.使用join合并迭代器中的字符串
    9.选择合适的格式化字符串方式
    10.不借助中间变量交换两个变量的值
    11.使用if is
    12. 使用级联比较 x<y<z
    13. while 1 比while True 更快
    14.使用**而不是pow
    15.使用cProfile,cStringI()和cPickle等用c实现相同功能(分别对应profile,StringI(), pickle)
    16.使用最佳的反序列化方式
    17.使用C扩展(Extension)
    18.并行编程
    19.终极大杀器:PyPy
     20.性能分析工具

  16. Django项目的优化(web通用)
    1.优化数据库查询:
      1.1一次性提供所有的数据
      1.2 仅提供相关的数据
    2.代码优化
            2.1 简化代码
            2.2 更新或替换第三方软件包
            2.3 重构代码
    更多详情参考博客:http://python.jobbole.com/88971/

三、智慧星光面试题(

这家公司主要做舆情分析,问题主要集中在页面解析和Selenium+Phantom JS 解析复杂页面,ajax
页面请求等,图片识别,机器学习。

  1. 定义A=("a", "b", "c", "d" ),执行del A[2]后的结果为(D):
    A: (“a”, “c”, “d”)
    B: (“a”, “b”, “c”)
    C: (“a”, “b”, “d”)
    D: 异常

 

原文地址:https://www.cnblogs.com/yang950718/p/10891949.html