下面整理一份 Huawei OD(外包)技术面试常见 Python 八股文(第 06 部分)。内容围绕 Python 核心原理 + 面试高频知识点,每题附简要答案,方便快速复习。
一、什么是 GIL?
GIL 是 全局解释器锁(Global Interpreter Lock)。
在 CPython 中:
- 同一时间只允许 一个线程执行 Python 字节码
- 多线程无法真正并行执行 CPU 密集任务
作用:
- 简化内存管理
- 避免线程安全问题
结论:
| 场景 | 推荐 |
|---|---|
| IO密集 | 多线程 |
| CPU密集 | 多进程 |
二、Python 多线程 vs 多进程
线程:
模块:
threading
特点:
- 共享内存
- 切换开销小
- 受 GIL 限制
进程:
模块:
multiprocessing
特点:
- 独立内存
- 真正并行
- 开销较大
三、什么是生成器(Generator)
生成器是 惰性生成数据的迭代器。
关键字:
yield
示例:
def gen():
for i in range(3):
yield i
特点:
- 节省内存
- 按需生成数据
四、什么是迭代器(Iterator)
迭代器对象必须实现:
__iter__()
__next__()
示例:
class MyIter:
def __iter__(self):
return self
def __next__(self):
return 1
五、生成器 vs 迭代器
| 特性 | 生成器 | 迭代器 |
|---|---|---|
| 创建方式 | yield | 自定义类 |
| 实现复杂度 | 简单 | 较复杂 |
| 常用程度 | 高 | 较少 |
六、什么是装饰器?
装饰器是 在不修改函数代码的情况下扩展功能。
示例:
def log(func):
def wrapper():
print("call function")
func()
return wrapper
使用:
@log
def hello():
print("hello")
七、Python 的深拷贝和浅拷贝
浅拷贝:
copy.copy()
深拷贝:
copy.deepcopy()
模块:
copy
区别:
| 类型 | 行为 |
|---|---|
| 浅拷贝 | 只复制第一层 |
| 深拷贝 | 递归复制 |
八、Python 内存管理机制
Python 使用:
1️⃣ 引用计数
2️⃣ 循环引用检测
3️⃣ 分代垃圾回收
模块:
import gc
九、什么是 Python 的魔法方法?
魔法方法是 以双下划线开头和结尾的方法。
示例:
__init__
__str__
__len__
__add__
用途:
- 运算符重载
- 对象行为控制
十、什么是 Python 的上下文管理器?
上下文管理器用于 自动管理资源。
关键语法:
with
示例:
with open("file.txt") as f:
data = f.read()
核心方法:
__enter__()
__exit__()
十一、Python 的 lambda 表达式
匿名函数:
lambda x: x+1
示例:
sorted(data, key=lambda x: x.age)
十二、Python 中 list、tuple、set、dict 区别
| 类型 | 特点 |
|---|---|
| list | 有序、可重复 |
| tuple | 不可变 |
| set | 无序、不重复 |
| dict | key-value |
十三、Python 的鸭子类型(Duck Typing)
原则:
如果像鸭子一样走路和叫
那它就是鸭子
含义:
Python 不关注对象类型,只关注行为。
十四、Python 中的单例模式
示例:
class Singleton:
_instance = None
def __new__(cls):
if not cls._instance:
cls._instance = super().__new__(cls)
return cls._instance
十五、Python 如何实现线程安全?
常见方法:
- Lock
- RLock
- Semaphore
模块:
threading
示例:
lock = threading.Lock()
with lock:
pass
十六、Python 中的协程
协程用于 异步编程。
核心框架:
asyncio
示例:
async def main():
await task()
特点:
- 高并发
- 单线程
十七、Python 模块和包
模块:
一个 .py 文件
包:
一个包含 __init__.py 的目录
十八、Python 的 MRO(方法解析顺序)
MRO 决定 多继承时方法查找顺序。
查看:
Class.__mro__
算法:
C3 Linearization
十九、Python 的闭包
闭包是:
函数 + 引用的外部变量
示例:
def outer(x):
def inner():
return x
return inner
二十、Python 的虚拟环境
虚拟环境用于 隔离项目依赖。
常见工具:
- virtualenv
- Conda
创建:
python -m venv venv
总结
华为 OD Python 面试常见考点:
| 类型 | 知识点 |
|---|---|
| 语言基础 | list、dict、tuple |
| 函数 | lambda、闭包 |
| OOP | 单例、MRO |
| 内存 | GC、引用计数 |
| 并发 | 线程、进程、协程 |
| 高级 | 装饰器、生成器 |
如果你需要,我可以继续整理 华为 OD Python 面试最全 100 题(带解析),里面包括:
- 华为机试常见算法题
- Python 高频八股
- 真题类型(字符串 / DFS / 动态规划)
- OD 面试通过率最高的准备路线。