本篇只是部分Python基础的面试题。
先来一份完整的爬虫工程师面试考点:
一、 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 的指针指向缓存对象,再通过缓存对象指向数据:
6、面对 Python 慢的问题,有什么解决办法
a). 可以使用其他的解释器,比如 PyPy 和 Jython 等。
b). 如果对性能要求较高且静态类型变量较多的应用程序,可以使用 CPython。
c). 对于 IO 操作多的应用程序,Python 提供 asyncio 模块提高异步能力。
7、描述一下全局解释器锁 GIL
每个线程在执行时候都需要先获取 GIL,保证同一时刻只有一个线程可以执行代码,即同一时刻只有一个线程使用 CPU,也就是说多线程并不是真正意义上的同时执行。但是在 IO 操作时,是可以释放锁的(这也是 Python 能够异步的原因&#x