zoukankan      html  css  js  c++  java
  • 小米2018春招实习笔试题总结

    Question1:
    有一个url数组

    var urls = ['/a', '/b', '/c',...]

    要求依次请求这几个url, 要求是 第一个请求完了才发第二个请求,第二个完了才发第三个请求
    如此依次。

    function reqst(index){
          var ajaxObj = new XMLHttpRequest();
          ajaxObj.open('get',urls[index]);
          ajaxObj.send();
          ajaxObj.onreadystatechange = function () {
            if (ajaxObj.readyState==4&&ajaxObj.status==200) {
              console.log(urls[index]+'请求成功');
              if(index<len-1){
                reqst(index++);
              }else{
                console.log('url数组中的url全部请求完成');
              }
            }
          }  
    }
    var urls = ['/a', '/b', '/c']
    var len = urls.length;
    reqst(0);    

    Question2:
    定义这样一个函数
    function repeat(func, times, wait) {
    }
    参数分别是需要 repeat的函数, repeat的次数,每次repeat的间隔
    使用方式如下
    调用这个函数能返回一个新函数。

    比如传入的是alert, 执行10次,间隔5秒
    var repeatedFun = repeat(alert, 10, 5000);
    调用返回的这个新函数,如:

    repeatedFun("hellworld");

    会alert十次 helloworld

    有三种解决思路:

    (1)sleep(n)

    function repeat(func, times, wait) {
      return function(str){
        for(var i=0;i<times;i++){
          func(str);
          sleep(wait);
        }
      }
    }
    function sleep(n){
     var start=new Date().getTime();
     console.log(start);
     while(true){
      var time=new Date().getTime();
      if(time-start>n){
        break;
      }
     }
    }
    var repeatedFun = repeat(alert, 3, 5000);
    repeatedFun("hellworld");

     (2) setInterval

    function repeat(func, times, wait) {
    
      return function f(str){
        var t;
        var flag = 0;
        var interval = setInterval(function(){
          flag++;
          if(flag === times){
             clearInterval(interval);
          }
          func(str);
        }, wait);
      }
    
    }
    
    var repeatedFun = repeat(alert, 10, 5000);
    repeatedFun("hellworld");

    (3)setTimeout,利用回调实现

    function repeat(func, times, wait) {
    
      return function f(str){
        var flag = 0;
        func(str);
        var interval = setTimeout(function(){
          flag++;
          if(flag === times){
             clearInterval(interval);
          }
          f(str);
        }, wait);
      }
    
    }
    
    var repeatedFun = repeat(alert, 10, 5000);
    repeatedFun("hellworld");
  • 相关阅读:
    线段树题胡乱整理
    【テンプレート】RMQ
    【説明する】线段树
    【テンプレート】字符串hash
    [HDOJ3718]Similarity(KM算法,二分图最大匹配)
    [HDOJ3714]Error Curves(三分)
    [HDOJ3711]Binary Number(枚举)
    [HDOJ3709]Balanced Number(数位dp)
    [HDOJ5542]The Battle of Chibi(DP,树状数组)
    [HDOJ5543]Pick The Sticks(DP,01背包)
  • 原文地址:https://www.cnblogs.com/zhenguoli/p/8919855.html
Copyright © 2011-2022 走看看