1. 程式人生 > >今日頭條前端面試過程與面試題

今日頭條前端面試過程與面試題

頭條的面試業界最難,為準備頭條的面試,我刷了好幾天的題目,雖然最後被拒,但是在準備過程中知道了很多開發中被忽略的原理問題。這給我之後的面試打下了很好的基礎。

到了頭條總部,前臺給了一套題。三道簡答,三道程式設計題

簡答題:

  • 什麼是函式節流,為什麼要使用函式節流,如何實現
  • 描述一下JS 的new操作符具體做了什麼
  • 簡述document和window兩個物件區別

程式設計題:

  • JS程式設計實現簡單模板引擎變數替換

    JS編碼實現一個render方法,使得可議這樣呼叫:
    const year = ‘2017’;
    const month = ‘09’;
    const day = ‘21’;
    const str = render(‘

    year{month}-${day}’)({year,month,day});
    console.log(str)//輸出2017-09-21

  • 求二叉樹是否存愛和值為N的路徑

    從二叉樹的根到葉子節點稱為一條路徑,路徑上的每個節點的value之和為路徑和值,是否存在一條和值為N的。

  • 封裝一個ajax請求庫實現get和post方法

    ajax.get(url,options).then(success, fail);
    ajax.post(url,data,options).then(success,fail);

答題時間是40分鐘,其實我拿到試卷掃了一遍我就知道這面試會涼。本著來都來了的精神,和見識最難面試,硬著頭皮做了一下,只有模板那個一點頭緒都沒有。
答完題面試官來了,年輕一看就是個學霸。看了下我的筆試答案,我口述了思路,他講了二叉樹的思路。我做的時候是遍歷整個二叉樹,他說可以用深度。由於演算法實在不是我的強項,我之前是學電路設計的,所以大家應該明白。我估計面試官也沒有見過筆試題,也沒有深究下去開始正式面試。

不得不說頭條確實高素質,問的問題很專業,也很基礎。先問了網路協議,說一下TCP,我回答三次握手,他笑著說這是老掉牙的東西,想聽聽別的,我說沒學過網路,他就進入下一題環節。首先要我手寫一個duplicate字串,給一個字串,假如’abc’,輸出’abcabc’, 我在原型鏈加了一個duplicate函式,返回this+this.接著就是經典的非同步輸出問題,他自己設計了好幾個setTimeout問結果,我給出答案,他要我畫出任務執行佇列,我不知道非同步執行佇列是一個單獨的執行佇列,所以當時沒畫出,得虧頭條問了,第二天我去另一家面試也問到了這個問題,我很自信的答出來。接下來問了個函式柯里化,其實考的是arguments,add(a)(b)(c)和add(a,b,c)都能輸出a+b+c。事件流,s2元素是s1元素的子元素,捕獲和冒泡順序。在這個問題還出個小插曲,面試官聽錯我的答案,跟我討論了一陣子,我解釋難道不是先從上至下先捕獲然後從下至上冒泡嗎,他想了想說我是對的,嚇了我一跳。CSS問了經典的垂直居中,BFC,BFC條件。

面試結束後,我知道肯定沒過,就跟面試官說刷了很多題,面試官跟我說不光要刷題還要弄懂題目的原理。面試雖沒過,但收穫很多,我真心覺得過了頭條的面試,其他面試都是小case。