當前位置: 首頁>>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/zh-tw/article/4837.html,轉載請注明來源鏈接。