华为、阿里巴巴、字节跳动 100+ Python 面试问题总结(一)(1)

简介: 华为、阿里巴巴、字节跳动 100+ Python 面试问题总结(一)(1)

系列文章目录


个人简介:机电专业在读研究生,CSDN内容合伙人,博主个人首页

Python面试专栏:《Python面试》此专栏面向准备面试的2024届毕业生。欢迎阅读,一起进步!🌟🌟🌟

码字不易,如果觉得文章不错或能帮助到你学习,可以点赞👍收藏📁评论📒+关注哦!😊😊😊


本文是Python面试专栏的第一篇。在本专栏中,我将总结华为、阿里巴巴、字节跳动等互联网公司 Python 面试中最常见的 100+ 问题。每道题都提供参考答案,希望能够帮助你在求职面试中脱颖而出,找到一份高薪工作。这些面试题涉及 Python 基础知识、Python 编程、数据分析以及 Python 函数库等多个方面。


Python 面试的基础问题


1. 什么是 Python?使用 Python 的好处是什么


Python 是一种高级的、解释型的、通用的编程语言。作为一种通用语言,它可以使用合适的工具/库来构建几乎任何类型的应用程序。此外,Python 还支持对象、模块、线程、异常处理和自动内存管理,这有助于对现实世界的问题进行建模,并构建应用程序来解决这些问题。

使用 Python 的好处:

  • Python 是一种通用编程语言,它具有简单、易于学习的语法,强调可读性,从而降低了程序维护的成本。此外,该语言能够编写脚本,是完全开源的,并支持鼓励模块化和代码重用的第三方包。
  • 它的高级数据结构与动态类型和动态绑定相结合,吸引了大量开发人员进行快速应用程序开发和部署。


2. 什么是强动态类型语言?


什么是动态类型/静态类型?

在理解动态类型语言之前,我们应该先了解什么是类型检查。

类型检查是一个验证和施加类型约束的过程,编译器或解释器通常在编译或运行阶段做类型检查。用更简单的术语,类型检查仅仅就是查看变量和它们的类型,然后说这个表达式是合理的。

因此,现在我们知道类型检查是什么,明白这些术语真的很简单。

  • 在静态类型语言(statically typed languages)中,类型检查发生在编译阶段(compile time),即代码执行前;
  • 在动态类型语言(dynamically typed languages)中,类型检查发生在运行阶段(run time),即代码执行期间。

性能

  • 静态类型:编译阶段做更多处理,但是运行时性能更好
  • 动态类型:编译阶段更高效,但是运行时的类型检查会影响到性能

灵活性和出错

  • 静态类型:运行时出错机会更小,但是提供给程序员的灵活性不好
  • 动态类型:提供更多的灵活性但是运行时出错机会相对更大

什么是强类型/弱类型?

首先看下什么是强类型,在强类型中,不管在编译时还是运行时,一旦某个类型赋值给某个变量,它会持有这个类型,并且不能同其他类型在计算某个表达式时混合计算

然而,在弱类型中,它是很容易与其他类型混合计算的。

例如,在 Python 中,“1”+ 2 将导致类型错误,因为这些语言不允许 “类型强制转换”(数据类型的隐式转换)。然而,在另一门同样伟大的语言 Javascript 中,将简单地输出 “12” 作为结果。

记住

各种语言按照动态/静态,强/弱类型的划分:

结论

  1. 类型检查确保一个表达式中的变量类型是合法的。在静态类型语言中,类型检查发生在编译阶段;动态类型语言,类型检查发生在运行阶段。
  2. 强类型语言有更强的类型检查机制,表达式计算中会做严格的类型检查;而弱类型语言允许各种变量类型间做一些运算。
  3. Python 是一门强动态类型的语言


3.什么是解释型语言?


解释型语言逐行执行它的语句。Python、Javascript、R、PHP 和 Ruby 等语言是解释型语言的主要例子。用解释型语言编写的程序直接从源代码运行,没有中间的编译步骤。


4. PEP 8 是什么?为什么它很重要?


PEP 8 是 Python 官方推荐的编码规范。其中 PEP 是 Python Enhancement Proposal(Python 增强建议书)的缩写,8 代表的是 Python 代码的样式指南。PEP 8 是向 Python 社区提供信息的官方设计文档,或者描述 Python 或其进程的新特性。PEP 8 特别重要,因为它记录了Python 代码的样式指南。显然,为使代码易读、易懂、易维护需要真诚而严格地遵循这些样式指南。


5. Python 中的作用域是什么?


Python 中的每个对象都在一个作用域内运行。作用域是 Python 中对象保持相关的代码块。命名空间唯一地标识程序中的所有对象。但是,这些名称空间也有一个为它们定义的作用域,可以在没有任何前缀的情况下使用它们的对象。Python 代码执行过程中创建作用域的几个例子如下:

  • 局部作用域指的是当前函数中可用的局部对象。
  • 全局作用域指的是自开始以来在整个代码执行过程中可用的对象。
  • 模块级作用域指的是程序中可访问的当前模块的全局对象。
  • 最外层作用域指的是程序中可调用的所有内置名称。最后搜索此范围内的对象以查找引用的名称。

注意:局部作用域对象可以使用 global 关键字与全局作用域对象同步。


6. 什么是列表和元组?两者的主要区别是什么?


列表和元组都是序列数据类型,可以在 Python 中存储数据。存储在这两个序列中的数据可以具有不同的数据类型。列表用方括号表示,而元组用圆括号表示。


但两者的真正区别是什么呢?两者之间的关键区别在于,列表是可变的,而元组是不可变的对象。这意味着列表可以随时修改、追加或切片,但元组保持不变。可以在 Python IDLE 上运行以下示例来确认差异:

my_tuple = ('sara', 6, 5, 0.97)
my_list = ['sara', 6, 5, 0.97]
print(my_tuple[0])     # output => 'sara'
print(my_list[0])     # output => 'sara'
my_tuple[0] = 'ansh'    # modifying tuple => throws an error
my_list[0] = 'ansh'    # modifying list => list modified
print(my_tuple[0])     # output => 'sara'
print(my_list[0])     # output => 'ansh'


7. Python 中常见的内置数据类型有哪些?


Python 中有几种内置数据类型。虽然 Python 不要求在变量声明期间显式定义数据类型,但如果忽略数据类型的知识及其相互兼容性,则可能会发生类型错误。Python 提供 type() 和 isinstance() 函数来检查这些变量的类型。这些数据类型可分为以下几类:


  • None Type:
    关键字 None 表示 Python 中的空值。可以使用这些 NoneType 对象执行布尔相等运算。
类名 描述
NoneType 表示 Python 中的 NULL 值。

  • 数值类型:
    有三种不同的数值类型——整数、浮点数和复数。此外,布尔类型是整数类型的子类型。
类名 描述
整型 将整数文本(包括十六进制、八进制和二进制数)存储为整数。
浮点型 将包含十进制值和/或指数符号的文本存储为浮点数。
复数型 以(A+Bj)的形式存储复数,并具有属性:realimag
布尔型 存储布尔值(True 或 False)。

  • 序列类型:
    根据 Python 文档,有三种基本的序列类型—— 列表、元组和 range 对象。序列类型定义了用于遍历其元素的 innot in 运算符。这些运算符与比较操作具有相同的优先级。
类名 描述
列表 通常用于存放同类项目集合的可变序列。
元组 通常用于储存异构数据多项集的不可变序列。
range 对象 在执行期间生成的不可变的数字序列。
字符串 由 Unicode 码位构成的不可变序列。

注意: 标准库还包括用于处理的其他类型:二进制数据,如 bytes、bytearray 和 memoryview。

  • 映射类型:
    映射对象可以将可哈希值映射到 Python 中的随机对象。映射对象是可变的,目前只有一种标准映射类型,即字典。
类名 描述
字典 存储以逗号分隔的键:值对列表。

  • 集合类型:
    目前,Python 有两种内置的集合类型—— set 和 frozenset。 set 类型是可变的,其内容可以使用 add()remove() 这样的方法来改变。 由于是可变类型,它没有哈希值,且不能被用作字典的键或其他集合的元素。 frozenset 类型是不可变并且为 hashable,其内容在被创建后不能再改变,因此它可以被用作字典的键或其他集合的元素。
类名 描述
set 不同可哈希对象的可变无序集合。
frozenset 不同可哈希对象的不可变集合。

  • 模块:
    模块是 Python 解释器支持的附加内置类型。模块唯一的特殊操作是属性访问:m.name,这里 m 为一个模块而 name为定义在 m 的符号表中的一个名称。 模块属性可以被赋值。
  • 可调用类型:
    可调用类型是可以应用函数调用的类型。它们可以是用户定义的函数、实例方法、生成器函数以及其他一些内置函数、方法和类。

有关 Python 中数据类型的详细,可以参阅 docs.python.org 中的文档。



相关文章
|
23天前
|
机器学习/深度学习 算法 Java
机器学习、基础算法、python常见面试题必知必答系列大全:(面试问题持续更新)
机器学习、基础算法、python常见面试题必知必答系列大全:(面试问题持续更新)
|
1月前
|
Java C++ Python
【面试宝典】深入Python高级:直戳痛点的题目演示(下)
【面试宝典】深入Python高级:直戳痛点的题目演示(下)
|
1月前
|
设计模式 Unix Python
【面试宝典】深入Python高级:直戳痛点的题目演示(上)
【面试宝典】深入Python高级:直戳痛点的题目演示(上)
|
4月前
|
数据采集 机器学习/深度学习 数据可视化
了解数据科学面试中的Python数据分析重点,包括Pandas(DataFrame)、NumPy(ndarray)和Matplotlib(图表绘制)。
【7月更文挑战第5天】了解数据科学面试中的Python数据分析重点,包括Pandas(DataFrame)、NumPy(ndarray)和Matplotlib(图表绘制)。数据预处理涉及缺失值(dropna(), fillna())和异常值处理。使用describe()进行统计分析,通过Matplotlib和Seaborn绘图。回归和分类分析用到Scikit-learn,如LinearRegression和RandomForestClassifier。
98 3
|
4月前
|
Python
155. 最小栈 力扣 python 空间换时间 o(1) 腾讯面试题
155. 最小栈 力扣 python 空间换时间 o(1) 腾讯面试题
|
4月前
|
存储 算法 索引
1124. 表现良好的最长时间段 (python) 前缀和 分类讨论 最大长度 力扣 面试题
1124. 表现良好的最长时间段 (python) 前缀和 分类讨论 最大长度 力扣 面试题
|
3月前
|
存储 Java
【IO面试题 四】、介绍一下Java的序列化与反序列化
Java的序列化与反序列化允许对象通过实现Serializable接口转换成字节序列并存储或传输,之后可以通过ObjectInputStream和ObjectOutputStream的方法将这些字节序列恢复成对象。
|
6天前
|
存储 算法 Java
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
本文详解自旋锁的概念、优缺点、使用场景及Java实现。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:什么是自旋锁?Java 实现自旋锁的原理?
|
8天前
|
存储 缓存 Java
大厂面试必看!Java基本数据类型和包装类的那些坑
本文介绍了Java中的基本数据类型和包装类,包括整数类型、浮点数类型、字符类型和布尔类型。详细讲解了每种类型的特性和应用场景,并探讨了包装类的引入原因、装箱与拆箱机制以及缓存机制。最后总结了面试中常见的相关考点,帮助读者更好地理解和应对面试中的问题。
29 4
|
1月前
|
算法 Java 数据中心
探讨面试常见问题雪花算法、时钟回拨问题,java中优雅的实现方式
【10月更文挑战第2天】在大数据量系统中,分布式ID生成是一个关键问题。为了保证在分布式环境下生成的ID唯一、有序且高效,业界提出了多种解决方案,其中雪花算法(Snowflake Algorithm)是一种广泛应用的分布式ID生成算法。本文将详细介绍雪花算法的原理、实现及其处理时钟回拨问题的方法,并提供Java代码示例。
67 2