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 流程。