PythonPython后端开发面试真题Python八股

Python面试题与八股文汇总:220+ 道 GIL、装饰器、生成器、垃圾回收、多线程协程高频真题分类整理(2026 面经)

面灵AI整理的 Python 八股合集,覆盖语言特性、数据类型与底层实现、拷贝与传参、装饰器与闭包、迭代器与生成器、面向对象、内存管理与垃圾回收、GIL 与并发、Web 框架与手撕题,标注近期实际出题的大厂。

收录题目
221 道
统计周期
截至 2026 年 10 月
近期出题公司字节跳动在招腾讯在招阿里巴巴美团在招百度华为快手京东在招小米网易在招
面灵AI
20 分钟阅读

Python 岗的面试,题目围着一小撮东西打转:GIL 到底锁了什么、装饰器怎么写、深拷贝和浅拷贝差在哪、列表和元组怎么选、垃圾回收靠什么。字节、腾讯、华为、美团换了部门、换了面试官,问到的仍是这几块。原因很直接:Python 上手快,面试官想分辨的是你只会写语法,还是清楚解释器在背后做了什么,所以追问总是从"是什么"落到"底层怎么实现"。

这份合集从公开面经里把 Python 方向反复出现的八股题抽出来重新归类,一共 221 道题,分十一个主题。它只收 Python 语言本身和常见框架,操作系统、网络、数据库这类公共基础不在这里展开,后端岗的完整高频清单可以对照后端开发高频面试题榜单,C++ 方向可以看 C++ 面试题合集。

怎么用这份题单:

  • 题目后面括号里是近期实际问过这道题的大厂,不代表完整名单,也不代表没标注的公司不问
  • Python 八股的追问很有层次:先问"是什么",再问"底层怎么实现",最后问"什么时候会出问题"。只背结论,第二层就会卡住
  • GIL 与并发、装饰器与闭包、垃圾回收、可变对象与拷贝这四块是几乎所有 Python 岗的公共必考区,时间不够就先把它们吃透

主题导航:语言特性与解释器 · 数据类型与内置数据结构 · 可变对象、拷贝与参数传递 · 函数、闭包与装饰器 · 迭代器与生成器 · 面向对象 · 内存管理与垃圾回收 · GIL 与并发编程 · 异常、文件与常用库 · Web 框架 · 手撕与代码题

语言特性与解释器

  • Python 是什么类型的语言?有哪些特点和优缺点?(华为 / 字节跳动 / 阿里巴巴)
  • Python 是解释型语言还是编译型语言?Python 需要编译吗?(字节跳动 / 腾讯)
  • Python 代码的执行过程是怎样的?(华为 / 美团)
  • Python 是强类型还是弱类型?怎么理解它的动态类型?(字节跳动 / 滴滴)
  • Python 是如何实现动态类型的?(字节跳动 / 滴滴)
  • Python 和 Java 的主要区别是什么?(字节跳动 / 腾讯 / 美团)
  • Python 和 C++ 的区别是什么,各自适合什么场景?(字节跳动 / 百度 / 美团)
  • Python、Java、Go 三种语言有什么区别?(腾讯 / 美团 / 字节跳动)
  • Python 和 Go 的区别,不要停留在语法层面。(字节跳动 / 腾讯)
  • Python 和 JavaScript 有什么区别?(京东 / 腾讯)
  • Python 2 和 Python 3 有哪些区别?(美团 / 华为 / 京东)
  • Python 为什么执行速度慢?怎么优化 Python 的性能?(华为 / 腾讯)
  • Python 有 JIT 吗?理论上能不能做?
  • Python 比 Java、Go 快吗?(腾讯)
  • CPython 是什么?解释器还有哪些实现?
  • 字节码是什么,.pyc 文件是怎么来的?
  • Python 为什么用缩进表示代码块?缩进用空格还是 Tab?
  • Python 的命名空间和作用域是什么?LEGB 规则怎么理解?(华为 / 腾讯)
  • Python 的全局变量、局部变量怎么声明?global 和 nonlocal 有什么用?(华为 / 腾讯)
  • Python 是否区分大小写?
  • Python 的虚拟环境有什么用,为什么要用?(百度 / 腾讯)
  • Python 的模块导入机制是怎样的?__init__.py 的作用是什么?
  • Python 模块重载怎么实现?
  • == 和 is 有什么区别?(字节跳动 / 阿里巴巴)
  • a, b = b, a 在 Python 里是怎么实现交换的?
  • Python 里哪些值会被判断为 False?(阿里巴巴)
面灵AI 面试助手

面试官问「Python 的 GIL 是什么?为什么多线程跑不满多核?」,看浮窗当场给你什么

面试官一开口,浮窗就出要点和能直接念的回答,被追问也接得住。共享屏幕时对面看不见。

腾讯会议文件编辑显示周一 14:32
腾讯会议 · Python 开发工程师 · 技术一面REC 00:10
面
面试官
我
面试官:
聆听中18:05
Ctrl+↑回看
Ctrl+↓看新
拖动分割线看面试官那一侧:共享屏幕、窗口录制、截图里都不会出现答案层
浮窗里这道题的回答

核心要点 GIL 是 CPython 解释器里的全局锁、同一时刻只有一个线程执行字节码、保护引用计数等解释器内部状态、CPU 密集型用多进程、IO 密集型多线程和协程照样有效

参考回答 GIL 是 CPython 解释器里的一把全局锁,同一时刻只允许一个线程执行 Python 字节码。它的初衷是保护解释器内部状态,尤其是引用计数,不用给每个对象单独加锁。结果就是多线程在 CPU 密集型任务里无法并行利用多核,反而多了线程切换的开销。但遇到 IO 等待(网络、磁盘、sleep)时线程会主动释放 GIL,所以 IO 密集型任务用多线程或协程依然有效。CPU 密集型任务要么用 multiprocessing 多进程,要么把热点交给 C 扩展、NumPy 这类会释放 GIL 的库。

数据类型与内置数据结构

  • Python 有哪些基本数据类型?(华为 / 字节跳动 / 小米)
  • Python 常用的数据结构有哪些?(蔚来 / 字节跳动 / 百度)
  • 列表、元组、字典、集合各自的特点和区别是什么?(腾讯 / 携程 / 字节跳动)
  • list 和 tuple 的区别是什么,什么时候用元组?(华为)
  • list 和 set 有什么区别?(百度 / 快手)
  • Python 里哪些数据类型是有序的,哪些是无序的?(美团)
  • 字典的底层是怎么实现的?(字节跳动 / 百度)
  • 字典的哈希冲突是怎么处理的?
  • 字典的 key 有什么要求,为什么列表不能当 key?(快手 / 阿里巴巴)
  • 字典的扩容过程是怎样的,时间复杂度是多少?
  • 字典删除一个元素,底层发生了什么?
  • 字典的查找时间复杂度是多少?
  • Python 3.7 之后字典有序是怎么保证的,OrderedDict 还有什么用?
  • list 的底层是怎么实现的,是链表还是数组?(滴滴)
  • list 的 append、insert、pop 时间复杂度分别是多少?(腾讯 / 阿里巴巴)
  • 列表增删元素有哪些方法?(快手 / 网易)
  • 怎么在遍历列表的同时删除元素?
  • 列表去重有哪些方法?怎么保持原顺序?(美团 / 网易)
  • 列表反转有哪几种方法?
  • 切片是什么,[::-1] 和负索引是什么意思?切片会产生新对象吗?(华为 / 百度)
  • 列表推导式是什么,和普通循环相比有什么优势?(携程 / 科大讯飞)
  • 字符串有哪些常用处理方法?(快手)
  • 字符串反转有哪些写法?(腾讯 / 小米)
  • 单引号、双引号、三引号的区别是什么?
  • str 和 bytes 有什么区别?
  • 怎么用 Python 实现队列、栈和链表?(华为 / 腾讯)
  • collections 里的 deque、defaultdict、Counter 分别用在什么场合?
  • set 的实际应用场景有哪些?
  • 元组为什么可以作为字典的 key?元组一定不可变吗?
  • 整数在 Python 里占多少字节,有没有大小上限?
  • /、//、% 在 Python 里分别做什么?5/2 输出多少?

可变对象、拷贝与参数传递

  • 什么是可变对象,什么是不可变对象?各举几个例子。(华为 / 美团 / 商汤)
  • 字符串是可变对象还是不可变对象?(华为 / 哔哩哔哩)
  • 可变对象的原理是什么,不可变对象为什么线程安全?
  • 浅拷贝和深拷贝有什么区别?(华为 / 百度 / 美团)
  • Python 怎么拷贝一个对象,copy 模块怎么用?(华为 / 美团 / 字节跳动)
  • 赋值、浅拷贝、深拷贝三者有什么区别?
  • 对列表切片后修改原列表,新变量会受影响吗?(华为 / 腾讯)
  • Python 是值传递还是引用传递?(阿里巴巴 / 华为 / 哔哩哔哩)
  • 函数传参机制是怎样的,可变对象作参数会发生什么?(华为 / 阿里巴巴)
  • 函数的默认参数为什么不能用可变对象?
  • 函数参数有哪几种,怎么让参数数量不固定?
  • *args 和 **kwargs 有什么区别?(华为 / 网易 / 快手)
  • Python 中的 * 和 ** 除了收集参数还有什么用途?
  • 小整数池和字符串驻留是什么?
  • id() 返回的是什么?

函数、闭包与装饰器

  • 装饰器是什么,有什么作用?(华为 / 百度 / 字节跳动)
  • 装饰器的原理是什么?(华为 / 字节跳动 / 美团)
  • 装饰器的应用场景有哪些,项目里用在哪里?(携程 / 华为 / 蔚来)
  • 手写一个最简单的装饰器。(腾讯 / 小米 / 快手)
  • 怎么写带参数的装饰器?(华为)
  • 多个装饰器叠加时,执行顺序是怎样的?(华为 / 字节跳动)
  • 类装饰器怎么写?
  • functools.wraps 的作用是什么,不加会怎样?
  • 怎么写一个统计函数耗时的装饰器?(腾讯 / 蔚来)
  • 怎么写一个异常自动重试的装饰器?(腾讯)
  • 装饰器和闭包是什么关系?(京东)
  • Python 的闭包是什么,有什么用?(华为 / 字节跳动 / 美团)
  • 闭包里修改外层变量需要注意什么?
  • lambda 表达式是什么,常用在哪些场景?(华为 / 快手 / 百度)
  • lambda 在循环里的延迟绑定问题是什么?
  • map、filter、reduce 分别做什么?
  • 什么是高阶函数?函数在 Python 里为什么是一等公民?
  • 上下文管理器是什么?with 语句的原理是什么,怎么自己实现一个?(华为 / 小米 / 百度)
  • @classmethod、@staticmethod、@property 分别是什么?(华为 / 快手)
  • Python 支持函数重载吗?重载体现在哪里?(华为 / 理想)
  • 偏函数 functools.partial 有什么用?
  • 递归的深度限制是多少,怎么修改?

迭代器与生成器

  • 迭代器和生成器有什么区别?(中兴 / 科大讯飞 / 京东)
  • 可迭代对象和迭代器是什么关系?(百度)
  • 怎么自定义一个迭代器?__iter__ 和 __next__ 分别做什么?
  • 生成器是什么,怎么创建?(华为 / 小米 / 百度)
  • yield 的作用是什么?它和 return 有什么区别?(小鹏 / 百度 / 腾讯)
  • 生成器函数的返回值是什么?
  • yield from 是做什么的?
  • 生成器表达式和列表推导式有什么区别?
  • 生成器的 send、throw、close 方法有什么用?
  • 生成器为什么省内存,适合处理什么场景?
  • 迭代器耗尽之后再次遍历会怎样?
  • 哪些内置数据类型是可迭代的?

面向对象

  • Python 的类有哪些特点?怎么理解 Python 的面向对象?(华为 / 腾讯)
  • 封装、继承、多态在 Python 里分别怎么体现?(华为 / 快手 / 字节跳动)
  • Python 的私有变量怎么实现?单下划线和双下划线有什么区别?
  • 类变量和实例变量有什么区别?
  • 类方法、实例方法、静态方法的区别和使用场景是什么?
  • __init__ 和 __new__ 有什么区别,执行顺序是怎样的?(阿里巴巴 / 腾讯 / 华为)
  • Python 的构造函数和析构函数是什么?(字节跳动 / 华为)
  • 一个对象的创建过程是怎样的?
  • self 是什么?
  • Python 支持多继承吗?MRO 的顺序是怎样的?(华为)
  • 菱形继承是怎么解决的?
  • super() 是怎么工作的?(商汤 / 快手)
  • 魔术方法有哪些,各自什么时候被调用?
  • __slots__ 有什么用?
  • 元类是什么,什么时候会用到?
  • Python 的反射机制是什么?(腾讯)
  • Python 里有接口吗,抽象类怎么写?
  • 怎么实现单例模式?
  • Python 里怎么实现观察者模式?
  • Python 里的类型注解有什么用,会影响运行吗?

内存管理与垃圾回收

  • Python 的垃圾回收机制是怎样的?(字节跳动 / 阿里巴巴 / 百度)
  • Python 的内存是怎么分配和回收的?(华为 / 字节跳动)
  • 引用计数是怎么工作的,有什么缺点?
  • 循环引用怎么处理?(快手 / 美团)
  • 标记清除和分代回收分别解决什么问题?(华为 / 字节跳动 / 滴滴)
  • 分代回收的三代是怎么划分的,什么时候触发?
  • Python 的内存池机制是什么?
  • Python 有内存泄漏吗?既然有 GC 为什么还会泄漏?(阿里巴巴)
  • Python 程序的内存泄漏怎么排查和解决?(字节跳动 / 腾讯)
  • 单进程内存溢出(OOM)怎么解决?(腾讯)
  • Python 和 Java 在内存管理和 GC 上有什么区别?(字节跳动 / 华为 / 网易)
  • Python 和 Go 的内存管理有什么区别?(字节跳动 / 阿里巴巴)
  • Python 和 C 的垃圾回收机制一样吗?(中兴 / 快手)
  • 弱引用 weakref 是什么,解决什么问题?
  • Python 的堆和栈是怎么使用的?(华为 / 美团)
  • del 一个变量会立即释放内存吗?

GIL 与并发编程

  • GIL 是什么,为什么会有它?(华为 / 字节跳动 / 腾讯)
  • GIL 的设计初衷是什么?(腾讯 / 华为)
  • GIL 对 Python 并发有什么影响?(中兴 / 百度)
  • GIL 是什么时候上锁、什么时候释放的?(字节跳动 / 快手)
  • 为什么说 Python 没有真正意义上的多线程?(腾讯)
  • Python 多线程怎么利用多核 CPU?(快手)
  • 有了 GIL,线程里还需要加锁吗?(字节跳动 / 京东)
  • 多线程和多进程怎么选?(百度 / 华为 / 字节跳动)
  • IO 密集型和 CPU 密集型任务分别用线程、进程还是协程?(字节跳动 / 淘天)
  • Python 里怎么创建线程?(华为 / 小米 / 百度)
  • threading 模块里常用的类和方法有哪些?
  • 线程同步有哪些方式,锁、信号量、条件变量怎么用?
  • 线程池和进程池分别怎么用,有什么优点?(华为 / 快手)
  • concurrent.futures 是做什么的?
  • Python 多进程是怎么实现的?进程间怎么通信?(华为 / 美团)
  • Queue 是线程安全的吗?
  • Python 里 dict 在多线程下是否安全,怎么保证?(字节跳动 / 京东)
  • ThreadLocal 是做什么的?
  • 协程是什么,Python 里怎么创建协程?(腾讯 / 快手 / 科大讯飞)
  • asyncio 的原理是什么,事件循环怎么工作?(腾讯 / 快手 / 商汤)
  • async 和 await 分别是什么意思?(腾讯 / 小米)
  • asyncio.gather 相比多线程有什么优势?(阿里巴巴)
  • 协程、线程、进程三者的区别是什么?
  • 协程里调用了阻塞函数会怎样?
  • 除了多进程,Python 还能怎么实现并发?

异常、文件与常用库

  • Python 的异常处理怎么写,有哪些关键字?(百度)
  • try、except、else、finally 的执行顺序是怎样的?
  • 怎么自定义异常?
  • 怎么定位到具体是哪一行报的错?
  • assert 断言是什么?
  • Python 常用的标准库有哪些?(中兴)
  • os 和 sys 模块有什么区别?
  • 文件读取有哪些方式,大文件怎么读?(百度)
  • json 里 loads 和 dumps 的区别是什么?
  • 正则表达式在 Python 里怎么使用?re.match 和 re.search 有什么区别?(京东 / 百度)
  • 怎么处理日期和时间?
  • pip 和 conda 有什么区别?
  • Python 的 logging 模块怎么配置?
  • Python 常用的第三方库有哪些?(字节跳动 / 华为)
  • numpy 数组和 Python 列表有什么区别?
  • pandas 有哪些常用数据结构,怎么做聚合?(华为 / 快手 / 网易)
  • 怎么用 Python 连接数据库?(阿里巴巴)
  • Python 怎么发送 HTTP 请求?
  • Python 代码规范 PEP8 有哪些要求?
  • Python 里的 pytest 和 unittest 有什么区别,fixture 是什么?

Web 框架

  • Flask 和 Django 有什么区别?(知乎)
  • Django、Flask、FastAPI 三者怎么选?
  • Django 的 MVT 架构是什么?
  • Django ORM 是什么,怎么避免 N+1 查询?
  • Flask 的请求上下文是怎么实现的?
  • Flask 的 session 怎么实现,和 JWT 怎么取舍?
  • FastAPI 的异步是怎么实现的?(度小满 / 蚂蚁)
  • FastAPI 里 Pydantic 校验的原理是什么?
  • WSGI 和 ASGI 有什么区别?
  • Gunicorn 为什么要用,worker 数怎么设置?
  • Celery 是什么,一个任务从分发到执行的流程是怎样的?
  • Celery 的 worker 宕机了,任务怎么恢复?
  • Python 后端和 Java 后端有什么区别?(华为 / 腾讯)
  • 浏览器访问一个 Flask 服务的完整流程是什么?

手撕与代码题

  • 手写一个装饰器,统计函数运行时间。(腾讯 / 蔚来)
  • 手写一个带重试的装饰器。(腾讯)
  • 手写单例模式,并说明是否线程安全。
  • 用 Python 实现二叉树的广度优先遍历。(腾讯 / 蔚来)
  • 手写一个生成器函数,按需产出斐波那契数列。
  • 用 Python 实现一个 LRU 缓存。
  • 手写一个上下文管理器,退出时自动关闭资源。
  • 一行代码展开二维列表。(地平线)
  • 给列表去重并按从小到大排序。
  • 判断一个字符串是不是回文。
  • 找出字符串中最长的不重复子串。
  • 合并两个字典,重复的 key 怎么处理?
  • 统计字符串中每个字符出现的次数。
  • 求两个列表的交集、并集和差集。
  • 不用 for 循环,求两个矩阵的欧氏距离(NumPy)。
  • 用 NumPy 实现二分类交叉熵损失函数。
  • 用线程池并发请求多个 URL,并按顺序收集结果。
  • 用 asyncio 同时起 20 个协程请求接口。
  • 处理几十 GB 的文件,怎么用 Python 统计词频?
  • 用 Python 删除目录下的指定文件。
面灵AI 笔试助手

笔试机考碰上这类手撕代码题

不用切屏:鼠标在「解题」按钮上停 1.2 秒,AI 读完题,把思路、复杂度和代码直接贴在考试页上方。

2026 届秋招 · Python 开发工程师笔试nowcoder.com/exam剩余 42:10交卷
已进入全屏防作弊模式,切屏 / 退出全屏将被记录
Online Assessment
算法编程题 · 3 / 12

实现一个带参数的重试装饰器 retry(times):被装饰函数抛出异常时最多重试 times 次,次数用完仍失败就把最后一次异常抛出去。
示例:函数前两次抛 ValueError、第三次返回 3,@retry(3) 后调用结果为 3

solution.py
import functools
def retry(times=3):
# TODO
面灵AI
已连接编程余 27min
悬停回看
把鼠标悬停到下方「解题」按钮 1.2 秒
AI 会自动截屏并解答
也可以直接按 Ctrl+Enter,手不用离开键盘
悬停看新
编程
5min/题
解题
^⏎
加页
^H
重置
悬停 0.8s
退出
悬停 2.5s
悬停 1.2 秒触发,焦点不离开考试页——不切屏、不切窗口;浮窗可调到近乎透明,第二机位拍到的几乎只剩考试页本身

备考重点

Python 八股的核心特点是入门门槛低、追问往往直通解释器底层。GIL 与并发是出现频率最高的一块:几乎每场 Python 岗面试都会碰到,但很少停在"GIL 是什么",追问会落到"它保护了什么、什么时候释放、CPU 密集型怎么办、协程为什么能绕开"。这几个问题能讲清楚,整个并发部分就稳了。

建议按这条主线准备:先把一个对象从创建到销毁走一遍(__new__ 创建、__init__ 初始化、引用计数增减、循环引用交给分代 GC),再顺着每一步补"为什么"和"出问题会怎样"。可变与不可变、浅拷贝与深拷贝、默认参数陷阱这类小题,经常作为现场口述或看代码说输出的题出现,值得单独过一遍。

装饰器、闭包、生成器已经是常规必考项,不是加分项。能手写一个带参数的装饰器、说清 functools.wraps 为什么要加,比背出定义更能拿分。如果目标是后端岗,Web 框架部分(Flask 与 FastAPI 的异步模型、WSGI 与 ASGI、Celery 的任务流转)会是权重更高的一组;数据分析和算法岗则更偏向 numpy、pandas 的使用和手写代码题。

常见问题

这份题单是怎么整理出来的?

来源是公开面经,把 Python 方向反复出现的八股题抽出来重新归类,不包含面灵用户的面试内容。括号里标注的是近期实际问过这道题的大厂,只作参考,不代表完整名单。

Python 面试八股应该先准备哪些部分?

优先顺序建议是:GIL 与并发(线程、进程、协程的取舍)→ 装饰器与闭包 → 可变对象、拷贝与参数传递 → 垃圾回收与内存管理 → 迭代器与生成器 → 面向对象。这几块是各大厂 Python 岗的公共必考区,Web 框架、常用库再按目标岗位补。

面试官问 GIL,一般会追问到什么程度?

通常是三层:先问 GIL 是什么、为什么存在,再追问它保护了什么、什么时候释放、多线程为什么跑不满多核,最后落到取舍问题,比如 CPU 密集型和 IO 密集型分别怎么选线程、进程还是协程,以及有 GIL 的情况下共享数据还要不要加锁。能结合一个具体场景讲清选择理由,比背结论更容易拿分。

没有 Python 项目经验,这部分怎么准备?

优先吃透原理和对比关系(列表对元组、线程对进程对协程、深拷贝对浅拷贝),这是追问最集中的区域。再自己手写一遍带参数的装饰器和一个生成器,跑通之后再回答细节问题会踏实很多。

想要一份属于你的题库?

按你的目标公司和岗位,定制专属高频题

这份合集是官方按岗位整理的通用版。告诉面灵AI 你要面的公司和岗位,结合你的简历,生成一份只属于你的近期高频题和参考回答。

面试实时辅助

下载面灵AI桌面客户端,面试 / 笔试时 AI 实时听题辅助作答。