Vue.js 指令系統完全指南:深入理解 v- 指令

Vue.js 的指令系統是其最強大的特性之一,通過以 v- 開頭的特殊屬性,我們可以在模板中聲明式地綁定底層Vue實例的數據。本文將深入講解Vue中最重要的指令,幫助掌握Vue的核心功能。

文章目錄

    • 1. v-model:雙向數據綁定的核心
      • 基本用法
      • 修飾符
      • 自定義組件中的 v-model
    • 2. v-bind:屬性綁定的萬能鑰匙
      • 基本用法
      • 動態屬性名
    • 3. v-if / v-else-if / v-else:條件渲染
      • 基本用法
      • v-if vs v-show
    • 4. v-for:列表渲染
      • 基本用法
      • 維護狀態(key的重要性)
    • 5. v-on:事件處理
      • 基本用法
      • 事件修飾符
      • 按鍵修飾符
    • 6. 其他重要指令
      • v-text 和 v-html
      • v-show
      • v-pre
      • v-once
      • v-cloak
    • 7. 自定義指令
      • 全局注冊
      • 局部注冊
      • 指令鉤子函數
      • 高級自定義指令示例
    • 8. 實踐
      • 指令實踐
  • Vue.js 指令快速參考表
    • 核心指令對照表
    • 常用修飾符詳解
      • v-model 修飾符
      • v-on 事件修飾符
      • v-on 按鍵修飾符
    • 使用場景對比
      • v-if vs v-show
      • v-for 使用要點
    • 最佳實踐速查
      • ? 推薦做法
      • ? 避免做法
    • 自定義指令語法
      • 注冊方式
      • 鉤子函數
      • 參數說明


在這里插入圖片描述

1. v-model:雙向數據綁定的核心

基本用法

v-model 是Vue中實現雙向數據綁定的指令,主要用于表單元素。

<template><div><!-- 文本輸入 --><input v-model="message" placeholder="輸入消息"><p>消息是: {{ message }}</p><!-- 多行文本 --><textarea v-model="text" placeholder="多行文本"></textarea><!-- 復選框 --><input type="checkbox" id="checkbox" v-model="checked"><label for="checkbox">{{ checked }}</label><!-- 單選按鈕 --><input type="radio" id="one" value="One" v-model="picked"><label for="one">One</label><input type="radio" id="two" value="Two" v-model="picked"><label for="two">Two</label><!-- 選擇框 --><select v-model="selected"><option disabled value="">請選擇</option><option>A</option><option>B</option><option>C</option></select></div>
</template><script>
export default {data() {return {message: '',text: '',checked: false,picked: '',selected: ''}}
}
</script>

修飾符

v-model 提供了三個有用的修飾符:

<!-- .lazy - 在 change 事件而非 input 事件觸發時更新 -->
<input v-model.lazy="msg"><!-- .number - 自動將用戶輸入轉換為數值類型 -->
<input v-model.number="age" type="number"><!-- .trim - 自動過濾用戶輸入的首尾空白字符 -->
<input v-model.trim="msg">

自定義組件中的 v-model

<!-- 父組件 -->
<custom-input v-model="searchText"></custom-input><!-- 子組件 CustomInput.vue -->
<template><input:value="modelValue"@input="$emit('update:modelValue', $event.target.value)">
</template><script>
export default {props: ['modelValue'],emits: ['update:modelValue']
}
</script>

2. v-bind:屬性綁定的萬能鑰匙

基本用法

v-bind 用于動態綁定一個或多個屬性,或組件 prop 到表達式。

<template><div><!-- 綁定屬性 --><img v-bind:src="imageSrc" v-bind:alt="imageAlt"><!-- 縮寫語法 --><img :src="imageSrc" :alt="imageAlt"><!-- 綁定類名 --><div :class="{ active: isActive, 'text-danger': hasError }"></div><div :class="[activeClass, errorClass]"></div><div :class="classObject"></div><!-- 綁定樣式 --><div :style="{ color: activeColor, fontSize: fontSize + 'px' }"></div><div :style="[baseStyles, overridingStyles]"></div><div :style="styleObject"></div></div>
</template><script>
export default {data() {return {imageSrc: 'https://example.com/image.jpg',imageAlt: '示例圖片',isActive: true,hasError: false,activeClass: 'active',errorClass: 'text-danger',classObject: {active: true,'text-danger': false},activeColor: 'red',fontSize: 30,styleObject: {color: 'red',fontSize: '13px'},baseStyles: { color: 'blue' },overridingStyles: { fontSize: '20px' }}}
}
</script>

動態屬性名

<template><!-- 動態屬性名 --><a :[attributeName]="url">鏈接</a><!-- 當 attributeName 為 "href" 時,等價于 --><a :href="url">鏈接</a>
</template><script>
export default {data() {return {attributeName: 'href',url: 'https://www.example.com'}}
}
</script>

3. v-if / v-else-if / v-else:條件渲染

基本用法

這些指令用于條件性地渲染元素。

<template><div><h1 v-if="awesome">Vue is awesome!</h1><h1 v-else>Oh no 😢</h1><!-- 多條件判斷 --><div v-if="type === 'A'">A</div><div v-else-if="type === 'B'">B</div><div v-else-if="type === 'C'">C</div><div v-else>Not A/B/C</div><!-- 使用 template 包裝多個元素 --><template v-if="loginType === 'username'"><label>Username</label><input placeholder="Enter your username" key="username-input"></template><template v-else><label>Email</label><input placeholder="Enter your email address" key="email-input"></template></div>
</template><script>
export default {data() {return {awesome: true,type: 'A',loginType: 'username'}}
}
</script>

v-if vs v-show

<template><div><!-- v-if 是"真正"的條件渲染,會銷毀和重建元素 --><p v-if="showIf">通過 v-if 顯示</p><!-- v-show 只是簡單地切換元素的 CSS display 屬性 --><p v-show="showShow">通過 v-show 顯示</p></div>
</template><script>
export default {data() {return {showIf: true,showShow: true}}
}
</script>

使用建議:

  • 如果需要非常頻繁地切換,則使用 v-show
  • 如果在運行時條件很少改變,則使用 v-if

4. v-for:列表渲染

基本用法

v-for 指令用于基于源數據多次渲染元素或模板塊。

<template><div><!-- 遍歷數組 --><ul><li v-for="item in items" :key="item.id">{{ item.message }}</li></ul><!-- 帶索引的遍歷 --><ul><li v-for="(item, index) in items" :key="item.id">{{ index }} - {{ item.message }}</li></ul><!-- 遍歷對象 --><ul><li v-for="value in object" :key="value">{{ value }}</li></ul><!-- 遍歷對象,包含鍵名 --><ul><li v-for="(value, name) in object" :key="name">{{ name }}: {{ value }}</li></ul><!-- 遍歷對象,包含鍵名和索引 --><ul><li v-for="(value, name, index) in object" :key="name">{{ index }}. {{ name }}: {{ value }}</li></ul><!-- 遍歷數字 --><span v-for="n in 10" :key="n">{{ n }}</span></div>
</template><script>
export default {data() {return {items: [{ id: 1, message: 'Foo' },{ id: 2, message: 'Bar' }],object: {title: 'How to do lists in Vue',author: 'Jane Doe',publishedAt: '2016-04-10'}}}
}
</script>

維護狀態(key的重要性)

<template><div><!-- 不推薦:沒有key --><div v-for="item in items">{{ item.name }}</div><!-- 推薦:使用唯一的key --><div v-for="item in items" :key="item.id">{{ item.name }}</div><!-- 數組變更方法 --><button @click="addItem">添加項目</button><button @click="removeItem">刪除項目</button><button @click="updateItem">更新項目</button></div>
</template><script>
export default {data() {return {items: [{ id: 1, name: '項目1' },{ id: 2, name: '項目2' }]}},methods: {addItem() {this.items.push({ id: Date.now(), name: `項目${this.items.length + 1}` })},removeItem() {this.items.pop()},updateItem() {if (this.items.length > 0) {this.items[0].name = '更新的項目1'}}}
}
</script>

5. v-on:事件處理

基本用法

v-on 指令用于監聽DOM事件,并在觸發時執行JavaScript代碼。

<template><div><!-- 基本用法 --><button v-on:click="counter += 1">Add 1</button><p>按鈕被點擊了 {{ counter }} 次</p><!-- 縮寫語法 --><button @click="greet">Greet</button><!-- 內聯處理器中的方法 --><button @click="say('hi')">Say hi</button><button @click="say('what')">Say what</button><!-- 訪問原始的DOM事件 --><button @click="warn('Form cannot be submitted yet.', $event)">Submit</button><!-- 多個事件處理器 --><button @click="one($event), two($event)">Submit</button></div>
</template><script>
export default {data() {return {counter: 0,name: 'Vue.js'}},methods: {greet(event) {alert('Hello ' + this.name + '!')if (event) {alert(event.target.tagName)}},say(message) {alert(message)},warn(message, event) {if (event) {event.preventDefault()}alert(message)},one(event) {console.log('第一個處理器')},two(event) {console.log('第二個處理器')}}
}
</script>

事件修飾符

Vue為 v-on 提供了事件修飾符來處理DOM事件細節。

<template><div><!-- 阻止單擊事件繼續傳播 --><a @click.stop="doThis"></a><!-- 提交事件不再重載頁面 --><form @submit.prevent="onSubmit"></form><!-- 修飾符可以串聯 --><a @click.stop.prevent="doThat"></a><!-- 只有修飾符 --><form @submit.prevent></form><!-- 添加事件監聽器時使用事件捕獲模式 --><div @click.capture="doThis">...</div><!-- 只當在 event.target 是當前元素自身時觸發處理函數 --><div @click.self="doThat">...</div><!-- 點擊事件將只會觸發一次 --><a @click.once="doThis"></a><!-- 滾動事件的默認行為將會立即觸發,而不會等待onScroll完成 --><div @scroll.passive="onScroll">...</div></div>
</template>

按鍵修飾符

<template><div><!-- 只有在 key 是 Enter 時調用 vm.submit() --><input @keyup.enter="submit"><!-- 其他按鍵修飾符 --><input @keyup.tab="tabHandler"><input @keyup.delete="deleteHandler"><input @keyup.esc="escHandler"><input @keyup.space="spaceHandler"><input @keyup.up="upHandler"><input @keyup.down="downHandler"><input @keyup.left="leftHandler"><input @keyup.right="rightHandler"><!-- 系統修飾鍵 --><input @keyup.ctrl="ctrlHandler"><input @keyup.alt="altHandler"><input @keyup.shift="shiftHandler"><input @keyup.meta="metaHandler"><!-- 組合使用 --><input @keyup.ctrl.enter="ctrlEnterHandler"><!-- 鼠標按鈕修飾符 --><button @click.left="leftClick">左鍵</button><button @click.right="rightClick">右鍵</button><button @click.middle="middleClick">中鍵</button></div>
</template>

6. 其他重要指令

v-text 和 v-html

<template><div><!-- v-text:更新元素的textContent --><span v-text="msg"></span><!-- 等價于 --><span>{{ msg }}</span><!-- v-html:更新元素的innerHTML --><p v-html="html"></p></div>
</template><script>
export default {data() {return {msg: 'Hello World',html: '<strong>粗體文本</strong>'}}
}
</script>

v-show

<template><div><!-- 根據表達式的真假值,切換元素的display CSS屬性 --><h1 v-show="ok">Hello!</h1></div>
</template><script>
export default {data() {return {ok: true}}
}
</script>

v-pre

<template><div><!-- 跳過這個元素和它的子元素的編譯過程 --><span v-pre>{{ this will not be compiled }}</span></div>
</template>

v-once

<template><div><!-- 只渲染元素和組件一次 --><h1 v-once>{{ title }}</h1><!-- 這也適用于子組件 --><my-component v-once :comment="msg"></my-component><!-- 帶有v-for的v-once --><ul><li v-for="i in list" v-once :key="i">{{ i }}</li></ul></div>
</template><script>
export default {data() {return {title: '只渲染一次的標題',msg: '這是一條消息',list: [1, 2, 3]}}
}
</script>

v-cloak

<template><!-- 防止頁面加載時顯示未編譯的Mustache標簽 --><div v-cloak>{{ message }}</div>
</template><style>
[v-cloak] {display: none;
}
</style><script>
export default {data() {return {message: 'Hello World'}}
}
</script>

7. 自定義指令

全局注冊

// main.js
const app = createApp({})// 注冊一個全局自定義指令 v-focus
app.directive('focus', {// 當被綁定的元素掛載到DOM中時...mounted(el) {// 聚焦元素el.focus()}
})

局部注冊

<template><input v-focus />
</template><script>
export default {directives: {// 在模板中啟用v-focusfocus: {// 指令的定義mounted(el) {el.focus()}}}
}
</script>

指令鉤子函數

const myDirective = {// 在綁定元素的父組件被掛載前調用beforeMount(el, binding, vnode, prevVnode) {},// 在元素被插入到DOM前調用mounted(el, binding, vnode, prevVnode) {},// 綁定元素的父組件更新前調用beforeUpdate(el, binding, vnode, prevVnode) {},// 在綁定元素的父組件及他自己的所有子節點都更新后調用updated(el, binding, vnode, prevVnode) {},// 綁定元素的父組件卸載前調用beforeUnmount(el, binding, vnode, prevVnode) {},// 綁定元素的父組件卸載后調用unmounted(el, binding, vnode, prevVnode) {}
}

高級自定義指令示例

// 顏色指令
app.directive('color', {mounted(el, binding) {el.style.color = binding.value},updated(el, binding) {el.style.color = binding.value}
})// 權限指令
app.directive('permission', {mounted(el, binding) {const { value } = bindingconst roles = ['admin', 'user'] // 從store或其他地方獲取用戶角色if (value && value instanceof Array && value.length > 0) {const permissionRoles = valueconst hasPermission = roles.some(role => {return permissionRoles.includes(role)})if (!hasPermission) {el.parentNode && el.parentNode.removeChild(el)}}}
})

8. 實踐

指令實踐

  1. 合理選擇v-if和v-show

    • 頻繁切換使用v-show
    • 條件很少改變使用v-if
  2. v-for必須使用key

    <!-- 推薦 -->
    <li v-for="item in items" :key="item.id">{{ item.name }}</li><!-- 不推薦 -->
    <li v-for="item in items">{{ item.name }}</li>
    
  3. 避免v-if和v-for同時使用

    <!-- 不推薦 -->
    <li v-for="user in users" v-if="user.isActive" :key="user.id">{{ user.name }}
    </li><!-- 推薦:使用computed -->
    <li v-for="user in activeUsers" :key="user.id">{{ user.name }}
    </li>
    
  4. 事件處理器優化

    <!-- 推薦:使用方法 -->
    <button @click="handleClick">點擊</button><!-- 不推薦:復雜的內聯表達式 -->
    <button @click="items.push({ id: Date.now(), name: 'new' }), updateCount++">添加
    </button>
    

Vue.js 指令快速參考表

核心指令對照表

指令作用語法示例修飾符使用場景
v-model雙向數據綁定<input v-model="message">.lazy .number .trim表單輸入、自定義組件
v-bind單向屬性綁定:src="url" :class="{active: isActive}"動態屬性、樣式、類名
v-if條件渲染(銷毀/創建)<div v-if="show">content</div>條件很少改變的元素
v-else-if多條件渲染<div v-else-if="type === 'A'">A</div>多分支條件判斷
v-else否則渲染<div v-else>default</div>條件渲染的最后分支
v-show條件顯示(CSS display)<div v-show="visible">content</div>頻繁切換顯示/隱藏
v-for列表渲染<li v-for="item in items" :key="item.id">數組、對象、數字遍歷
v-on事件監聽@click="handler" @keyup.enter="submit".stop .prevent .once用戶交互事件處理
v-text更新文本內容<span v-text="message"></span>純文本顯示
v-html更新HTML內容<div v-html="htmlContent"></div>動態HTML內容
v-pre跳過編譯<span v-pre>{{ raw }}</span>顯示原始模板語法
v-once只渲染一次<h1 v-once>{{ title }}</h1>靜態內容性能優化
v-cloak隱藏未編譯模板<div v-cloak>{{ message }}</div>防止模板閃爍

常用修飾符詳解

v-model 修飾符

修飾符說明示例
.lazy在 change 事件觸發時同步<input v-model.lazy="msg">
.number自動轉換為數字類型<input v-model.number="age">
.trim自動去除首尾空格<input v-model.trim="msg">

v-on 事件修飾符

修飾符說明示例
.stop阻止事件冒泡@click.stop="doThis"
.prevent阻止默認行為@submit.prevent="onSubmit"
.capture使用事件捕獲模式@click.capture="doThis"
.self只在事件目標是元素自身時觸發@click.self="doThat"
.once事件只觸發一次@click.once="doThis"
.passive立即觸發默認行為@scroll.passive="onScroll"

v-on 按鍵修飾符

修飾符說明示例
.enter回車鍵@keyup.enter="submit"
.tabTab鍵@keyup.tab="nextField"
.delete刪除鍵@keyup.delete="deleteItem"
.escEscape鍵@keyup.esc="cancel"
.space空格鍵@keyup.space="play"
.up/.down/.left/.right方向鍵@keyup.up="moveUp"
.ctrl/.alt/.shift/.meta系統修飾鍵@keyup.ctrl.enter="save"

使用場景對比

v-if vs v-show

特性v-ifv-show
渲染方式條件性渲染(真正的刪除/創建)基于CSS display切換
切換開銷高(重新渲染)低(只改變CSS)
初始開銷低(條件為假時不渲染)高(總是渲染)
適用場景條件很少改變頻繁切換
生命周期會觸發組件的生命周期不會觸發生命周期

v-for 使用要點

遍歷類型語法參數說明
數組v-for="item in items"item: 數組元素
數組+索引v-for="(item, index) in items"item: 元素, index: 索引
對象v-for="value in object"value: 屬性值
對象+鍵名v-for="(value, key) in object"value: 值, key: 鍵名
對象+鍵名+索引v-for="(value, key, index) in object"value: 值, key: 鍵名, index: 索引
數字v-for="n in 10"n: 1到10的數字

最佳實踐速查

? 推薦做法

  • v-for 必須使用 :key
  • 使用計算屬性代替復雜的模板表達式
  • 事件處理器使用方法而非內聯表達式
  • 合理選擇 v-if 和 v-show
  • 使用縮寫語法(: 代替 v-bind:@ 代替 v-on:

? 避免做法

  • v-for 和 v-if 在同一元素上使用
  • 使用數組索引作為 key(除非必要)
  • 在模板中編寫復雜邏輯
  • 忘記使用事件修飾符優化性能
  • 濫用 v-html(XSS風險)

自定義指令語法

注冊方式

// 全局注冊
app.directive('focus', {mounted(el) { el.focus() }
})// 局部注冊
directives: {focus: {mounted(el) { el.focus() }}
}

鉤子函數

鉤子觸發時機
beforeMount綁定元素的父組件被掛載前
mounted元素被插入到DOM后
beforeUpdate綁定元素的父組件更新前
updated父組件及所有子節點都更新后
beforeUnmount綁定元素的父組件卸載前
unmounted綁定元素的父組件卸載后

參數說明

directive(el, binding, vnode, prevVnode) {// el: 綁定的元素// binding: { value, oldValue, arg, modifiers, instance, dir }// vnode: 虛擬節點// prevVnode: 之前的虛擬節點
}

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

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

相關文章

計算機分類匯總大全

前端部分有 Node.js、ActionScript、Swift、TypeScript、Webpack、JavaScript。需要分別詳細說明它們的定義、特點、應用場景、優缺點等。比如 Node.js&#xff0c;要提到它的運行環境、事件驅動、非阻塞 I/O&#xff0c;適合的應用如 API 服務、實時應用&#xff0c;以及常用框…

模擬鏈路濾波器設計一些細節

目錄 原設計思路剖析 300M帶寬仿真與計算 原設計思路剖析 濾波器設計的一些細節,以下為ADS54J60模擬鏈路的一些問題設計原理圖 實際電路設計如上所示,但是實際bom并未按此設計,根據實際的BOM明細以及ADC使用說明書,可以間接理解原設計者的設計初衷,是將ADC的一部分特性…

CatBoost 完整解析:類別特征友好的梯度提升框架

1?? 什么是 CatBoost&#xff1f;CatBoost&#xff08;Categorial Boosting&#xff09;是由 Yandex&#xff08;俄羅斯搜索引擎公司&#xff09;開源的梯度提升框架&#xff0c;專為類別特征處理優化。核心特點&#xff1a;無需手動 one-hot / LabelEncoding&#xff0c;原生…

NDBmysql-cluster集群部署腳本

NDB(Network Database)是MySQL Cluster的核心存儲引擎,專為高可用性、高吞吐量、分布式數據存儲設計,采用內存計算+磁盤持久化架構,支持跨節點數據分片與自動冗余,適用于對實時性和可靠性要求嚴苛的業務場景(如金融交易、電信計費、實時分析等)。 今天大白鼠就分享構建…

計算機網絡中的socket是什么?編程語言中的socket編程又是什么?python的socket編程又該如何用?

1. 計算機網絡中的 Socket 是什么&#xff1f; 想象一下電話系統&#xff1a; 電話插座 (Socket)&#xff1a; 是墻上的一個物理接口&#xff0c;它本身不是通話&#xff0c;但它是建立通話連接的端點。你需要把電話線插進插座才能打電話。通話 (Connection)&#xff1a; 是兩臺…

【科普】進程與線程的區別

一、定義與概念&#xff1a;進程&#xff1a;進程是執行中的一段程序。一旦程序被載入到內存中并準備執行&#xff0c;就變成了一個進程。進程是表示資源分配的基本概念&#xff0c;又是調度運行的基本單位&#xff0c;是系統中的并發執行的單位。線程&#xff1a;線程是進程中…

Conda創建虛擬環境,解決不同項目的沖突!

隨著需求的增多&#xff0c;又要增加多幾個不同的項目來在本地測試&#xff0c;這個時候往往就會遇到 不同項目的Python版本不同等等一系列問題&#xff0c;只好請出Conda來幫忙。 一、先去下載安裝一下Conda Conda | Anaconda.org 安裝完后&#xff0c;需要給CONDA做個環境變…

RK3568下的進程間廣播通信:用C語言構建簡單的中心服務器

最近的項目中需要實現這樣一個功能,就是一個進程A發消息,進程B和進程C都能收到相同的消息,同樣,進程B發消息,進程A和進程C也都能收到消息,就像下圖中的描述。 使用一個中心服務器作為消息轉發樞紐,所有客戶端連接到服務器,發送消息到服務器后,服務器再將消息轉發給所有…

激光雷達/相機一體機 時間同步和空間標定(1)

一、參考鏈接 海康威視、LIVOX與PTP時間同步_海康相機ptp同步-CSDN博客 基于PTP實現主機與相機系統時鐘同步功能_ptp同步-CSDN博客

嵌入式系統的中斷控制器(NVIC)

1. NVIC的核心功能 核心價值&#xff1a;NVIC通過硬件級中斷管理、自動狀態處理及低延遲優化&#xff0c;為實時系統提供確定性響應&#xff0c;是Cortex-M芯片實時性的基石。 中斷優先級管理 支持多級可編程優先級&#xff08;通常4-8位&#xff0c;如STM32用4位實現16級優先級…

【源力覺醒 創作者計劃】2025年國產AI模型深度測評:文心大模型4.5、DeepSeek、Qwen3能力大比拼

文章目錄引言&#xff1a;AI大模型的新時代一、模型架構與技術生態對比1. 文心大模型4.5系列2. DeepSeek3. 通義千問&#xff08;Qwen 3.0&#xff09;二、語言理解能力實測2.1 情感分析測試2.1.1 文心一言的表現2.1.2 DeepSeek的表現2.1.3 Qwen 3.0的表現2.1.4 測試結果分析2.…

從C++0基礎到C++入門(第十五節:switch語句)

一. switch語句1.1 語法結構如下&#xff1a;switch (表達式) {case 常量1:// 代碼塊1break;case 常量2:// 代碼塊2break;default:// 默認代碼塊 }1.2 注意 &#xff1a;表達式必須是整型或枚舉類型&#xff08;如int、char&#xff09;。case后的常量必須與表達式類型兼容。學…

編程與數學 03-002 計算機網絡 16_網絡編程基礎

編程與數學 03-002 計算機網絡 16_網絡編程基礎一、網絡編程的基本概念&#xff08;一&#xff09;客戶端與服務器模型&#xff08;二&#xff09;套接字&#xff08;Socket&#xff09;編程的基本原理二、基于TCP的網絡編程&#xff08;一&#xff09;TCP套接字的創建與使用&a…

在純servlet項目中,使用@WebFilter定義了多個filter,如何設置filter的優先級

在純 Servlet 項目中&#xff0c;WebFilter 注解本身并不提供直接的屬性來設置過濾器的優先級&#xff08;如過濾器執行的順序&#xff09;。但是&#xff0c;你可以通過以下幾種方式來控制過濾器的執行順序&#xff1a;1. 通過 web.xml 配置過濾器的順序在 web.xml 中&#xf…

關于鴉片戰爭的歷史

19世紀&#xff0c;英國東印度公司獲得了鴉片貿易的壟斷權&#xff0c;而猶太人是東印度公司的主要投資人之一&#xff0c;英國東印度公司又將鴉片經營權外包給了猶太人。其中&#xff0c;塞法迪猶太人控制了主要的鴉片交易&#xff0c;著名的沙遜家族就是當時臭名昭著的猶太鴉…

Maven - 并行安全無重復打包構建原理揭秘

作者&#xff1a;唐叔在學習 專欄&#xff1a;唐叔的Java實踐 標簽&#xff1a; #Maven并行構建 #Maven多線程打包 #Java構建優化 #Maven性能調優 #CI/CD加速 #Maven反應堆原理 #避免重復編譯 #高并發構建 文章目錄一、遇到問題&#xff1a;并行打包會不會翻車&#xff1f;二、…

phpyun人才系統v7.1使用升級補丁怎么從授權版升級至vip版?我說下我的技巧有資源的可以看過來,這樣就不用花錢麻煩官方了,新版本照樣支持小程序源碼

前:這個方法我只在Phpyun 的7.x系列使用過&#xff0c;低于這個版本的我暫時沒有研究過&#xff0c;我感覺大同小異&#xff01; 一. 升級前提條件 無論現在你使用的是商業版還是學習版 想垮系列升級你必須有對應的升級補丁&#xff0c;比如說你是授權版或旗艦版 想升級到最新的…

P13014 [GESP202506 五級] 最大公因數

題目描述對于兩個正整數 a,b&#xff0c;他們的最大公因數記為 gcd(a,b)。對于 k>3 個正整數 c1?,c2?,…,ck?&#xff0c;他們的最大公因數為&#xff1a;gcd(c1?,c2?,…,ck?)gcd(gcd(c1?,c2?,…,ck?1?),ck?)給定 n 個正整數 a1?,a2?,…,an? 以及 q 組詢問。對…

【機器學習-4】 | 集成學習 / 隨機森林篇

集成學習與隨機森林學習筆記 0 序言 本文將系統介紹Bagging、Boosting兩種集成學習方法及隨機森林算法&#xff0c;涵蓋其原理、過程、參數等內容。通過學習&#xff0c;你能理解兩種方法的區別&#xff0c;掌握隨機森林的隨機含義、算法步驟、優點及關鍵參數使用&#xff0c;明…

深入 Go 底層原理(十二):map 的實現與哈希沖突

1. 引言map 是 Go 語言中使用頻率極高的數據結構&#xff0c;它提供了快速的鍵值對存取能力。雖然 map 的使用非常簡單&#xff0c;但其底層的實現卻是一個精心設計的哈希表&#xff0c;它需要高效地處理哈希計算、數據存儲、擴容以及最關鍵的——哈希沖突。本文將解剖 map 的底…