python企业真题实战 - 妙计旅行面试题

妙计旅行面试题
  1. Python 主要的内置数据类型有哪些?
  2. print(dir(‘a’))输出的是什么?
  3. 给定两个 list,A 和 B,找出相同元素和不同元素?
  4. 请反转字符串?
  5. 交换变量 a,b 的值?
  6. 用 select 语句输出每个城市中心距离 市中心 大于20km酒店数?
  7. 给定一个有序列表,请输出要插入值 k 所在的索引位置?
  8. 正则表达式贪婪与非贪婪模式的区别?
  9. 写出开头匹配字母和下划线,末尾是数字的正则表达式?
  10. 请说明 HTTP 状态码的用途,请说明常见的状态码机器意义?
  11. 当输入 http://www.itheima.com 时,返回页面的过程中发生了什么?
  12. 有一个多层嵌套列表A=[1,2,[3.4[“434”,[…]]]]请写一段代码遍历A中的每一个元素并打印出来。
  13. 关系型数据库中,表和表之间有左连接,内连接,外连接,分别解释下他们的含义和区别?
  14. 如何定时启动你的爬虫项目
  15. 使用 Crontab
  16. 什么是 scrapy-redis 中的指纹,是如何去重的?
  17. 代码优化从哪些方面考虑?有什么想法?
  18. Django 项目的优化(web 通用)
参考答案
  1. Python 主要的内置数据类型有哪些?
    答:Python 主要的内置数据类型有:str,int,float,tuple,list,dict,set。

  2. print(dir(‘a’))输出的是什么?
    答:会打印出字符型的所有的内置方法。

    ['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isascii', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', '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))

    A = [1, 2, 2, 3, 4]
    B = [3, 2, 2, 5, 8]
    
    print("相同元素",set(A)&set(B))
    print("不同元素",set(A)^set(B))
    
    结果:
    相同元素 {2, 3}
    不同元素 {1, 4, 5, 8}
    
  4. 请反转字符串?
    答:new_str = old_str[::-1]

  5. 交换变量 a,b 的值?
    答:a,b = b,a

  6. 用 select 语句输出每个城市中心距离 市中心 大于20km酒店数?
    答:select count(hotel) from hotel_table where distance >20 group by city

  7. 给定一个有序列表,请输出要插入值 k 所在的索引位置?
    答:代码如下

    def index(list, key):
        if key < list[0]:
            position = 0
        elif key > list[-1]:
            position = len(list)
        else:
            for i in range(len(list)):
                if (key >= list[i]) and (list[i + 1] > key):
                    position = i + 1
        return position
    
  8. 正则表达式贪婪与非贪婪模式的区别?、
    答:在形式上非贪婪模式有一个“?”作为该部分的结束标志。在功能上贪婪模式是尽可能多的匹配当前正则表达式,可能会包含好几个满足正则表达式的字符串,非贪婪模式,在满足所有正则表达式的情况下尽可能少的匹配当前正则表达式。

  9. 写出开头匹配字母和下划线,末尾是数字的正则表达式?
    答: ^[A-Za-z]|_.*\d$

  10. 请说明 HTTP 状态码的用途,请说明常见的状态码机器意义?
    答:通过状态码告诉客户端服务器的执行状态,以判断下一步该执行什么操作。
    常见的状态机器码有:
    100-199:表示服务器成功接收部分请求,要求客户端继续提交其余请求才能完成整个处理过程。
    200-299:表示服务器成功接收请求并已完成处理过程,常用 200(OK 请求成功)。
    300-399:为完成请求,客户需要进一步细化请求。302(所有请求页面已经临时转移到新的 url),
    304、307(使用缓存资源)。
    400-499:客户端请求有错误,常用 404(服务器无法找到被请求页面),403(服务器拒绝访问,
    权限不够)。
    500-599:服务器端出现错误,常用 500(请求未完成,服务器遇到不可预知的情况)。

  11. 当输入 http://www.baidu.com 时,返回页面的过程中发生了什么?
    答:1)浏览器向 DNS 服务器发送 baidu.com 域名解析请求;
    2)DNS 服务器返回解析后的 ip 给客户端浏览器,浏览器想该 ip 发送页面请求;
    3)DNS 服务器接收到请求后,查询该页面,并将页面发送给客户端浏览器;
    4)客户端浏览器接收到页面后,解析页面中的引用,并再次向服务器发送引用资源请求;
    5)服务器接收到资源请求后,查找并返回资源给客户端;
    6)客户端浏览器接收到资源后,渲染,输出页面展现给用户。

  12. 有一个多层嵌套列表A=[1,2,[3.4[“434”,[…]]]]请写一段代码遍历A中的每一个元素并打印出来。
    答:思路是有几个嵌套链表就用几个 for 循环进行迭代,然后对最后一个结果进行打印。

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

  2. 如何定时启动你的爬虫项目
    答:1.最简单的方法:直接使用 Time 类;

    import time
    import os
    
    while True:
        os.system("scrapy crawl News")
        time.sleep(86400) #每隔一天运行一次 24*60*60=86400s
    

    2.使用 sched;

    import sched
    import os
    import time
    #初始化 sched 模块的 scheduler 类
    #第一个参数是一个可以返回时间戳的函数,第二个参数可以在定时未到达之前阻塞。
    schedule = sched.scheduler ( time.time, time.sleep )
    
    #被周期性调度触发的函数
    def func():
        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

  3. 什么是 scrapy-redis 中的指纹,是如何去重的?
    答:指纹:通过 sha1 加密,把请求体,请求方式,请求 url 放在一起。然后进行 16 进制的转义符字符串生成指纹。生成一个字符串,放到数据库中作为唯一标示。

    去重:urll 中按照 url 去重:1.按照 url 去重,有一个列表,发送请求之前从数据表中看一下这个 url有没有请求过,请求过了就不用看了, 2.内容判断,从数据库中查数据的表示,如果请求过了就在不在请求了。

  4. 代码优化从哪些方面考虑?有什么想法?
    答: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, cStringIO 和 cPickle 等用 c 实现相同功能(分别对应 profile, StringIO, pickle)
    的包。
    16.使用最佳的反序列化方式。
    17.使用 C 扩展(Extension)。
    18.并行编程。
    19.终级大杀器:PyPy。
    20.使用性能分析工具。

  5. Django 项目的优化(web 通用)
    答:
    1.优化数据库查询
    1.1 一次提供所有数据
    1.2 仅提供相关的数据
    2.代码优化
    2.1 简化代码
    2.2 更新或替代第三方软件包
    2.3 重构代码

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章