背上花里胡哨的書包準備面試之webpack篇(+一些常問的面試題)

目錄

webpack理解?

webpack構建流程?

loader解決什么問題?

plugin解決什么問題?

編寫loader和plugin的思路?

webpack熱更新?

如何提高webpack的構建速度?

問git常用命令?

http?http和https區別?

http常見狀態碼?

get和post區別?

地址欄輸入url敲下回車后發生了什么?

瀏覽器渲染機制?

代碼規范?


webpack理解?

Webpack 是一個現代的靜態模塊打包工具。它是一個基于配置的構建工具,用于將多個模塊(包括 JavaScript、樣式表、圖像等)打包成一個或多個 bundle,并提供了一種優化資源加載和管理的方式。

主要概念和工作原理:

入口(Entry):Webpack 通過指定一個入口文件來開始構建過程。入口可以是單個文件或多個文件,Webpack 將從入口文件開始分析依賴關系樹。

輸出(Output):Webpack 會將打包后的資源輸出到指定目錄。輸出通常是一個或多個 bundles,其中包含被 chunk 包裹的模塊。

模塊(Module):Webpack 將項目中的所有文件視為模塊。每個模塊都有自己的類型(JavaScript、CSS、圖片等),Webpack 根據不同的類型使用對應的 loader 進行處理。

LoaderLoader 是用于對不同類型的模塊進行處理和轉換的插件。例如,Babel Loader 可以將 ES6/ES7 代碼轉換為瀏覽器可識別的 ES5 代碼。

插件(Plugin):插件是用于擴展 Webpack 功能的組件。可以用插件來處理更復雜的任務,如生成 HTML 文件、壓縮代碼等

開發服務器(DevServer):Webpack 提供了一個開發服務器,用于在開發過程中實時更新修改后的代碼,并提供熱模塊替換功能。

模式(Mode):Webpack 提供了三種模式,分別是開發模式、生產模式和 none 模式。每種模式都有對應的配置,用于優化構建結果。

通過配置文件(通常是 webpack.config.js),開發人員可以定義入口、輸出、loader、插件等來自定義項目的打包流程。Webpack 會根據配置文件的設置進行相應的處理和優化,最終生成可部署到生產環境的靜態資源。

Webpack 的強大之處在于其模塊化能力、靈活性和可擴展性。它可以處理多樣化的資源類型并支持各種優化策略,使得前端項目的構建變得高效和可控。

webpack構建流程?

Webpack 的構建流程可以概括為以下幾個步驟:

解析配置文件:Webpack 會根據項目根目錄下的配置文件(默認為 webpack.config.js)來獲取構建相關的配置選項。

解析入口文件:Webpack 根據配置文件中指定的入口文件路徑,開始解析入口文件及其依賴關系。

加載模塊:Webpack 使用不同的 loader 來處理不同類型的模塊。在解析過程中,Webpack 會遞歸地加載和解析模塊的依賴關系,并將它們加入到構建過程中。

插件執行:Webpack 在構建過程中提供了許多插件擴展的機會。插件可以用于執行各種任務,如優化、壓縮、代碼分割等。Webpack 會按順序執行這些插件,并根據需要對模塊和資源進行轉換和處理。

輸出文件:在構建完成后,Webpack 將生成的文件輸出到指定的目錄。輸出的文件通常是一個或多個 bundle,包含了被 chunk 包裹的模塊。

優化策略:Webpack 提供了一系列的優化策略,以提高構建結果的性能和體積。例如,代碼壓縮、Tree Shaking(消除未使用代碼)、代碼分割以及緩存等。

開發服務器:在開發過程中,Webpack 提供了一個開發服務器(DevServer),用于實時更新修改后的代碼,并提供熱模塊替換功能。它能夠在內存中構建和提供資源,加快開發效率。

整個流程中,Webpack 會根據配置文件的設置來確定入口文件、輸出路徑、加載器和插件等。在每個步驟中,Webpack 會使用各個加載器處理不同類型的模塊,再通過插件對資源進行轉換和優化。最終,Webpack 將生成的靜態資源輸出到指定目錄,可用于部署到生產環境。

需要注意的是,該構建流程可以根據具體的配置和需求進行調整和擴展,以滿足項目的需求

loader解決什么問題?

用于解決模塊的轉換和加載問題。它們可以將不同類型的資源(如 JavaScript、CSS、圖片等)轉換為可在瀏覽器中直接使用的形式。

plugin解決什么問題?

用于解決一些特定的問題或實現額外的功能。它們可以在構建過程中介入,并對資源進行處理、優化和管理。

編寫loader和plugin的思路?

編寫 Loader 的思路:

1.了解要處理的文件類型和需要實現的功能。

2.創建一個 JavaScript 模塊,該模塊會導出一個函數作為 Loader 函數。

3.在 Loader 函數中,接收源文件內容作為參數,并對其進行處理和轉換。

4.根據需求,可以使用現有的工具庫或自己編寫代碼來完成轉換邏輯。

5.最后,通過返回轉換后的結果,將其傳遞給 Webpack 構建流程。

編寫 Plugin 的思路:

1.確定插件的目的和功能。

2.創建一個 JavaScript 類,該類定義了插件的行為和配置選項。

3.在類中,實現 Webpack 插件接口(通常是?apply?方法),并在該方法中執行插件的邏輯。

4.在插件邏輯中,可以監聽特定的構建事件,如文件生成、模塊解析、編譯完成等,并在這些事件發生時執行相應的操作。

5.根據需要,可以向構建過程中注入額外的資源、修改輸出文件、優化代碼等。

6.最后,將插件的實例添加到 Webpack 配置的?plugins?屬性中,使其生效。

webpack熱更新?

Webpack 熱更新(Hot Module Replacement,HMR)是 Webpack 提供的一項功能,用于在開發過程中實時更新修改后的代碼,而無需完全刷新頁面

熱更新的工作原理如下:

在啟動開發服務器(DevServer)時,Webpack 會將 HMR 相關的代碼注入到構建結果中。

當文件發生改變時,Webpack 可以通過 WebSocket 和開發服務器進行通信,通知瀏覽器重新加載被修改的模塊。

瀏覽器接收到更新通知后,使用新的模塊替換舊的模塊,只對有變化的部分進行替換,而不刷新整個頁面。

要使用熱更新,在 Webpack 配置中需要進行以下配置:

開啟熱更新功能:在配置中設置 hot: true

使用 webpack-dev-server 插件來啟動開發服務器,并設置 hot: true。

對于樣式表,可以使用 style-loader 來自動應用樣式的更新,無需手動刷新。

對于 JavaScript 模塊,需要在入口文件中添加適當的代碼,以便讓 Webpack 監聽模塊的更新并觸發熱更新。

實際上,大多數的現代前端框架(如 React、Vue 等)已經集成了熱更新功能,并且提供了相關的開發工具和插件來簡化配置和使用。

熱更新可以大幅提高開發效率,因為它使得在修改代碼后無需手動刷新頁面即可查看到變化。然而,需要注意的是,熱更新僅適用于開發環境,不應部署到生產環境中。在生產環境中,應該生成優化過的靜態資源供用戶訪問。

如何提高webpack的構建速度?

1使用更快的構建工具:升級 Node.js 版本和 Webpack 版本,以獲得對構建性能的改進。

2合理配置 entry 和 output:根據項目需求,合理配置入口文件和輸出目錄,避免不必要的資源掃描和輸出。

3使用緩存:使用 Webpack 的緩存機制(如 cache-loader 插件)以及 Babel 的緩存配置,以便在重新構建時復用之前的結果,減少重復工作。

4只處理必要的文件:通過配置 include 和 exclude 選項來限制 loader 和 plugin 的處理范圍,只處理必要的文件。

5模塊熱替換(HMR):在開發環境中啟用 HMR,可以使修改后的模塊實時生效,而無需完全重新構建。

6使用 HappyPack 或 thread-loader:將構建任務并發執行,利用多核 CPU 加速構建過程。

7減小文件體積:通過代碼拆分、Tree Shaking、壓縮等方式減小文件體積,減少網絡傳輸時間。

8懶加載:對于大型應用或頁面,使用懶加載技術(如動態導入)延遲加載非必要的資源。

9優化 loader 和 plugin:選擇高效的 loader 和 plugin,避免使用過度復雜或低效的工具。

10使用 DLL(動態鏈接庫):將不經常變化的第三方庫打包成 DLL,以減少構建時間。

11開啟并行壓縮:對于需要壓縮的文件,使用 parallel-uglify-plugin 等插件進行并行壓縮

12分析構建性能:使用 Webpack 的性能分析工具(如 webpack-bundle-analyzer)來識別構建中的瓶頸,并優化相應的配置和代碼。

問git常用命令?

首先我會跟面試官說,我用sourcetree😀

唉罷了,不能太狂,還是說點常用命令表示尊重🙏

git init: 在當前目錄初始化一個新的 Git 倉庫。

git clone <repository>: 克隆(下載)遠程倉庫到本地。

git add <file>: 將文件添加到暫存區。

git commit -m "<message>": 提交暫存區中的文件,并添加提交信息。

git status: 查看工作樹和暫存區的狀態。

git log: 查看提交歷史記錄。

git diff <file>: 查看文件的修改內容。

git branch: 列出所有分支。

git checkout <branch>: 切換到指定的分支。

git merge <branch>: 合并指定分支到當前分支。

git pull: 拉取遠程倉庫的最新變更。

git push: 推送本地提交到遠程倉庫。

git remote add <name> <url>: 添加遠程倉庫的別名和 URL。

git remote -v: 查看遠程倉庫的別名和 URL。

git stash: 暫存當前的修改,以便切換到其它分支。

git reset HEAD <file>: 取消對文件的暫存操作。

git revert <commit>: 撤銷指定的提交。

git rm <file>: 刪除文件,并將刪除操作添加到暫存區。

http?http和https區別?

HTTP(超文本傳輸協議) 是一種常用的協議,適用于對安全性要求不高的場景,傳輸過程中是明文傳輸,對數據不進行加密處理;而 HTTPS 則提供了更加安全的通信方式,適用于需要保護用戶數據隱私和防止篡改的應用場景。

http常見狀態碼?

200 OK:請求成功。服務器成功處理了請求,并返回相應的內容。

301 Moved Permanently:永久重定向。請求的資源已經被分配了新的 URL,以后應使用新的 URL。

302 Found:臨時重定向。請求的資源暫時移動到了其他 URL,客戶端應繼續使用原始 URL。

400 Bad Request:無效請求。服務器無法理解或無法處理該請求。

401 Unauthorized:未授權。需要身份驗證才能獲得訪問權限。

403 Forbidden:禁止訪問。服務器拒絕訪問所請求的資源。

404 Not Found:未找到。服務器無法找到請求的資源。

500 Internal Server Error:服務器內部錯誤。服務器在處理請求期間發生了意外情況。

502 Bad Gateway:錯誤的網關。作為代理或網關的服務器從上游服務器接收到無效響應。

503 Service Unavailable:服務不可用。服務器暫時無法處理請求(可能是由于過載或維護)。

get和post區別?

請求參數位置:GET 請求將參數附加在 URL 的查詢字符串中(例如 example.com/path?param1=value1?m2=value2),而 POST 請求將參數放在請求體中。

請求參數長度限制:GET 請求對參數長度有限制,不同瀏覽器和服務器可能有不同限制,通常在 2000-8000 字節之間。POST 請求沒有這個限制

安全性:GET 請求參數暴露在 URL 中,容易被竊取和篡改,因此不適合傳輸敏感信息。POST?請求將參數放在請求體中,相對安全一些。

緩存機制:GET 請求默認可以被緩存,可以通過設置響應頭來控制緩存行為;POST 請求默認不會被緩存。

冪等性:GET 請求是冪等的,即多次重復請求得到的結果應該是相同的,不會對服務器產生副作用。POST 請求在多次重復請求時可能會對服務器產生副作用,如插入重復數據。

使用場景:GET 請求適用于獲取資源、查詢操作,對于無需修改服務器狀態的操作;POST 請求適用于提交表單數據、新增資源、修改服務器狀態等需要發送大量數據或進行寫操作的場景。

總結起來,GET 請求適合獲取數據,對服務器無副作用;POST 請求適合發送數據、進行修改操作。

地址欄輸入url敲下回車后發生了什么?

1、URL 解析:瀏覽器解析輸入的 URL,并分解為協議、域名、端口號和路徑等組成部分。

2、DNS 解析:瀏覽器向本地 DNS 服務器發送域名查詢請求,以獲取對應的 IP 地址。如果本地 DNS 緩存中沒有該域名的記錄,則會進行迭代查詢,直到找到對應的 IP 地址。

3、建立 TCP (傳輸控制協議)連接:瀏覽器使用 HTTP 或 HTTPS 協議,通過操作系統底層的網絡 API(如 sockets)來建立與服務器的 TCP 連接。這個過程涉及三次握手,即客戶端向服務器發送 SYN 包,服務器回復 SYN+ACK 包,最后客戶端發送 ACK 包確認連接建立。

4、發送 HTTP 請求:建立好 TCP 連接后,瀏覽器向服務器發送 HTTP 請求。請求中包含請求方法(GET、POST 等)、路徑、請求頭(如 User-Agent、Cookie 等)和可選的請求體。

5、服務器處理請求:服務器接收到請求后,根據請求路徑和其他信息,進行相應的處理。可以是返回靜態文件、執行動態代碼、查詢數據庫等操作。

6、服務器發送響應:服務器將處理結果打包成 HTTP 響應,包括響應狀態碼、響應頭(如 Content-Type、Content-Length 等)和響應體(如 HTML 內容、JSON 數據等),通過建立的 TCP 連接發送給瀏覽器。

7、瀏覽器渲染頁面:瀏覽器接收到響應后,根據響應中的內容類型進行相應處理。如果是 HTML 頁面,瀏覽器會解析 HTML、CSS 和 JavaScript,并將其渲染顯示在窗口中。

8、斷開 TCP 連接:當服務器完成響應并關閉連接時,或者瀏覽器接收到指定的數據長度后,會斷開與服務器的 TCP 連接。

這些步驟描述了從用戶輸入 URL 到瀏覽器顯示網頁的主要過程。在實際情況中,可能還有其他的網絡優化技術和緩存機制來提高性能和減少延遲。

瀏覽器渲染機制?

  1. 解析HTML,構建DOM樹;
  2. 解析CSS,構建CSSOM樹;
  3. 把DOM和CSSOM組合成 渲染樹(render tree);
  4. 布局和繪制 渲染樹。

代碼規范?

自查:
一:常規檢查
代碼是否能正常運行
代碼能否實現需求功能
編輯器是否有報錯或波浪號警示
控制臺有沒有明顯報錯
定時器是否及時清除
是否已經刪除了所有的console和debugger
組件卸載掉時候不要忘記清除定時器

二:安全檢查
引入的包是否存在風險
代碼注釋中是否包含敏感詞匯
eslint是否有報錯未修復
接口是否進行了異常捕獲,并且拋出?
文檔檢查:是否有符合規范的注釋。

是否有做異常處理,尤其是在接口請求失敗的時候?

命名規范:
普通文件以小寫字母命名
react模塊組件文件命名遵循大駝峰
類命名遵循大駝峰
命名要有意義
標識符不要用前置或后置下劃線
函數名用小駝峰,文件名需要和函數名一致
類/單例/函數庫/對象 用大駝峰。?

組件名和導出名應一致

render 不要太臃腫, 一眼可以看完,可以通過拆分組件簡化

組件名稱和定義該組件的文件名稱建議要保持一致

循環列表不要忘了key,不推薦使用index作為key值

按需導入
Taro中編碼必須使用單引號

ReactNative圖片須壓縮
ScrollView禁止嵌套
require 中的圖片名字必須是一個靜態字符串
避免在 render 函數里創建新數組/對象

總是在自動關閉的標簽前加一個空格,正常情況下也不需要換行.
多行的JSX標簽寫在 ()里.

避免使用var

避免使用!important

盡可能不使用any

避免useEffect 依賴過多

老天保佑🙏 求求了,別問我這些,本寶寶記不住哇😭

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/36761.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/36761.shtml
英文地址,請注明出處:http://en.pswp.cn/news/36761.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【TensorFlow】P0 Windows GPU 安裝 TensorFlow、CUDA Toolkit、cuDNN

Windows 安裝 TensorFlow、CUDA Toolkit、cuDNN 整體流程概述TensorFlow 與 CUDA ToolkitTensorFlow 是一個基于數據流圖的深度學習框架CUDA 充分利用 NIVIDIA GPU 的計算能力CUDA Toolkit cuDNN 安裝詳細流程整理流程一&#xff1a;安裝 CUDA Toolkit步驟一&#xff1a;獲取CU…

XML 數據傳輸格式

目錄 XML簡介 一、初識XML 1.什么是 XML&#xff1f; 2.XML 和 HTML 之間的差異 3.XML 不會做任何事情 4.通過 XML 您可以發明自己的標簽 5.XML 不是對 HTML 的替代 二、XML 用途 1.XML 把數據從 HTML 分離 2.XML 簡化數據共享 3.XML 簡化數據傳輸 三、XML 樹結構 1.一個 XML 文…

QML HTTP 請求

作者: 一去、二三里 個人微信號: iwaleon 微信公眾號: 高效程序員 在 Web 開發中,實現與服務器的通信至關重要,其中 HTTP 便是最常用的方式之一。它是一種客戶端 - 服務器協議,客戶端向服務器發送請求,服務器則返回響應。常被用于在瀏覽器/客戶端和 Web 服務器之間傳輸消…

mysql執行計劃—— explain

使用explain關鍵字可以直觀的查看一條SQL語句的執行計劃&#xff0c;可以幫助我們選擇合適的索引和優化SQL語句&#xff0c;查詢結構總共有12列。下面列舉幾種需要重點掌握的&#xff1a; 1.id select的標識符&#xff0c;id越大&#xff0c;表示優先級越高&#xff0c;越先執…

VB+SQL酒店客房管理設計與實現

摘要 二十一世紀是信息技術的時代,計算機已經應用到了各行各業中。采用計算機信息管理技術,可以有效的降低企業的管理成本,提高企業內部的工作效率。 本文從天天賓館客房客房管理的一般流程出發,設計了一套天天賓館客房管理信息系統,它可以管理天天賓館客房中所有的客房的…

1. 如何爬取自己的CSDN博客文章列表(獲取列表)(博客列表)(手動+python代碼方式)

文章目錄 寫在最前步驟打開chrome瀏覽器&#xff0c;登錄網頁按pagedown一直往下刷呀刷呀刷&#xff0c;直到把自己所有的博文刷出來然后我們按F12&#xff0c;點擊選取元素按鈕然后隨便點一篇博文&#xff0c;產生如下所示代碼然后往上翻&#xff0c;找到頭&#xff0c;復制然…

1.2 操作系統原理和常見命令

操作系統原理和常見命令 文章目錄 操作系統原理和常見命令操作系統原理操作系統的概述進程管理內存管理文件系統設備管理安全性操作系統的角色 操作系統中的常見命令和操作 操作系統原理 操作系統的概述&#xff1a; 定義&#xff1a;操作系統是控制和管理計算機硬件與軟件資源…

Java-類型和變量(基于C語言的補充)

一個簡單的Java程序 args){ System.out.println("Hello,world"); } }通過上述代碼&#xff0c;我們可以看到一個完整的Java程序的結構&#xff0c;Java程序的結構由如下三個部分組成&#xff1a; 1.源文件&#xff08;擴展名為*.java)&#xff1a;源文件帶有類的定義…

ios消息推送例子

通過Apple推送服務&#xff0c;將消息發送給特定的ios客戶端&#xff0c;這是服務器端實例代碼。需要客戶端的voip key值&#xff0c;以及相應的客戶端回調接口&#xff0c;支持ios9.0以上版本。 下載地址&#xff1a;https://download.csdn.net/download/m0_37567738/8821559…

[保研/考研機試] KY7 質因數的個數 清華大學復試上機題 C++實現

描述 求正整數N(N>1)的質因數的個數。 相同的質因數需要重復計算。如1202*2*2*3*5&#xff0c;共有5個質因數。 輸入描述&#xff1a; 可能有多組測試數據&#xff0c;每組測試數據的輸入是一個正整數N&#xff0c;(1<N<10^9)。 輸出描述&#xff1a; 對于每組數…

leetcode 6914. 翻倍以鏈表形式表示的數字

給你一個 非空 鏈表的頭節點 head &#xff0c;表示一個不含前導零的非負數整數。 將鏈表 翻倍 后&#xff0c;返回頭節點 head 。 示例 1&#xff1a; 輸入&#xff1a;head [1,8,9] 輸出&#xff1a;[3,7,8] 解釋&#xff1a;上圖中給出的鏈表&#xff0c;表示數字 189 。返…

Photoshop快捷鍵大全

Photoshop是一款非常強大的圖像處理軟件&#xff0c;它提供了許多快捷鍵&#xff0c;可以幫助用戶更快地完成操作。熟練掌握這些快捷鍵&#xff0c;可以大大提高工作效率&#xff0c;讓您更加專注于創作。 Photoshop快捷鍵匯總&#xff1a; 一、基本操作快捷鍵 1. 新建文檔…

什么是CSS中的漸變(gradient)?如何使用CSS創建線性漸變和徑向漸變?

聚沙成塔每天進步一點點 ? 專欄簡介? 漸變&#xff08;Gradient&#xff09;在CSS中的應用? 線性漸變&#xff08;Linear Gradient&#xff09;語法&#xff1a;示例&#xff1a; ? 徑向漸變&#xff08;Radial Gradient&#xff09;語法&#xff1a;示例&#xff1a; ? 寫…

第06天 靜態代理和動態代理

?作者簡介&#xff1a;大家好&#xff0c;我是Leo&#xff0c;熱愛Java后端開發者&#xff0c;一個想要與大家共同進步的男人&#x1f609;&#x1f609; &#x1f34e;個人主頁&#xff1a;Leo的博客 &#x1f49e;當前專欄&#xff1a;每天一個知識點 ?特色專欄&#xff1a…

36 | 銀行貸款數據分析

本文將以銀行貸款數據分析為主題,深入探討如何運用數據科學的方法,揭示銀行貸款領域的內在規律和趨勢。通過對貸款數據的分析,我們能夠洞察不同類型貸款的分布情況、貸款金額的變化趨勢,以及借款人的特征和還款情況等關鍵信息。 通過運用Python編程語言及相關的數據分析工…

arcgis定義投影與投影

1、定義 地理坐標系&#xff08;GCS&#xff09;&#xff1a;利用地球表面的經緯度表示的坐標系統。一般單位為度。投影坐標系&#xff08;PCS&#xff09;&#xff1a;利用數學換算將三維地球表面上的經緯度坐標轉換到二維平面上的坐標系統。一般單位為米。可以認為&#xff…

【ARM Cache 系列文章 9 番外篇 -- ARMv9 系列 Core 介紹】

文章目錄 ARMv9 系列CoreARM Cortex-A510 介紹ARM Cortex-A715ARM Cortex-A720 ARMv9 系列Core 2021年5月Arm公布了其最新3款CPU和3款GPU核心設計&#xff0c;三款新CPU分別是旗艦核心Cortex-X2、高性能核心Cortex-A710、高能效核心Cortex-A510 CPU&#xff0c;三款新GPU核心則…

【Unity每日一記】向量操作攝像機的移動(向量加減)

&#x1f468;?&#x1f4bb;個人主頁&#xff1a;元宇宙-秩沅 &#x1f468;?&#x1f4bb; hallo 歡迎 點贊&#x1f44d; 收藏? 留言&#x1f4dd; 加關注?! &#x1f468;?&#x1f4bb; 本文由 秩沅 原創 &#x1f468;?&#x1f4bb; 收錄于專欄&#xff1a;uni…

TCP消息傳輸可靠性保證

TCP鏈接與斷開 -- 三次握手&四次揮手 三次握手 TCP 提供面向有連接的通信傳輸。面向有連接是指在數據通信開始之前先做好兩端之間的準備工作。 所謂三次握手是指建立一個 TCP 連接時需要客戶端和服務器端總共發送三個包以確認連接的建立。在socket編程中&#xff0c;這一…

算法模版,今天開始背

二分查找算法 int left_bound(int[] nums, int target) {int left 0, right nums.length - 1;// 搜索區間為 [left, right]while (left < right) {int mid left (right - left) / 2;if (nums[mid] < target) {// 搜索區間變為 [mid1, right]left mid 1;} else if …