zoukankan      html  css  js  c++  java
  • 最近有点烦躁,各种面试都不顺利,所以打算静下心来整理一下

    平时感觉自己挺牛逼的啊,怎么一面试就各种懵比了!这样的问题各位做为程序猿想必会经常遇到,下面写写今天的面试让我心里很不开心的一件事情,问题很简单,简单到无法原谅自己的地步,下面我们开始

    1、问题是介个样子滴:小伙,用递归来段阶乘的代码呗!

    尼玛这个当然很简单啊,可惜瞬间脑子短路了,过后回想起来抽自己两巴掌先!这种错误不可饶恕

    那么现在我们来写下用递归来实现段阶乘

    拿到需求肯定是要先分析一下滴

    1.首先你得知道什么事阶乘,所有小于及等于该数的正整数的积,并且有0的阶乘为1。 自然数n的阶乘写作n!,比如10的阶乘10!=10*9*8*7*6*5*4*3*2*1

    2.其次你得判断当用户传入的值为小于1或等于1的时候返回的值应该是1

    3.最后得出以下的结果

    1 function fn ( n ) {
    2   return ( n <= 1 ) ? 1 : ( n * fn ( n - 1 ) ) ;     
    3 }

     2、怎样清空一个数组

      我当时说的是第一种

      1、赋值为一个空数组以达到清空原数组,我比较菜,面试经验也少,基础也比较薄弱,所以反应也不是很快,就只想到了这个,这种办法其实好像并没有真正的清空,只是把原来的数组变为了空数组,我不是很明白,是不是有其他的数组应用了原数组的话就不会被垃圾回收?希望有大神看到后给解答一下,谢谢,先看下代码

    var arr1 = [1,2,3,4]
    var arr2 = arr1
    arr1 = [];
    console.log(arr1);
    console.log(arr2);
    
    //    []
    //    [1, 2, 3, 4]

      2、将length赋值为0;当时面试官给我说的也是这一种,他的原话是为什么不把数组的长度置为0呢,你的做法(指第一种)岂不是又开辟了一个新的内存地址;

      回来之后都尝试了一下,一看,把原数组的长度置为0之后所有指向它的其他数组都变为空数组了,下面看代码

    var arr1 = [1,2,3,4]
    var arr2 = arr1
    arr1.length = 0;
    console.log(arr1);
    console.log(arr2);
    
    //    []
    //    []

      3、利用数组的万能函数来清空数组

    //    伪代码
    arr1.splice(0,arr1.length);
    //    解释一下,splice方法接受的第一个参数是指数组的下标位置,即删除/添加的起始位置,第二个参数是删除的数量,如果是0则不删除,第三个参数是可选参数,就是往数组添加新元素
    
    var arr1 = [1,2,3,4];
    var arr2 = arr1;
    arr1.splice(0,arr1.length);
    console.log(arr1);
    console.log(arr2);
    
    //    []
    //    []

      当时的面试官问的是最快的方法,下面做下测试(都在google浏览器做的测试)

      1、

    var arr1 = []
    for(var ii = 0 ;ii<10000000;ii++){
        arr1.push(ii)
    }
    var arr2 = arr1
    var start = new Date().getDate()
    arr1 = []
    var end = new Date().getDate()
    console.log(end-start)
    
    //    0

      2、

    var arr1 = []
    for(var ii = 0 ;ii<10000000;ii++){
        arr1.push(ii)
    }
    var arr2 = arr1
    var start = new Date().getDate()
    // arr1 = []
    arr1.length = 0
    // arr1.splice(0,arr1.length)
    var end = new Date().getDate()
    console.log(end-start)
    
    //    0(google浏览器)

      3、

    var arr1 = []
    for(var ii = 0 ;ii<10000000;ii++){
        arr1.push(ii)
    }
    var arr2 = arr1
    var start = new Date().getDate()
    // arr1 = []
    // arr1.length = 0
    arr1.splice(0,arr1.length)
    var end = new Date().getDate()
    console.log(end-start)
    
    //    0

      我都是在google浏览器上做的测试没看出有多大的区别,看到有园友做的测试:http://www.cnblogs.com/snandy/archive/2011/04/04/2005156.html

      他得出的结论是赋值为一个空数组以达到清空原数组即arr1 = []的办法更快更高效

      

  • 相关阅读:
    python接口自动化-json数据处理
    Fiddler-抓取手机app请求
    monkey常用命令实例
    python接口自动化-Cookie_绕过验证码登录
    python接口自动化-session_自动发文
    python接口自动化-post请求4
    python接口自动化-post请求3
    Python学习笔记第十五周
    Python学习笔记第十四周
    Python学习笔记第十二周
  • 原文地址:https://www.cnblogs.com/chuangyidai/p/5586473.html
Copyright © 2011-2022 走看看