当前位置: 首页 > news >正文

python的面试题

一、语法与基础(10)
1. Q:Python 有哪些实现?CPython 的特点?
A:常见实现有 CPython、PyPy、Jython、IronPython。工业界主流是 CPython(C 实现),生态最全但有 GIL 限制多线程并行。
2. Q:is 与 == 的区别?
A:is 比较对象身份(同一内存地址),== 比较值相等(调用 eq)。不可混用。
3. Q:列表推导式与生成器表达式区别?
A:列表推导式一次性生成列表占内存;生成器表达式惰性产生元素、内存友好:(x*x for x in range(10))。
4. Q:Python 变量的作用域 LEGB 是什么?
A:Local → Enclosing → Global → Builtins 的查找顺序;闭包用到 Enclosing;global/nonlocal 可声明写入外层。
5. Q:try/except/else/finally 执行顺序?
A:try 正常→跳过 except→执行 else→最后总会执行 finally;抛异常则进入匹配的 except 后也会执行 finally。
6. Q:结构化模式匹配(match/case)是什么?
A:自 3.10 起支持的模式匹配,可匹配字面量、序列、映射、类模式与守卫条件,替代多层 if-elif。
7. Q:如何优雅地读写文件避免泄露?
A:使用上下文管理器:with open(path, ‘r’, encoding=‘utf-8’) as f:;with 会在块结束时自动 close()。
8. Q:pass、continue、break 的区别?
A:pass 空操作;continue 跳过本次循环进入下一次;break 直接结束当前循环。
9. Q:*args / **kwargs 的作用?
A:*args 接收位置参数可变长,**kwargs 接收关键字参数可变长;也可用于拆包调用。
10. Q:常见编码坑点?
A:统一使用 UTF-8:open(…, encoding=‘utf-8’);避免系统默认编码差异导致的乱码。

二、内置类型与数据结构(8)
11. Q:列表、元组、集合、字典的核心差异?
A:列表可变、元组不可变;集合元素唯一、无序;字典自 3.7 起保持插入顺序。
12. Q:浅拷贝 vs 深拷贝?
A:浅拷贝只复制最外层容器(内部对象共享);深拷贝递归复制整个对象图:copy.copy() / copy.deepcopy()。
13. Q:list 与 deque 何时选?
A:list 适合随机访问与尾部追加;collections.deque 适合两端高效插入/弹出(近 O(1))。
14. Q:set 的典型用法与复杂度?
A:基于哈希,查找/插入/删除平均 O(1);典型:去重、集合运算 & | - ^。
15. Q:字典的 key 可用哪些类型?
A:可哈希的不可变对象,如 int/str/tuple/frozenset;若自定义类需保证 hasheq 一致。
16. Q:sorted() 的稳定性与常用参数?
A:Python 排序是稳定的 Timsort;常用 key=、reverse=;稳定意味着相等键的相对顺序保留。
17. Q:range(10) 是否生成列表?
A:不是,它返回惰性序列对象,常量空间,可迭代多次。
18. Q:字典合并的写法?
A:{**a, **b} 或 a | b(3.9+);就地更新 a |= b。

三、函数、迭代器与生成器(8)
19. Q:迭代器与可迭代对象的区别?
A:可迭代实现 iter 返回迭代器;迭代器实现 iternext,一次性向前遍历。
20. Q:生成器函数与 yield 的作用?
A:yield 让函数返回生成器,可暂停/恢复;适合流式处理与大数据集。
21. Q:send/throw/close 在生成器中的意义?
A:send 向 yield 表达式发送值;throw 在生成器内部注入异常;close 触发 GeneratorExit 结束。
22. Q:装饰器的本质?
A:本质是一个可调用对象接收函数返回新函数;常用于日志、权限、缓存;注意保留元信息:functools.wraps。
23. Q:可变默认参数陷阱及修复?
A:默认参数只计算一次,使用可变对象会“记住”历史:

def f(x, cache=None):
if cache is None: cache = []

24.	Q:functools.lru_cache 有啥用?

A:为纯函数提供最近最少使用缓存,提升重复计算场景性能:@lru_cache(maxsize=None)。
25. Q:* 与 ** 在函数定义/调用中的两种角色?
A:定义时表示聚合(可变参数);调用时表示拆包(把序列/映射拆成参数)。
26. Q:闭包的“延迟绑定”坑?
A:循环中创建的闭包捕获同一个变量,执行时取到最后值;用默认参数或 functools.partial 固化:

funcs = [lambda i=i: i for i in range(3)]

四、面向对象(6)
27. Q:@property 的作用?
A:把方法以属性方式访问,可只读/可写并做校验;配对 @x.setter/@x.deleter。
28. Q:slots 有何用途与限制?
A:限制实例属性集合、减少内存、阻止动态添加属性;与多继承、dict 共存要小心。
29. Q:MRO(方法解析顺序)是什么?
A:C3 线性化的多继承搜索顺序:Class.mro 可查看;避免钻石继承冲突。
30. Q:数据类 @dataclass 与 namedtuple 对比?
A:dataclass 可变/可默认/可比较/可自动生成方法;namedtuple 轻量不可变、索引+属性双访问。frozen=True 的 dataclass 可哈希(字段也需可哈希)。
31. Q:描述符协议(descriptor)是啥?
A:实现 get / set / delete 的对象控制属性访问;property 就是非数据描述符的语法糖。
32. Q:enter/exit 用于什么?
A:实现上下文管理器协议(with),负责资源获取与释放;也可用 contextlib.contextmanager 简化。

五、模块、导入与环境(4)
33. Q:Python 模块的导入流程?
A:查找 sys.modules → sys.meta_path → sys.path;找到后加载并缓存到 sys.modules。
34. Q:包的相对导入怎么写?
A:包内用 from .sub import x 或 from …pkg import y;顶层脚本不支持相对导入。
35. Q:虚拟环境与依赖管理的常见方式?
A:venv/virtualenv 创建隔离环境,pip 安装;更高阶可用 pip-tools / poetry / uv 锁定版本与构建。
36. Q:Wheel 与 sdist 区别?
A:**Wheel(.whl)**是预构建分发包,安装快;sdist 源码分发,安装需构建步骤。

六、并发与异步(6)
37. Q:什么是 GIL?影响是什么?
A:CPython 的全局解释器锁同一时刻只允许一个线程执行字节码;计算密集建议多进程或用 C 扩展/NumPy。
38. Q:多线程适合什么场景?
A:I/O 密集任务(网络/磁盘),配合 ThreadPoolExecutor、异步 I/O 或者 requests/aiohttp 等。
39. Q:asyncio 的事件循环是什么?
A:单线程协作式调度器,await 可挂起等待 I/O;核心原语:async def、await、Task、gather。
40. Q:asyncio 与线程池/进程池如何协作?
A:loop.run_in_executor() 或 asyncio.to_thread() 把阻塞 CPU/I/O 丢给线程/进程池,避免阻塞事件循环。
41. Q:async with / async for 的语义?
A:对应异步上下文管理器/异步迭代器,在协程中以非阻塞方式进入/迭代。
42. Q:避免协程“忘记 await”的办法?
A:调用协程必须 await 或封装为 asyncio.create_task();静态检查(mypy/ruff)和测试能发现“协程未运行”。

七、内存、调优与性能(4)
43. Q:如何评估时间与内存?
A:时间:time.perf_counter()、timeit;内存:tracemalloc、psutil、objgraph(第三方)。
44. Q:复制大列表 vs 生成器的取舍?
A:一次性计算且需随机访问选列表;流式/单次遍历选生成器,降低峰值内存。
45. Q:slots、array、struct、memoryview 的场景?
A:slots 减实例开销;array/struct 做二进制/定长数值存储;memoryview 零拷贝切片大字节序列。
46. Q:multiprocessing 的进程间通信方式?
A:Queue、Pipe、Manager 共享对象;注意序列化成本与进程启动方式(spawn/fork)。

八、测试、类型与调试(4)
47. Q:pytest 的核心能力?
A:简洁断言、fixture 依赖注入、参数化、monkeypatch、插件生态(如 pytest-cov)。
48. Q:类型注解的价值与常见工具?
A:提高可读性/可维护性/静态检查;常用 mypy、pyright、pydantic(运行时校验)。
49. Q:日志的最佳实践?
A:使用 logging,配置 handler/formatter/level;避免 print 充当日志;按模块定义 logger:logging.getLogger(name)。
50. Q:定位线上问题的常用手段?
A:pdb/ipdb 交互调试、faulthandler 打栈、结构化日志、cProfile/py-spy/perf 做性能剖析。


文章转载自:

http://kvXbIg1g.tmbfz.cn
http://V2NrXoEy.tmbfz.cn
http://qOApQr4i.tmbfz.cn
http://rKlJjEs6.tmbfz.cn
http://mgmteKRn.tmbfz.cn
http://n9qoH2Il.tmbfz.cn
http://mHmnJUfh.tmbfz.cn
http://4UwixCst.tmbfz.cn
http://pPcjNAfT.tmbfz.cn
http://zJxWrbLk.tmbfz.cn
http://BtPjLqm3.tmbfz.cn
http://OVjCvkvN.tmbfz.cn
http://waI79MqJ.tmbfz.cn
http://zG3wgUjb.tmbfz.cn
http://Ss20bGKC.tmbfz.cn
http://jUfneZ1c.tmbfz.cn
http://tG5nndYt.tmbfz.cn
http://J6tLvg52.tmbfz.cn
http://xPH6mN4G.tmbfz.cn
http://SlyuobdN.tmbfz.cn
http://f1Rijbw5.tmbfz.cn
http://wybfYkmV.tmbfz.cn
http://I6IZeEk1.tmbfz.cn
http://arbqMIV5.tmbfz.cn
http://B504JMkr.tmbfz.cn
http://h3JtP5GA.tmbfz.cn
http://XV8SnctN.tmbfz.cn
http://xeHuDvGG.tmbfz.cn
http://WEHgmzoF.tmbfz.cn
http://Lewxxbim.tmbfz.cn
http://www.dtcms.com/a/388556.html

相关文章:

  • 内聚和耦合基础
  • Java基本类型与包装类在MyBatis中的应用指南
  • 《Unity3D VR游戏手柄振动与物理碰撞同步失效问题深度解析》
  • 基于 Rust 的 CAD 工具demo示例
  • 多模态大模型研究每日简报【2025-09-17】
  • 2D平台动作游戏《Haneda Girl》推出免费体验版
  • 《艾尔登法环:黑夜君临》DLC泄露:更多角色和Boss!
  • 向量化执行引擎是啥?
  • LeetCode 刷题【81. 搜索旋转排序数组 II、82. 删除排序链表中的重复元素 II、83. 删除排序链表中的重复元素】
  • 关于二叉树的OJ练习
  • STM32H743-ARM例程1-GPIO点亮LED
  • 25.9.16幂等性总结
  • 27、Transformer架构详解-序列建模的革命性突破
  • [从青铜到王者] Spring Boot+Redis+Kafka电商场景面试全解析
  • 基于el-upload和vue-cropper实现图片上传裁剪组件
  • Kettle时间戳转换为日期格式处理方式
  • go.js Panel中文API
  • 加密货币中的MEV是什么
  • 【Linux学习笔记】线程概念与控制(一)
  • Linux笔记---非阻塞IO与多路复用
  • 生物信息学中的 AI Agent: Codex 初探
  • 贪心算法应用:埃及分数问题详解
  • 力扣hot100刷题day1
  • 什么是跨站脚本攻击
  • 团队对 DevOps 理解不统一会带来哪些问题
  • I²C 总线通信原理与时序
  • C#关键字record介绍
  • 试验台铁地板的设计与应用
  • 原子操作:多线程编程
  • 项目:寻虫记日志系统(三)