1. 程式人生 > >2018年前端開發校招面試總結

2018年前端開發校招面試總結

原文:syean.cn/2018/12/27/…

2018年人生中最重要的事情之一就是找工作啦,從6月份初斷斷續續開始複習,7月內推開始,9月大批量的筆試、面試,9月初拿到了第一個offer,10月初拿到了自己比較滿意的offer,也是歷經了快4個月。
簡歷投的主要是杭州、上海的一些大廠們,分享一些面試的問題吧,考到爛的如輸入url發生了什麼、閉包是什麼,虛擬dom等,vue雙向繫結一類就不放出來了。

不過這些面試題雖然常見,但是還是要用心掌握,因為考到的頻率確實蠻高的。由於當時並沒怎麼接觸nodejs和react ,所以這方面的題目基本沒有。我是個懶人,所以僅有一些提供了一下思路~~

js相關

  • ajax和axios的不同(多益)
  • vue中在哪個階段進行非同步請求比較合適(阿里,百度)
  • 微信小程式底層實現的機制(jsbridge)(阿里)
  • vue中vuex的mapSetter是怎麼實現的(bilibili)
  • 什麼是尾遞迴(bilibili)
  • vue專案中使用到的優化手段(網易)
  • commonjs和ES6中的模組化有什麼區別(網易)
    回答見阮一峰的部落格
  • webstoreage如果儲存滿了會怎麼樣(報錯)(網易)
  • application cache是怎麼設定的(網易)
  • 如何獲取一個div下所有的文字節點(網易)
  • 相容瀏覽器的一些方法(網易)
  • 為什麼不同瀏覽器渲染出來的東西會有差別,本質是什麼(網易)
  • vue中寫一個元件要注意哪些(58)
  • js如何實現多執行緒,webworker怎麼通訊(美團)
  • vue的非同步更新考察:(美團)

vue中以下程式碼會出發幾次update生命週期(1次)

this.a=1
//程式碼
this.a=3;
複製程式碼

vue中以下程式碼會出發幾次update生命週期(2次)

setTimout(()=>{
    this.a=1
    
},0)

//程式碼
this.a=3;
複製程式碼

那些紅寶書裡都有的知識點

紅寶書(javascript高階程式設計一定要好好看呀~~~ )

  • BOM有哪些東西(網易)
  • requestAnimationFrame和setTimeout寫動畫的區別 (網易)
  • 如果得到今天是星期幾(getDay()(網易)
    【我回答出來後,網易面試官說你怎麼記得那麼清楚 - -|||】

css相關

  • 如何實現小於12px的字型效果(大疆)
  • css匹配的演算法(從右向左)(大疆)
  • animation和transition的區別(阿里)
  • 一個div從一個地方挪到另一個地方的動畫如何實現,如果還要求滑鼠放上去時,該div還要旋轉怎麼寫(美團)
  • 浮動和清除浮動考察(58): 如何5個div,其中第三個變成浮動的,會怎麼樣 怎麼讓他變回去——清除浮動
  • 如何實現一個進度條(新浪)

手寫程式碼

  • 陣列去重怎麼做,如果是陣列是這樣的[1,[2],[3]],該如何去重(bilibili)
  • 寫一個函式 實現test(a)(b),如果b>0 返回a+b,如果b<0,返回a-b(柯里化考察)(bilibili)
function test(){
    var a= [...arguments][0];
    return function(){
        var b = [...arguments][0];
        if(b>0){
            return a+b;
        }else{
            return a-b
        }
    }
}
複製程式碼
  • 實現鏈式呼叫(百度)
coder.sleep().print1().print2()

class Coder{
    sleep(){
        console.log("sleep");
        return this;//鏈式呼叫的關鍵
    }
    print1(){
        console.log(1);
        return this;//鏈式呼叫的關鍵
    }
    print2(){
        console.log(2);
        return this;//鏈式呼叫的關鍵
    }
}
複製程式碼
  • 如果sleep函式要等待3秒鐘再列印然後在執行之後的操作呢?
class Coder {
  sleep(){
    var date = new Date();
    while((new Date() - date) < 3000) {
      //通過這裡進行阻塞sleep
    }
    console.log("sleep");
    return this;//鏈式呼叫的關鍵
  }
  print1(){
    console.log(1);
    return this;//鏈式呼叫的關鍵
  }
  print2(){
    console.log(2);
    return this;//鏈式呼叫的關鍵
  }
}

var b = new Coder()
b.sleep().print1().print2()
複製程式碼
  • 以下程式碼會輸出什麼(百度)
var date = new Date();
setTimeout(()=>{
    console.log(new Date()-date)
},1000)
while((new Date()-date)<3000){
    
}
//輸出3000+的值
複製程式碼
  • 事件代理考察:(百度) 如果有一個頁面,有許多a標籤,在上面寫點選事件的事件代理怎麼寫。 如果a標籤裡面也有很多子節點,點選了這些子節點也要實現上面效果?
    思路:迴圈判斷e.target.parentNode.tagName==="a"

  • 跳臺階演算法(美團)

  • 火車運煤演算法(美團)

  • [1,[2],[3,[4]]]這種無限巢狀陣列 變成[1,2,3,4]怎麼做(58)

資料庫

  • 專案中為什麼使用mongodb,資料庫的三大正規化(百度)
  • mongodb的aggregate介紹一下(阿里)
  • mysql的優化手段(美團)
  • mysql索引的原理(問的較多)

計算機網路

常見問題

  • get和post的區別
  • 狀態碼
  • http和https的區別

其他

  • dns請求過程
  • dns是基於什麼協議(美團)
  • TCP和UDP的使用場景和區別(美團)
  • url除了http https之類的協議,可以有自己自定義麼。(58) 思路:可以,例如微信小程式底層Js Bridge原理就是利用url scheme攔截等

其他

  • 作業系統的功能(百度)

  • 頁面置換的演算法有哪些(bilibili)

  • 前端安全(xss,csrf)(幾乎每個大廠都問到了)

  • AES和MD5的區別

  • git的stage,三個區是什麼(工作區,暫存區,版本庫)(阿里) 如果要寫實現一個搶紅包頁面,如何防止有人惡意一直玩搶紅包或者發包模擬搶紅包請求(網易)
    個人思路:
    1、判斷一段時間內同一個IP的請求數量
    2、設定驗證碼
    3、看頁面訪問順序,一般有一個入口頁面再是搶紅包頁面。惡意發包可能是直接的頁面請求
    4、達到一定次數或者紅包額度,直接丟包

  • js和c語言編譯的差別

  • 有一個使用者登入的表單,你會如何做使達到安全。(美團)

  • etag的原理(檔名時間hash)(美團)

  • 一個微博api,提供top10的資料,但是每次去請求並不一定更新,所以每次這樣請求返回資料會浪費流量,希望有一個api可以返回是否更新,要怎麼操作。(美團) 思路:將資料進行hash,每次判斷一下和上一次的hash值。

  • jquery和vue的區別(美團)

一些面試心得

  • 熟悉簡歷上寫的任何東西
  • 回答問題時引到自己熟悉的東西上 比如問你ES6掌握情況,挑自己熟悉的講 比如前端優化回答時,挑自己理解原理的講,比如避免重排重繪,之後一般還會繼續問哪些會引起重繪重排
  • 對方提不知道如何回答的問題時
1、引到自己會的:比如問php的繼承,講將js的繼承,問mysql的優化手段時,講mongodb的優化手段
2、講大概思路
3、請面試官給提示
4、不會就跳過,不要耽擱太多
複製程式碼
  • 展示自己的部落格
  • 熟悉的問題可以回答的深入一些
  • 手寫程式碼時考慮封裝、資料型別判斷等
  • 面試後總結 面試時有些問題覺得面試官問的很奇怪,要好好想想人家問問題背後的動機、想考察的知識點。

祝大家都能拿到心儀的offer,喲呼~~