覆盖基础 + 进阶 + 高级 + 实战,按面试出现频率排序,可以直接背 + 理解。
一、基础必刷(1–10)
1️⃣ Python 是解释型还是编译型?
答:
表面是解释型
实际流程:
py → 字节码(.pyc) → PVM 执行
2️⃣ is 和 == 的区别?
答:
==:值是否相等is:是否是同一个对象(内存地址)
3️⃣ Python 有哪些不可变类型?
答:
int, float, str, tuple, frozenset
4️⃣ dict 的 key 可以是什么类型?
答:
必须是可 hash 的不可变对象
如:
int / str / tuple
5️⃣ None、False、0 的区别?
答:
三者都为假
但彼此不相等,也不是同一对象
6️⃣ 深拷贝 vs 浅拷贝?
答:
浅拷贝:只复制第一层引用
深拷贝:递归复制所有对象
7️⃣ *args 和 **kwargs 是什么?
答:
*args:接收位置参数**kwargs:接收关键字参数
8️⃣ Python 中如何交换两个变量?
答:
a, b = b, a
9️⃣ Python 为什么支持多重赋值?
答:
基于元组打包 / 解包
🔟 range 和 xrange 的区别?
答:
Python3 只有
range,是惰性迭代器
二、进阶必刷(11–20)
1️⃣1️⃣ 什么是装饰器?
答:
本质:函数作为参数 & 返回函数
用于增强函数功能(日志、鉴权、缓存)
1️⃣2️⃣ 多个装饰器执行顺序?
答:
@A @B def f(): ... # 执行顺序:A(B(f))1️⃣3️⃣ 生成器的优势?
答:
节省内存
惰性计算
适合大数据流
1️⃣4️⃣ yield 和 return 的区别?
答:
yield返回值并保存状态return直接结束函数
1️⃣5️⃣ Python 的垃圾回收机制?
答:
引用计数
分代回收
解决循环引用
1️⃣6️⃣ GIL 是什么?
答:
全局解释器锁
限制多线程 CPU 并行
IO 密集仍然有效
1️⃣7️⃣ list 和 tuple 区别?
答:
list 可变
tuple 不可变,性能略好
1️⃣8️⃣ dict 查找时间复杂度?
答:
平均 O(1)
最坏 O(n)
1️⃣9️⃣ Python 中的闭包?
答:
函数嵌套
内部函数引用外部变量
2️⃣0️⃣ 如何修改闭包中的变量?
答:
使用
nonlocal
三、高级 & 实战(21–30)
2️⃣1️⃣ Python 中的多线程适合什么场景?
答:
IO 密集型(网络、文件、爬虫)
2️⃣2️⃣ 多进程 vs 多线程?
答:
多线程:IO 密集
多进程:CPU 密集
2️⃣3️⃣ 协程是什么?
答:
用户态线程
async / await 实现
基于事件循环
2️⃣4️⃣ asyncio 为什么快?
答:
无线程切换开销
高并发 IO
2️⃣5️⃣ with 的原理?
答:
上下文管理器
__enter__/__exit__
2️⃣6️⃣new和init区别?
答:
__new__:创建对象__init__:初始化对象
2️⃣7️⃣ 常用魔法方法?
答:
__str____repr____len____call__
2️⃣8️⃣ 如何实现 LRU 缓存?
答:
collections.OrderedDict或
functools.lru_cache
2️⃣9️⃣ Django QuerySet 是立即执行吗?
答:
否,惰性执行
在迭代 / list / len / bool 时触发
🔟 FastAPI 为什么快?
答:
ASGI
原生 async
Pydantic 高效校验
✅ 面试官评分重点
| 能力 | 是否关键 |
|---|---|
| 原理理解 | ⭐⭐⭐⭐⭐ |
| 场景说明 | ⭐⭐⭐⭐ |
| 对比能力 | ⭐⭐⭐⭐ |
| 实战经验 | ⭐⭐⭐⭐⭐ |