1. Python 语言特性
Q1:Python 是解释型还是编译型?
Python 先编译为字节码,再由虚拟机解释执行。既有编译过程,也有解释执行。
Q2:深拷贝与浅拷贝区别?
浅拷贝共享内部可变对象,深拷贝递归复制。copy.copy和copy.deepcopy。
Q3:is 和 == 区别?is比较身份,==比较值。小整数和字符串驻留可能导致is为 True,但不应依赖。
2. 数据结构
Q4:列表和元组区别?
列表可变,元组不可变。元组可作为字典键,性能略好。
Q5:字典底层实现?
哈希表,开放寻址。Python 3.7+ 保持插入顺序。
Q6:GIL 是什么?
全局解释器锁,保证同一时刻只有一个线程执行字节码。影响 CPU 密集型多线程,不影响 I/O 密集型。
3. 并发编程
Q7:多线程、多进程、协程区别?
多线程共享内存,受 GIL 限制;多进程独立内存,适合 CPU 密集;协程单线程异步,适合 I/O 密集。
Q8:线程池和进程池?concurrent.futures.ThreadPoolExecutor、ProcessPoolExecutor。
Q9:asyncio 原理?
事件循环 + 协程 + Future。遇到 await 挂起,切换其他任务。
4. 内存管理
Q10:引用计数和 GC?
引用计数为主,标记清除和分代回收处理循环引用。
Q11:内存泄漏如何排查?
tracemalloc、objgraph、gc、psutil。
5. 函数与装饰器
Q12:装饰器原理?
接受函数返回新函数,利用闭包。functools.wraps保留元信息。
Q13:闭包是什么?
内部函数引用外部变量,外部函数返回内部函数。
6. 面向对象
Q14:__new__和__init__区别?__new__创建实例,__init__初始化实例。
Q15:MRO 是什么?
方法解析顺序,C3 线性化。super()按 MRO 调用。
7. 框架
Q16:Django 和 Flask 区别?
Django 大而全,自带 ORM、Admin;Flask 轻量灵活。
Q17:FastAPI 优势?
异步、Pydantic、自动文档、高性能。
Q18:DRF 序列化器作用?
对象与 JSON 互转,校验数据。
8. 数据库
Q19:ORM N+1 问题?
循环查询关联对象。使用 select_related、prefetch_related 优化。
Q20:事务隔离级别?
读未提交、读已提交、可重复读、串行化。
9. 项目经验
Q21:如何优化接口性能?
缓存、索引、异步、分页、连接池、CDN。
Q22:如何设计秒杀?
限流、削峰、异步下单、库存预扣、分布式锁。
10. 答题技巧
先结论后原理。
结合项目实际。
主动说坑和优化。
不会的题说思路,不要沉默。
11. 总结
Python 面试不仅考语法,更考原理、并发、内存和工程能力。建议按模块复习,配合手写代码和项目复盘。