Python面试高频题

基础语法与数据类型

Python中可变与不可变数据类型的区别是什么?可变类型包括列表、字典、集合,修改时内存地址不变;不可变类型包括数字、字符串、元组,修改时会创建新对象。

深拷贝与浅拷贝的区别是什么?浅拷贝只复制父对象,子对象仍共享引用;深拷贝会递归复制所有子对象,完全独立。可使用copy模块的deepcopy()实现。

列表推导式与生成器表达式的区别?列表推导式用[]立即生成列表,占用内存;生成器表达式用()返回迭代器,惰性计算节省内存。

函数与装饰器

*args**kwargs的作用是什么?*args接收任意数量位置参数,**kwargs接收任意数量关键字参数,常用于函数参数传递的灵活性。

装饰器的实现原理是什么?装饰器本质是接受函数作为参数的高阶函数,通过闭包和函数嵌套实现功能扩展,常用@语法糖简化调用。

闭包的定义与使用场景?闭包指嵌套函数引用外层非全局变量,常见于装饰器、回调函数等需要保持状态的场景。

面向对象编程

类变量与实例变量的区别?类变量由所有实例共享,通过类名或实例访问;实例变量属于单个实例,通过self绑定。

__new____init__的区别?__new__负责创建实例,返回实例对象;__init__负责初始化实例属性,无返回值。

多继承的MRO顺序如何确定?Python使用C3算法确定方法解析顺序,可通过类名.__mro__查看继承链。

并发与异步

GIL对多线程的影响是什么?全局解释器锁限制同一时刻只有一个线程执行字节码,CPU密集型任务建议用多进程替代。

协程与线程的区别?协程是用户态轻量级线程,通过事件循环调度;线程是内核态调度,协程更高效但无法利用多核。

asyncio的核心组件有哪些?包括事件循环、协程、Future对象和任务,用于编写单线程并发代码。

内存管理与性能优化

引用计数与垃圾回收机制如何工作?引用计数为主,无法解决循环引用时,分代回收机制介入处理。

如何分析Python程序性能?使用cProfile模块统计函数耗时,memory_profiler分析内存使用,timeit测量代码片段执行时间。

常见的性能优化手段有哪些?包括使用内置函数、减少全局变量、局部变量访问更快、利用lru_cache缓存等。

标准库与第三方库

collections模块的常用类有哪些?defaultdict自动初始化字典,Counter统计元素频率,deque双端队列等。

itertools模块的核心功能是什么?提供迭代器工具如chain连接迭代器,groupby分组,product笛卡尔积等。

requests库如何处理会话?通过Session对象保持cookies和连接池,适合多次请求同一主机场景。

代码规范与设计模式

PEP8规范的主要要求有哪些?包括4空格缩进、行字符不超过79、导入分行、操作符两侧空格等。

单例模式的Python实现方式?使用模块天然单例特性,或通过__new__控制实例化,或装饰器实现。

工厂模式的应用场景?当创建逻辑复杂时,通过工厂方法封装对象创建过程,降低耦合度。

算法与数据结构

实现快速排序的Python代码:

python 复制代码
def quick_sort(arr):
    if len(arr) <= 1:
        return arr
    pivot = arr[len(arr)//2]
    left = [x for x in arr if x < pivot]
    middle = [x for x in arr if x == pivot]
    right = [x for x in arr if x > pivot]
    return quick_sort(left) + middle + quick_sort(right)

二叉树层次遍历的实现:

python 复制代码
from collections import deque
def level_order(root):
    if not root: return []
    queue = deque([root])
    res = []
    while queue:
        level = []
        for _ in range(len(queue)):
            node = queue.popleft()
            level.append(node.val)
            if node.left: queue.append(node.left)
            if node.right: queue.append(node.right)
        res.append(level)
    return res
数据库与ORM

SQLAlchemy核心组件有哪些?包括Engine连接池、Session会话管理、ORM映射模型和查询API。

如何优化Django的数据库查询?使用select_related预取外键,prefetch_related预取多对多,only指定查询字段避免全量加载。

Web开发相关

Django中间件的工作流程?请求阶段按顺序执行process_request,视图处理后逆序执行process_response,支持异常处理中间件。

Flask的上下文机制是什么?应用上下文存储全局数据,请求上下文存储请求周期数据,通过栈结构管理多应用/请求场景。

异常处理与调试

自定义异常的实现方式?继承Exception类,可添加额外属性,通过raise触发,try/except捕获。

如何调试内存泄漏问题?使用objgraph可视化对象引用关系,gc模块检查不可达对象,tracemalloc跟踪内存分配。

相关推荐
AAD555888993 小时前
数字仪表LCD显示识别与读数:数字0-9、小数点及单位kwh检测识别实战
python
开源技术5 小时前
Python Pillow 优化,打开和保存速度最快提高14倍
开发语言·python·pillow
芝士爱知识a6 小时前
2026年AI面试软件推荐
人工智能·面试·职场和发展·大模型·ai教育·考公·智蛙面试
毕设源码-朱学姐6 小时前
【开题答辩全过程】以 基于JavaWeb的网上家具商城设计与实现为例,包含答辩的问题和答案
java
Li emily6 小时前
解决港股实时行情数据 API 接入难题
人工智能·python·fastapi
wfeqhfxz25887826 小时前
农田杂草检测与识别系统基于YOLO11实现六种杂草自动识别_1
python
mftang7 小时前
Python 字符串拼接成字节详解
开发语言·python
0思必得07 小时前
[Web自动化] Selenium设置相关执行文件路径
前端·爬虫·python·selenium·自动化
石去皿7 小时前
大模型面试通关指南:28道高频考题深度解析与实战要点
人工智能·python·面试·职场和发展
jasligea7 小时前
构建个人智能助手
开发语言·python·自然语言处理