1. 程式人生 > >阿里筆試題

阿里筆試題

題目

    ajaxArray是一個非同步請求陣列,完成mergePromise函式達到以下輸出,並返回一個Promise物件

const ajax1 = () =>
  timeout(2000).then(() => {
    console.log('1')
    return 1
  })

const ajax2 = () =>
  timeout(1000).then(() => {
    console.log('2')
    return 2
  })

const ajax3 = () =>
  timeout(2000).then(() => {
    console.log('3')
    return 3
  })
const mergePromise = ajaxArray => {}
mergePromise([ajax1, ajax2, ajax3]).then(data => {
      console.log('done');
      console.log(data);
    });
分別輸出
1
2
3
done
[1, 2, 3]
 */

題目分析

    ajaxArray是一個非同步請求陣列,其中執行時間不定,而要達到將資料按執行順序儲存到陣列,自然可以想到Async/await,可以依次執行陣列各項,並返回一個Promise

程式碼

let timeout = time => {
  return new Promise((resolve, reject) => {
    setTimeout(_ => resolve(), time)
  })
}
const ajax1 = () =>
  timeout(2000).then(() => {
    console.log('1')
    return 1
  })

const ajax2 = () =>
  timeout(1000).then(() => {
    console.log('2')
    return 2
  })

const ajax3 = () =>
  timeout(2000).then(() => {
    console.log('3')
    return 3
  })
const mergePromise = ajaxArray => {
  return new Promise((resolve, reject) => {
    async function asyFun(ajaxArray) {
      let data = []
      for (let key in ajaxArray) {
        await ajaxArray[key]().then(d => {
          data.push(d)
        })
      }
      return data
    }
    asyFun(ajaxArray).then(valueArray => {
      resolve(valueArray)
    })
  })
}
mergePromise([ajax1, ajax2, ajax3]).then(data => {
  console.log('done')
  console.log(data) // data 為 [1, 2, 3]
})

另一種解法---非原創

const ajax1 = () =>
  timeout(2000).then(() => {
    console.log('1')
    return 1
  })

const ajax2 = () =>
  timeout(1000).then(() => {
    console.log('2')
    return 2
  })

const ajax3 = () =>
  timeout(2000).then(() => {
    console.log('3')
    return 3
  })
const mergePromise = ajaxArray => {
  return new Promise((resolve, reject) => {
    //返回一個新的Promise
    let arr = [] //定義一個空陣列存放結果
    let i = 0
    function handleData(index, data) {
      //處理資料函式
      arr[index] = data
      i++
      if (i === ajaxArray.length) {
        //當i等於傳遞的陣列的長度時
        resolve(arr) //執行resolve,並將結果放入
      }
    }
    function handlePromise(i) {
      if (i >= ajaxArray.length) return
      ajaxArray[i]().then(data => {
        handleData(i, data) //將結果和索引傳入handleData函式
        handlePromise(i + 1)
      }, reject)
    }
    handlePromise(0)
    // for (let i = 0; i < ajaxArray.length; i++) { //迴圈遍歷陣列
    // ajaxArray[i]().then((data) => {
    //     handleData(i, data); //將結果和索引傳入handleData函式
    // }, reject)
    // }
  })
}
mergePromise([ajax1, ajax2, ajax3]).then(data => {
  console.log('done');
  console.log(data); // data 為 [1, 2, 3]
});

相關推薦

基於LRU演算法的快取池——阿里試題

這是一題2011年阿里實習生招聘的筆試題,感覺不錯,拿來給大家分享一下,原題如下: 在進入我的淘寶頁面時,此頁面需要獲取登入的使用者的相關資訊,在訪問量少的情況下,可以採用直接訪問資料庫的方式,但當訪問量太高時,會導致資料庫壓力過高,因此通常採取的方法為將使用者資訊進行快取

阿里試題

題目     ajaxArray是一個非同步請求陣列,完成mergePromise函式達到以下輸出,並返回一個Promise物件 const ajax1 = () => timeout(2000).then(() => { console.lo

計算最小跨度(阿里試題

題目:給定兩個由數字0-9組成的字元陣列,如“2345”, “4436”,從這兩個陣列分別取數,生成新陣列。比如生成:44234365,生成方式如下圖所示,每個陣列取數放入新陣列的時候,是按照下標從小到大取得。對於字元陣列,定義跨度值:K(c),為數字c最大下標和最小下標之差

數組合並問題(阿里試題,動態規劃)

咋一看到本題,首先想到的是窮舉法,後來跑測試資料時,程式執行效率很慢,無法滿足本題要求。後來想到本題是屬於典型的動態規劃問題,找出計算公式,將大問題轉化為小問題求解,本題的邊界情況比較多,找出全部的邊界情況是難點。問題分析:(1)求出公式:當陣列長度n=1時,f(a1,b1)

一道阿里試題解析--程式調優

下列方法中,____不可以用來程式調優?         A.改善資料訪問方式以提升快取命中率         B.使用多執行緒的方式提高 I/O 密集型操作的效率         C.利用資料庫連

2018阿里試題一道

八卦陣相傳是由諸葛亮創設的一種戰鬥隊形和兵力部署,由八種陣勢組成。為了方便,採用矩陣來描述一個八卦陣,它由八個單陣組成,每個單陣由多個兵力區域組成形成一種陣勢,如下圖所示,其中數字為一個兵力區域的士兵個數。假設單陣與單陣之間兵力區域不會相鄰,且單陣中每個兵力區域至少存在一個相

阿里試題(2017線上程式設計題)-- 數串分組

題目 2017年3月阿里線上程式設計題(實習內推) 給定一串數字 判斷是否存在這三個元素,它們將數字串分為四個子串,其中每個子串的數字之和均相同(該3個元素不納入計算) 要求時間複雜度和空間複雜度均不能超過O(n) 實現

阿里試題-城堡問題

這個題目我兩次筆試都遇到了,貼出來紀念一下吧。。。歡迎指正 【8月22:發現有問題,需要重新修改】 將軍大勝歸來, 奪取很多城堡(xi, yi)。國王向將軍許諾, 你站在任意的城堡上, 選擇任意角度,看得見的城堡都是你的,包括你站的城堡,但頭不能動但。而且不

記某一次阿里面試的實時試題

某次面試阿里雲,要求實時寫一個小程式,要求如下: 1.兩個執行緒,一個執行緒生產者,一個執行緒是消費者 2.生產者生產票,超過10張就休息,被消費了就繼續生產。 3.消費者消費票,票沒了之後就休息,有票了接著消費。 題目看著很簡單,但卻包含了很多考點:訊息佇列、執行緒、執行緒通訊

阿里秋招試題——求冰田區域

問題描述 將一個區域,分成 m×n 個塊,若某一個塊有冰則用 * 表示,無冰則用 0 表示,任給一個這樣的區域,求冰田區域(冰田區域劃分規則:如果兩個小塊之間能夠在不穿越其他塊的情況下連成直線,則**屬於同一冰田區塊)個數? 輸入

阿里資料分析師實習生試題2014年3月29日

時間為90分鐘 題型:10道選擇,3道簡答,2道分析題 回憶版 選擇題: 1)若 r=0,則兩者的關係: 我選擇的是  沒有線性關係 2)以下兩種行為分別對應哪種分類演算法的評價標準: 行為1:警察如何判別某人是小偷 行為2:小偷是如何被識別出來(+_+行為

大資料阿里面試試題總結,我的結果 當然是涼涼

我  秀兒  在學習大資料一年後去了阿里面試,這是我筆試的時候題目,雖然我涼了,但是希望大家加油 總結給大家看看 參考下面的M R系統的場景:HDFS 塊大小為64MB;輸入型別為FileInputFormat;有三個檔案大小分別是: 0.在Hadoop中定義的

阿里巴巴試題

                1、有一個虛擬儲存系統,若程序在記憶體中佔3頁(開始時記憶體為空),若採用先進先出(FIFO)頁面淘汰演算法,當執行如下訪問頁號序列後1,2,3,4,5,1,2,5,1,2,3,4,5,會發生多少缺頁?A、7                       B、8         

阿里巴巴集團2014秋季校園招聘試題

                轉載請標明出處,原文地址:http://blog.csdn.net/hackbuteer1/article/details/11931173第一部分 單選題(前10題,每題2分;後10題,每題3分,共50分,選對得滿分,選錯倒扣1分,不選得0分)1、假設把整數關鍵碼K雜湊到有N

2016阿里安全工程師實習生招聘試題

一共十道問答題 2. 1)請描述一下fuzz的主要思想和優缺點 2)近幾年,很多Linux核心提權漏洞都和核心驅動的ioctl函式相關;請設計一套fuzz方案,對其進行漏洞挖掘。 3.給你的APP做一個手勢密碼的功能,忽略UI部分的實現,請從安全的角度出發,描述你的實現

阿里p7試題

1. junit用法,before,beforeClass,after, afterClass的執行順序 2. 分散式鎖 3. nginx的請求轉發演算法,如何配置根據權重轉發 4. 用hashmap實現redis有什麼問題(死鎖,死迴圈,可用ConcurrentHas

阿里java校招試題——程式碼塊中語句的執行順序

下面是阿里java校招的一道筆試題,程式碼如下: public class HelloA { //構造方法 public HelloA(){ System.out.println("Hello A!父類構造方法"); } //非靜態

2017春招網際網路產品經理試題整理|騰訊,阿里,京東,網易,頭條,去哪兒,攜程,人人

騰訊: 1.分析一款你最喜歡的app,他的產品定位,目標使用者,競爭優勢,還有哪些可以改進的地方? 2.VR AR AI時代,設計一套智慧生活解決方案 阿里: 筆過之後沒有進行記錄,因此印象比較模糊:(3道大題) 大概20道選擇,基本都是技術相關

阿里巴巴2015秋季校園招聘前端開發工程師線上試題及答案

前幾天是阿里巴巴秋季校園招聘線上筆試的第一天,本著學習和共享的精神,本人上網百度了其中一份前端線上筆試題,並且寫出了自己的答案,發上來,供大家參考。 總的來說,這一次的題目相比以前的題目,最大的特點是新,居然直接考了nodejs,這是出乎很多人的意料的。廢話不多說,接下

阿里巴巴2018實習生-前端開發工程師試題

    今天晚上7點到8點剛經歷過阿里的前端筆試,時間60分鐘,總共10道選擇(5道單選,5道多選),2道問答,1道程式設計。    不得不說阿里的門檻真高,看到選擇題的時候就懵逼了,“這是啥這是啥??”好多都沒見過,可能我太菜啦,瞬間感覺知識於我就像宇宙於我般渺茫,後邊繼續