解密 Vue 打包策略

1. 總體概述

在現代前端開發中,Vue 已成為流行框架之一,開發者通常使用 webpack、vite 或 vue-cli 來構建項目。可能會困惑:

  • 為什么源碼中的資源引用路徑與打包后實際產出的路徑會不一樣?
  • 靜態路徑與動態路徑到底如何正確書寫,二者的區別是什么?

簡單來說,在開發時我們寫的代碼(源碼)和經過構建工具打包后的代碼,在資源路徑上會有明顯差異,而這個差別主要體現在打包時構建工具對資源文件的處理、優化和路徑替換上。

2. Vue 項目結構

在 Vue 項目中,通常有兩大類目錄分別存放資源:

2.1 源碼目錄與公共目錄

1、源碼目錄(src/):

  1. 存放項目的組件、頁面、JS 邏輯和樣式文件。
  2. 內含一個 assets/ 文件夾,通常用于放置那些需要經過打包工具處理的資源(如圖片、字體、樣式文件等)。
  3. 這些資源在打包時會根據配置進行壓縮、hash 加命名等優化處理,保證上線后的性能和緩存管理。

2、公共目錄(public/):

  1. 存放不需要經過構建的靜態資源,比如 favicon、第三方庫文件、某些不會經常變動的圖片資源等。
  2. 這些文件在打包時不會經過處理,而是直接復制到打包輸出目錄中。
  3. 在引用時通常使用絕對路徑(以“ / ”開頭)。
2.2?資源存放位置對比

1、放在 src/assets 下的資源:

  • 優點:會經過 webpack/vite 的處理,從而能做壓縮、hash 化,利用緩存機制,同時支持模塊化引用。
  • 缺點:引用方式需要注意使用 import 或 require,路徑通常依賴于 webpack 的解析(例如使用 @/assets/...)。

2、放在 public/ 下的資源:

  • 優點:簡單直接,文件名和路徑不變,適用于那些不需要修改的資源。
  • 缺點:不經由構建處理,沒有 hash 化,不便于緩存清理,同時在項目中引用時必須寫成絕對路徑。

3. 構建工具與資源處理機制

在 Vue 項目中,webpack、vite 和 vue-cli 是主要的構建工具/腳手架。它們在資源處理、打包以及路徑解析上的機制有所不同。

3.1 Webpack 處理原理

Webpack 是一個基于模塊打包思想的工具,將項目中的各自資源(JS、CSS、圖片等)當作模塊來處理。工作原理:

  1. 入口文件分析
    1. Webpack 根據入口文件(比如 main.js 或 App.vue)出發,遞歸分析依賴文件。
  2. 加載器(Loader)處理
    1. 加載器(如 vue-loader,css-loader,file-loader)對資源進行預處理。例如,對于圖片文件,file-loader 會將圖片拷貝到打包目錄,并返回經過重命名(通常增加 hash 值以防緩存問題)的文件路徑。
  3. 插件(Plugin)擴展
    1. 插件(如 HtmlWebpackPlugin)可以在打包過程中對 HTML 文件或其它資源進行處理,比如,自動在 HTML 文件中引入打包后的資源文件。
  4. 輸出打包文件
    1. 最終生成一個或多個打包后的文件,其中內含的資源引用會被構建工具替換成正確的路徑。

解析流程圖

                     ┌────────────────────────┐│      開發者代碼          ││(靜態/動態引用資源路徑)   │└─────────────┬──────────┘│▼┌────────────────────────┐│  webpack 解析入口文件    │└─────────────┬──────────┘│▼┌────────────────────────┐│   靜態分析資源引用        ││(require/import等語法)  │└─────────────┬──────────┘│▼┌────────────────────────┐│   判斷引用方式:          ││① 靜態路徑→直接分析        ││② 動態路徑→部分未分析      │└─────────────┬──────────┘│▼┌─────────────────────────┐│   加載器 (loader)        ││ 處理資源(如 file-loader)│└─────────────┬───────────┘│▼┌────────────────────────┐│      插件 (plugin)      ││      優化、哈希等處理     │└─────────────┬──────────┘│▼┌────────────────────────┐│      生成打包輸出        ││ 更新引用路徑為帶 hash 值  │└────────────────────────┘

解釋:

開發者在代碼中書寫資源引用,這些引用可以是靜態路徑也可以是動態構造的路徑。靜態引用路徑能夠被 loader 處理,生成帶有哈希(防緩存問題)的輸出文件,而對于無法靜態分析的動態路徑則可能需要額外的手動處理。

3.2 Vite 處理原理

Vite 是較新的工具,其理念基于原生 ES 模塊導入,其處理方式與 webpack 有所不同:

  1. 開發時基于 ES 模塊
    1. 在開發環境中,Vite 不像 webpack 那樣打包整個項目,而是利用瀏覽器對 ES 模塊的支持,按需加載文件。當訪問資源時,Vite 會先解析絕對路徑(比如 public 下的資源)或模塊路徑(例如 src 中的資源)來進行服務。
  2. 構建時靜態資源處理
    1. 在構建生產版本時,Vite 會對所有資源進行靜態分析和構建優化,生成優化后的資源文件。對于引用路徑,Vite 會根據配置(如 base?配置)進行路徑轉換,確保部署后資源能正確加載。
  3. 優化和熱更新
    1. 開發時利用 ES 模塊特性實現快速熱更新,不需要等待整個項目重構建。

解析流程圖

                     ┌────────────────────────┐│      開發者代碼          ││(靜態/動態引用資源路徑)   │└─────────────┬──────────┘│▼┌────────────────────────┐│   瀏覽器直接加載模塊      ││  (ES 模塊 import)       │└─────────────┬──────────┘│▼┌─────────────────────────────┐│      開發服務器攔截請求        ││ 解析資源路徑(基于 public 目錄)│└─────────────┬───────────────┘│▼┌────────────────────────┐│    模塊熱更新及按需加載   │└─────────────┬──────────┘│▼┌────────────────────────┐│   構建時打包優化處理      ││(靜態資源優化、路徑轉換)  │└────────────────────────┘
3.3 Vue-CLI 的定位與使用

Vue-CLI 實際上是一個基于 webpack 的腳手架工具,它封裝了 webpack 的配置,使得開發者不需要直接接觸 webpack 配置文件就能快速構建 Vue 項目。主要特點有:

  • 標準化項目結構:Vue-CLI 默認生成的項目結構將資源分為 src/ 和 public/ 兩大塊,結合 webpack 的自動處理來生成最終的產出。
  • 可擴展性:雖然默認配置簡潔,但開發者仍可以自定義 webpack 配置(例如通過 vue.config.js),從而調整資源處理機制。
  • 開發、構建與部署一體化:提供開發環境下的熱更新、錯誤提示、lint 檢查、生產環境下的打包與優化等一系列工具,使得整個開發流程更流暢。

4.?靜態資源路徑與動態路徑

資源路徑在代碼中最直觀的體現就是如何引用圖片或其他資源文件。

4.1?靜態路徑的定義與特點

靜態路徑?是指在代碼中以固定字符串直接寫出的資源路徑,不依賴于運行時的計算或變量。

🌰

<img src="/images/logo.png" alt="Logo">

特點:

  • 固定不變:在代碼編寫時就確定了資源的路徑,不會因程序運行而改變。
  • 可讀性高:開發者一目了然知道當前引用的是哪個路徑下的資源。
  • 打包優化:對于打包工具來說,靜態路徑更容易被識別并處理。例如在 webpack 中,如果使用 require('@/assets/logo.png') —— 模塊化的靜態資源引用,webpack 會分析到這一資源并應用 file-loader 或 url-loader 對其進行優化(如生成帶 hash 的文件名)。
  • 部署風險:如果部署環境或路徑配置發生變化(比如服務器靜態資源存放目錄不同),所有硬編碼路徑都需要手動調整。
4.2?動態路徑的定義與特點

動態路徑?則是指路徑通過變量、函數、表達式生成,從而可以根據條件、用戶數據或配置動態生成最終的資源引用路徑。

🌰

<template><img :src="getImageUrl('logo.png')" alt="Logo">
</template><script>
export default {methods: {// 根據不同條件生成資源路徑getImageUrl(filename) {// 可根據環境變量、路由或其他業務邏輯拼接路徑return process.env.NODE_ENV === 'development'? `/dev/images/${filename}`: `/prod/images/${filename}`;}}
}
</script>

特點:

  • 靈活性高:可以根據不同環境或業務邏輯生成不同的路徑。例如,開發環境下和生產環境下路徑不同的情況。
  • 動態構造:有時候用戶上傳或配置文件名稱不固定,必須通過代碼計算動態生成。
  • 調試與錯誤隱患:動態路徑在構造過程中容易出現拼寫錯誤、路徑拼接錯誤等問題,調試起來也較為麻煩。
  • 對打包工具的影響:對于 webpack 來說,動態引用的資源路徑(例如使用變量拼接路徑)可能不會被靜態分析到,從而導致資源未被打包或路徑處理失效,因此需要在代碼中謹慎使用這類動態路徑。
4.3?靜態路徑與動態路徑在不同工具下的處理差異
  1. 在 webpack 中

    • 靜態路徑:因為在代碼編譯時能夠靜態分析到具體字符串,因此 webpack 能夠自動處理文件導入,生成帶 hash 值的文件名,從而提升緩存管理和文件命中率。

    • 動態路徑:如果資源路徑通過變量或函數生成,則 webpack 無法在編譯階段確定具體文件,從而導致相關資源不會被打包進輸出文件。這時,開發者需要特殊處理,例如使用 require.context 或者在 build 過程中手動復制文件到輸出目錄。

  2. 在 Vite 中

    • 靜態路徑:同樣采用絕對路徑或相對路徑引用,Vite 會在構建時將這些資源處理好,生成合適的 URL,通常也需要配合 base 配置項來保證部署時路徑正確。

    • 動態路徑:Vite 在開發環境中會按需加載,但如果構造的路徑無法靜態分析(例如利用變量拼接),可能導致資源找不到或失去模塊熱更新優勢,因此建議盡量在代碼中使用靜態的路徑引用,或者確保動態計算出的路徑仍然指向 public 目錄下不需要打包處理的資源。

5. 實戰

5.1?靜態路徑的引用
<template><!-- 使用絕對路徑引用放置在 public 目錄下的圖片 --><img src="/images/logo.png" alt="Logo"><!-- 使用 webpack 的模塊解析引用 src/assets 中的圖片 --><img :src="staticLogo" alt="Logo">
</template><script>
export default {data() {return {// 注意:在 webpack 的構建下,使用 require 或 import 來動態引入staticLogo: require('@/assets/logo.png')// 如果項目支持 ES 模塊,也可以寫成:// staticLogo: import('@/assets/logo.png')};}
}
</script>

分析:

1、第一張圖片使用了絕對路徑 /images/logo.png,這要求該資源在 public/images/logo.png 下存在。打包時,Vue-CLI 或 Vite 會直接將其復制到最終的靜態目錄中,不做修改,因此路徑保持不變。

2、第二張圖片通過 require('@/assets/logo.png') 的方式引用。這里的 @ 通常代表 src/ 目錄,經過 webpack 分析后,會將 logo.png 文件進行處理:

  • 把這張圖片作為資源依賴加入打包流程
  • 加入 hash 字符串用于緩存管理,自動生成一張重命名的圖片(如 logo.123abc.png)
  • 將這個圖片地址(/assets/logo.123abc.png)返回
  • 最后在打包產物中,該路徑會被替換為正確的訪問 URL。

相當于:

const logoPath = '/assets/logo.123abc.png'
5.2?動態路徑的引用
<template><!-- 動態構建圖片路徑 --><div v-for="(imgName, index) in imageList" :key="index"><img :src="resolveImage(imgName)" :alt="`Image ${index}`"></div>
</template><script>
export default {data() {return {// 列表中的圖片文件名imageList: ['image1.png', 'image2.png', 'image3.png']};},methods: {// 根據當前環境返回圖片路徑resolveImage(filename) {// 如果圖片存在于 public 目錄中,直接返回絕對路徑if (process.env.NODE_ENV === 'production') {return `/assets/images/${filename}`;} else {// 開發環境中,可考慮從 src 目錄加載(此時必須要求路徑能被 webpack 解析)// 注意:這種方式可能會導致打包時未能靜態分析所有文件,需要在配置中注意try {return require(`@/assets/dynamicImages/${filename}`);} catch (error) {console.error('加載圖片失敗:', error);return '';}}}}
}
</script>

分析:

1、動態路徑通過一個方法 resolveImage 根據運行環境判斷圖片存放的位置,在生產環境中引用 public 目錄下的資源,而在開發中則通過 webpack 的 require 動態加載。

2、當使用變量構造路徑時,webpack 需要能夠靜態識別所有可能的文件,否則可能會導致構建時遺漏資源。

3、在生產環境下,資源不進行 webpack 處理,而是直接從 public 文件夾中加載,因此路徑應以 /?開頭,保持不變。

6.?常見錯誤及注意事項

在實際開發過程中,以下幾點是最容易出現問題的地方:

6.1?路徑書寫時的注意細節
  1. 避免路徑混淆

    • 靜態引用時一定要區分使用絕對路徑(例如 /images/logo.png)與相對路徑(例如 ./assets/logo.png)的區別。

    • 如果資源存放在 public 目錄中,則必須使用絕對路徑,否則可能在打包后找不到資源。

  2. 使用別名

    • 在 webpack 或 vue-cli 中,一般約定 @ 表示 src/ 目錄,這樣可以更靈活引用資源。

    • 但一定要在配置文件中(如 vue.config.js 或 webpack 的 resolve.alias 中)正確設置這些別名。

  3. 環境變量配置

    • 根據開發環境和生產環境的不同,需在代碼中使用 process.env.NODE_ENV 進行區別處理。

    • 同時注意前端項目中常常會配置一個 publicPath 或 base 參數(在 vue-cli 中為 publicPath,在 Vite 中為 base),確保在生產環境下資源能夠正確加載。

6.2?打包配置注意事項
  1. 輸出路徑配置

    • 檢查 webpack/Vite 的輸出路徑設置,確保生產環境中打包后的目錄結構與預期一致。

    • 在 webpack 中,output.publicPath 用于指定打包后資源的訪問前綴;如果設置錯誤,會導致頁面中引用的資源加載失敗。

  2. 資源哈希處理

    • 使用文件名哈希機制可以防止瀏覽器緩存舊資源,因此建議使用 contenthash 或 hash,這通常需要在 webpack/Vite 的配置中啟用。

    • 同時注意,修改文件名后代碼中引用的路徑應同步更新,這部分由構建工具自動完成。

  3. 動態路徑靜態分析問題

    • 如果動態引入資源的寫法過于自由,可能導致構建工具無法靜態分析出所有需要打包的文件。

    • 解決方案是使用 require.context(僅限 webpack)或者通過工具輔助掃描目錄,確保所有資源都被正確打包。

    • 在 Vite 中,建議把大部分動態資源放入 public 目錄,通過絕對 URL 進行引用。

7. 常見問題解答

問:為什么在代碼中用變量構造的路徑可能會找不到資源?

一句話理解核心原因:

打包工具在構建階段需要“看得見”的路徑,才能將資源處理進打包結果中。變量路徑是“運行時”才知道的,構建時無法處理,自然就找不到資源。

舉個常見的 🌰

<template><img :src="`@/assets/img/${imgName}.png`" />
</template><script setup>
const imgName = 'banner'
</script>

這會訪問 src/assets/img/banner.png 嗎?錯了!它在構建時會找不到這個文件!

簡單分析一下

1、Webpack 和 Vite 打包原理(核心)

這類打包工具都會在構建階段做這些事:

  1. 掃描源碼

  2. 靜態分析資源引用(🔍?重點)—— 它只能識別 字符串字面量路徑

  3. 將資源路徑轉成可打包的模塊依賴

  4. 將資源復制、壓縮,生成 hash 文件名并重寫路徑

2、變量路徑是“動態”的,構建時根本看不到

const path = `./assets/img/${imgName}.png`
require(path) // ? webpack/vite 無法解析這個路徑
  • Webpack/Vite 無法推斷出最終要用的是哪個文件。

  • 這些工具不會去窮舉可能用到的所有路徑,它們只是靜態編譯器,不是運行時解釋器。

正確寫法:

方式一:使用 import 語句(構建時已知路徑)

import banner from '@/assets/img/banner.png'<img :src="banner" />

?? 這種方式構建時路徑是明確的,打包工具能處理。

方式二:require.context 或 import.meta.glob(動態導入的解決方案)

Webpack 的 require.context

const images = require.context('@/assets/img', false, /\.png$/)
const imgUrl = images(`./${imgName}.png`)

Vite 的?import.meta.glob

const modules = import.meta.glob('@/assets/img/*.png')
const path = `/src/assets/img/${imgName}.png`
const imgUrl = await modules[path]() // 或者判斷是否存在

這些語法就是為了解決變量路徑問題,構建階段提前收集了所有可能路徑,運行時再按需加載。

🧱 public 文件夾的例外

如果非要動態加載資源,而這些資源路徑又是變量構造的,可以放在 public/ 目錄中:

<img :src="`/img/${imgName}.png`" />

public/ 目錄不會被打包,它在構建后是原樣復制的。適合那些無需模塊化、需動態路徑訪問的靜態資源。

🚫 不推薦的錯誤用法總結

錯誤寫法問題原因

:src="'@/assets/img/' + name"

Webpack/Vite 構建時無法識別變量路徑

require('@/assets/img/' + name)

同樣是變量路徑,構建階段無法解析

:src="@/assets/img/${name}.png"

雖然寫法優雅,但路徑是動態的,打包時無法處理

🧭?打包階段看不到的路徑,資源就不會被打包進去。用變量拼接路徑,是運行時行為,打包工具幫不了你。

答:當使用變量拼接路徑時,構建工具如 webpack 無法靜態分析出所有可能的文件引用,因此不會自動將相關資源復制到最終打包目錄中。解決方法是提前明確所有文件路徑,或者將這部分資源放到 public 目錄。

問:publicPath(或 base)參數具體如何配置?

答:它們是用來配置 打包后資源路徑前綴 的參數。

Webpack 中叫做:output.publicPath

// webpack.config.js
module.exports = {output: {publicPath: '/static/', // 所有資源路徑前面加上 /static/},
}

Vite 中叫做:base?

// vite.config.ts
export default defineConfig({base: '/static/', // 同樣效果
})

這兩個參數的核心作用就是告訴打包器:"我打包出來的資源,在最終部署的網站路徑前面應該加什么前綴。"

注意實現:資源引用出錯的典型特征:

  • 打包后頁面白屏(JS 文件加載 404)
  • 圖片 or 字體 路徑出錯
  • index.html 引入 chunk 文件失敗?

這些問題多數是 publicPath / base 配置錯了!

總結:

  • 在 webpack 的配置文件中,output.publicPath 用于指定生產環境下所有資源引用的基礎路徑;如果項目需要部署到子目錄,此參數需要配置為子目錄路徑,例如 /myapp/。

  • 在 Vite 中,通過 base 參數設置相同功能,確保打包后引用路徑正確。

問:怎么知道圖片是否經過哈希處理?

答:構建后的文件夾中,會看到類似 logo.3e5d9f2.png 這樣的文件名,這表明構建工具已對文件進行 hash 處理,用于緩存管理。如果圖片引用路徑中沒有 hash,可能意味著它來源于 public 目錄,或者構建配置未啟用哈希處理。

以上只是簡單介紹,具體了解不是很詳細(⊙o⊙),需要了解的小伙伴可以查閱官網。

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

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

相關文章

Golang|接口并發測試和壓力測試

文章目錄 這里出現某些獎品和數據庫中庫存量不一致的問題原因就是在并發的情況下&#xff0c;sync.Map仍然會出現臟寫問題&#xff0c;就是在同時操作下的操作覆蓋問題可以先把數據放到channel里&#xff0c;然后用一個單一的協程負責讀取channel并寫入map

CentOS下,Xftp中文文件名亂碼的處理方式

亂碼原因 中文版Windows默認使用GBK編碼&#xff0c;現代Linux發行版&#xff08;如CentOS、Ubuntu等&#xff09;默認使用UTF-8編碼。Windows下正常的編碼&#xff0c;可能在linux下無法識別&#xff0c;例如&#xff1a;Windows的GBK字節0xD6D0被Linux用UTF-8解碼時&#xf…

解決 Vue 中 input 輸入框被賦值后,無法再修改和編輯的問題

目錄 需求&#xff1a; 出現 BUG&#xff1a; Bug 代碼復現 解決問題&#xff1a; 解決方法1&#xff1a; 解決方法2 關于 $set() 的補充&#xff1a; 需求&#xff1a; 前段時間&#xff0c;接到了一個需求&#xff1a;在選擇框中選中某個下拉菜單時&#xff0c;對應的…

【含文檔+PPT+源碼】基于微信小程序的衛生院預約掛號管理系統的設計與實現

項目視頻介紹&#xff1a; 畢業作品基于微信小程序的衛生院預約掛號管理系統的設計與實現 課程簡介&#xff1a; 本課程演示的是一款基于微信小程序的衛生院預約掛號管理系統的設計與實現&#xff0c;主要針對計算機相關專業的正在做畢設的學生與需要項目實戰練習的 Java 學習…

【Vue】案例——To do list:

【Vue】案例——To do list&#xff1a; 一、案例介紹&#xff1a;二、效果展示&#xff08;如圖&#xff09;三、主要功能&#xff1a;四、技術要點&#xff1a;補充&#xff1a;【Vue】Vue模板語法(點擊可跳轉)補充&#xff1a;【Vue】數據綁定&#xff08;單雙向&#xff09…

導入 .sql 文件到 云服務器上的MySQL中

導入 .sql 文件到 云服務器上的MySQL中 步驟 1&#xff1a;確保 .sql 文件已上傳到云服務器步驟 2&#xff1a;登錄到云服務器步驟 3&#xff1a;檢查文件是否成功傳輸步驟 4&#xff1a;登錄 MySQL步驟 5&#xff1a;創建空數據庫&#xff08;如果尚未創建&#xff09;步驟 6&…

我的機器學習之路(初稿)

文章目錄 一、機器學習定義二、核心三要素三、算法類型詳解1. 監督學習&#xff08;帶標簽數據&#xff09;2. 無監督學習&#xff08;無標簽數據&#xff09;3. 強化學習&#xff08;決策優化&#xff09;(我之后主攻的方向) 四、典型應用場景五、學習路線圖六、常見誤區警示七…

VueDOMPurifyHTML 防止 ??XSS(跨站腳本攻擊)?? 風險

VueDOMPurifyHTML 是一個 ??Vue.js 插件??&#xff0c;用于在 v-html 指令中安全地渲染 HTML 內容&#xff0c;防止 ??XSS&#xff08;跨站腳本攻擊&#xff09;?? 風險。 ??作用?? ??解決 v-html 的安全問題?? Vue 的 v-html 會直接渲染原始 HTML&#xff0…

【數據結構】之散列

一、定義與基本術語 &#xff08;一&#xff09;、定義 散列&#xff08;Hash&#xff09;是一種將鍵&#xff08;key&#xff09;通過散列函數映射到一個固定大小的數組中的技術&#xff0c;因為鍵值對的映射關系&#xff0c;散列表可以實現快速的插入、刪除和查找操作。在這…

How AI could empower any business - Andrew Ng

How AI could empower any business - Andrew Ng References 人工智能如何為任何業務提供支持 empower /?m?pa??(r)/ vt. 授權&#xff1b;給 (某人) ...的權力&#xff1b;使控制局勢&#xff1b;增加 (某人的) 自主權When I think about the rise of AI, I’m reminded …

微服務的服務調用詳解以及常見解決方案對比

微服務服務調用詳解 1. 服務調用分類 服務調用根據通信方式、同步性、實現模式可分為以下類型&#xff1a; 按通信協議分類 類型典型協議/框架特點RPC&#xff08;遠程過程調用&#xff09;Dubbo、gRPC、Apache Thrift高性能、二進制協議、強類型定義HTTP/RESTSpring RestTe…

MySQL:B+樹索引

InnoDB索引方案 為了使用二分法快速定位具體的目錄項&#xff0c;假設所有目錄項都可以在物理存儲器上連續存儲&#xff0c;有以下問題&#xff1a; InnoDB使用頁為管理存儲空間的基本單位&#xff0c;最多只能保證16KB的連續存儲空間&#xff0c;記錄數據量多可能需要非常大…

THCON 2025

Crypto OTPas_ouf 用10個字符異或加密的jpg圖片&#xff0c;通過頭得到key再恢復原圖 Mammoths Personnal Slot Machine 梅森旋轉恢復 from pwn import * from randcrack import RandCrack from tqdm import trange context.log_level errorp remote(74.234.198.209, 33…

3.8 字符串的常用函數

重點&#xff1a;字符串的常用函數 #1.測試轉換大小寫 lower:大寫->小寫 upper&#xff1a;小寫->大寫 swapcase&#xff1a;自動將大寫轉小寫小寫轉大寫 print("ABC".lower()) #abcprint("abc".upper()) #ABCprint…

Docker:SkyWalking 鏈路追蹤的技術指南

1、簡述 Apache SkyWalking 是一個開源的 APM(應用性能監控)工具,能夠實現分布式系統的全鏈路監控、性能分析以及服務依賴關系分析。SkyWalking 支持多種語言的探針,提供強大的可視化監控和分析能力,是微服務架構下性能調優和問題排查的利器。 樣例代碼: https://gitee.…

[Lc] 最長公共子序列 | Fenwick Tree(樹狀數組):處理動態前綴和

目錄 LCR 095. 最長公共子序列 題解 Fenwick Tree&#xff08;樹狀數組&#xff09;&#xff1a;處理動態前綴和 一、問題背景&#xff1a;當傳統方法遇到瓶頸 二、Fenwick Tree核心設計 2.1 二進制索引的魔法 2.2 關鍵操作解析 更新操作&#xff08;O(log n)&#xff0…

python3.13.0環境安裝及python-docx庫安裝指南

1. Python環境安裝 1.1 Windows系統安裝Python 下載Python安裝包 ? 訪問Python官網 ? 點擊"Download Python 3.x.x"&#xff08;推薦使用3.8及以上版本&#xff09; 2. 運行安裝程序 ? 雙擊下載的安裝包 ? 重要&#xff1a;勾選"Add Python to environmen…

前端VUE框架理論與應用(4)

一、計算屬性 模板內的表達式非常便利,但是設計它們的初衷是用于簡單運算的。在模板中放入太多的邏輯會讓模板過重且難以維護。例如: <div id="example">{{ message.split().reverse().join() }}</div> 在這個地方,模板不再是簡單的聲明式邏輯。你…

MySQL:存儲函數和存儲過程

系列文章目錄 1.MySQL編程基礎 2.程序控制流語句 3.存儲過程 4.游標 5.嵌入式SQL 文章目錄 系列文章目錄前言一、程序控制流語句&#xff1a;二、存儲函數&#xff1a; 1.存儲函數的特點&#xff1a;2.存儲函數的定義&#xff1a;3.調用存儲函數 三、存儲過程&#xff1a;…

基礎貪心算法集合2(10題)

目錄 1.單調遞增的數字 2.壞了的計算器 3.合并區間 4.無重疊區間 5. 用最少數量的箭引爆氣球 6.整數替換 解法1&#xff1a;模擬記憶化搜索 解法2位運算貪心 7.俄羅斯套娃信封問題 補充.堆箱子 8.可被3整除的最大和 9.距離相等的條形碼 10.重構字符串 1.單調遞增的數字…