论坛首页 Java企业应用论坛

面试题讨论(一)

浏览 16606 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (1) :: 隐藏帖 (3)
作者 正文
   发表时间:2010-09-13   最后修改:2010-09-13

     首先,请JE上的高手、老鸟们原谅我把这道题拿出来讨论,也许,这题对你们来说只是小菜一碟,我却是觉得这种题目比较少见,我也不太清楚。但是,我想拿出来与大家分享下,讨论讨论,希望能挖掘出它的原理,让不清楚的小鸟们长长见识,当然也包括我,呵呵!
    
      这是一道用友的面试题。题目是:请优化下面代码,并给出原因:
  
     

                for(int i = 0;i<10000;i++) {
                     for(int j = 0;j<1000;j++) {
                          for(int k = 0;k<100;k++) {
                             function(i,j,k);\
                          }
                     }
                   }
      



      这道题优化起来也许很容易,但要说出其中的原理我觉得比较难,希望能看到更多的是原理方面的讨论,越深刻越好!

 

   发表时间:2010-09-13  
就是把循环次数少的放在最外层嘛
0 请登录后投票
   发表时间:2010-09-13  
太多的函数调用,直接在function内部三重循环就可以了。
0 请登录后投票
   发表时间:2010-09-13  
1楼的优化方案是对的,但没说为什么,我们可能还是不知道
2楼的优化方案已经在该题目讨论之外了
0 请登录后投票
   发表时间:2010-09-13   最后修改:2010-09-13
抱歉!误人子弟。
0 请登录后投票
   发表时间:2010-09-13   最后修改:2010-09-13
观 望中
0 请登录后投票
   发表时间:2010-09-13  
哥们,看看这个帖子,分析的很详细
http://www.iteye.com/topic/632481
0 请登录后投票
   发表时间:2010-09-13  
计算一下10000*1000*100=10亿,也就是说要循环10亿次,如果单从循环优化来讲可以从以下几个方面:
1、一楼所提到的把循环次数少的放在最外面,减少外层的判断次数
2、i、j、k放在循环外实例化,减少实例化的次数
3、用i=100,i>0,i--,这种递减的方式,原因是计算机对0和1比较感兴趣

但说白了,应用中遇到这种循环,再优化也死定了!
2 请登录后投票
   发表时间:2010-09-13  
我认为。。这样优化了也没啥明显的效果。
0 请登录后投票
   发表时间:2010-09-13  
把循环少的放在外层,我认为还应该是减少了局部变量初始化的次数。
优化前i初始化1次,j10000次,k1000×10000次
优化后k1次,j100次,i100×1000次。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics