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

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

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

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

    
     3
  • pyhhou
    2019-03-03
    像是结尾不应该抛出异常,还有 map 需要设置大小,不然会有频繁扩容的问题,另外就是一开始判断数组 nums 为 null 或者空的话可以直接返回空数组,这些我看前面的同学都说了。但是回看这个问题,往深了想,其实很多情况没有交代明白,其中一个我想到的就是内存的问题,这个示例算法的确很快,O(n)时间复杂度,但是也会有额外的 O(n) 的空间消耗,如果说数组 nums 非常非常的大,假如说是 100G,而此时的剩余内存不足 1G,这样子的话这种方法明显行不通;在这种极端情况下,仅仅从算法角度考虑的话,退而求其次的方法是将整个数组用快排排一下序,然后用双指针分别从数组两头相向走一遍,时间复杂度O(nlgn),空间复杂度O(1)。这也是验证了老师文章当中讲到的,考虑一个算法好坏与否,仅仅考虑算法本身是完全不够的,再精美的算法也需要结合计算机硬件,操作系统还有整体的一个架构进行考虑筛选~
    
     2
  • 卞雪达
    2019-05-26
    我最近遇到的一个性能问题。有一些数据是实时性要求不高的,我每次从数据库select的时候,都在想"这些货应该放缓存里",终于忍不住,弄了一个。我的需求很简单,每10分钟捞一次数据,加载在缓存里,应用从缓存里查。我自己用ConcurrentHashMap弄过简单的,但这次想用轮子。我用了Spring的缓存实现,可我发现这个实现并不支持定时,它希望我像管理数据库一样增改缓存。我觉得这样的话复杂度并不低,而且我将有两个应用,又暂时不打算上Redis这样的内存型存储,这种情况缓存的共享也是问题。我最终改造了一下Spring的缓存默认实现,记录上次查库的时间,再查时候判断下时间,超过10分钟就重新查,否则查缓存(我是单机,也就是内存),两个应用各存各的。老师,为什么轮子并不支持定时缓存,却希望我自己管理呢?定时这种事情是希望交给Redis这种缓存工具实在吗?

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

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

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

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

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

    
     1
  • 鲸息
    2019-02-14
    性能问题有两个:
    1. HashMap 没有指定大小,如果求组很大会导致频繁扩容
    2. 抛异常不太好,异常堆栈会有性能开销

    P.S.
    拆箱装箱在编译时就已经做了,不会有太大性能问题
    展开

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

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

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

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

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

    
    
  • 丁丁历险记
    2019-11-22
    认知的误解 不切实际的假设。
    
    
  • 丁丁历险记
    2019-11-22
    复杂度的来源,性能
    
    
  • qazwsx
    2019-07-06
    1.-XX:+ AutoBoxCacheMax增大Integer范围
    2.HashMap改用TreeMap
    
    
  • Sisyphus235
    2019-05-22
    代码的性能就是开发者的产品的质量,一般开发都会先要迅速开发出原型和 demo,这个时候无法顾及太多性能,但是要留有水平扩展的能力,或者性能开发的后续方案。

    比如方法解耦,留下异步的可能,再比如能够开多线程多进程,又或者能够留有接口提升核心算法的性能。
    
    
  • 陈杰
    2019-03-09
    用set应该就可以了,不需要用map。如果用加法可以不用保存结果,但时间复杂度相对弱一些
    
    
  • 悲劇の輪廻
    2019-03-05
    好的算法确实很重要,难怪说国外程序员应聘之前必先刷LC……
    
    
  • 秦凯
    2019-03-01
    对性能和资源消耗有一定的意识,但是具体的开发过程中或者应用运行过程中对性能进行监控、评测、分析就束手无策了。[捂脸]
    
    
  • 阳阳阳🌙
    2019-02-26
    nums.length 可以申明一个变量,不必每次循环都计算

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

    
    
  • 鲸息
    2019-02-15
    再往底层虚拟机考虑的话,问题可能是 Integer 的缓存问题,导致大量重复对象创建,因为默认范围是 -128 到 +127

    作者回复: 没看明白-128到+127的说法。

    
    
  • Void_seT
    2019-02-13
    性能问题是出现在“入参数组过大,导致map频繁扩容”么?

    作者回复: 这是其中一个问题。这个练手题有多个性能问题,其中比较难找的一个,我们后面还会专门讨论。

    
    
  • hua168
    2019-02-12
    老师我有2个疑问:
    1.是不是编程学到一定程度下都要求学一下算法?一些常用用算法,我看极客专栏也有算法的文章
    2.我看很多小公司都没有用到什么多少算法之类,如果自己的目标是中小公司是不是不用学算法了?

    作者回复: 算法还是要有个概念的,大家应该都学过数据结构与算法吧?

    不过,算法太庞大驳杂了,我也不建议大家去钻研不常用的算法,比如加密算法的优化这种专业的东西。

    编程学到一定程度,我觉得是根据要解决的问题去找适合的技术。要是需要实现算法,那就一定要钻研算法;要是不涉及算法,也许你很快就会忘记学过的算法。这个和公司大小没关系,和你要做的事情有关系。

    
    
我们在线,来聊聊吧