知名IT大厂常用的50个Python面试问答(含标准答案)

作者 : IT 大叔 本文共5758个字,预计阅读时间需要15分钟 发布时间: 2020-08-11

知名IT大厂常用的50个Python面试问答(含标准答案)插图

这篇文章将涵盖有关Python编程语言的面试问题。尽管此列表并不详尽,但它应该使您对可以预期的问题类型有一个很好的了解。

这是将要涵盖的问题列表:

Python语言基础

  • 问题1:列表和元组有什么区别?
  • 问题2:如何将列表转换为元组?
  • 问题3:数组和列表之间有什么区别?
  • 问题4:如何将列表转换为数组?
  • 问题5:如何在Python中管理内存?
  • 问题6:如何在Python中实现多线程?
  • 问题7:什么是猴子修补?
  • 问题8:什么是lambda函数?举例说明什么时候有用,什么时候没用
  • 问题9:什么是酸洗和酸洗?
  • 问题10:与(嵌套)Python列表相比,NumPy数组具有哪些优势?
  • 问题11:通过示例说明Python中的继承
  • 问题12:Python中的多态是什么?
  • 问题13:解释range()和xrange()之间的区别
  • 问题14:解释Flask和Django之间的区别
  • 问题15:什么是PYTHONPATH?
  • 问题16:什么是PEP 8?
  • 问题17:什么是Python装饰器?
  • 问题18:什么是init?
  • 问题19:什么是三元运算符?
  • 问题20:Python中的全局变量和局部变量是什么?
  • 问题21:Python中的@property是什么?
  • 问题22:在Python中如何使用try / except?
  • 问题23:解释Python 2和Python 3之间的区别
  • 问题24:python中的join方法是什么?
  • 问题25:什么是字典理解?
  • 问题26:如何在Python中进行深层复制?
  • 问题27:如何检查Python字典中是否存在键?
  • 问题28:如何用Python实现记忆化?
  • 问题29:如何在Python中对字典进行排序?
  • 问题30:如何以及何时使用any()和all()?
  • 问题31:什么是Python文档字符串?
  • 问题32:编写Python函数并说明发生了什么。
  • 问题33:解释Python中生成器和迭代器之间的区别。
  • 问题34:Python中的defaultdict是什么?
  • 问题35:什么是Python模块?

Python编码问题

  • 问题36:在Python中反转字符串
  • 问题37:检查Python字符串是否包含另一个字符串
  • 问题38:在Python中实现广度优先搜索(BFS)
  • 问题39:在Python中实现深度优先搜索(DFS)
  • 问题40:在Python中实现通配符
  • 问题41:在Python中实现合并排序
  • 问题42:在Python中实现Dijkstra的算法
  • 问题43:合并两个排序的列表
  • 问题44:找到两个加起来为“ k”的数字
  • 问题45:查找列表中的第一个非重复整数
  • 问题46:找到链表的中间值
  • 问题47:反转队列的第一个“ k”元素
  • 问题48:找出二叉搜索树(BST)的高度
  • 问题49:将最大堆转换为最小堆
  • 问题50:在链表中检测循环

Python面试问题-语言特定

问题1:列表和元组有什么区别?

清单 元组
列表由可变对象组成。(创建后可以更改的对象) 元组由不可变的对象组成。(创建后无法更改的对象)
列表有很大的内存。 元组的内存很小。
列表存储在两块内存中(一个是固定大小的,另一个是可变大小的,用于存储数据) 元组存储在单个内存块中。
创建列表的速度较慢,因为需要访问两个内存块。 创建元组比创建列表快。
列表中的元素可以删除或替换。 元组中的元素无法删除或替换。
列表中的数据存储在[]括号中。例如[1,2,3] 元组的数据存储在()括号中。例如(1,2,3)

什么时候使用:

一个元组,只要用户知道什么被插入的元组应该被使用。假设一所大学将其学生的信息存储在一个数据结构中;为了使此信息保持不变,应将其存储在元组中。

由于列表为用户提供了更轻松的可访问性,因此当需要存储相似类型的对象时,应使用列表。例如,如果杂货店需要将所有乳制品存储在一个字段中,则应使用一个列表。

问题2:如何将列表转换为元组?

my_list = [50, "Twenty", 110, "Fifty", "Ten", 20, 10, 80, "Eighty"] my_tuple = (my_list[0], my_list[len(my_list) - 1], len(my_list)) print(my_tuple)

我们要做的就是创建一个包含三个元素的元组。元组的第一个元素是列表的第一个元素,可以使用来找到my_list[0]

元组的第二个元素是列表中的最后一个元素。my_list[len(my_list) - 1]会给我们这个元素。我们也可以使用该pop()方法,但这会更改列表。

问题3:数组和列表之间有什么区别?

清单 数组
Python列表非常灵活,可以保存任意数据。 Python数组只是C数组的一个薄包装。
列表是Python语法的一部分,因此不需要首先声明它们。 首先需要从其他库(即numpy)中导入或声明数组。
列表还可以以省时的方式快速调整大小。这是因为Python在初始化时会初始化列表中的一些额外元素。 数组无法调整大小。相反,需要将一个数组的值复制到另一个更大的数组。
列表可以保存异构数据。 阵列只能存储同质数据。它们的值具有统一的数据类型
数学函数不能直接应用于列表。相反,必须将它们分别应用于每个元素。 数组专门针对算术计算进行了优化。
由于为列表分配了一些额外的元素,因此可以消耗更多的内存,从而可以更快地附加项目。 由于数组保持其首次初始化时的大小,因此它们是紧凑的。

问题4:如何将列表转换为数组?

在编程过程中,有些情况下您需要将现有列表转换为数组以对其执行某些操作(数组使数学运算可以以列表不执行的方式对其执行)。

在这里,我们将使用numpy.array()。numpy库的此函数将列表作为参数,并返回包含列表中所有元素的数组。请参阅以下示例:

  1. python中的内存管理由Python专用堆空间管理。所有Python对象和数据结构都位于私有堆中。程序员无权访问此私有堆。python解释器代替了这个。
  2. Python对象的堆空间分配是由Python的内存管理器完成的。核心API提供了一些工具供程序员使用。
  3. Python还具有一个内置的垃圾收集器,该垃圾收集器回收所有未使用的内存,并使其可用于堆空间。

问题6:如何在Python中实现多线程?

  1. Python有一个多线程程序包,但是如果您想使用多线程来加快代码速度,那么使用它通常不是一个好主意。
  2. Python具有称为全局解释器锁(GIL)的构造。GIL确保您的“线程”之一只能在任何一次执行。线程获取GIL,做一些工作,然后将GIL传递到下一个线程。
  3. 这发生得非常快,以至于人眼似乎您的线程正在并行执行,但是实际上它们只是使用相同的CPU内核轮流执行。
  4. 所有这些GIL传递都会增加执行开销。这意味着,如果您想使代码运行更快,那么使用线程包通常不是一个好主意。

问题7:什么是猴子修补?

在Python中,术语“猴子补丁”仅指运行时对类或模块的动态修改。

问题8:什么是lambda函数?举例说明什么时候有用,什么时候没用。

lambda函数是一个小的匿名函数,它返回一个对象。

lambda返回的对象通常被分配给变量或用作其他更大函数的一部分。

代替用于创建函数的常规def关键字,通过使用lambda关键字定义了lambda函数。lambda的结构如下所示:

::__IHACKLOG_REMOTE_IMAGE_AUTODOWN_BLOCK__::0

Lambda的目的

Lambda比完整功能更具可读性,因为它可以内联编写。因此,当函数表达式较小时,最好使用lambda。

lambda函数的优点在于它们返回函数对象。这使它们在与之类的函数(mapfilter需要函数对象作为参数)一起使用时很有帮助。

当表达式超过一行时,Lambda无效。

问题9:什么是酸洗和酸洗?

Pickle模块接受任何Python对象并将其转换为字符串表示形式,然后使用转储函数将其转储到文件中,此过程称为pickling。从存储的字符串表示中检索原始Python对象的过程称为解开。

继续学习

练习最常见的Python面试问题,并观察自己的信心飞涨。Educative的基于文本的课程易于浏览,并具有实时的浏览器内编码环境-使学习快速高效。

摸索编码面试:编码问题的模式

问题10:与(嵌套)Python列表相比,NumPy数组具有哪些优势?

  1. Python的列表是有效的通用容器。它们支持(相当)高效的插入,删除,附加和连接,并且Python的列表理解使它们易于构造和操作。
  2. 它们有一定的局限性:它们不支持“向量化”操作,例如按元素加法和乘法,并且它们可以包含不同类型的对象这一事实意味着Python必须存储每个元素的类型信息,并且在操作时必须执行类型调度代码在每个元素上。
  3. NumPy不仅效率更高;这也更加方便。您可以免费获得许多矢量和矩阵运算,有时这可以避免不必要的工作。而且它们也得到有效实施。
  4. NumPy数组速度更快,您可以使用NumPy,FFT,卷积,快速搜索,基本统计信息,线性代数,直方图等内置大量内容。

问题11:通过示例说明Python中的继承

继承允许一个类获取另一类的所有成员(例如属性和方法)。继承提供了代码可重用性,使创建和维护应用程序变得更加容易。我们从中继承的类称为超类,而继承的类称为派生/子类。

它们是Python支持的不同类型的继承:

  1. 单一继承–派生类获取单个超类的成员。
  2. 多级继承-从基类base1继承的派生类d1和从base2继承的d2。
  3. 层次继承–从一个基类可以继承任意数量的子类
  4. 多重继承–派生类继承自多个基类。

问题12:Python中的多态是什么?

多态性是指采取多种形式的能力。因此,例如,如果父类具有名为ABC的方法,则子类也可以具有具有其自身的参数和变量的同名ABC的方法。Python允许多态。

问题13:解释之间的差异range()xrange()

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

这意味着xrange在运行时实际上不会像range那样生成静态列表。它使用一种称为yield的特殊技术根据需要创建值。该技术与一种称为生成器的对象一起使用。

问题14:解释Flask和Django之间的区别

Django是一个Python网络框架,提供了一个开放源代码的高级框架,“鼓励快速开发和简洁实用的设计”。快速,安全和可扩展。Django提供了强大的社区支持和详细的文档。

该框架是一个包容性软件包,在您创建应用程序时,即可在其中获得管理面板,数据库界面和目录结构。此外,它包括许多功能,因此您不必添加单独的库和依赖项。它提供的一些功能包括用户身份验证,模板引擎,路由,数据库模式迁移等等。

Django框架非常灵活,您可以在其中与大型公司的MVP一起使用。从某些角度来看,使用Django的一些最大的公司是Instagram,Dropbox,Pinterest和Spotify。

Flask被认为是一个微框架,是一个简约的Web框架。它较少包含电池,这意味着它缺少像Django这样的全栈框架所提供的许多特性和功能,例如Web模板引擎,帐户授权和身份验证。

Flask极简且轻巧,这意味着您可以在编码时添加所需的扩展和库,而框架不会自动为其提供扩展和库。Flask背后的理念是,它仅提供构建应用程序所需的组件,因此您具有灵活性和控制力。换句话说,它是不受限制的。它提供的一些功能包括:内置int开发服务器,Restful请求分派,Http请求处理等。

问题15:什么是PYTHONPATH?

它是环境变量,在导入模块时使用。每当导入模块时,都会查找PYTHONPATH以检查各个目录中是否存在导入的模块。解释器使用它来确定要加载哪个模块。

问题16:什么是PEP 8?

PEP代表Python增强提案。它是一组规则,用于指定如何格式化Python代码以实现最大的可读性。

问题17:什么是Python装饰器?

装饰器是Python中的一种设计模式,允许用户在不修改其结构的情况下向现有对象添加新功能。通常在要装饰的函数定义之前调用装饰器。

问题18:什么是init?

__init__是Python中的方法或构造函数。创建类的新对象/实例时,将自动调用此方法以分配内存。所有类都有该__init__方法。

问题19:什么是三元运算符?

三元运算符是用Python编写条件语句的一种方式。顾名思义,该Python运算符由三个操作数组成。

注意:三元运算符可以看作是if-else语句的简化的单行版本,用于测试条件。

句法

三元运算符中的三个操作数包括:

  • 条件:一个布尔表达式,其值为true或false。
  • true_val如果表达式的计算结果为true,则将分配一个值。
  • false_val如果表达式的计算结果为false,则分配一个值。
var = true_val if condition else false_val

(赋值)运算符var左侧的变量=将被分配:

  • value1如果booleanExpression的计算结果为true
  • value2如果booleanExpression的计算结果为false

# USING TERNARY OPERATOR to_check = 6 msg = "Even" if to_check%2 == 0 else "Odd" print(msg) # USING USUAL IF-ELSE msg = "" if(to_check%2 == 0): msg = "Even" else: msg = "Odd" print(msg)

问题20:Python中的全局变量和局部变量是什么?

全局变量:

在函数外部或全局空间中声明的变量称为全局变量。程序中的任何函数都可以访问这些变量。

局部变量:

在函数内部声明的任何变量都称为局部变量。此变量存在于局部空间而不是全局空间中。

免责声明:
1. 本站资源转自互联网,源码资源分享仅供交流学习,下载后切勿用于商业用途,否则开发者追究责任与本站无关!
2. 本站使用「署名 4.0 国际」创作协议,可自由转载、引用,但需署名原版权作者且注明文章出处
3. 未登录无法下载,登录使用金币下载所有资源。
IT小站 » 知名IT大厂常用的50个Python面试问答(含标准答案)

常见问题FAQ

没有金币/金币不足 怎么办?
本站已开通每日签到送金币,每日签到赠送五枚金币,金币可累积。
所有资源普通会员都能下载吗?
本站所有资源普通会员都可以下载,需要消耗金币下载的白金会员资源,通过每日签到,即可获取免费金币,金币可累积使用。

发表评论