搞定这套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使用fileinput模块实现逐行读取文件的方法
Apr 29 Python
Windows下Python的Django框架环境部署及应用编写入门
Mar 10 Python
Python爬虫框架scrapy实现downloader_middleware设置proxy代理功能示例
Aug 04 Python
Django如何自定义model创建数据库索引的顺序
Jun 20 Python
python中dict使用方法详解
Jul 17 Python
将自己的数据集制作成TFRecord格式教程
Feb 17 Python
python中if及if-else如何使用
Jun 02 Python
python正则表达式的懒惰匹配和贪婪匹配说明
Jul 13 Python
appium+python自动化配置(adk、jdk、node.js)
Nov 17 Python
运行python提示no module named sklearn的解决方法
Nov 29 Python
python中spy++的使用超详细教程
Jan 29 Python
Pandas实现批量拆分与合并Excel的示例代码
May 30 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
通过对php一些服务器端特性的配置加强php的安全
2006/10/09 PHP
php 中的str_replace 函数总结
2007/04/27 PHP
php自定义session示例分享
2014/04/22 PHP
PHP编程中的__clone()方法使用详解
2015/11/27 PHP
分享27个jQuery 表单插件集合推荐
2011/04/25 Javascript
让angularjs支持浏览器自动填表
2014/11/10 Javascript
使用AngularJS创建单页应用的编程指引
2015/06/19 Javascript
学习JavaScript设计模式(继承)
2015/11/26 Javascript
js跨域资源共享 基础篇
2016/07/02 Javascript
用jQuery旋转插件jqueryrotate制作转盘抽奖
2017/02/10 Javascript
详解nodejs微信公众号开发——1.接入微信公众号
2017/04/10 NodeJs
深入理解Angular中的依赖注入
2017/06/26 Javascript
vue组件之Alert的实现代码
2017/10/17 Javascript
JavaScript布尔运算符原理使用解析
2020/05/06 Javascript
[03:17]DOTA2-DPC中国联赛1月29日Recap集锦
2021/03/11 DOTA
在Django的视图(View)外使用Session的方法
2015/07/23 Python
解决python2.7用pip安装包时出现错误的问题
2017/01/23 Python
Python实现将文本生成二维码的方法示例
2017/07/18 Python
python监控进程脚本
2018/04/12 Python
python模块smtplib实现纯文本邮件发送功能
2018/05/22 Python
Django model序列化为json的方法示例
2018/10/16 Python
python生成器与迭代器详解
2019/01/01 Python
Python骚操作之动态定义函数
2019/03/26 Python
Python数据类型之List列表实例详解
2019/05/08 Python
Django框架中间件(Middleware)用法实例分析
2019/05/24 Python
详解Django模版中加载静态文件配置方法
2019/07/21 Python
解决python 上传图片限制格式问题
2019/10/30 Python
NOTINO英国:在线购买美容和香水
2020/02/25 全球购物
优秀毕业生求职信范文
2014/01/02 职场文书
结婚典礼证婚词
2014/01/08 职场文书
小学生操行评语大全
2014/04/22 职场文书
送温暖献爱心活动总结
2014/07/08 职场文书
加强作风建设心得体会
2014/10/22 职场文书
幼师大班个人总结
2015/02/13 职场文书
2015毕业生自我评价范文
2015/03/02 职场文书
js实现上传图片到服务器
2021/04/11 Javascript