搞定这套Python爬虫面试题(面试会so easy)


Posted in Python onApril 03, 2019

先来一份完整的爬虫工程师面试考点:

搞定这套Python爬虫面试题(面试会so easy)

一、 Python 基本功

1、简述Python 的特点和优点

Python 是一门开源的解释性语言,相比 Java C++ 等语言,Python 具有动态特性,非常灵活。

2、Python 有哪些数据类型?

Python 有 6 种内置的数据类型,其中不可变数据类型是Number(数字), String(字符串), Tuple(元组),可变数据类型是 List(列表),Dict(字典),Set(集合)。

3、列表和元组的区别

列表和元组都是可迭代对象,能够对其进行循环、切片等,但元组 tuple 是不可变的。元组不可变的特性,使得它可以成为字典 Dict 中的键。

4、Python 是如何运行的

CPython:

Python 程序运行时,会先进行编译,将 .py 文件中的代码编译成字节码(byte code),编译结果储存在内存的 PyCodeObject 中,然后由 Python 虚拟机解释运行。当程序运行结束后,Python 解释器会将 PyCodeObject 保存到 pyc 文件中。每一次运行时 Python 都会先寻找与文件同名的 pyc 文件,如果 pyc 存在则比对修改记录,根据修改记录决定直接运行或再次编译后运行,最后生成 pyc 文件 。

5、Python 运行速度慢的原因

a). Python 不是强类型的语言,所以解释器运行时遇到变量以及数据类型转换、比较操作、引用变量时都需要检查其数据类型。

b). Python 的编译器启动速度比 JAVA 快,但几乎每次都要启动编译。

c). Python 的对象模型会导致访问内存效率变低。Numpy 的指针指向缓存区数据的值,而 Python 的指针指向缓存对象,再通过缓存对象指向数据:

搞定这套Python爬虫面试题(面试会so easy)

6、面对 Python 慢的问题,有什么解决办法

a). 可以使用其他的解释器,比如 PyPy 和 Jython 等。

b). 如果对性能要求较高且静态类型变量较多的应用程序,可以使用 CPython。

c). 对于 IO 操作多的应用程序,Python 提供 asyncio 模块提高异步能力。

7、描述一下全局解释器锁 GIL

每个线程在执行时候都需要先获取 GIL,保证同一时刻只有一个线程可以执行代码,即同一时刻只有一个线程使用 CPU,也就是说多线程并不是真正意义上的同时执行。但是在 IO 操作时,是可以释放锁的(这也是 Python 能够异步的原因)。而且如果想要利用多核 CPU,那么可以使用多进程。

8、深拷贝 浅拷贝

深拷贝是将对象本身复制给另一个对象,浅拷贝则是将对象的引用复制给另一个对象。所以当复制后的对象改变时,深拷贝的原对象值不会改变,而浅拷贝原对象的值会被改变。

9、is 和 == 的区别

is 表示的是对象标示符(object identity),而 == 表示的是相等(equality)。

is 的作用是用来检查对象的标示符是否一致,也就是比较两个对象在内存中的地址是否一样,而 == 是用来检查两个对象是否相等。但是为了提高系统性能,对于较小的字符串 Python 会保留其值的一个副本,当创建新的字符串的时候直接指向该副本即可。如:

a = 8
b = 8
a is b

10、文件读写

简述文件读取时 read 、readline、readlines 的区别和作用

他们的区别除了读取内容范围不同外,返回的内容类型也不同。

read()会读取整个文件,将读取到底的文件内容放到一个字符串变量,返回 str 类型。

readline()读取一行内容,放到一个字符串变量,返回 str 类型。

readlines() 读取文件所有内容,按行为单位放到一个列表中,返回 list 类型。

11、请用一行代码实现

请分别使用匿名函数和推导式这两种方式将 [0, 1, 2, 3, 4, 5] 中的元素求乘积,并打印输出元组。

print(tuple(map(lambda x: x * x, [0, 1, 2, 3, 4, 5])))
print(tuple(i*i for i in [0, 1, 2, 3, 4, 5]))

12、请用一行代码实现

用 reduce 计算 n 的阶乘(n!=1×2×3×...×n)

print(reduce(lambda x, y: x*y, range(1, n)))

13、请用一行代码实现

筛选并打印输出 100 以内能被 3 整除的数的集合

print(set(filter(lambda n: n % 3 == 0, range(1, 100))))

14、请用一行代码实现

text = 'Obj{"Name": "pic", "data": [{"name": "async", "number": 9, "price": "$3500"}, {"name": "Wade", "number": 3, "price": "$5500"}], "Team": "Hot"'

打印文本中的球员身价元组,如 (  5500)

print(tuple(i.get("price") for i in json.loads(re.search(r'[(.*)]', text).group(0))))

15、请写出递归的基本骨架

def recursions(n):
 if n == 1:
 # 退出条件
 return 1
 # 继续递归
 return n * recursions(n - 1)

16、切片

请写出下方输出结果

tpl = [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95]
print(tpl[3:])
print(tpl[:3])
print(tpl[::5])
print(tpl[-3])
print(tpl[3])
print(tpl[::-5])
print(tpl[:])
del tpl[3:]
print(tpl)
print(tpl.pop())
tpl.insert(3, 3)
print(tpl)
[15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95]
[0, 5, 10]
[0, 25, 50, 75]
85
15
[95, 70, 45, 20]
[0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95]
[0, 5, 10]
10
[0, 5, 3]

17、文件路径

打印输出当前文件所在目录路径

import os
print(os.path.dirname(os.path.abspath(__file__)))

打印输出当前文件路径

import os
print(os.path.abspath(__file__))

打印输出当前文件上两层文件目录路径

import os
print(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

18、请写出运行结果,并回答问题

tpl = (1, 2, 3, 4, 5)
apl = (6, 7, 8, 9)
print(tpl.__add__(apl))

问题:tpl 的值发生变化了吗?

运行结果如下:

(1, 2, 3, 4, 5, 6, 7, 8, 9)

答:元组是不可变的,它是生成新的对象

19、请写出运行结果,并回答问题

name = ('James', 'Wade', 'Kobe')
team = ['A', 'B', 'C']
tpl = {name: team}
print(tpl)
apl = {team: name}
print(apl)

问题:这段代码能运行完毕吗?为什么?它的运行结果是?

答:这段代码不能完整运行,它会在 apl 处抛出异常,因为字典的键只能是不可变对象,而 list 是可变的,所以不能作为字典的键。运行结果是:

{('James', 'Wade', 'Kobe'): ['A', 'B', 'C']}
TypeError

20、装饰器

请写出装饰器代码骨架

def log(func):
 def wrapper(*args, **kw):
 print('call %s():' % func.__name__)
 return func(*args, **kw)
 return wrapper

简述装饰器在 Python 中的作用:

在不改动原函数代码的情况下,为其增加新的功能。

21、多进程 多线程

多进程更稳定还是多线程更稳定?为什么?

多进程更稳定,它们是独立运行的,不会因为一个崩溃而影响其他进程。

多线程的致命缺点是什么?

因为所有线程共享进程的内存,所以任何一个线程挂掉都可能直接造成整个进程崩溃。

进程间通信有哪些方式?

共享变量、队列、管道。

好了,本文就给大家介绍到这里,祝大家面试so easy!

Python 相关文章推荐
python发送伪造的arp请求
Jan 09 Python
简单谈谈Python中函数的可变参数
Sep 02 Python
解决Python的str强转int时遇到的问题
Apr 09 Python
使用python绘制3维正态分布图的方法
Dec 29 Python
Python 调用 zabbix api的方法示例
Jan 06 Python
简单了解Django ContentType内置组件
Jul 23 Python
Pytorch中的自动求梯度机制和Variable类实例
Feb 29 Python
Python常驻任务实现接收外界参数代码解析
Jul 21 Python
Python实现画图软件功能方法详解
Jul 28 Python
Django缓存Cache使用详解
Nov 30 Python
Python数据类型最全知识总结
May 31 Python
Python使用Web框架Flask开发项目
Jun 01 Python
Python3实现从排序数组中删除重复项算法分析
Apr 03 #Python
Python3安装Pillow与PIL的方法
Apr 03 #Python
python使用requests模块实现爬取电影天堂最新电影信息
Apr 03 #Python
Python简直是万能的,这5大主要用途你一定要知道!(推荐)
Apr 03 #Python
Python3实现计算两个数组的交集算法示例
Apr 03 #Python
Python3获取拉勾网招聘信息的方法实例
Apr 03 #Python
Python3实现的旋转矩阵图像算法示例
Apr 03 #Python
You might like
Apache环境下PHP利用HTTP缓存协议原理解析及应用分析
2010/02/16 PHP
typecho插件编写教程(六):调用接口
2015/05/28 PHP
三个思路解决laravel上传文件报错:413 Request Entity Too Large问题
2017/11/13 PHP
关于laravel-admin ueditor 集成并解决刷新的问题
2019/10/21 PHP
Gambit vs CL BO3 第二场 2.13
2021/03/10 DOTA
7款风格新颖的jQuery/CSS3菜单导航分享
2013/04/23 Javascript
三种方式获取XMLHttpRequest对象
2014/04/21 Javascript
JS实现鼠标箭头变成一个燃烧烛光效果的方法
2015/02/28 Javascript
JS控制表格实现一条光线流动分割行的方法
2015/03/09 Javascript
jQuery聚合函数实例
2015/05/21 Javascript
纯JS代码实现一键分享功能
2016/04/20 Javascript
JavaScript模仿Pinterest实现图片预加载功能
2016/10/25 Javascript
JS实现动态添加DOM节点和事件的方法示例
2017/04/28 Javascript
Angular2下使用pdf插件的方法详解
2017/04/29 Javascript
基于Vue的SPA动态修改页面title的方法(推荐)
2018/01/02 Javascript
vue-infinite-loading2.0 中文文档详解
2018/04/08 Javascript
微信小程序实现折叠与展开文章功能
2018/06/12 Javascript
Vue+axios实现统一接口管理的方法
2018/07/23 Javascript
Element-ui之ElScrollBar组件滚动条的使用方法
2018/09/14 Javascript
浅谈在不使用ssr的情况下解决Vue单页面SEO问题(2)
2018/11/08 Javascript
elementUI多选框反选的实现代码
2019/04/03 Javascript
layui自定义工具栏的方法
2019/09/19 Javascript
JavaScript监听键盘事件代码实现
2020/06/03 Javascript
vue实现下载文件流完整前后端代码
2020/11/17 Vue.js
高质量Python代码编写的5个优化技巧
2017/11/16 Python
pandas值替换方法
2018/07/10 Python
python写入文件自动换行问题的方法
2019/07/05 Python
pyqt5 QScrollArea设置在自定义侧(任何位置)
2019/09/25 Python
css3 media 响应式布局的简单实例
2016/08/03 HTML / CSS
HTML5通过navigator.mediaDevices.getUserMedia调用手机摄像头问题
2020/04/27 HTML / CSS
超市5.1促销活动
2014/01/15 职场文书
《我的伯父鲁迅先生》教学反思
2014/02/12 职场文书
危爆物品安全大检查大整治工作方案
2014/05/03 职场文书
男性健康日的活动方案
2014/08/18 职场文书
井冈山红色之旅感想
2014/10/07 职场文书
创业计划书之DIY自助厨房
2019/09/06 职场文书