当前位置: 首页>>AGI专栏>>正文


Python面试常见问题及答案

以下是 Python 常见面试题及简明答案,涵盖基础语法、数据结构、高级特性等核心知识点,适合快速复习:

一、基础语法

1. Python 中的可变和不可变数据类型

  • 可变:列表(list)、字典(dict)、集合(set)。示例:列表追加元素后,内存地址不变。
  • 不可变:整数(int)、字符串(str)、元组(tuple)。示例:字符串拼接会生成新对象。

2. 解释 GIL(全局解释器锁)

  • GIL 是 Python 解释器的互斥锁,确保同一时刻只有一个线程执行字节码。
  • 影响:多线程无法利用多核 CPU,适合 I/O 密集型任务,多进程适合 CPU 密集型任务。

3. 深拷贝(deepcopy)和浅拷贝(copy)的区别

  • 浅拷贝:创建新对象,但内部元素引用原对象。示例:copy.copy(),嵌套列表修改会互相影响。
  • 深拷贝:完全独立的新对象。示例:copy.deepcopy(),完全隔离原对象。

二、数据结构

4. 列表(list)和元组(tuple)的区别

  • 列表:可变,用 [] 定义,支持增删改。
  • 元组:不可变,用 () 定义,哈希化后可作字典键。

5. 字典的键需要满足什么条件?

  • 键必须是不可变类型(如 intstrtuple)。
  • 示例:{ (1,2): "value" } 合法,{ [1,2]: "value" } 会报错。

三、面向对象编程(OOP)

6. 类变量和实例变量的区别

  • 类变量:所有实例共享,通过类名或实例访问。
  • 实例变量:每个实例独立,通过 self 定义。
class MyClass:
    class_var = 10  # 类变量
    def __init__(self, value):
        self.instance_var = value  # 实例变量

7. 装饰器(Decorator)的作用及实现

  • 作用:在不修改原函数代码的前提下扩展功能(如日志、计时)。
  • 示例
python
Copy
def timer(func):
    def wrapper(*args, **kwargs):
        start = time.time()
        result = func(*args, **kwargs)
        print(f"Time taken: {time.time() - start}")
        return result
    return wrapper

@timer
def my_func():
    time.sleep(1)

四、高级特性

8. 生成器(Generator)与迭代器(Iterator)的区别

  • 生成器:用 yield 关键字实现,惰性计算,节省内存。示例:(x for x in range(10))
  • 迭代器:实现 __iter__ 和 __next__ 方法的对象。

9. 上下文管理器(Context Manager)的作用

  • 用于资源管理(如文件操作),通过 with 语句自动释放资源。
  • 示例:
with open("file.txt", "r") as f:
    content = f.read()  # 退出后自动关闭文件

五、库与框架

10. 常用的 Python 库

  • 数据处理NumPy(数组计算)、Pandas(数据分析)。
  • Web 开发Flask(轻量级)、Django(全栈框架)。
  • 网络请求requests(HTTP 请求)。

六、算法与设计

11. 列表去重的多种方法

  • 方法 1list(set(original_list))(可能打乱顺序)。
  • 方法 2sorted(set(original_list), key=original_list.index)(保留顺序)。
  • 方法 3:遍历并判断元素是否存在新列表。

12. 单例模式(Singleton)实现

  • 方法 1:使用装饰器。
def singleton(cls):
    instances = {}
    def get_instance(*args, **kwargs):
        if cls not in instances:
            instances[cls] = cls(*args, **kwargs)
        return instances[cls]
    return get_instance

@singleton
class MyClass:
    pass

七、内存与并发

13. Python 的垃圾回收机制

  • 引用计数:对象引用数为 0 时被回收。
  • 分代回收:解决循环引用问题,按对象存活时间分代处理。

14. 多线程 vs 多进程

  • 多线程:共享内存,受 GIL 限制,适合 I/O 密集型。
  • 多进程:独立内存,可跨 CPU 核心,适合 CPU 密集型。

高频代码题

15. 反转字符串

python
Copy
s = "hello"
reversed_s = s[::-1]  # "olleh"

16. 斐波那契数列(生成器实现)

python
Copy
def fibonacci(n):
    a, b = 0, 1
    for _ in range(n):
        yield a
        a, b = b, a + b

list(fibonacci(5))  # [0, 1, 1, 2, 3]

以上问题覆盖 Python 面试核心考点,建议结合代码实践加深理解。准备时可针对薄弱点扩展学习,如异步编程(asyncio)、元类(metaclass)等高级主题。

本文由《纯净天空》出品。文章地址: https://vimsky.com/article/4837.html,转载请注明来源链接。