前端工程師自檢清單(六)

前端工程

項目構建

  • 理解npm、yarn依賴包管理的原理,兩者的區別

談談npm依賴管理

npm和yarn的區別,我們該如何選擇?


  • 可以使用npm運行自定義腳本

npm scripts 使用指南


  • 理解Babel、ESLint、webpack等工具在項目中承擔的作用

Babel是一個工具鏈,主要用於將 ECMAScript 2015+ 版本的代碼轉換爲向後兼容的 JavaScript 語法,以便能夠運行在當前和舊版本的瀏覽器或其他環境中。

ESLint實在JS代碼中識別和報告模式匹配的工具,目標是保證代碼的一致性和避免錯誤。


  • ESLint規則檢測原理,常用的ESLint配置

ESLint 的核心是由各種 rule 組成的集合

ESLint 工作原理探討


  • Babel的核心原理,可以自己編寫一個Babel插件

Babel使用指南

Babel插件手冊


  • 可以配置一種前端代碼兼容方案,如Polyfill

由於 Babel 假定你的代碼將在 ES5 環境中執行,因此使用的都是 ES5 函數。如果你所使用的運行環境 對 ES5 的支持有限或不支持,例如低版本的 IE,那麼就需要使用 @babel/polyfill 來滿足需求


  • Webpack的編譯原理、構建流程、熱更新原理,chunk、bundle和module的區別和應用

編譯原理

一切皆爲模塊,由於webpack只支持js文件,所以需要用loader 轉換爲webpack支持的模塊,其中plugin 用於擴張webpack 的功能,在webpack構建生命週期的過程中,在合適的時機做了合適的事情。

構建流程

  1. 初始化參數:從配置文件和Shell語句中讀取與合併參數,得出最終的參數;
  2. 開始編譯:用上一步得到的參數初始化Compiler對象,加載所有配置的插件,執行對象的run方法開始執行編譯;
  3. 確定入口:根據配置中的entry找出所有的入口文件;
  4. 編譯模塊:從入口文件出發,調用所有配置的Loader對模塊進行翻譯,再找出該模塊依賴的模塊,再遞歸本步驟直到所有入口依賴的文件都經過了本步驟的處理;
  5. 完成模塊編譯:在經過第4步使用Loader翻譯完所有模塊後,得到了每個模塊被翻譯後的最終內容以及它們之間的依賴關係;
  6. 輸出資源:根據入口和模塊之間的依賴關係,組裝成一個個包含多個模塊的Chunk,再把每個Chunk轉換成一個單獨的文件加入到輸出列表,這步是可以修改輸出內容的最後機會;
  7. 輸出完成:在確定好輸出內容後,根據配置確定輸出的路徑和文件名,把文件內容寫入到文件系統。

在整個構建流程中,Webpack會在恰當的時機執行Plugin裏定義的邏輯,從而完成Plugin插件的優化任務。

module

模塊,在Webpack中一切皆模塊,一個模塊即爲一個文件。Webpack會從Entry開始遞歸找出所有的依賴模塊

chunk

代碼塊,一個chunk由多個模塊組成,它用於代碼合併與分割

bundle

由許多不同的模塊生成,它包含已經經過加載和編譯過程的源文件的最終版本。可以和chunk長的一模一樣,但是大部分情況下他是多個chunk的集合


  • 可熟練配置已有的loaders和plugins解決問題,可以自己編寫loaders和plugins

配置webpack

編寫webpack loader


nginx

  • 正向代理與反向代理的特點和實例

正向代理

意思時一個位於客戶端和原始服務器之間的服務器,爲了從原始服務器取得內容,客戶端向代理髮送一個請求並指定原始服務器,然後代理向原始服務器轉交請求並將獲得的內容返回給客服端。

實例:找到一個可以訪問國外網站的代理服務器,我們將請求發送給代理服務器,代理服務器去訪問國外的網站,然後將訪問到的數據傳遞給我們

特點:服務器只清楚請求來自哪個代理服務器,而不清楚來自哪個具體的客戶端,屏蔽或隱藏了真實客戶端信息。

反向代理

指以代理服務器來接受internet上的連接請求,然後將請求轉發給內部網絡的服務器,並將從服務器上得到的結果返回給客戶端。

實例:主要用於服務器集羣分佈式部署的情況下,反向代理隱藏了服務器的信息

正向代理與反向代理的區別


  • 可手動搭建一個簡單的nginx服務器

Nginx由內核和模塊組成,其中,內核的設計非常微小和簡介,完成的工作也非常簡單,僅僅通過配置文件將客戶端請求映射到一個location block,而在這個location中所配置的每個指令將會啓動不同的模塊去完成相應的工作。

Nginx入門教程


  • 熟練應用常用的nginx內置變量,掌握常用的匹配規則寫法

Nginx系列之常用內置變量


  • 可以用nginx實現請求過濾、配置gzip、負載均衡等,並能解釋其內部原理

nginx常用的請求過濾

nginx開啓gzip

使用Nginx實現負載均衡


開發提速

  • 熟練掌握一種接口管理、接口mock工具的使用,如yapi

YApi


  • 掌握一種高效的日誌埋點方案,可快速使用日誌查詢工具定位線上問題

埋點,指的是針對特定用戶行爲或事件進行捕獲、處理和發送的相關技術及實施過程。技術實質是先監聽軟件運行過程中的事件,當需要關注的事件發生時進行判斷和捕獲。

日誌埋點系統的架構與實現


  • 理解TDD與BDD模式,至少會使用一種前端單元測試框架

TDD:測試驅動開發

BDD:行爲驅動開發,二者都是敏捷開發的一種技術

簡單來說就是,TDD就是像是我點擊了這個按鈕,我觸發什麼事件去執行。BDD就是說,我點擊這個按鈕我要展現出什麼效果來

測試框架Mocha


版本控制

  • 理解Git的核心原理、工作流程、和SVN的區別

Git是最先進的分佈式版本控制系統。根本上是一套內容尋址文件系統。核心在於工作區、暫存區、版本庫。

工作流程

初始化一個Git倉庫,使用git init命令

添加文件到Git倉庫,分兩步,git add <file>添加多個文件,git commit -m<message>

將工作區中的文件,先保存到暫存區,當執行commit時,將暫存區中的文件保存到版本庫中。

SVN是集中式的版本控制系統,版本庫是自重存放在中央服務器的。

Git與SVN的區別


  • 熟練使用常規的Git命令、git rebase、git stash等進階命令

git stash # 暫存當前修改,將所有至爲HEAD狀態

git stash list # 查看所有暫存

git stash show -p stash@{0} # 參考第一次暫存

git stash apply stash@{0} # 應用第一次暫存

git stash pop 恢復工作現場並且將stash中的內容也刪除


  • 可以快速解決線上分支回滾、線上分支錯誤合併等複雜問題

版本回退 --廖雪峯官方網站


持續集成

  • 理解CI/CD技術的意義,至少熟練掌握一種CI/CD工具的使用,如Jenkins

CI 持續集成是在源代碼變更後自動檢測、拉取、構建進行單元測試的過程。持續集成是啓動管道的環節。

CD 持續部署指整個流程鏈(管道),它自動檢測源代碼變更並通過構建、測試、打包等操作運行他們以生成可部署的版本

持續部署包括持續集成,持續測試和持續交付。

Jenkins是一個開源的、可擴展的持續集成交付部署的基於web界面的平臺。

使用Jenkins進行持續集成


  • 可以獨立完成架構設計、技術選型、環境搭建、全流程開發、部署上線等一套完整的開發流程


性能優化

  • 瞭解前端性能衡量指標、性能監控要點,掌握一種前端性能監控方案

 可以使用window.performance API進行簡單的監控。

前端性能監控解決方案介紹


  • 瞭解常見的Web、App性能優化方案

頁面級優化:

1.減少HTTP請求數:設置緩存,資源合併與壓縮、雪碧圖、inline images

2.外部腳本置底

3.懶加載JS

4.精簡JS和CSS

代碼級優化:

1.JS:減少DOM操作、避免使用eval,with、減少作用域鏈查找

2.css、html、image

3.合理使用CDN

4.避免使用iframe


  • SEO排名規則、SEO優化方案、前後端分離的SEO

規則

1、在title、description和keywords標籤中佈局關鍵詞:應在20字符內,描述小於100,關鍵詞控制在200字符內

2、在網站導航、欄目將名稱和文章標題等重要位置部署關鍵詞

3、在連接中部署關鍵詞

優化方案

1、網頁頭部meta優化:包含三大標籤title、keywords、description填寫正確內容

2、網站H標籤代碼優化:H1標籤只出現一次

3、a標籤優化

4、img標籤優化:上傳圖片一定填寫alt屬性

SEO本質是一個服務器向另一個服務器發起請求,解析請求內容。但一般來說搜索引擎是不回去執行請求到的js的。也就是說,如果一個單頁應用,html在服務器端還沒有渲染部分數據數據,在瀏覽器才渲染出數據,而搜索引擎請求到的html是沒有渲染數據的。 這樣就很不利於內容被搜索引擎搜索到。 所以服務端渲染就是儘量在服務器發送到瀏覽器前 頁面上就是有數據的。

前後端分離之SEO優化


  • SSR實現方案、優缺點、及其性能優化

Vue.js 服務器端渲染指南


  • Webpack的性能優化方案

Webpack性能優化


  • Canvas性能優化方案

canvas性能優化篇


  • React、Vue等框架使用性能優化方案

vuejs項目性能優化總結


前端安全

  • XSS工具的原理、分類、具體案例,前端如何防禦

原理:跨站腳本攻擊,通過web站點漏洞,向客戶端交付惡意腳本代碼,實現對客戶端攻擊目的。

分類:

1、存儲型(持久型)===> 將js腳本上傳至server,其他用戶訪問server時都會加載這個js。eg:論壇發帖。server沒有對帖子內哦那個進行過濾,導致上傳了一段js腳本

2、反射型(非持久) ===> client將惡意js發給server(可將js包含在get請求頭中),server再將這個js返回給client,client就能在瀏覽器中運行這個js了

3、DOM型(也屬於反射型) ===> 不必將js上傳至server就能在client執行

反射型 XSS 跟存儲型 XSS 的區別是:存儲型 XSS 的惡意代碼存在數據庫裏,反射型 XSS 的惡意代碼存在 URL 裏。

前端安全系列(一):如何防止XSS攻擊?


  • CSRF攻擊的原理、具體案例,前端如何防禦

原理:跨站請求僞造,攻擊者誘導受害者進入第三方網站,在第三方網站中,向被攻擊網站發送跨站請求。

防護策略:同源檢測、CSRF Token、分佈式校驗、雙重Cookie

前端安全系列(二):如何防止CSRF攻擊?


  • HTTP劫持、頁面劫持的原理、防禦措施

HTTP劫持

在用戶的客戶端與其要訪問的服務器經過網絡協議協調後,二者之間建立了一條專用的數據通道,用戶端程序在系統中開放指定網絡端口用於接受數據報文,服務器端將全部數據按指定網絡協議規則進行分解打包,形成連續數據報文。

在用戶的瀏覽器連上被訪問的網站服務器,發送了HTTP請求後,運營商的路由器會首先收到此次HTTP請求,之後運營商路由器的旁路設備標記此TCP連接爲HTTP協議,之後可以搶在網站服務器返回數據之前發送HTTP協議的302代碼進行下載軟件的劫持,瀏覽器收到302代碼後就會跳轉到錯誤的軟件下載地址下載軟件了,隨後網站服務器的真正數據到達後反而會被丟棄。或者,旁路設備在標記此TCP連接爲HTTP協議後,直接返回修改後的HTML代碼,導致瀏覽器中被插入了運營商的廣告,隨後網站服務器的真正數據到達後最終也是被丟棄。

防禦措施

HTTPS

HTTP劫持和DNS劫持


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