順豐科技前端面經


一面:

縮略圖實現原理

ES6中的super做了什么

  • super類似於ES5語法中的call繼承

ES6中class的靜態屬性和靜態方法

  • 不會被實例繼承

  • 只能直接通過類來調用

  • 可以被子類繼承

  • 可以從super對象上調用

bind的具體原理

二面:

get和post區別

  • 在規范的應用場景上說,Get 多用於無副作用,冪等的場景,例如搜索關鍵字。Post 多用於副作用,不冪等的場景,例如注冊。

  • 在技術上說:

    • Get 請求能緩存,Post 不能

    • Post 相對 Get 安全一點點,因為Get 請求都包含在 URL 里(當然你想寫到 body 里也是可以的),且會被瀏覽器保存歷史紀錄。Post 不會,但是在抓包的情況下都是一樣的。

    • URL有長度限制,會影響 Get 請求,但是這個長度限制是瀏覽器規定的,不是 RFC 規定的

    • Post 支持更多的編碼類型且不對數據類型限制

插入排序幾重循環

function insertion(array) {
 checkArray(array);
 for (let i = 1; i < array.length; i++) {
   for (let j = i - 1; j >= 0 && array[j] > array[j + 1]; j--)
     swap(array, j, j + 1);
}
 return array;
}

csrf攻擊應對方案

  • SameSite

  • 驗證Referer

  • Token

封裝子組件

內存泄漏

1、意外的全局變量

js對未聲明變量會在全局最高對象上創建它的引用,(是以屬性存在的,而不是變量),如果在瀏覽器上就是window對象,如果在node環境下就是global;如果未聲明的變量緩存大量的數據,它可能只有在頁面被刷新或者被關閉的時候才會釋放內存,這樣就造成了內存意外泄漏。

2、console.log

作為前端平時使用console.log在控制台打出相對應的信息可以說是非常常見。但如果沒有去掉console.log可能會存在內存泄漏。因為在代碼運行之后需要在開發工具能查看對象信息,所以傳遞給console.log的對象是不能被垃圾回收。

3、閉包

首先閉包是一個函數A返回一個內聯的函數B,即使A函數執行完,函數B也可以訪問函數A里面的變量,這就是一個簡單的閉包。本質上閉包是將函數內部和外部連接起來的一座橋梁。

4、DOM泄漏

瀏覽器中DOM和js采用的是不一樣的引擎,DOM采用的是渲染引擎,而js采用的是v8引擎,所以在用js操作DOM時會比較耗費性能,因為他們需要橋來鏈接他們。為了減少DOM的操作,我們一般將常用的DOM采用變量引用的方式會將其緩存在當前環境。如果在進行一些刪除、更新操作之后,可能會忘記釋放已經緩存的DOM

5、被遺忘的timers

js中常用的定時器setInterval()、setTimeout(),他們都是規定延遲一定的時間執行某個代碼,而其中setInterval()和鏈式setTimeout()在使用完之后如果沒有手動關閉,會一直存在執行占用內存,所以在不用的時候我們可以通過clearInterval()、clearTimeout() 來關閉其對應的定時器,釋放內存。熟悉的朋友都知道這類定時器是有誤差的,所以游覽器給出了專門的API-requestAnimationFrame()


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM