`
cherami
  • 浏览: 211424 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Google面试题解说性能之二:分析问题

    博客分类:
  • Java
阅读更多

前面我们已经说了字符串运算和数学运算对性能的巨大影响,接下来我们看看分析程序,多思考给我们带来的好处。
如果我们做一个简单的分析就可以知道,在尾数从0到9的连续十个数字中,只有尾数为1的数字的1的个数比其它的数字多,那么我们可以以10个数为单位进行分隔,计算尾数为0的数字包含1的个数,其它的9个值就以此为基础计算:
public class GoogleFn {
    private static int MAX = 13200000;

    private static int MAX2 = MAX / 10;

    private static int count(int n) {
        int count = 0;
        while (n > 0) {
            int mod = n % 10;
            if (mod == 1)
                count++;
            n = n / 10;
        }
        return count;
    }

    private static void method1() {
        long start = System.currentTimeMillis();
        int result = 0;
        for (int i = 1; i < MAX; i++) {
            result += count(i);
            if (result == i) {
                System.out.println("Find " + i + ", " + (System.currentTimeMillis() - start) + "ms");
            }
        }
    }

    private static void method2() {
        long start = System.currentTimeMillis();
        int result = 0;
        for (int i = 0; i < MAX2; i++) {
            int number = i * 10;
            int value = count(number);
            for (int j = 0; j < 10; j++) {
                result += value;
                if (j == 1) {
                    result++;
                }
                int x = number + j;
                if (x != 0 && result == x) {
                    System.out.println("Find " + x + ", " + (System.currentTimeMillis() - start) + "ms");
                }
            }
        }
    }

    public static void main(String[] args) {
        method1();
        method2();
    }
}

运算结果:
Find 1, 0ms
Find 199981, 47ms
Find 199982, 47ms
Find 199983, 47ms
Find 199984, 47ms
Find 199985, 47ms
Find 199986, 47ms
Find 199987, 47ms
Find 199988, 47ms
Find 199989, 47ms
Find 199990, 47ms
Find 200000, 47ms
Find 200001, 47ms
Find 1599981, 454ms
Find 1599982, 454ms
Find 1599983, 454ms
Find 1599984, 454ms
Find 1599985, 454ms
Find 1599986, 454ms
Find 1599987, 454ms
Find 1599988, 454ms
Find 1599989, 454ms
Find 1599990, 454ms
Find 2600000, 766ms
Find 2600001, 766ms
Find 13199998, 4204ms
Find 1, 0ms
Find 199981, 0ms
Find 199982, 0ms
Find 199983, 0ms
Find 199984, 0ms
Find 199985, 0ms
Find 199986, 0ms
Find 199987, 0ms
Find 199988, 0ms
Find 199989, 0ms
Find 199990, 0ms
Find 200000, 0ms
Find 200001, 0ms
Find 1599981, 62ms
Find 1599982, 62ms
Find 1599983, 62ms
Find 1599984, 62ms
Find 1599985, 62ms
Find 1599986, 62ms
Find 1599987, 62ms
Find 1599988, 62ms
Find 1599989, 62ms
Find 1599990, 62ms
Find 2600000, 93ms
Find 2600001, 93ms
Find 13199998, 515ms

同样以1319998为例,前者花费的时间是后者的8倍以上,因为每10个数,我们只需要计算一次1的个数,所以差不多只需要1/10的时间,但是后者的逻辑比较复杂一些,多了一些中间变量的使用,并且多了一个判断条件。
如果你不具备深厚的数学功底,对于算法并不精通,有时候对问题进行简单分析就可能大幅度的提高性能。

分享到:
评论
1 楼 cepvoggg 2008-11-19  

相关推荐

    前端面试题:前端框架面试题大全

    前端面试题:前端框架面试题大全; 前端面试题:前端框架面试题大全; 前端面试题:前端框架面试题大全; 前端面试题:前端框架面试题大全; 前端面试题:前端框架面试题大全; 前端面试题:前端框架面试题大全; ...

    RabbitMQ相关的面试题和问题解析

    rabbitmq面试:RabbitMQ相关的面试题和问题解析 rabbitmq面试:RabbitMQ相关的面试题和问题解析 rabbitmq面试:RabbitMQ相关的面试题和问题解析 rabbitmq面试:RabbitMQ相关的面试题和问题解析 rabbitmq面试:...

    常见的性能测试工程师面试题(附答案)

    性能测试工程师面试题是指性能测试工程师在面试过程中遇到的常见问题,涵盖了性能测试的基础知识、LoadRunner 的使用、场景设置、脚本录制、参数设置、关联机制、调试技巧等多个方面。 1. 负载测试和性能测试的区别...

    jmeter性能面试问答题

    - 测试数据分析:分析测试结果,评估系统性能。 **LoadRunner并发测试** LoadRunner支持IP伪装、集合点和多机器分布,以模拟真实并发。集合点失败会导致相关操作取消,影响测试的完整性。 **性能测试关注点** - *...

    GOOGLE面试题集锦

    在 IT 行业中,面试是企业选拔人才的重要步骤之一,而 Google 作为全球顶尖的科技公司,其面试方式也备受关注。Google 面试题集锦就是一个集合了 Google 面试题的资源,涵盖了逻辑、数学、算法等多个方面的知识点。 ...

    性能测试面试题宝典-覆盖大部分性能专项面试题

    性能测试面试题宝典--覆盖大部分性能专项面试题性能测试面试题宝典--覆盖大部分性能专项面试题性能测试面试题宝典--覆盖大部分性能专项面试题性能测试面试题宝典--覆盖大部分性能专项面试题性能测试面试题宝典--覆盖...

    一份就够!史上最全面Python面试题和详解(10个文件)看完啥都会了.zip

    文档“python面试题搜集(六):110道Python面试题(上).md”和“python面试题搜集(六):史上最全python面试题详解(三).md”可能包含更多实战性问题,涉及Python性能优化、并发编程、设计模式以及Python与其他...

    需求分析师面试题

    【需求分析师面试题】知识点详解: 1. 需求收集与分析: 需求分析师在面试中经常被问及如何有效地收集需求。这涉及到与不同干系人的沟通技巧,包括用户、管理层、技术人员等,理解他们的期望和问题。面试者应展示...

    牛客大数据面试题集锦+答案,共523道,46W+字。大厂必备

    大数据面试题V3.0完成了。共523道题,679页,46w+字,来源于牛客870+篇面经。 主要分为以下几部分: Hadoop面试题:100道 Zookeeper面试题:21道 Hive面试题:47道 Flume面试题:11道 Kafka面试题:59到 HBase面试题...

    10万字总结java面试题和答案(八股文之一)Java面试题指南

    JavaOOP面试题 Java集合/泛型面试题 Java异常面试题 Java中的IO与NIO面试题 Java反射面试题 Java序列化面试题 Java注解面试题 多线程&并发面试题 JVM面试题 Mysql面试题 Redis面试题 Memcached面试题 MongoDB面试题 ...

    2021-最新大厂AI面试题q2版121题:含答案及解析21.7.23

    在面试中,掌握这些知识点可以帮助自己更好地应对面试官的问题,提高自己的面试成功率。 此外,这些知识点也可以作为学习和复习的 reference,帮助同学们更好地学习和掌握人工智能领域的知识。 这些知识点涵盖了...

    Java面试题-每日一题:String、StringBuffer、StringBuilder的区别

    Java面试题-每日一题:String、StringBuffer、StringBuilder的区别

    最新Java面试题视频网盘,Java面试题84集、java面试专属及面试必问课程

    面试题包含了不同技术层面的面试问题,同时也能对一些没有面试开发经验的小白给予不可估量的包装, 让你的薪水绝对翻倍, 本人亲试有效.Java面试题84集、java面试专属及面试必问课程,所有的面试题有视屏讲解, 解答方案....

    172份,7701页互联网大厂面试题.pdf

    172份,7701页互联网大厂面试题 172份,7701页互联网大厂面试题 172份,7701页互联网大厂面试题

    2021最新Java面试题合集.zip

    Java作为一门广泛使用的编程语言,其面试题涵盖了众多领域,包括基础、并发编程、网络、虚拟机、大数据处理以及各种框架。以下是对这些面试题集合的详细解析: 1. **BIO, NIO, AIO, Netty面试题 35道**: - **BIO*...

    iOS开发试题大全之二:面试题400条

    iOS开发试题大全:笔试面试一千题,包含1000道iOS试题和参考答案。其中笔试题600条,面试题400条。 题型包含:判断题、单选题,多选题和面试题。这套资料共分为"语法","常识","界面","iOS","操作","数据结构","多...

    2023最新JAVA面试题集

    最新JAVA面试题总结之基础/框架/数据库/JavaWeb/Redis BIO,NIO,AIO,Netty面试题 35道 BTA 常问的 Java基础39道常见面试题及详细答案 Dubbo面试题 47道 ElasticSearch面试题 30道 Git常用命令面试题 60道 Java并发...

    常见C++面试题汇总(最全c语言面试题)

    5、C语言面试题大汇总之华为面试题.txt 6、C语言面试题大汇总之微软亚洲技术中心面试题.txt 7、c语言面试题及答案_1.txt 8、面试题.htm 9、求职笔试面试大全.htm 10、如何回答十个最棘手的面试问题.htm 11、英语面试...

    模拟IC面试题analog面试题.doc

    模拟IC面试题 analog面试题.doc 在这个模拟IC面试题中,我们可以总结出以下几个重要的知识点: 1. Op-Amp 结构比较 在这个问题中,我们需要比较三种不同的 Op-Amp 结构:2-stage op-amp (active load, class-A ...

    互联网校招题库资料笔试面试真题具体面试问题回答技巧腾讯阿里培训资料.zip

    互联网校招题库资料笔试面试真题具体面试问题回答技巧腾讯阿里培训资料: C++面试题笔试题 C语言 IQ智力面试题笔试题 JAVA笔试面试资料 NET面试题笔试题 web开发 数据库面试题笔试题 算法 数据结构 计算机基础 计算机...

Global site tag (gtag.js) - Google Analytics