以下是 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. 字典的键需要满足什么条件?
- 键必须是不可变类型(如
int
,str
,tuple
)。 - 示例:
{ (1,2): "value" }
合法,{ [1,2]: "value" }
会报错。
三、面向对象编程(OOP)
6. 类变量和实例变量的区别
- 类变量:所有实例共享,通过类名或实例访问。
- 实例变量:每个实例独立,通过
self
定义。
class MyClass: class_var = 10 # 类变量 def __init__(self, value): self.instance_var = value # 实例变量
7. 装饰器(Decorator)的作用及实现
- 作用:在不修改原函数代码的前提下扩展功能(如日志、计时)。
- 示例:
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. 列表去重的多种方法
- 方法 1:
list(set(original_list))
(可能打乱顺序)。 - 方法 2:
sorted(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. 反转字符串
s = "hello" reversed_s = s[::-1] # "olleh"
16. 斐波那契数列(生成器实现)
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)等高级主题。