news 2026/4/16 18:10:15

Day 97:【99天精通Python】常见面试题解析 (上) - 语言基础与数据结构

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Day 97:【99天精通Python】常见面试题解析 (上) - 语言基础与数据结构

Day 97:【99天精通Python】常见面试题解析 (上) - 语言基础与数据结构

前言

欢迎来到第97天!

我们的99天之旅即将到达终点。你已经掌握了大量的 Python 技能,但要将这些技能转化为一份满意的工作,还需要通过技术面试这一关。

面试官不仅想知道你"会用什么",更想知道你"懂不懂原理"。
从今天开始,我们将用 3 天时间,梳理 Python 面试中最高频的考点,助你做好最后的冲刺。

本节内容:

  • Python 语言特性 (GIL, is vs ==, 拷贝)
  • 数据结构 (List, Dict, Tuple)
  • 列表/字典推导式
  • 如何回答面试题

一、Python 语言特性

1. 问:谈谈你对 Python GIL (全局解释器锁) 的理解。

回答思路: 是什么 -> 为什么有 -> 有什么影响 -> 怎么解决

参考回答:

  1. 是什么 (What): GIL 全称 Global Interpreter Lock,是 CPython 解释器中的一个互斥锁。它保证了在同一时刻,只有一个线程能执行 Python 的字节码
  2. 为什么有 (Why): 主要是为了简化 CPython 的内存管理。因为有了 GIL,就不需要考虑多线程下对 Python 对象进行读写的线程安全问题,所有对象访问默认就是安全的。
  3. 有什么影响 (Impact):
    • 正面: 简化了内存管理,避免了复杂的加锁逻辑。
    • 负面: 导致 Python 的多线程无法利用多核 CPU 进行并行计算。对于 CPU 密集型任务,多线程甚至会因为线程切换的开销而变得更慢。
  4. 怎么解决 (How):
    • IO 密集型任务: 多线程依然有效。因为线程在等待网络/硬盘 IO 时会主动释放 GIL,让其他线程执行。
    • CPU 密集型任务: 必须使用多进程 (multiprocessing),因为每个进程有自己独立的 GIL。

2. 问:is==有什么区别?

参考回答:

  • ==比较的是两个对象的值 (value)是否相等。
  • is比较的是两个对象的身份标识 (identity)是否相等,即它们是否指向内存中的同一个对象 (id(a) == id(b))。

示例:

a=[1,2,3]b=[1,2,3]c=aprint(a==b)# True (值相等)print(aisb)# False (内存地址不同)print(aisc)# True (指向同一个对象)

追问:a = 1000; b = 1000; a is b是 True 还是 False?

答:是 False。CPython 为了优化性能,会缓存一小部分整数(通常是 -5 到 256)。在这个范围内,is会返回 True。但超出这个范围,Python 会创建新的对象,所以是 False。


3. 问:什么是深拷贝 (Deep Copy) 和浅拷贝 (Shallow Copy)?

参考回答:

  • 浅拷贝 (copy.copy()list.copy()): 创建一个新的对象,但如果原始对象中包含子对象(如列表中的列表),则只拷贝子对象的引用。修改子对象会相互影响。
  • 深拷贝 (copy.deepcopy()): 创建一个全新的对象,并递归地拷贝所有子对象。拷贝后的对象与原始对象完全独立。

示例:

importcopy a=[1,[10,20]]# 浅拷贝b=copy.copy(a)b[1][0]=999print(f"修改浅拷贝后, 原列表 a:{a}")# a 也被修改了 -> [1, [999, 20]]# 深拷贝c=copy.deepcopy(a)c[1][0]=111print(f"修改深拷贝后, 原列表 a:{a}")# a 不受影响 -> [1, [999, 20]]

二、数据结构

4. 问:列表 (List) 和元组 (Tuple) 的区别?

参考回答:

  1. 可变性: 列表是可变 (mutable)的,元组是不可变 (immutable)的。这是最本质的区别。
  2. 性能: 因为不可变,元组的结构更固定,通常比列表更省内存速度也稍快
  3. 用途:
    • 当数据需要被修改时,用列表。
    • 当数据是固定的,不希望被修改时,用元组。比如,元组可以作为字典的键集合的元素,而列表不行。

5. 问:字典 (Dict) 的底层实现原理是什么?为什么查找是 O(1)?

参考回答:

  1. 底层结构: 字典的底层是哈希表 (Hash Table)。它是一个稀疏数组,通过哈希函数将键 (key) 映射到数组的索引上。
  2. 查找过程:
    • 计算hash(key)得到哈希值。
    • 哈希值对数组长度取模,得到存储位置(索引)。
    • 直接访问该索引即可。
  3. 为什么是 O(1): 在理想情况下(没有哈希冲突),查找、插入、删除都只需要一次计算,时间复杂度是 O(1)。
  4. 哈希冲突: 如果两个不同的 key 算出了同一个索引,就发生了哈希冲突。Python 使用开放寻址法来解决冲突(寻找下一个空位)。当冲突增多时,性能会下降到 O(n)。

三、Pythonic 写法

6. 问:请用至少三种方法反转一个字符串 “hello”。

参考回答:

  1. 切片 (最 Pythonic):s[::-1]
  2. reversed()+join():"".join(reversed(s))
  3. 循环:
    res=""forcharins:res=char+res

7. 问:什么是列表/字典推导式?请举例。

参考回答:
推导式是一种用一行代码快速创建列表或字典的简洁语法,可读性强且效率高。

  • 列表推导式:
    # 找出 1-10 的偶数的平方squares=[x**2forxinrange(1,11)ifx%2==0]
  • 字典推导式:
    # 快速交换 key 和 valuemy_dict={"a":1,"b":2}swapped={v:kfork,vinmy_dict.items()}

四、如何回答面试题

  1. 先给结论: 直接、清晰地回答问题的核心。
  2. 再做解释: 阐述背后的原理和细节。
  3. 举例说明: 用简短的代码或场景来支撑你的解释。
  4. 对比分析: 给出不同方案的优缺点和适用场景。

系列导航

  • 上一篇:Day 96 - 常用库速查手册
  • 下一篇:Day 98 - 常见面试题解析 (中)(待更新)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 16:09:38

Day 99:【99天精通Python】常见面试题解析 (下) 毕业感言

Day 99:【99天精通Python】常见面试题解析 (下) & 毕业感言 前言 欢迎来到 第99天!这是我们"99天精通Python"系列的最后一课。 经过三个月的漫长旅程,我们从零开始,一路披荆斩棘,最终站在这里。 今天&am…

作者头像 李华
网站建设 2026/4/16 15:55:04

UE5 C++(37-3):

(202) (203) 谢谢

作者头像 李华
网站建设 2026/4/16 15:34:18

【改进差分优化算法L-SHADE】差分进化算法(DE)及其变体线性种群缩减的SHADE(L-SHADE)在CEC2005函数寻优的对比研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室🍊个人信条:格物致知,完整Matlab代码及仿真咨询…

作者头像 李华
网站建设 2026/4/16 10:21:17

商业智能BI介绍(Business Intelligence)(一套技术和工具系统,旨在帮助企业将原始数据转化为可操作的商业洞察,从而支持更明智的决策制定)区别于数据分析DA和商业分析BA

文章目录BI 是什么?BI 的核心定义BI 的工作原理BI 的价值BI 工具示例BI 与数据分析的区别BI 是什么? 商业智能(Business Intelligence,简称 BI)是一套技术和工具系统,旨在帮助企业将原始数据转化为可操作的…

作者头像 李华
网站建设 2026/4/16 10:21:15

【收藏向】大语言模型(LLM)核心知识全解析:从原理到应用入门

大语言模型(LLM)作为人工智能领域的颠覆性突破,正快速重塑自然语言处理(NLP)乃至全行业的技术格局。对于刚入门的程序员和AI小白而言,理清LLM的核心逻辑、技术原理与应用边界,是迈入大模型领域的…

作者头像 李华