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跟踪内存分配。

相关推荐
源代码•宸2 小时前
Golang原理剖析(map面试与分析)
开发语言·后端·算法·面试·职场和发展·golang·map
黎雁·泠崖2 小时前
Java数组入门:定义+静态/动态初始化全解析(隐式转换+案例+避坑指南)
java·开发语言·python
梅羽落2 小时前
fastapi速成2
python·github·fastapi
Knight_AL2 小时前
设计模式之责任链模式:原理解析 + Java 示例
java·设计模式·责任链模式
灵活用工平台2 小时前
灵活用工平台注册流程图
python·流程图
1candobetter2 小时前
JAVA后端开发——深入理解 Java Static
java·开发语言
2501_905967332 小时前
双目视觉:CREStereo论文超详细解读
人工智能·python·计算机视觉·双目视觉
狗狗学不会2 小时前
Pybind11 封装 RK3588 全流程服务:Python 写逻辑,C++ 跑并发,性能起飞!
c++·人工智能·python·目标检测
一念一花一世界2 小时前
PostIn项目实战 - 使用Mock数据尽早满足前后端接口开发需求
java·mock·postin·接口管理工具