性能目标、指标与优化方法
Python 性能优化与高并发#Python全栈#第二十一阶段#Python 性能优化与高并发#性能目标、指标与优化方法约 1353 字 · 4 分钟阅读
追问显示点击任意追问卡片可收起 / 展开
本阶段学习说明
整体培养方向: Python 全栈开发就业,按北京 10~20k 岗位所需能力逐步推进。
本阶段定位: 在接口、数据库、异步任务与部署基础上,学习用测量结果定位瓶颈,改善 Python 服务的响应时间、吞吐和资源消耗,并验证优化后的业务正确性。
适用环境: Python 3、一种已学 Web 框架、MySQL、SQLAlchemy 或 Django ORM;测量可使用计时器、cProfile、tracemalloc,负载测试以 Locust 或 k6 为例。基础题默认使用启用 GIL 的 CPython;涉及自由线程构建、原生扩展或工具差异时,需明确实际版本与运行方式。
考查目标: 能区分计算、等待和排队,读懂基本性能证据,优化热点代码与数据库访问,设置有界并发和资源预算,完成可复现的优化前后对比。
题库结构: 100 道题,每题包含追问;从性能目标、测量与剖析,推进到代码、数据库、接口、并发、容量和负载测试。本阶段提供题目,不包含参考答案;不重复完整的缓存原理、部署命令与监控平台搭建,不要求掌握解释器源码或专职性能工程师的全部工具。
答题约定: 先说明业务场景、数据规模、运行环境和指标口径,再给出瓶颈假设、验证方法与改动方案。不能以“用了异步”“增加 Worker”“缓存命中”代替性能证据。优化必须保持权限、数据一致性与接口语义;报告实际观测结果,不预设所有项目都能达到同一 QPS。
响应时间、吞吐量与并发量分别描述什么?
追问 同时在线用户、正在处理的请求与每秒完成请求能否直接互换?为什么接口单次变快,不一定意味着整个系统容量按相同比例增长?
用户感知的请求耗时可以拆成哪些部分?
追问 网络、代理排队、应用计算、连接池等待和数据库访问如何区分?应用内计时为什么可能小于客户端观察到的总耗时?
平均响应时间、P95 与 P99 有什么不同?
追问 少量超慢请求怎样被平均值掩盖?样本很少或混合多个接口时,尾延迟统计有哪些解释限制?
怎样判断一个接口主要受 CPU、I/O 还是排队限制?
追问 CPU 使用率、调用栈、数据库耗时、连接等待与任务队列分别能提供什么证据?为什么只看到 CPU 不高,不能直接断言机器资源充足?
开始优化前,怎样建立可比较的性能基线?
追问 代码版本、数据量、请求组合、硬件、依赖和并发配置怎样固定?冷启动、预热后运行与缓存命中状态如何分别记录?
多个耗时点同时存在时,怎样决定先优化哪个?
追问 热点占总耗时的比例、调用次数、改造成本和用户影响怎样一起考虑?一个占比很小的函数提速十倍,为什么整体收益仍可能很有限?
性能目标应该怎样表达为可验证的验收条件?
追问 目标负载、成功率、尾延迟、资源上限和持续时间如何同时定义?“接口很快”或“支持一万用户”还缺少哪些条件?
怎样证明一次优化保持了业务正确性?
追问 返回字段、排序、重复数据、权限过滤与写入结果怎样对比?缩减响应内容、延迟写入或读取旧缓存时,需要确认哪些业务约束?
性能、内存、成本与可维护性之间有哪些常见取舍?
追问 预计算、缓存、批处理和增加实例分别交换了什么资源?什么时候少量速度提升不足以支持引入复杂并发或额外服务?
怎样用“假设—测量—改动—复测”组织优化工作?
追问 一次同时修改索引、Worker 数和缓存策略,为什么难以判断因果?复测未改善或出现回归时,应怎样保留证据并调整假设?