☰
Python开发岗面试,这八个问题必问
2026/9/28 4:02:40 网站建设 项目流程

Python开发岗面试,技术面看似范围很广,但高频考点其实高度集中。下面这八个问题,几乎覆盖了语言基础、并发、内存和工程优化的核心。准备到位,你就能掌握面试主动权。

一、说说GIL,它对多线程有什么影响?

这是Python面试的“开场必问”。GIL是全局解释器锁,CPython中同一时刻只有一个线程执行字节码。所以多线程无法利用多核做CPU并行。回答时要补一句:IO密集型任务仍适合多线程,因为等待网络或磁盘时会释放GIL;CPU密集型任务应选多进程、C扩展或分布式。能讲清适用场景,比背定义更加分。

二、列表和元组有什么区别?深拷贝和浅拷贝呢?

列表可变,元组不可变。元组本身不可变,但内部元素若可变,仍可被修改。浅拷贝只复制外层容器,内层对象仍共享引用;深拷贝会递归复制所有层级。这里常引申出“可变默认参数”陷阱:def f(x=[])会导致多次调用共享同一个列表。正确写法是用None占位,再在函数内初始化。

三、装饰器是什么?手写一个。

装饰器本质是高阶函数:接收函数,返回新函数。它常用于日志、鉴权、缓存、重试和性能统计。手写时记得用functools.wraps保留原函数元信息。例如一个计时装饰器:记录开始时间,执行原函数,最后打印耗时。面试官想看的不是语法,而是你是否理解闭包、函数是一等公民,以及装饰器在工程中的解耦价值。

四、迭代器和生成器有什么区别?

可迭代对象实现__iter__,迭代器实现__next__。生成器是创建迭代器的语法糖,用yield实现惰性求值。它的优势是省内存,适合处理大文件、数据流和无限序列。你可以说:“读取10GB日志时,我用生成器逐行处理,避免一次性加载导致内存溢出。”一句话就能把知识点变成项目经验。

五、多线程、多进程、协程怎么选?

IO密集型:多线程或协程;CPU密集型:多进程;高并发网络IO:asyncio。协程在单线程事件循环中切换,开销远小于线程。回答时不要只说“协程快”,而要讲取舍:多进程内存隔离但通信成本高;多线程共享内存但需加锁;协程适合高并发但阻塞调用会拖垮事件循环。

六、Python的垃圾回收机制是什么?

引用计数为主,标记清除和分代回收为辅。引用计数实时释放对象,但无法处理循环引用;标记清除负责找出不可达对象,分代回收提升效率。常见内存泄漏包括全局缓存、未关闭文件、循环引用和长期存活的回调。能提到weakref、gc模块和__del__,说明你不仅会用Python,还懂底层。

七、with上下文管理器的原理是什么?

with依赖__enter__和__exit__,或contextlib.contextmanager。它确保资源在异常时也能释放,常用于文件、锁、数据库连接和临时状态切换。面试官可能让你手写一个上下文管理器。回答重点:不是只会写with open,而是理解异常安全与资源管理,这是工程代码可靠性的基础。

八、线上Python服务变慢,你怎么排查优化?

这是区分初中级和高级开发者的题。思路:先看监控和日志,再用cProfile、py-spy定位CPU热点;查数据库慢查询、索引、缓存命中率;看是否有阻塞IO、锁竞争、内存泄漏。优化手段包括异步化、批量操作、加缓存、生成器、连接池和算法优化。最后一定要结合项目讲结果,例如“接口P99从800ms降到120ms”。

这八个问题背后,其实是四条主线:语言特性、并发模型、内存管理、工程优化。面试时不要只背答案,要主动关联项目,讲清取舍和结果。当你把“我知道”变成“我做过,并且量化了收益”,薪资自然有谈判空间。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询