面试官:平时工作中有没有做过一些性能优化相关的工作呢?

简介: 面试官:平时工作中有没有做过一些性能优化相关的工作呢?

面试官:平时工作中有没有做过一些性能优化相关的工作呢?

在面试中你可能会遇到面试官问你,小老弟,你在平时日常工作中有咩有进行过性能优化啊!

这个时候可能你可能都心里MMP了: 公司里那么多大佬。哪能轮得到我来优化…

但是还是得满怀笑容得说:“ 嗯嗯 ,这个有的…"


你可能懂得性能调优主要有: 服务器句柄调优、线程池调优、JVM调优、数据库优化、容器调优、网络请求优化等。。。但是却不知道从何说起,一说就开始没头没脑,只能等面试官问一点,说一点就和挤牙膏一样。


其实,以我本人面试经验来说,如果面试官问出了这样的一个问题。本质上不只是想让面试者简单的回答:做过或者没做过。而是想通过这个简单的问题来考察下面试者的思考能力和对于问题的理解能力。面试官本质上是想让面试者通过这个问题,讲述一下自己做性能优化相关工作的经验、以及对于性能优化工作的一些理论的理解,比如就包括:性能优化的衡量指标,期间需要注意的问题等等。

调优衡量标准

对于系统性能优化来说,衡量标准大概可以分为:

  • 性能指标
  • 并发量
  • 响应时间
  • 秒开率
  • 准确性

接下来就针对这些指标逐一介绍

性能指标

一般来说,性能指标主要包含吞吐量和响应时间。我们平时常说的QPS、TPS、HPS的等就可以归纳为吞吐量。

有很多小伙伴可能对于QPS、TPS和HPS等不太了解,我们先来说下这几个字母的含义。


QPS 即 Queries Per Second,意思是“每秒查询率”,是一台服务器每秒能够响应的查询次数

TPS 即 Transactions Per Second 的缩写,每秒处理的事务数目。一个事务是指一个客户机向服务器发送请求然后服务器做出反应的过程。

HPS 即 Hits per Second ,每秒http的请求数量,即每秒点击次数

RPS 代表吞吐率,即 Requests Per Second 的缩写。吞吐率是服务器并发处理能力的量化描述

PV 即 Page View, 即页面浏览量

DAU 即 Day Acitivity User 日活跃用户数,反映网站、互联网应用或网络游戏的运营情况的统计指标

MAU 即 monthly active user 月活跃用户

平时我们在做优化工作的时候,要明确系统优化的目标。比如说,我们是为了提高系统的吞吐量? 还是为了提高系统的响应速度。


举个例子,我们的程序中存在一些数据库或者缓存的批量操作,虽然在数据的读取上,响应速度下降了,但是我们优化的目标就是吞吐量,只要我们优化后系统的整体吞吐量明显上升了,那这也是提升了程序的性能。所以说,优化性能并不一定只是提高系统的响应速度或吞吐量,而且在吞吐量和响应速等相关指标之间找到一个平衡点, 使得有限的服务器资源给用户带来更好的服务体验.

响应时间

一般来说,度量性能的指标是系统接口的响应时间,但是单次的响应时间是没有意义的,我们需要知道一段时间的性能情况是怎么样的。 所以,我们需要收集这段时间的响应时间数据,然后根据一些统计方法计算特征值,这些特征值就能代表这段时间的性能情况。 常见的方法有以下几类。


平均响应时间


顾名思义,平均值就是一段时间内所有请求的响应时间数据相加,再除以总请求数。通常平均响应时间体现的是服务接口的平均处理能力。但它敏感度比较差,如果这段时间有少量慢请求时,在平均值上并不能如实地反应性能波动的问题。


举个例子,假设我们30s内有10000次请求,每次请求响应时间都为1ms,那么这段时间响应平均时间也是1ms.

这时,当其中的100个请求响应时间变为了100ms, 那么整体响应时间 变为 (100100+99001)/10000 =1.99ms。

虽然平均值增加了才0.9ms,但是还是有1% 的请求(100/10000)的响应时间已经变慢了100倍。 所以平均值只能最为一个度量标准参考。


分位值


分位数就是我们在优化的时候,圈定一个时间范围,把每次请求的耗时加入一个列表中,然后按照从小到大的顺序将这些时间进行排序。


比如 90 分位、95 分位、75 分位。以 90 分位为例,我们把这段时间请求的响应时间从小到大排序,假如一共有 100 个请求,那么排在第 90 位的响应时间就是 90 分位值。分位值排除了偶发极慢请求对于数据的影响,能够很好地反应这段时间的性能情况,分位值越大,对于慢请求的影响就越敏感。

20200401134307494.png

在我来看,分位值是最适合作为时间段内,响应时间值来使用的,在实际工作中也应用最多。除此之外,平均值也可以作为一个参考值来使用。

并发量

并发量指的是系统能够同时处理的请求数量,反映的是系统的负载能力。我们在对高并发系统进行优化的时候,往往也会在并发量上进行调优,调优方式也是多种多样的,目的就是提高系统同时处理请求的能力。


秒开率

秒开率主要针对的是前端网页或者移动端APP来说的,如果一个前端网页或者APP能够在1秒内很平滑的打开,尤其是首页的加载。此时用户使用起来就非常的丝滑,如果超过3秒甚至更长的时间,用户就有可能会直接退出前端网页或者APP不再使用。所以,在高并发场景下优化程序,不只要对后端程序进行优化,对于前端和APP也是要进行优化的。


准确性

无论我们以何种方式,何种手段对应用进行优化,优化后的交互数据结果必须是准确的。不能出现优化前性能比较低,数据正确,而优化后性能比较高,反而数据不正确的现象。

性能优化需要主要的问题

注意点

不要过早优化 ,除非必要,一开始不要优化(尤其是开发阶段)

不用墨守成规,有些优化准则已经过时,需要考虑当下的软硬件环境

聚焦性能瓶颈点,不要过分强调某些系统级指标,如cache 命中率,而应该聚焦性能瓶颈点

不盲从,测试、找到系统的性能瓶颈,再确定优化手段

注意权衡优化的成本和收益(有些优化可能需要现有架构做出调整、增加开发/运维成本)

明确目标,优化的目标是用户体验、降低硬件成本(降低集群规模、不依赖单机高性能)

优化需要针对真实情况,测试环境的优化手段未必对生产环境有效,还是得按照实际场景

有兴趣的老爷,可以关注我的公众号【一起收破烂】,回复【006】获取2021最新java面试资料以及简历模型120套哦~

相关文章
|
6月前
|
SQL 关系型数据库 MySQL
MYSQL-SQL语句性能优化策略以及面试题
MYSQL-SQL语句性能优化策略以及面试题
132 1
|
6月前
|
Web App开发 缓存 前端开发
当面试官问我前端可以做的性能优化有哪些
当面试官问我前端可以做的性能优化有哪些
119 0
|
22天前
|
存储 缓存 网络协议
5个Android性能优化相关的深度面试题
本文涵盖五个Android面试题及其解答,包括优化应用启动速度、内存泄漏的检测与解决、UI渲染性能优化、减少内存抖动和内存溢出、优化网络请求性能。每个问题都提供了详细的解答和示例代码。
22 2
|
6月前
|
测试技术 Android开发
Android开发规范,性能优化,Android面试2024
Android开发规范,性能优化,Android面试2024
|
4月前
|
算法 Java API
Android性能优化面试题经典之ANR的分析和优化
Android ANR发生于应用无法在限定时间内响应用户输入或完成操作。主要条件包括:输入超时(5秒)、广播超时(前台10秒/后台60秒)、服务超时及ContentProvider超时。常见原因有网络、数据库、文件操作、计算任务、UI渲染、锁等待、ContentProvider和BroadcastReceiver的不当使用。分析ANR可借助logcat和traces.txt。主线程执行生命周期回调、Service、BroadcastReceiver等,避免主线程耗时操作
62 3
|
5月前
|
缓存 JSON 网络协议
Android面试题:App性能优化之电量优化和网络优化
这篇文章讨论了Android应用的电量和网络优化。电量优化涉及Doze和Standby模式,其中应用可能需要通过用户白名单或电池广播来适应限制。Battery Historian和Android Studio的Energy Profile是电量分析工具。建议减少不必要的操作,延迟非关键任务,合并网络请求。网络优化包括HTTPDNS减少DNS解析延迟,Keep-Alive复用连接,HTTP/2实现多路复用,以及使用protobuf和gzip压缩数据。其他策略如使用WebP图像格式,按网络质量提供不同分辨率的图片,以及启用HTTP缓存也是有效手段。
87 9
|
4月前
|
SQL 监控 Java
Java面试题:简述数据库性能优化的常见手段,如索引优化、SQL语句优化等。
Java面试题:简述数据库性能优化的常见手段,如索引优化、SQL语句优化等。
291 0
|
5月前
|
SQL 关系型数据库 MySQL
【面试高频 time:】关于MYsql性能优化的理解
【面试高频 time:】关于MYsql性能优化的理解
47 0
|
5月前
|
Java Android开发 Kotlin
Android面试题:App性能优化之Java和Kotlin常见的数据结构
Java数据结构摘要:ArrayList基于数组,适合查找和修改;LinkedList适合插入删除;HashMap1.8后用数组+链表/红黑树,初始化时预估容量可避免扩容。SparseArray优化查找,ArrayMap减少冲突。 Kotlin优化摘要:Kotlin的List用`listOf/mutableListOf`,Map用`mapOf/mutableMapOf`,支持操作符重载和扩展函数。序列提供懒加载,解构用于遍历Map,扩展函数默认参数增强灵活性。
47 0
|
6月前
|
缓存 监控 算法
Python性能优化面试:代码级、架构级与系统级优化
【4月更文挑战第19天】本文探讨了Python性能优化面试的重点,包括代码级、架构级和系统级优化。代码级优化涉及时间复杂度、空间复杂度分析,使用内置数据结构和性能分析工具。易错点包括过度优化和滥用全局变量。架构级优化关注异步编程、缓存策略和分布式系统,强调合理利用异步和缓存。系统级优化则涵盖操作系统原理、Python虚拟机优化和服务器调优,需注意监控系统资源和使用编译器加速。面试者应全面理解这些层面,以提高程序性能和面试竞争力。
79 1
Python性能优化面试:代码级、架构级与系统级优化