日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

TikTok 面試:四個你可能感興趣的前端題

來源: 責編: 時間:2024-01-02 09:29:22 229觀看
導讀最近,我的好朋友正在換工作,在網上收到了很多offer。其中之一就有來自一家名為 TikTok 公司的Offer,你可能非常熟悉該公司,也有可能不是很熟悉它。朋友在面試的時候,他們讓我的朋友當場寫代碼來實現4個復雜方法的功能。1.

最近,我的好朋友正在換工作,在網上收到了很多offer。dWN28資訊網——每日最新資訊28at.com

dWN28資訊網——每日最新資訊28at.com

其中之一就有來自一家名為 TikTok 公司的Offer,你可能非常熟悉該公司,也有可能不是很熟悉它。dWN28資訊網——每日最新資訊28at.com

朋友在面試的時候,他們讓我的朋友當場寫代碼來實現4個復雜方法的功能。dWN28資訊網——每日最新資訊28at.com

1. 嘗試實現Promise.all API

Promise.all() 方法將可迭代的 Promise 作為輸入,并返回單個 Promise,該 Promise 解析為輸入 Promise 結果的數組。dWN28資訊網——每日最新資訊28at.com

當所有輸入的 Promise 都已解決,或者輸入的可迭代對象不包含 Promise 時,返回的 Promise 將得到解決。dWN28資訊網——每日最新資訊28at.com

它會在任何輸入Promise拒絕或非承諾拋出錯誤時立即拒絕,并將拒絕第一個拒絕消息/錯誤。dWN28資訊網——每日最新資訊28at.com

const promise1 = Promise.resolve(3);const promise2 = 42;const promise3 = new Promise((resolve, reject) => {  setTimeout(resolve, 100, 'foo');});Promise.all([promise1, promise2, promise3]).then((values) => {  console.log(values);});// expected output: Array [3, 42, "foo"]

現在,自己實現了一個dWN28資訊網——每日最新資訊28at.com

Promise.myAll = (promises) => {  return new Promise((rs, rj) => {    // counter    let count = 0    // Storage results    let result = []    const len = promises.length    if (len === 0) {      return rs([])    }    promises.forEach((p, i) => {      // Some array items may not be Promise and need to be converted manually      Promise.resolve(p).then((res) => {        count += 1        // Collect the return value of each Promise         result[ i ] = res        // Set the value of Promise to result, when all Promises are successful        if (count === len) {          rs(result)        }        // As long as one promise fails, the result is failure      }).catch(rj)    })  })}

進行測試如下:dWN28資訊網——每日最新資訊28at.com

const p1 = Promise.resolve(1)const p2 = new Promise((resolve) => {  setTimeout(() => resolve(2), 1000)})const p3 = new Promise((resolve) => {  setTimeout(() => resolve(3), 3000)})const p4 = Promise.reject('err4')const p5 = Promise.reject('err5')// 1. All promise succeededconst p11 = Promise.myAll([ p1, p2, p3 ])  .then(console.log) // [ 1, 2, 3 ]      .catch(console.log)// 2. One promise failedconst p12 = Promise.myAll([ p1, p2, p4 ])  .then(console.log)      .catch(console.log) // err4// 3. Two promises failed. The final output is err4. The return value of the first failureconst p13 = Promise.myAll([ p1, p4, p5 ])  .then(console.log)      .catch(console.log) // err4

2.設計一個可以設置過期日期的localstorage API

localstorage不會像cookie一樣自動過期,所以過期時間需要自己維護。dWN28資訊網——每日最新資訊28at.com

我的思路是:dWN28資訊網——每日最新資訊28at.com

使用setItem時,保存過期時間。使用getItem時,將時間與當前時間進行比較,如果大于當前時間,則返回該值,否則,需要通過removeItem移除該值,并返回null。dWN28資訊網——每日最新資訊28at.com

const storage = {  prefix: 'fatFish',  timeSign: '|fatFish|',  setItem (key, value, time) {    // Protect the key from being overwritten    key = `${this.prefix}${key}`    // There is no incoming time, the default expiration time is one month, of course, it can be other times or not set    time = time ? new Date(time).getTime() : Date.now() + 24 * 60 * 60 * 31 * 1000    // Constructs a string of the form 1646094676134|fatFish|"Front-end Fat Fish"    window.localStorage.setItem(key, `${time}${this.timeSign}${JSON.stringify(value)}`)  },  getItem (key) {    key = `${this.prefix}${key}`    let value = window.localStorage.getItem(key)    if (value) {      let index = value.indexOf(this.timeSign)      let time = +value.slice(0, index)      // Determine if time has expired      if (time > Date.now()) {        value = JSON.parse(value.slice(index + this.timeSign.length))      } else {        value = null        window.localStorage.removeItem(key)      }    }    return value  }}

現在,進行測試dWN28資訊網——每日最新資訊28at.com

storage.setItem('name', 'front-end-fat-head', Date.now() + 100 * 1000) // fatFishname  1646095230191|fatFish|"front-end-fat-head"storage.getItem('name') // front-end-fat-head// 100s laterstorage.getItem('name') // nullstorage.setItem('obj', { name: 'front-end-fat-head', age: 100 }, Date.now() + 100 * 1000) // fatFishobj  1646095311366|fatFish|{"name":"front-end-fat-head","age":100}storage.getItem('obj') // {name: 'front-end-fat-head', age: 100}

基本上符合題主的要求。當然,我們也可以處理異常情況,比如空間已滿、設置錯誤等。dWN28資訊網——每日最新資訊28at.com

3.找到兩個節點最近的公共父節點,包括節點本身

介紹:dWN28資訊網——每日最新資訊28at.com

oNode1 和 oNode2 位于同一文檔中,并且不會是同一節點。dWN28資訊網——每日最新資訊28at.com

function findCommonParent(oNode1, oNode2) {  // fill here}

相信看到這道題你一定會用遞歸,但是沒有明確的思路。dWN28資訊網——每日最新資訊28at.com

這個時候不要緊張。從問題中找出更有效的信息,盡量用更多的筆來畫(如果是現場面試,記得只帶一支鉛筆,有時候畫多了想法就出來了)。dWN28資訊網——每日最新資訊28at.com

1.1 兩個節點處于同一級別

讓我們嘗試畫出這兩個節點之間可能的關系。如下圖所示,它們的直接父節點就是答案。dWN28資訊網——每日最新資訊28at.com

dWN28資訊網——每日最新資訊28at.com

1.2 兩個節點互為祖先

oNode1 是目標節點。當然,反過來也是一樣的。oNode2 也可以是 oNode1 的祖先。dWN28資訊網——每日最新資訊28at.com

dWN28資訊網——每日最新資訊28at.com

1.3 兩個節點之間沒有關系

如下圖所示,兩個節點之間的距離很遠,看似沒有任何關系,但從其中任意一個向上查找,肯定能找到包含oNode1或oNode2的點。dWN28資訊網——每日最新資訊28at.com

dWN28資訊網——每日最新資訊28at.com

1.4 遞歸實現版本

根據上面的分析,相信你很快就能寫出下面的代碼。dWN28資訊網——每日最新資訊28at.com

function findCommonParent(oNode1, oNode2) {  // Cases 1 and 2  if (oNode1.contains(oNode2)) {    return oNode1    // Cases 1 and 2  } else if (oNode2.contains(oNode1)) {    return oNode2  } else {    // Case 3, if you look up one of the nodes, you will find a common ancestor node    return findCommonParent(oNode1.parentNode, oNode2)  }}

1.5 遍歷實現版本

遞歸很好理解,僅僅通過遍歷就可以實現嗎?事實上,遞歸問題往往可以通過遍歷來解決。dWN28資訊網——每日最新資訊28at.com

function findCommonParent (oNode1, oNode2) {  // Using oNode2 here is the same  // If a node contains another node, return directly, otherwise keep looking up  while (!oNode1.contains(oNode2)) {    oNode1 = oNode1.parentNode   }  return oNode1}

4.使用reduce實現map功能

這個問題會比較簡單,我們直接寫代碼吧。dWN28資訊網——每日最新資訊28at.com

Input: [1, 2, 3]Output: [2, 4, 6]
Array.prototype.map2 = function (callback, ctx = null) {  if (typeof callback !== 'function') {    throw('callback must be a function')  }  return this.reduce((result, cur, index, array) => {    return  result.concat(callback.call(ctx, cur, index, array))  }, [])}let arr = [ 1, 2 ]let arr2 = arr.map2(function (it, i, array) {  console.log(it, i, array, this)  return it * 2}, { name: 'fatfish' })console.log(arr2)

dWN28資訊網——每日最新資訊28at.com

最后

看到這里,我想你已經明白了,如果還不明白的話,那就是我還沒有說清楚,下次,我爭取說的更加清楚一些。當然,如果你覺得這個內容對你有幫助的話,請記得點贊我,關注我,以便學習能夠內容,同時,也不會錯過我們的優質內容。dWN28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-55029-0.htmlTikTok 面試:四個你可能感興趣的前端題

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 深入理解python函數,一切皆對象

下一篇: Go測試的20個實用建議,你采納了嗎?

標簽:
  • 熱門焦點
  • 6月安卓手機好評榜:魅族20 Pro蟬聯冠軍

    性能榜和性價比榜之后,我們來看最后的安卓手機好評榜,數據來源安兔兔評測,收集時間2023年6月1日至6月30日,僅限國內市場。第一名:魅族20 Pro好評率:95%5月份的時候魅族20 Pro就是
  • 一文搞定Java NIO,以及各種奇葩流

    大家好,我是哪吒。很多朋友問我,如何才能學好IO流,對各種流的概念,云里霧里的,不求甚解。用到的時候,現百度,功能雖然實現了,但是為什么用這個?不知道。更別說效率問題了~下次再遇到,
  • 自律,給不了Keep自由!

    來源 | 互聯網品牌官作者 | 李大為編排 | 又耳 審核 | 谷曉輝自律能不能給用戶自由暫時不好說,但大概率不能給Keep自由。近日,全球最大的在線健身平臺Keep正式登陸港交所,努力
  • 微博大門常打開,迎接海外畫師漂洋東渡

    作者:互聯網那些事“起猛了,我能看得懂日語了”。“為什么日本人說話我能聽懂?”“中文不像中文,日語不像日語,但是我竟然看懂了”…&hell
  • 攜眾多高端產品亮相ChinaJoy,小米帶來一場科技與人文的視聽盛宴

    7月28日,全球數字娛樂領域最具知名度與影響力的年度盛會中國國際數碼互動娛樂展覽會(簡稱ChinaJoy)在上海新國際博覽中心盛大開幕。作為全球領先的科
  • 消息稱小米汽車開始篩選交付中心:需至少120個車位

    IT之家 7 月 7 日消息,日前,有微博簡介為“汽車行業從業者、長三角一體化擁護者”的微博用戶 @長三角行健者 發文表示,據經銷商集團反饋,小米汽車目前
  • 超級標準版旗艦!iQOO 11S全球首發iQOO超算獨顯芯片

    上半年已接近尾聲,截至目前各大品牌旗下的頂級旗艦都已悉數亮相,而下半年即將推出的頂級旗艦已經成為了數碼圈爆料的主流,其中就包括全新的iQOO 11S系
  • 英特爾Xe-HP項目終止,將專注Xe-HPC/HPG系列顯卡

    據10 月 31 日消息報道,英特爾高級副總裁兼加速計算系統和圖形事業部總經理 表示,Xe-HP“ Arctic Sound” 系列服務器 GPU 已經應用于 oneAPI devcloud 云服
  • 北京:科技教育體驗基地開始登記

      北京“科技館之城”科技教育體驗基地登記和認證工作日前啟動。首批北京科技教育體驗基地擬于2023年全國科普日期間掛牌,后續還將開展常態化登記。  北京科技教育體驗基
Top 主站蜘蛛池模板: 东丽区| 同德县| 石首市| 阳春市| 沾益县| 蕉岭县| 舞阳县| 开鲁县| 东乡| 阳江市| 伽师县| 石门县| 牡丹江市| 通渭县| 新巴尔虎右旗| 鹿泉市| 黄冈市| 巴青县| 竹北市| 金山区| 全州县| 盐边县| 固阳县| 怀仁县| 辽源市| 建宁县| 同江市| 鹤壁市| 六安市| 大邑县| 永定县| 扬中市| 奇台县| 普格县| 资溪县| 天气| 孟津县| 阳高县| 仁怀市| 东宁县| 祁连县|