代码精进之路
范学雷
前 Oracle 首席软件工程师,Java SE 安全组成员,OpenJDK 评审成员
38234 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 48 讲
结束语 (1讲)
代码精进之路
15
15
1.0x
00:00/00:00
登录|注册

17 | 为什么需要经济的代码?

性能问题的解决是意识和见识问题
考虑性能问题的时间点
不要忽视代码的性能要求
敏捷开发和性能工程的匹配
性能工程思维的重要性
采用性能工程思维
性能问题不能滞后处理
硬件扩展不能总能解决性能问题
考虑性能问题的价值
性能问题的重要性取决于代码的重要性和成本
性能问题的误解
考察编程能力的两个重点:正确的代码和有效的代码
编写经济的代码需要更多知识和经验
编写正确和有效的代码是基本功
编写经济的代码需要更多知识和经验
重要性能要求需要考虑架构和算法
代码的性能与计算机资源管理相关
小结
要有性能工程的思维
什么时候开始考虑性能问题?
需不需要考虑代码性能?
需不需要学习性能?
需不需要“跑得快”的代码?
为什么需要经济的代码?

该思维导图由 AI 生成,仅供参考

如果你在线购买过春运的火车票,经历过购票网站的瘫痪,你应该深有体会,网站瘫痪是一件让人多么绝望的事情。
根据有关报道,2014 年 1 月 9 日,火车票售票网站点击量高达 144 亿次,相当于每个中国人点击了 10 次,平均每秒点击了 16,000 次,峰值的点击量可能远远超出 16,000 次。这么强悍的访问量,导致了火车售票网站多次瘫痪。这是一个典型的性能错配导致的重大网络事故,处理这么大的点击量需要特殊的程序设计和架构安排。
有句俗话说:“又要马儿跑,又要马儿不吃草。”马该怎么活呀?活不了呀!要想让马跑得快,既要有好马,也要有好料。
如果可以把软件比作一匹马的话,让这匹马出生时有一个优良的基因,平日里精心地伺候,是让它跑得快的先决条件。
前一段时间,我们讨论了如何让代码“写得又快又好、读得又快又好”的话题。接下来的这段时间,我们来聊聊怎么让代码“跑得又快又好”。跑得又快又好,一般也意味着更少的运营费用。该怎么让我们写的代码有一个跑得好的基因呢?

需不需要“跑得快”的代码?

很多项目是面向订单的,代码的功能是需要优先考虑的任务。这并没有错误。如果不能兼顾性能,这个债将来还起来会很痛苦,成本很高。而且,很多情况下,它是躲不开、赖不掉的。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

代码性能对软件开发的重要性不容忽视。本文以2014年春运期间火车票售票网站瘫痪为例,强调了性能错配导致的重大网络事故。作者指出,代码的性能管理涉及内存、磁盘、网络等计算机资源,需要从架构层面考虑性能,选择适当的技术架构和算法。同时,强调了正确和有效地编码对程序员的重要性,以及代码性能对软件的实际运营价值的影响。文章还提到,对于具有商业价值的软件,考虑性能问题的成本可能比不考虑性能的方案还要小。总之,文章呼吁开发人员在编写代码时要注重性能优化,以减少运营成本并提高用户体验。文章还提到了硬件扩展、性能问题的滞后处理以及性能工程思维等方面的观点,强调了性能问题的重要性和影响。文章最后提到了优化代码性能的问题,鼓励读者在讨论区分享优化后的代码。整体而言,本文强调了代码性能对软件开发的重要性,以及如何从经济的角度考虑代码性能,对于开发人员具有一定的指导意义。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《代码精进之路》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(27)

  • 最新
  • 精选
  • 王智
    自我表示还没成长到这一步,但是感觉性能问题是很重要,平常看微信公众号,掘金等知识文章会有很多关于性能出现问题造成的很严重的后果,还有很多如何提高性能的文章,从这点来看,性能确实是软件开发中很重要的点. 就我现在的理解,只能感觉算法很重要,现在写代码都是只要能实现就行,能跑就行,没有考虑到其它,还得修改进步. 加油,新的一年!!!

    作者回复: 后面我们会聊一些性能的问题,不同于算法的。

    2019-02-11
    5
  • 小狼
    示例代码是leetcode上两数之和的算法题,官方题解给出的一种答案。性能问题在于算法的时间复杂度和空间复杂度都是o(n)。该示例代码影响性能的最大因素就在于算法的时间辅助和空间复杂度可以再降一降,另外就是如果没有找到符合要求的两数,可以返回null,不必抛异常

    作者回复: 能分享下复杂度怎么再降一降吗?

    2019-02-18
    3
  • 硅谷居士
    还有一个难找的性能问题的话,我认为可能就是算法层面了。没有对数组进行任何处理就进行计算了,当数组很大时,可能会有很多不需要计算或者重复的。

    作者回复: 你也许已经找到了这个难找的问题了。重复的会带来什么问题?

    2019-02-15
    3
  • aguan(^・ェ・^)
    1.判断入参num数组为空时,直接返回空,这样就不用创建map 2.当for循环结束后为找到满足条件的数据是返回空,而不是直接抛出异常

    作者回复: 找的好,这两点都影响性能。还有一些问题,留言区里有找到,后面的章节我们也会讨论到。

    2019-02-14
    2
  • 硅谷居士
    性能问题有两个: 1. HashMap 没有指定大小,如果求组很大会导致频繁扩容 2. 抛异常不太好,异常堆栈会有性能开销 P.S. 拆箱装箱在编译时就已经做了,不会有太大性能问题

    作者回复: 找的都对,这些都影响性能。还有一些问题,留言区里有讨论,我们后面的章节还会再讨论。

    2019-02-14
    2
  • 卞雪达
    我最近遇到的一个性能问题。有一些数据是实时性要求不高的,我每次从数据库select的时候,都在想"这些货应该放缓存里",终于忍不住,弄了一个。我的需求很简单,每10分钟捞一次数据,加载在缓存里,应用从缓存里查。我自己用ConcurrentHashMap弄过简单的,但这次想用轮子。我用了Spring的缓存实现,可我发现这个实现并不支持定时,它希望我像管理数据库一样增改缓存。我觉得这样的话复杂度并不低,而且我将有两个应用,又暂时不打算上Redis这样的内存型存储,这种情况缓存的共享也是问题。我最终改造了一下Spring的缓存默认实现,记录上次查库的时间,再查时候判断下时间,超过10分钟就重新查,否则查缓存(我是单机,也就是内存),两个应用各存各的。老师,为什么轮子并不支持定时缓存,却希望我自己管理呢?定时这种事情是希望交给Redis这种缓存工具实在吗?

    作者回复: 我不了解Spring的设计机制。有了解的朋友们帮帮忙。

    2019-05-26
    3
    1
  • Demon.Lee
    最后给出的代码性能问题是指 自动拆箱和装箱吗?老师可以在下一期里面给出解题思路么,谢谢

    作者回复: 拆箱/装箱有点影响,但是不是主要的。练手题我们最后都会解释的。

    2019-02-11
    1
  • Geek_d68bf9
    三五台服务器解决掉春运火车票售票网站崩溃的问题,这个本身也是伪命题,这一百万怕是不好挣了

    作者回复: “这个本身也是伪命题”,你判断的依据是什么呢?

    2022-06-22
  • 天空
    老师您好!您说后续文章会分析这段代码的问题,可是我看完了整个经济篇也没有找到,是我看的不认真没发现吗?

    作者回复: 找找看第26篇里,有没有你想要的答案。如果没找到,你继续给我留言。

    2020-01-19
  • 阳阳阳🌙
    nums.length 可以申明一个变量,不必每次循环都计算

    作者回复: nuns.length是一个变量,不是方法。

    2019-02-26
收起评论
显示
设置
留言
27
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部