Python
进阶预计进阶 2-3 个月星团 编程语言
岗位需求
5 核心 · 1 加分
在职岗位将其列为技能要求
核心岗位薪资带
15k-55k
核心要求岗位的月薪区间
需求趋势
上升 3稳定 2收缩 0
核心要求岗位的趋势分布
面试题库
高频真题 · 参考答案随题展开1. 什么是 GIL?它对 Python 并发有什么影响?
GIL 是 CPython 解释器的全局互斥锁,保证同一时刻只有一个线程执行 Python 字节码,简化了内存管理与 C 扩展的安全。后果是 CPU 密集多线程无法利用多核,四个线程算四个任务不会变快;但 IO 阻塞时会释放锁,因此 IO 密集多线程仍有效。绕过方案:CPU 密集用 multiprocessing 多进程或 C 扩展、numpy 等释放 GIL 的库;IO 密集用 asyncio 或线程池;解释器层面已有 per-interpreter GIL 与 free-threaded 实验方向。Python 3.12 后官方在推进移除 GIL 的可选构建,面试提到这一趋势能加分。要点是把「多线程为何还在用」「GIL 释放时机」「选型矩阵」讲成体系。
2. 装饰器的原理是什么?如何编写带参数的装饰器?
装饰器本质是接收函数并返回新函数的高阶函数,@ 语法等价于 func 等于 deco(func),在定义时立即执行包装,利用闭包捕获原函数与参数。编写要点:用 functools.wraps 拷贝元信息,否则被包装函数的名字与文档丢失;支持任意签名用 *args 与 **kwargs 透传。带参数的装饰器是三层结构,最外层收参数并返回真正的装饰器,如 def repeat(times) 返回 deco,deco 返回 wrapper。类装饰器与 functools.wraps、装饰类、装饰器堆叠顺序(自下而上包装、自上而下执行)也是常见追问。典型应用有计时、缓存(lru_cache)、重试、权限校验与路由注册,能现场手写一个计时装饰器并解释闭包变量查找规则即为过关。
3. 迭代器与生成器的关系和区别是什么?
迭代器协议由 __iter__ 与 __next__ 两个方法定义,Iterable 表示可迭代对象(实现了 __iter__),对它调用 iter() 得到迭代器,for 循环等价于不断 next() 直到 StopIteration。生成器是创建迭代器的便捷方式:函数体含 yield 即为生成器函数,调用返回生成器对象,它自动实现了迭代器协议,在 yield 处暂停并保存栈帧状态,惰性求值、内存占用恒定。生成器表达式与 map、filter 同属惰性管道。进阶特性包括 send 向生成器注入值、yield from 委托子生成器,这是协程的历史前身。工程价值:处理大文件逐行流式读取、无限序列、分页拉取拼接,避免一次性载入内存。答题时说明 for 的机制、yield 暂停恢复原理与一个流式处理例子即可。
4. 可变与不可变类型、深浅拷贝分别是什么?
不可变类型(int、float、str、tuple、frozenset)一旦创建值不可改,任何修改都生成新对象,因此可哈希、可作字典键、函数传参安全;可变类型(list、dict、set)原地修改,作为默认参数会被多次调用共享,产生经典 bug,应默认用 None 哨兵。赋值只复制引用,b 是 a 后两者同指一个对象。浅拷贝(copy 或切片、工厂函数)新建顶层容器但元素仍是引用,嵌套可变对象仍共享;深拷贝 deepcopy 递归复制整棵对象图并用 memo 处理循环引用。判别用 is 与 id。面试常考默认参数陷阱与列表乘法初始化二维数组的坑(rows 共享同一内层列表),能讲清共享层级即满分。
5. Python 的内存管理与垃圾回收机制是怎样的?
CPython 以引用计数为主:每个对象记录引用数,归零立即回收,优点是即时、开销分散;缺点是无法处理循环引用且维护计数有成本。因此补充了分代垃圾收集器,专找循环引用:对象按存活时间分为 0、1、2 三代,新对象在第 0 代,回收采用标记清除思路遍历对象图,存活对象晋升老代,老代回收频率低,整体摊销开销。gc 模块可开关与调阈值,弱引用 weakref 可观察对象生命周期而不增加计数。另有关键优化:小整数缓存与字符串驻留,-5 到 256 的整数全局共享;内存池按大小分级管理减少系统调用。容器只存引用不存对象本体,del 只是删引用。把主副机制与三代的动机讲全即是好答案。
官方文档
1 条语言参考与标准库权威手册,中文版免费在线
推荐教程
2 条中文经典入门路径,语法速查与实例丰富
星标极高的中文进阶路线仓库,覆盖语法到 Web 与爬虫
推荐课程
1 条免费认证课程体系,边做项目边巩固 Python 与前端
上手实践
2 条免费练习加导师代码评审,训练地道的 Pythonic 写法
交互式短课带在线运行环境,数据方向实践首选
难度档决定星等与难度分权重(入门 1 / 进阶 2 / 精通 3);学习资源由编辑部遴选并持续维护, 经验心得欢迎在上方「知识分享」区署名分享。

