上一篇 前端面試題(一)
javascript
1. 大家公司有什麼來項目監控html
阿里中間件ARMS前端監控和sourcemap產生的報錯報給sensry前端
2. 錯誤處理有哪些java
3.網絡安全談談XSS與CSRF以及解決方案
webpack
XSS:跨站腳本(Cross-site scripting,一般簡稱爲XSS)是一種網站應用程序的安全漏洞攻擊,是代碼注入的一種。它容許惡意用戶將代碼注入到網頁上,其餘用戶在觀看網頁時就會受到影響。這類攻擊一般包含了HTML以及用戶端腳本語言。 解決方案以下:git
CSRF:跨站請求僞造(英語:Cross-site request forgery),也被稱爲 one-click attack 或者 session riding,一般縮寫爲 CSRF 或者 XSRF, 是一種挾制用戶在當前已登陸的Web應用程序上執行非本意的操做的攻擊方法。
github
通用方法:Token 使用Anti-CSRF Token 在URL中保持原參數不變,新增一個參數Token。Token的值是隨機的(必須使用足夠安全的隨機數生成算法,或者採用真隨機數生成器),其爲用戶與服務器所共同持有,能夠放在用戶的Session中,或者瀏覽器的Cookie中。 注意保密,儘可能把Token放在表單中(構造一個隱藏的input元素),以POST提交,避免Token泄露
web
4.重排和重繪面試
5.什麼狀況會觸發重排和重繪?ajax
DOM
節點display: none
隱藏一個 DOM
節點-觸發重排和重繪visibility: hidden
隱藏一個 DOM
節點-只觸發重繪,由於沒有幾何變化DOM
節點添加動畫6. POST 提交數據方式有幾種
7. webpack Babel的一個插件:transform-runtime babel-polyfill以及stage-2,你說一下他們的做用
目前瀏覽器對 ES2015 語法的支持都不太好,因此當咱們須要使用 Promise
、Set
、Map
等功能時就須要 babel-polyfill 來提供。
在轉換 ES2015 語法爲 ECMAScript 5 的語法時,babel 會須要一些輔助函數,例如 _extend
。babel 默認會將這些輔助函數內聯到每個 js 文件裏,這樣文件多的時候,項目就會很大。
因此 babel 提供了 transform-runtime 來將這些輔助函數「搬」到一個單獨的模塊 babel-runtime 中,這樣作能減少項目文件的大小。
8. 談談webpack代碼分割
有三種經常使用的代碼分離方法:
entry
配置手動地分離代碼。CommonsChunkPlugin
去重和分離 chunk。9. ddllplugin commonschunkplugin 區別
(1)因爲dll包和業務chunk包是分開進行打包的,每一次修改代碼時只須要對業務chunk從新打包,webpack的編譯速度獲得極大的提高,所以相比於CommonChunkPlugin,DllPlugin進行代碼分割能夠顯著的提高開發效率。
(2)使用DllPlugin進行代碼分割,dll包和業務chunk相互獨立,其chunkhash互不影響,dll包不多變更,所以能夠更充分的利用瀏覽器的緩存系統。而使用CommonChunk打包出的代碼,因爲公有chunk中包含了webpack的runtime(運行時),公有chunk和業務chunk的chunkhash會互相影響,必須將runtime單獨提取出來,才能對公有chunk充分地使用瀏覽器的緩存。
10 如何優化Webpack 構建速度
11 如今有一個數組存放字符串數據:
['item1', 'item2', 'item3', 'item4', 'item5']
複製代碼
有另一個數組存放一組對象:
[
{ content: 'section1', index: 0 },
{ content: 'section2', index: 2 }
]
複製代碼
它每一個對象表示的是會往原來的數組的 index
座標插入 content
數據(index
不會重複):
0 1 2 3 4
item1 itme2 item3 item4 item5
^ ^
| |
section1 section2
最後結果是:['section1', 'item1', 'item2', 'section2', 'item3', 'item4', 'item5']
複製代碼
請你完成 injectSections
函數,能夠達到上述的功能:
injectSections(
['item1', 'item2', 'item3', 'item4', 'item5'],
[
{ content: 'section1', index: 0 },
{ content: 'section2', index: 2 }
]
) // => ['section1', 'item1', 'item2', 'section2', 'item3', 'item4', 'item5']複製代碼
const injectSections = (items, sections) => { sections.sort((a,b) => b.index - a.index) sections.forEach((m)=>{ items.splice(m.index, 0, m.content) }) return items }