【Python 面试突击 · 05】大厂高频面试题:从数据结构到并发编程深度解析
目录1. 简述下 Python 中的字符串、列表、元组和字典2. 深拷贝和浅拷贝概念理解3. 为什么其他语言还要保留红黑树不都直接用 hashTable4. 在 Python 中进程和线程的区别5. Python 数据处理的库有哪些用过吗7. Python 的迭代器 (Iterator) 和生成器 (Generator) 有什么区别8. 什么是协程它和线程有什么本质区别9. NumPy 和 Pandas 区别在哪1. 简述下 Python 中的字符串、列表、元组和字典关键词可变性、有序性、哈希性、用途对比标准回答这是 Python 最基础的四种数据结构它们的核心区别在于是否可变和使用场景字符串 (str)不可变序列存储文本数据。支持切片、拼接、格式化等操作。示例s hello - s[0] H❌ 报错不可变列表 (list)可变序列存储有序元素集合。支持增删改查底层为动态数组。示例lst [1, 2, 3] - lst.append(4)✅ 成功元组 (tuple)不可变序列常用于固定数据集合。比列表更轻量可作为字典键因可哈希。示例t (1, 2, 3) - t[0] 0❌ 报错字典 (dict)可变映射类型存储键值对Key-Value。基于哈希表实现查找效率 O(1)。要求键必须是不可变类型如 str, int, tuple。 加分句“在项目中我常根据可变性做选型用元组做函数多返回值或配置常量用字典做动态参数映射列表处理动态数据流字符串贯穿全流程。理解它们的可变性是避免 bug 的关键。”2. 深拷贝和浅拷贝概念理解关键词引用复制 vs 对象复制、copy 模块、嵌套对象标准回答在 Python 中赋值操作只是引用传递不创建新对象。拷贝分为两种浅拷贝 (Shallow Copy)创建新对象但只复制顶层引用嵌套对象仍共享。修改嵌套对象会影响原对象。实现copy.copy()或 切片[:]仅限列表。深拷贝 (Deep Copy)递归复制所有层级对象完全独立。修改拷贝对象不影响原对象。实现copy.deepcopy()。 加分句“我曾在项目中因误用浅拷贝导致配置被污染。后来统一规范简单结构用切片复杂嵌套结构必须用deepcopy并在关键函数加注释提醒团队。”3. 为什么其他语言还要保留红黑树不都直接用 hashTable关键词有序性、稳定性能、Key 要求、语言设计哲学标准回答虽然 hashTable 平均性能 O(1)但红黑树仍有不可替代优势有序性 (Ordering)红黑树是自平衡二叉搜索树中序遍历可得有序序列。hashTable 无序需额外排序O(n log n)。稳定性能与可预测性红黑树最坏情况 O(log n)性能稳定。hashTable 在哈希冲突严重时退化为 O(n)。对 Key 的要求更宽松红黑树只需 Key 支持比较, 。hashTable 要求 Key 可哈希且哈希函数均匀。语言设计哲学差异C STL 的map用红黑树追求确定性unordered_map用 hashTable。Java 的TreeMapvsHashMap同理。 加分句“在金融交易系统中我曾用红黑树做订单簿排序因需实时获取价格有序队列。若用 hashTable每次撮合前排序会引入不可控延迟。”4. 在 Python 中进程和线程的区别关键词资源隔离、GIL 限制、CPU 密集 vs IO 密集标准回答特性进程 (Process)线程 (Thread)资源隔离独立内存空间互不干扰共享进程内存需加锁创建开销大需复制父进程资源小共享资源通信方式队列、管道、共享内存全局变量、队列GIL 影响无多进程可绕过 GIL受限同一进程内串行适用场景进程CPU 密集型如图像处理、科学计算。线程IO 密集型如网络爬虫、Web 请求。 加分句“我曾优化一个视频转码服务CPU 密集部分用多进程绕过 GILIO 密集部分用多线程如文件读写最终吞吐量提升 3 倍。”5. Python 数据处理的库有哪些用过吗关键词Pandas、NumPy、Dask、Polars、数据清洗标准回答Python 数据处理生态丰富主流库包括Pandas数据分析“瑞士军刀”支持 DataFrame、Series。适合中小数据量 10GB提供清洗、聚合、可视化功能。NumPy科学计算基础库支持多维数组和矩阵运算。性能远超原生列表是 Pandas 底层依赖。Dask / PolarsDask并行计算库可处理超大数据集 100GB。PolarsRust 实现的高性能 DataFrame 库速度比 Pandas 快 5-10 倍。 加分句“在处理 50GB 日志时Pandas 内存溢出我改用Dask分块处理结合Parquet格式压缩最终在 16G 内存机器上完成分析。”7. Python 的迭代器 (Iterator) 和生成器 (Generator) 有什么区别关键词惰性计算、状态保存、__iter__vsyield标准回答迭代器 (Iterator)实现__iter__()和__next__()方法的对象。需手动管理状态适合自定义迭代逻辑。生成器 (Generator)用yield关键字定义的函数自动实现迭代器协议。惰性计算按需生成值节省内存。状态保存每次yield后暂停下次从暂停处继续。示例# 生成器函数 def gen(): for i in range(3): yield i # 每次调用 next() 返回一个值 g gen() print(next(g)) # 0 print(next(g)) # 1 加分句“我曾用生成器处理千万级日志行逐行读取 yield 处理内存占用始终稳定在 10MB 内而列表会直接爆内存。”8. 什么是协程它和线程有什么本质区别关键词用户态调度、非抢占式、async/await、高并发标准回答协程 (Coroutine)用户态的轻量级线程由程序员控制调度await/yield。非抢占式一个协程运行到await才让出控制权。实现Python 用async/await语法基于 asyncio 库。与线程的本质区别调度权线程由操作系统内核调度抢占式协程由用户/事件循环调度协作式。开销协程切换开销微秒级线程毫秒级。GIL协程可绕过 GIL如 asyncio aiohttp线程受 GIL 限制。 加分句“在写爬虫时我用asyncio aiohttp启动 1000 个协程3 秒内完成请求而多线程需 10 秒以上。协程的高并发 低开销是 IO 密集场景的最优解。”9. NumPy 和 Pandas 区别在哪关键词数组运算、数据框、性能、数据分析标准回答特性NumPyPandas核心结构ndarray多维数组DataFrame二维表、Series一维功能侧重数值计算、矩阵运算数据清洗、聚合、时间序列性能极高C 语言实现依赖 NumPy但有额外开销适用场景科学计算、AI 底层业务数据分析、报表生成优先选择 NumPy 的场景纯数值计算如矩阵乘法、傅里叶变换。需要极致性能如图像处理、机器学习特征工程。优先选择 Pandas 的场景有表头、缺失值、混合类型的数据。需要分组聚合、透视表、时间序列分析。 加分句“在机器学习项目中我用 Pandas 做数据预处理清洗、编码用 NumPy 做模型训练矩阵运算。两者结合既能快速处理数据又能保证计算效率。”
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2463996.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!