Python工程师求职必知的经典面试题

158 阅读4分钟

Python

语法简单、功能强大,人才需求旺盛,是很多入行
IT
人士首选的编程语言。然而在学习理论技能、积累实战经验之余,想要拿到高薪,我们一定要经历一道坎,那就是面试。接下来小编就给大家分享
Python
工程师求职必知的经典面试题,助力大家更快的通过企业面试。

1

多线程使用
Python
是个好主意吗?列出一些方法可以让一些
Python
代码以并行方式运行。

答:
Python
不允许真正意义上的多线程。它有一个多线程包,但如果你想使用多线程来加速你的代码,那么使用它通常不是一个好主意。
Python
有一个名为全局解释器锁
(Global Interpreter Lock
GIL
)
的结构。
GIL
确保每次只能执行一个
线程
。一个线程获取
GIL
,做一点工作,然后将
GIL
传递到下一个线程。这种情况发生的很快,因此对于人眼看来,你的线程似乎是并行运行的,但它们实际上只是轮流使用相同的
CPU
核心。所有这些
GIL
传递都增加了运行的内存。这意味着如果你想让代码运行得更快,那么使用线程包通常不是一个好主意。

使用
Python
的线程包也是有原因的。如果你想同时运行一些东西,并且效率不是一个问题,那么它就完全没问题了。或者,如果你正在运行需要等待某些事情的代码(例如某些
IO
),那么它可能会很有意义。但是线程库不会让你使用额外的
CPU
核心。

多线程可以外包到操作系统(通过多处理),一些调用
Python
代码的外部应用程序(例如,
Spark
Hadoop
),或者
Python
代码调用的一些代码例如:你可以使用你的
Python
代码调用一个
C
函数来完成昂贵的多线程事务。

2

、这段代码输出了什么:

def f(x,l=[]):for i in range(x):l.append(i*i)print(l) f(2)f(3,[3,2,1])f(3)

答:
[0, 1][3, 2, 1, 0, 1, 4][0, 1, 0, 1, 4]

3

、如何在
Python
中管理内存?

Python

中的内存管理由
Python
私有堆空间管理。所有
Python
对象和数据结构都位于私有堆中。程序员无权访问此私有堆。
Python
解释器负责处理这个问题。
Python
对象的堆空间分配由
Python
的内存管理器完成。核心
API
提供了一些程序员编写代码的工具
Python
还有一个内置的垃圾收集器,它可以回收所有未使用的内存,并使其可用于堆空间。

4

range
xrange
有什么区别?

在大多数情况下,
xrange
range
在功能方面完全相同。它们都提供了一种生成整数列表的方法,唯一的区别是
range
返回一个
Python
列表对象,
x range
返回一个
xrange
对象。

这就表示
xrange
实际上在运行时并不是生成静态列表。它使用称为
yielding
的特殊技术根据需要创建值。该技术与一种称为生成器的对象一起使用。因此如果你有一个非常巨大的列表,那么就要考虑
xrange

5

Python
help()
dir()
函数的用法是什么?

Help()

dir()
这两个函数都可以从
Python
解释器直接访问,并用于查看内置函数的合并转储。

help()

函数:
help()
函数用于显示文档字符串,还可以查看与模块,关键字,属性等相关的使用信息。

dir()

函数:
dir()
函数用于显示定义的符号。

6

NumPy
中有哪些操作
Python
列表的函数?

Python

的列表是高效的通用容器。它们支持(相当)有效的插入,删除,追加和连接,
Python
的列表推导使它们易于构造和操作。

它们有一定的局限性:它们不支持像素化加法和乘法等
“向量化”操作,并且它们可以包含不同类型的对象这一事实意味着
Python
必须存储每个元素的类型信息,并且必须执行类型调度代码在对每个元素进行操作时。

NumPy

不仅效率更高
;
它也更方便。你可以免费获得大量的向量和矩阵运算,这有时可以避免不必要的工作。它们也得到有效实施。

NumPy

数组更快,你可以使用
NumPy
FFT
,卷积,快速搜索,基本统计,线性代数,直方图等内置。