1. 你們公司有什麼來專案監控
阿里中介軟體ARMS前端監控和sourcemap產生的報錯報給sensry
2. 錯誤處理有哪些
- try, catch方案。你可以針對某個程式碼塊使用try,catch包裝,這個程式碼塊執行時出錯時能在catch塊裡邊捕捉到。
- window.onerror方案。也可以通過window.addEventListener(“error”, function(evt){}),這個方法能捕捉到語法錯誤跟執行時錯誤,同時還能知道出錯的資訊,以及出錯的檔案,行號,列號。
- Resource Timing API 和 Performance Timing API來進行效能檢測和記憶體檢測;
- 擴充套件XHR原型,檢測返回的狀態碼,如404等,來檢測ajax請求失敗、錯誤
- 頁面的死連結可以通過Nodejs的第三方模組,如request等,來檢測
3.網路安全談談XSS與CSRF以及解決方案
XSS:跨站指令碼(Cross-site scripting,通常簡稱為XSS)是一種網站應用程式的安全漏洞攻擊,是程式碼注入的一種。它允許惡意使用者將程式碼注入到網頁上,其他使用者在觀看網頁時就會受到影響。這類攻擊通常包含了HTML以及使用者端指令碼語言。 解決方案如下:
CSRF:跨站請求偽造(英語:Cross-site request forgery),也被稱為 one-click attack 或者 session riding,通常縮寫為 CSRF 或者 XSRF, 是一種挾制使用者在當前已登入的Web應用程式上執行非本意的操作的攻擊方法。
通用方法:Token 使用Anti-CSRF Token 在URL中保持原引數不變,新增一個引數Token。Token的值是隨機的(必須使用足夠安全的隨機數生成演算法,或者採用真隨機數生成器),其為使用者與伺服器所共同持有,可以放在使用者的Session中,或者瀏覽器的Cookie中。 注意保密,儘量把Token放在表單中(構造一個隱藏的input元素),以POST提交,避免Token洩露
4.重排和重繪
- 部分渲染樹(或者整個渲染樹)需要重新分析並且節點尺寸需要重新計算。這被稱為重排。注意這裡至少會有一次重排-初始化頁面佈局。
- 由於節點的幾何屬性發生改變或者由於樣式發生改變,例如改變元素背景色時,螢幕上的部分內容需要更新。這樣的更新被稱為重繪。
5.什麼情況會觸發重排和重繪?
- 新增、刪除、更新
DOM
節點 - 通過
display: none
隱藏一個DOM
節點-觸發重排和重繪 - 通過
visibility: hidden
隱藏一個DOM
節點-只觸發重繪,因為沒有幾何變化 - 移動或者給頁面中的
DOM
節點新增動畫 - 新增一個樣式表,調整樣式屬性
- 使用者行為,例如調整視窗大小,改變字號,或者滾動。
6. POST 提交資料方式有幾種
- application/x-www-form-urlencoded
- multipart/form-data
- application/json
- text/xml
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
}