18丨思考框架:什么样的代码才是高效的代码?
范学雷
该思维导图由 AI 生成,仅供参考
如果让你设计一个有十亿用户使用的售票网站,你会考虑哪些问题?如果让你设计一个有一万亿用户使用的服务,你又会考虑哪些问题?不要以为有一万亿个用户的服务离我们很远,它正在快速地逼近我们。
我们前面讨论了,代码的性能是关于如何管理内存、磁盘、网络和内核等计算机资源的。该怎么衡量这些资源管理的好坏呢?这就需要一些评价指标。
这些指标不仅指导着代码的交付标准,也指导着我们编码时的技术选择。
用户的真实感受
最直接的指标就是用户的真实感受。用户的感受是我们软件开发最基本的风向标,当然也是代码性能追求的终极目标。
如果去超市买东西,我们享受的是购物的过程,讨厌结账。结账之所以令人讨厌,一小部分原因在于这时我们要付钱,更大的原因在于这个过程排队时间可能会很长。如果再算错了帐,就更让人不爽了。
用户对于软件性能的要求,和我们超市结账时的要求差不多:等待时间要短,出错的概率要小。
等待时间要短
这个概念很好理解。等待时间越短,我们越喜欢。最好是一点儿都感觉不到等待时间。使用“感觉”、“快”、“慢”这种词汇,有点主观了。有一种统计方法,被广泛地用来评价应用程序性能的满意度,它就是应用程序性能指数(Apdex)。
根据任务的响应时间,应用程序性能指数定义了三个用户满意度的区间:
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
本文介绍了衡量代码性能的重要指标和方法。首先,文章强调了用户体验是衡量代码性能的终极目标,并介绍了应用程序性能指数(Apdex)的概念,以及在互联网领域中的最佳等待时间和一致性原则。其次,文章讨论了如何管理计算机资源,包括提高资源使用效率和使用更多资源的方法。然后,文章提到了算法复杂度作为衡量CPU和内存使用效率的重要指标。最后,文章鼓励读者学习如何设计、分析、验证代码的效率,关注用户体验和真实感受,并分享了一段Java代码供读者讨论。整体而言,本文涵盖了衡量代码性能的多个方面,为读者提供了全面的技术视角和思考方法。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《代码精进之路》,新⼈⾸单¥59
《代码精进之路》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(7)
- 最新
- 精选
- 轻歌赋hashmap的默认大小的问题吗? 个人感觉是这个原因,解决办法就是创建map时指定大小。 另外hash的计算都是o1的时间复杂度,但是put这种写操作要比读操作慢。这个暂时没有想到替代方案。 每次都要创建差值感觉比较慢,可以反过来查询当前值,存放差值。 传入的数组不知道有没有序,但是可以默认有序,然后前后交换着访问。即先访问第一个,再访问最后一个,再访问第二个,反复进行 两数之和不知道有没有负数参与的情况。 个人感觉这个算法的时间复杂度已经是o1了,只能从其他角度考虑更快,空间复杂度偏大,考虑有序情况可以前后交换查找。但是无序情况没有帮助。 当数据很大的情况下,可以考虑并行算法。 这个问题的解法感觉最终的结果不应该是单个,可能有多组两数之和都满足的情况,程序设计个人感觉有点问题,实在是想不到更多了。欢迎大家和老师评论,目前还是实习阶段,经验难免不足,希望各位能够指出不足,共勉
作者回复: 很厉害!最大的性能问题虽然还没有找到,但哪真的是时间积累的问题。你找的一些问题已经很有见地了,比如负数、有序、并行。比如按照我们的思考习惯,很难想到负数的问题,这里面有一个安全漏洞,我们第三篇接着聊。
2019-02-1311 - 苏志辉感觉剖异常比较耗性能,需要生成堆栈,可以返回空值
作者回复: 是的,没有匹配的可以看作一个正常状况。返回空值(空数组),更好些。
2019-03-152 - 王子瑞Aliloke有事电联很想有时间的时候自己试着开发一个浏览器;| 但这个目标的是我考上研究生之后实施。
作者回复: 嗯,期待!
2019-03-0521 - aguan(^・ェ・^)时间复杂度O(n),n表示数组的长度 空间复杂度O(1)
作者回复: 时间复杂度有三个,一个是for语句,一个是hashMap查询,一个是hashMap的put()。空间复杂度是hashMap占用的空间。你再分开来想想?
2019-02-141 - 李星for循环时间复杂度可能是O(n),hashmap的put和containskey都是O(1)吧
作者回复: 是的
2019-02-17 - ifelse从小的代码层面看,我们要有意识、要能够给理解并计算算法的复杂度,来尽量提高每一段代码的效率。从大的架构层面看,我们要采用合适的技术,指导实现的代码能够把有限资源使用的更有效率,也能够在必要时使用更多的资源。从更大的产品层面看,我们一定要关切用户的使用体验和真实感受,特别是糟糕状况下的感受,及时地做出调整。--记下来2022-07-222
- Sisyphus235这个解法的算法已经比较完善了,如果要提升效率可能要从多线程、多进程的角度出发,这些也要和数据量相关,数据量小的时候可能排序的效果更好,因为线程和进程切换要损失效率2019-05-221
收起评论