Python 基础语法与数据结构
在 Python 常见面试题 中,基础部分往往考察候选人对语言核心特性的理解深度。不仅仅是知道语法,更要理解其背后的内存管理和对象模型。
1.1 可变与不可变类型
Python 中的数据类型分为可变(Mutable)和不可变(Immutable)两类。这是面试中的必考题,理解这一点对于掌握函数参数传递机制至关重要。
| 类型 | 示例 | 说明 |
|---|---|---|
| 不可变 | int, float, str, tuple, frozenset | 修改值时会创建新对象,原引用指向新地址。 |
| 可变 | list, dict, set | 修改值时原地改变,引用地址不变。 |
1.2 列表推导式与生成器
列表推导式是 Python 的语法糖,能极大地简化代码。但需注意内存占用问题,大数据量时应使用生成器。
列表推导式
squares = [x2 for x in range(10)]生成器表达式(节省内存)
gen = (x2 for x in range(10)) print(next(gen)) # 输出 0 print(next(gen)) # 输出 1
Python 高级特性与面向对象
进阶面试中,Python 常见面试题 会深入考察装饰器、上下文管理器、元类等高级特性。这些特性体现了 Python 的哲学思想。
装饰器 (Decorator)
装饰器本质上是高阶函数,用于在不修改原函数代码的前提下增加功能。常用于日志记录、性能测试、事务处理等。
import functools
def my_decorator(func):
@functools.wraps(func)
def wrapper(args, kwargs):
print("Before function call")
result = func(args, kwargs)
print("After function call")
return result
return wrapper
@my_decorator
def say_hello():
print("Hello!")
say_hello()
面向对象 (OOP)
Python 支持封装、继承和多态。面试常问 __new__ 与 __init__ 的区别。
- __new__: 静态方法,负责创建实例,返回实例对象。
- __init__: 实例方法,负责初始化实例属性,无返回值。
- 单例模式通常通过重写 __new__ 实现。
上下文管理器 (Context Manager)
使用 with 语句管理资源,确保资源在使用后正确释放。实现 __enter__ 和 __exit__ 方法即可自定义上下文管理器。
class MyContext:
def __enter__(self):
print("Enter context")
return self
def __exit__(self, exc_type, exc_val, exc_tb):
print("Exit context")
return False # 不抑制异常
with MyContext() as ctx:
print("Inside context")
Web框架与并发编程
对于后端开发岗位,Python 常见面试题 必然涉及 Django/Flask 框架原理及并发编程模型(GIL、多线程、多进程、协程)。
Django 中间件
中间件是介于请求和响应之间的钩子框架。每个中间件组件负责完成特定的功能,如身份验证、CSRF 防护等。顺序执行,进入时从上到下,返回时从下到上。
GIL (全局解释器锁)
GIL 是 CPython 解释器中的一个互斥锁,保证同一时刻只有一个线程在执行字节码。这导致 Python 多线程无法利用多核 CPU 优势,计算密集型任务建议使用多进程。
Asyncio 协程
基于事件循环的单线程并发模型。通过 async/await 语法实现非阻塞 I/O 操作,适合高并发 I/O 密集型场景,如爬虫、Web 服务器。
3.1 并发模型对比
| 模型 | 适用场景 | 缺点 |
|---|---|---|
| 多线程 | I/O 密集型(文件读写、网络请求) | 受 GIL 限制,CPU 密集型效率低;线程切换开销大。 |
| 多进程 | CPU 密集型(图像处理、科学计算) | 进程间通信复杂,内存占用高。 |
| 协程 | 高并发 I/O 密集型 | 单线程执行,阻塞操作会阻塞整个事件循环。 |
算法与数据结构实战
虽然 Python 面试不像 C++ 那样侧重算法,但基本的数据结构操作和常用算法(排序、查找、递归)仍是考察重点。以下是 Python 常见面试题 中的高频算法题解析。
4.1 反转链表
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def reverseList(head: ListNode) -> ListNode:
prev = None
curr = head
while curr:
next_temp = curr.next
curr.next = prev
prev = curr
curr = next_temp
return prev
4.2 快速排序
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 生态与职业发展周边
除了代码能力,面试官也关注候选人对 Python 生态系统的了解以及职业规划。以下信息与 Python 常见面试题 紧密相关,能体现您的专业素养。
包管理工具
了解 pip, conda, poetry 的区别与使用场景。现代 Python 项目推荐使用虚拟环境(venv)隔离依赖。
测试框架
单元测试是必备技能。unittest 是标准库,pytest 更简洁强大,selenium 用于 Web 自动化测试。
部署与运维
了解 Docker 容器化部署,Nginx + Gunicorn/uWSGI 的部署架构,以及 CI/CD 流程。