以下是 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)等高級主題。