前端近期面試-2020 持續跟新中

  1. var let const 區別
  • var是es5語法,let,const是es6語法。var有變量提升
  • var,let是用來聲明變量,可修改。const是用來聲明常量,不可修改
  • let,const 有塊級作用域(會形成暫時性死區),var沒有
  1. typeof能判斷哪些類型
  • undefined,string,boolean,number,symbol (所有的值類型)
  • object ([], {}, null)
  • function
  1. 強制類型轉換和隱士類型轉化
  • pareInt,parseFloat,toString
  • ==,邏輯運算,if,+字符串拼接
  1. split() 和 join()的區別
    split(): 將數組轉化爲字符串
    join() : 將字符串轉化爲數組
  2. pop,push,shift,unshift 分別是什麼
    分析: 功能是什麼,返回值是什麼,是否對原數組造成影響
    pop刪除數組的最後一項,返回刪除的元素
    shift刪除數組的第一項,返回刪除的元素
    push在數組的最後一項增加一個元素,返回數組的長度
    unshift在數組的第一項增加一個元素,返回數組的長度
    都對數組造成影
    純函數:(不該變原數組,返回一個數組)
    concat,map,filter
  3. slice 和splice的區別
    slice 剪切 純函數
    splice 剪接 非純函數
  4. [10,20,30].map(parseInt) 10 NAN NAN 拆解
  5. ajax中get和post的區別
  • get一般用於查詢 post用於用戶提交數據
  • get參數拼接在url上,post放在請求體中(數據可以很大)
  • post有利於防範xsrf攻擊
  1. call 和 apply bind 的區別是什麼
    改變this執行
    call :第一個參數是this,後面是零散的數據
    apply:第一個參數是this,後面是一個數組,或者一個結合
    bind:第一個參數是this,但是返回一個函數,需要重新調用
  2. 事件委託(代理)是什麼
    就是把一個元素響應事件的函數委託到另一個元素,利用冒泡的原理,把事件加到父級上,觸發執行效果
  3. 閉包是什麼,有什麼特性,負面影響
    兩個函數存在嵌套關係,內部函數可以訪問外部函數的參數
    函數作爲參數被傳入 函數作爲返回值
    自由變量在函數定義的地方查找
    變量會常駐內存,得不到釋放。不要亂用
  4. 如何阻止事件冒泡和默認行爲
  • e.stopPropagation()
  • e.preventDefault()
  1. 增刪改查dom節點方法
  • creatElement,appendChild,removeChild,getelementById
  1. 如何減少dom操作
  • dom查找是非常耗性能
  • 緩存dom查詢結果
  • 多次dom操作,合併到一次插入
  • creatDocumentFragment
  1. jsonp的原理,爲何不是真正的ajax
    jsonp 是通過script標籤實現的
    ajax是用過xmlHttpRequest
    img ,script =>
    jsonp

  2. load,ready區別

  3. == ===
    類型轉換 ,嚴格相等

  4. 函數聲明和函數表達式的區別

  5. this的場景題

  6. new Object() {}, Object.creat()區別
    Object.creat() 創建一個空對象,把空對象的原型執行你傳入的對象

  7. 手寫trim,兼容

  8. 獲取最大值

  9. js實現繼承
    class
    prototype

  10. 什麼是json
    json是一種數據格式,本質就是一個字符串
    window.JSON是全局對象。JSON.stringifry JSON.parse

  11. 如何捕獲js異常
    try catch window.onerror

  12. 獲取當前頁面的url參數
    location.serach

  13. 手寫深拷貝 object.assign不是深拷貝(只能一層)

  14. requestAnimateFrame

  15. 性能優化:
    原則:多使用內存,緩存,減少計算,網絡請求
    方向:文件獲取更快,代碼執行更快

  16. http在哪一層協議(作爲一個實習生,這個問題90%會問到)
    (1):osi這個模型,把網絡通信的工作分爲7層,分別是
    物理層
    數據鏈路層
    網絡層(ip)
    傳輸層(tcp:傳輸控制協議TCP,udp:用戶數據報協議)
    會話層,
    表示層
    應用層:文件傳輸協議(HTTP,FTP,NFS,SMTP)
    User Agent:使得服務器能夠識別客戶使用的操作系統及版本、CPU 類型、瀏覽器及版本、瀏覽器渲染引擎、瀏覽器語言、瀏覽器插件等。
    28:你瞭解的ssr是什麼,用ssr有什麼好處
    29:從地址欄輸入url,發生了什麼

2.21 電話面試

  1. 簡述冒泡排序
  2. 簡述數組去重
  3. es6,es7新增了那些
  4. 箭頭函數的this和普通函數的this
  5. 怎麼樣形成閉包,怎麼解決閉包變量污染的情況
  6. typeof
  7. 改變this指向的方法
  8. vue組件通信
    解答:
    13: 簡述冒泡排序
    (1) 首先判斷是否是數組,數組是否爲空
    instanceof Object.prototype.toString.call() length
    (2) 雙層循環:
    外層循環控制趟數
    內層循環控制次數
      function bubble(arr) {
          //   先判斷是否是數組或者是空數組
          if (arr instanceof Array && arr.length > 1) {
              for (let i = 0; i < arr.length - 1; i++) {
                  for (let j = 0; j < arr.length - 1 - i; j++) {
                      let temp = []
                      if (arr[j] > arr[j + 1]) {
                          temp = arr[j];
                          arr[j] = arr[j + 1]
                          arr[j + 1] = temp
                      }
                  }
              }
              return arr
          }
      }
      let arr = [1, 7, 4, 6, 3]
      console.log(bubble(arr));

14 :數組去重
1:先獲取到數組的當前項let item = arr[i],然後去除當前項(split(i+1))
2:然後用當前項,和後面的每一項做比較,indexOf(有匹配到的返回-1)
3:將沒有重複的項,添加到新數組裏面

let arr = [1, 1, 8, 2]
let newArr = []
for (let i = 0; i < arr.length; i++) {
    let item = arr[i]
    arg = arr.slice(i + 1)
    if (arg.indexOf(item) > -1) {
    // 未找到和當前匹配的。會返回-1,現在>-1說明,有和當前匹配的,有重複的
    } else {
        newArr.push(item)
    }
}
console.log(newArr);

15: es6新增了那些:點擊進入

16:箭頭函數和普通函數

普通函數的this:在運行時基於函數執行環境綁定的

箭頭函數:箭頭函數沒有this,箭頭函數的this繼承自所處上下問的this,call和apply無法改變this的執行
箭頭函數中沒有arguments類數組,只能基於…arg獲取傳遞參數的集合數組
箭頭函數不能被new執行,因爲箭頭函數沒有this葉沒有prototype

由於this只是在當前函數內部使用,而且js函數可以多層嵌套,使得我們無法得到最開始的this,這時我們可以用一個變量存儲起來/es6提供的箭頭函數

2.27 電話面試

  • 離職原因
  • 簡單的自我介紹
  • 由於我簡歷一開始就寫的vue,所以問的vue比較多
  • vue的雙向數據綁定裏面的defineProperty裏面的get,set是用什麼樣的設計模式實現的
  • vue組件裏面data,你覺得爲什麼要有data這個東西呢 數據的監聽
  • route router 使用上有什麼本質區別
  • route 現在的前端技術都會加# 怎麼去掉#
  • hash函數
  • keep-alive 使用過嗎, 會用在什麼場景
  • vue的核心是什麼
  • 你又是怎麼理解數據和組件
  • 有了框架會帶來一些便利,但是也會帶來一些缺陷:
  1. 加載耗時,打包,傳統的seo,歷史頁面,不適合開發大型項目
  • h5,vue存數據,你有看過數據存在哪裏?是存在磁盤嗎?
  • 怎麼搞兼容性問題?從哪些方面解決這些事情
  • 瀏覽器渲染的性能優化
  • 給你一個數組 ,把其中重複的數據 思想

3.13 面試
圖片自適應有哪些方式
h5的存儲
音頻視屏
flex的屬性
怎麼獲取視屏播放的事件
3.24 知乎面試
說說路由守衛
生命週期函數
MVVM和MVC的區別
數組排序
v-show v-if的區別
url輸入發生了什麼
jq的選擇器
3.14: 滴滴
1:說說http協議
2: 點擊事件

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章