前端面試六之axios

一、axios簡介

????????Axios 是一個基于 Promise 的 HTTP 客戶端,用于瀏覽器和 Node.js 環境。在瀏覽器端,Axios 的底層實現是基于原生的 XMLHttpRequest(XHR)。它對 XHR 進行了封裝,增加了 Promise 支持、自動轉換 JSON 數據、請求和響應攔截器等功能。在 Node.js 環境中,Axios 使用 http 模塊來發起請求。

1.1XHR、Fetch API 和 Axios 的區別

1.?XMLHttpRequest (XHR)
  • 定義:XHR 是一個較舊的 API,用于在瀏覽器中發起網絡請求。

  • 工作原理:基于事件驅動,通過監聽 onreadystatechange 事件來處理請求狀態變化。

  • 優點

    • 兼容性好,支持較舊的瀏覽器。

    • 提供了豐富的 API,可以實現復雜的網絡請求操作。

  • 缺點

    • 基于回調,容易導致回調地獄,代碼難以維護。

    • 無法中止請求。

    • 需要手動設置請求頭和解析響應。

  • 使用場景:適用于需要兼容舊瀏覽器的場景。

?Fetch API
  • 定義:Fetch 是一個現代的、基于 Promise 的網絡請求接口,用于替代 XHR。

  • 工作原理:基于 Promise,使用 Promise 對象來處理異步請求。

  • 優點

    • 語法簡潔,使用 Promise 避免了回調地獄。

    • 支持中止請求(通過 AbortController)。

    • 更好的錯誤處理。

    • 支持流式傳輸,適用于大文件上傳和下載。

  • 缺點

    • 兼容性較差,在一些較老的瀏覽器中不支持。

    • 響應處理需要手動調用 .json().text() 等方法。

    • 默認不接受跨域請求,需要通過 CORS 配置。

  • 使用場景:適用于現代 Web 開發,不需要考慮較舊瀏覽器版本的場景。

3.?Axios
  • 定義:Axios 是一個基于 Promise 的 HTTP 客戶端,用于瀏覽器和 Node.js 環境。

  • 工作原理:本質上是對 XHR 的封裝,在瀏覽器端使用 XHR,在 Node.js 中使用 http 模塊。

  • 優點

    • 基于 Promise,支持 async/await

    • 自動轉換 JSON 數據。

    • 支持請求和響應攔截器。

    • 能夠取消請求。

  • 缺點

    • 需要額外引入庫。

    • 在一些極端情況下(如超時控制)可能不如原生 Fetch 靈活。

  • 使用場景:適用于需要更豐富的功能(如攔截器、自動數據轉換)的場景。

??1.2axios基于 Promise

Axios 的請求返回的是一個 Promise 對象,這使得它能夠很方便地進行異步操作的處理。例如,你可以使用 .then() 方法來處理請求成功的情況,使用 .catch() 方法來處理請求失敗的情況。比如:

axios.get('/user').then(response => {console.log(response.data); // 處理成功響應}).catch(error => {console.error(error); // 處理錯誤});

二、演示get和post

<template><div><h1>Axios GET 和 POST 示例</h1><button @click="fetchData">獲取數據 (GET)</button><button @click="postData">提交數據 (POST)</button><div v-if="data"><h2>獲取的數據:</h2><pre>{{ data }}</pre></div><div v-if="postDataResponse"><h2>POST 請求的響應:</h2><pre>{{ postDataResponse }}</pre></div></div>
</template><script>
import axios from 'axios';export default {data() {return {data: null, // 用于存儲 GET 請求的響應數據postDataResponse: null, // 用于存儲 POST 請求的響應數據};},methods: {// 發起 GET 請求fetchData() {axios.get('https://jsonplaceholder.typicode.com/posts/1').then(response => {this.data = response.data; // 將響應數據存儲到 data 中}).catch(error => {console.error('GET 請求失敗:', error);});},// 發起 POST 請求postData() {const postData = {title: 'foo',body: 'bar',userId: 1,};axios.post('https://jsonplaceholder.typicode.com/posts', postData).then(response => {this.postDataResponse = response.data; // 將響應數據存儲到 postDataResponse 中}).catch(error => {console.error('POST 請求失敗:', error);});},},
};
</script><style>
/* 添加一些簡單的樣式 */
button {margin-right: 10px;
}
</style>
(1)GET?請求
  • 使用 axios.get 方法發起 GET 請求。

  • 請求的 URL 是 https://jsonplaceholder.typicode.com/posts/1,這是一個公共的測試 API,返回一個模擬的帖子數據。

  • 請求成功后,將響應數據存儲到 data 屬性中,并在頁面上顯示。

(2)POST?請求
  • 使用 axios.post 方法發起 POST 請求。

  • 請求的 URL 是 https://jsonplaceholder.typicode.com/posts,同樣是一個公共的測試 API。

  • 請求體是一個包含 titlebodyuserId 的對象。

  • 請求成功后,將響應數據存儲到 postDataResponse 屬性中,并在頁面上顯示。

使用?async/await

methods: {async fetchData() {try {const response = await axios.get('https://jsonplaceholder.typicode.com/posts/1');this.data = response.data;} catch (error) {console.error('GET 請求失敗:', error);}},async postData() {const postData = {title: 'foo',body: 'bar',userId: 1,};try {const response = await axios.post('https://jsonplaceholder.typicode.com/posts', postData);this.postDataResponse = response.data;} catch (error) {console.error('POST 請求失敗:', error);}},
},

?三、發送帶有請求頭和查詢參數的請求

<template><div><h1>Axios 請求頭和查詢參數示例</h1><button @click="fetchWithHeadersAndParams">發送請求</button><div v-if="response"><h2>響應數據:</h2><pre>{{ response }}</pre></div></div>
</template><script>
import axios from 'axios';export default {data() {return {response: null, // 用于存儲響應數據};},methods: {// 發送帶有請求頭和查詢參數的 GET 請求fetchWithHeadersAndParams() {// 定義請求頭const headers = {'Authorization': 'Bearer your_token_here','Custom-Header': 'CustomValue',};// 定義查詢參數const params = {userId: 1,limit: 10,status: 'active',};// 發起請求axios.get('https://jsonplaceholder.typicode.com/posts', {headers: headers, // 添加請求頭params: params,  // 添加查詢參數}).then(response => {this.response = response.data; // 將響應數據存儲到 response 中}).catch(error => {console.error('請求失敗:', error);this.response = { error: error.message }; // 如果失敗,存儲錯誤信息});},},
};
</script><style>
button {margin-right: 10px;
}
</style>
(1)請求頭
  • axios.get 方法中,通過 headers 屬性傳遞自定義請求頭。

  • 示例中添加了 AuthorizationCustom-Header 兩個請求頭。

(2)查詢參數
  • axios.get 方法中,通過 params 屬性傳遞查詢參數。

  • 查詢參數會自動被 Axios 轉換為 URL 的查詢字符串。例如,params 對象 { userId: 1, limit: 10 } 會被轉換為 ?userId=1&limit=10

(3)完整的請求 URL

假設請求頭和查詢參數都設置好后,最終的請求 URL 會類似于:

https://jsonplaceholder.typicode.com/posts?userId=1&limit=10&status=active

?使用?async/await

methods: {async fetchWithHeadersAndParams() {const headers = {'Authorization': 'Bearer your_token_here','Custom-Header': 'CustomValue',};const params = {userId: 1,limit: 10,status: 'active',};try {const response = await axios.get('https://jsonplaceholder.typicode.com/posts', {headers: headers,params: params,});this.response = response.data;} catch (error) {console.error('請求失敗:', error);this.response = { error: error.message };}},
},

四、發送不同格式的請求體

在 Vue 項目中使用 Axios 發送請求時,可以通過配置請求體的格式來滿足不同的需求。以下是三種常見的請求體格式的示例:application/x-www-form-urlencodedmultipart/form-dataapplication/json

<template><div><h1>Axios 請求體格式示例</h1><button @click="sendUrlEncoded">發送 URL 編碼數據</button><button @click="sendMultipart">發送 Multipart 數據</button><button @click="sendJson">發送 JSON 數據</button><div v-if="response"><h2>響應數據:</h2><pre>{{ response }}</pre></div></div>
</template><script>
import axios from 'axios';export default {data() {return {response: null, // 用于存儲響應數據};},methods: {// 發送 URL 編碼數據sendUrlEncoded() {const data = new URLSearchParams();data.append('username', 'kimi');data.append('password', '123456');axios.post('https://jsonplaceholder.typicode.com/posts', data).then(response => {this.response = response.data;}).catch(error => {console.error('請求失敗:', error);this.response = { error: error.message };});},// 發送 Multipart 數據sendMultipart() {const formData = new FormData();formData.append('file', new Blob(['Hello World'], { type: 'text/plain' }), 'example.txt');formData.append('description', 'This is a test file');axios.post('https://jsonplaceholder.typicode.com/posts', formData, {headers: {'Content-Type': 'multipart/form-data',},}).then(response => {this.response = response.data;}).catch(error => {console.error('請求失敗:', error);this.response = { error: error.message };});},// 發送 JSON 數據sendJson() {const data = {title: 'foo',body: 'bar',userId: 1,};axios.post('https://jsonplaceholder.typicode.com/posts', data).then(response => {this.response = response.data;}).catch(error => {console.error('請求失敗:', error);this.response = { error: error.message };});},},
};
</script><style>
button {margin-right: 10px;
}
</style>
(1)發送 URL 編碼數據
  • 使用 URLSearchParams 構造請求體。

  • Axios 會自動將 URLSearchParams 轉換為 application/x-www-form-urlencoded 格式。

  • 示例代碼:

    const data = new URLSearchParams();
    data.append('username', 'kimi');
    data.append('password', '123456');axios.post('https://jsonplaceholder.typicode.com/posts', data);
    (2)發送 Multipart 數據
  • 使用 FormData 構造請求體。

  • 需要手動設置請求頭 Content-Typemultipart/form-data

  • 示例代碼:

    const formData = new FormData();
    formData.append('file', new Blob(['Hello World'], { type: 'text/plain' }), 'example.txt');
    formData.append('description', 'This is a test file');axios.post('https://jsonplaceholder.typicode.com/posts', formData, {headers: {'Content-Type': 'multipart/form-data',},
    });
    (3)發送 JSON 數據
  • 直接發送一個 JavaScript 對象。

  • Axios 會自動將對象序列化為 JSON 格式,并設置請求頭 Content-Typeapplication/json

  • 示例代碼:

    const data = {title: 'foo',body: 'bar',userId: 1,
    };axios.post('https://jsonplaceholder.typicode.com/posts', data);

    五、axios默認配置項

以下是一些常用的 Axios 默認配置項:?

配置項描述
baseURL基礎 URL,請求時會自動拼接
headers請求頭,可以設置通用頭或特定方法的頭
timeout請求超時時間(單位為毫秒)
withCredentials是否允許跨域請求攜帶憑證(如 cookies)
responseType響應數據類型(如?jsontextarraybuffer?等)
validateStatus定義哪些狀態碼被視為成功響應
transformRequest請求發送前的數據轉換函數
transformResponse響應數據的轉換函數

以下是一個完整的示例,展示如何設置全局默認配置和自定義實例默認配置:

// 設置全局默認配置
axios.defaults.baseURL = 'https://api.example.com';
axios.defaults.headers.common['Authorization'] = 'Bearer your_token_here';
axios.defaults.timeout = 3000;// 創建自定義實例
const customInstance = axios.create({baseURL: 'https://api.custom.com',headers: {'Content-Type': 'application/json'}
});// 修改實例的默認配置
customInstance.defaults.timeout = 5000;// 使用全局配置發起請求
axios.get('/user').then(response => {console.log(response.data);
});// 使用自定義實例發起請求
customInstance.get('/custom-user').then(response => {console.log(response.data);
});

1. 全局默認配置

Axios 允許通過 axios.defaults 設置全局默認配置,這些配置將應用于所有通過 axios 發起的請求。以下是一些常見的全局默認配置:

基礎 URL (baseURL):為所有請求設置一個基礎 URL,請求的 URL 會自動拼接在 baseURL 后面。

axios.defaults.baseURL = 'https://api.example.com';

請求頭 (headers):設置通用的請求頭或特定方法的請求頭。

axios.defaults.headers.common['Authorization'] = 'Bearer your_token_here';
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';

超時時間 (timeout):設置請求的超時時間(單位為毫秒),超過該時間未響應則請求會被中斷。

axios.defaults.timeout = 2500; // 2.5 秒

驗證狀態碼 (validateStatus):定義哪些 HTTP 狀態碼被視為成功響應。

axios.defaults.validateStatus = function (status) {return status >= 200 && status < 300; // 默認值
};

2. 自定義實例默認配置

除了全局配置,Axios 還允許創建自定義實例,并為每個實例設置默認配置。這在項目中需要使用多個不同配置的 Axios 實例時非常有用:

const instance = axios.create({baseURL: 'https://api.example.com',timeout: 3000,headers: {'Authorization': 'Bearer your_token_here'}
});// 修改實例的默認配置
instance.defaults.headers.common['Custom-Header'] = 'CustomValue';

3. 配置的優先級

Axios 的配置會按優先級合并,優先級從低到高依次為:

  1. 庫默認值:在 lib/defaults.js 中定義的默認值。

  2. 實例的 defaults 屬性:通過 axios.create() 創建的實例的默認配置。

  3. 請求的 config 參數:在每次請求中傳遞的配置參數。

    const instance = axios.create({timeout: 2500 // 實例默認超時時間
    });instance.get('/longRequest', {timeout: 5000 // 該請求的超時時間覆蓋實例默認值
    });

    六、axios響應數據的格式和狀態碼

在使用 Axios 發起 HTTP 請求時,響應數據的格式和狀態碼是兩個非常重要的部分。Axios 提供了豐富的響應數據結構,同時允許你根據狀態碼來處理不同的響應情況。?

1. Axios 響應格式

當 Axios 發起請求并收到響應時,它會返回一個響應對象,該對象包含以下屬性:

  • data:響應體的內容。Axios 會根據 Content-Type 自動解析響應體。如果是 application/json,它會被解析為 JavaScript 對象。

  • status:HTTP 狀態碼(如 200404500 等)。

  • statusText:HTTP 狀態消息(如 OKNot FoundInternal Server Error 等)。

  • headers:響應頭,是一個對象,包含服務器返回的所有響應頭。

  • config:請求的配置對象,包含了請求時傳遞的配置信息。

  • request:原生的請求對象(在瀏覽器中是 XMLHttpRequest,在 Node.js 中是 http.ClientRequest)。

示例:響應格式

以下是一個示例,展示如何處理 Axios 的響應數據:

import axios from 'axios';axios.get('https://jsonplaceholder.typicode.com/posts/1').then(response => {console.log('響應數據:', response.data); // 響應體內容console.log('狀態碼:', response.status); // HTTP 狀態碼console.log('狀態消息:', response.statusText); // HTTP 狀態消息console.log('響應頭:', response.headers); // 響應頭console.log('請求配置:', response.config); // 請求配置}).catch(error => {console.error('請求失敗:', error);});

2. 狀態碼處理

HTTP 狀態碼是服務器對請求的響應狀態的描述。常見的狀態碼包括:

  • 2xx:成功

    • 200 OK:請求成功。

    • 201 Created:請求成功,且服務器創建了新資源。

    • 204 No Content:請求成功,但沒有返回內容。

  • 3xx:重定向

    • 301 Moved Permanently:請求的資源已永久移動到新位置。

    • 302 Found:請求的資源臨時移動到新位置。

  • 4xx:客戶端錯誤

    • 400 Bad Request:請求格式錯誤。

    • 401 Unauthorized:未授權,需要認證。

    • 403 Forbidden:禁止訪問。

    • 404 Not Found:請求的資源不存在。

  • 5xx:服務器錯誤

    • 500 Internal Server Error:服務器內部錯誤。

    • 502 Bad Gateway:網關錯誤。

    • 503 Service Unavailable:服務不可用。

示例:根據狀態碼處理響應

以下是一個示例,展示如何根據狀態碼處理不同的響應情況:

import axios from 'axios';axios.get('https://jsonplaceholder.typicode.com/posts/1').then(response => {console.log('響應數據:', response.data);// 根據狀態碼處理響應switch (response.status) {case 200:console.log('請求成功:', response.data);break;case 404:console.error('資源未找到');break;case 500:console.error('服務器內部錯誤');break;default:console.log('其他狀態碼:', response.status);}}).catch(error => {console.error('請求失敗:', error);// 處理錯誤響應if (error.response) {console.error('狀態碼:', error.response.status);console.error('狀態消息:', error.response.statusText);} else if (error.request) {console.error('請求已發送,但未收到響應');} else {console.error('請求配置錯誤:', error.message);}});

3. 自定義狀態碼處理

你可以通過 validateStatus 配置項自定義哪些狀態碼被視為成功響應。默認情況下,只有 2xx 狀態碼被視為成功,但你可以修改這個行為:

import axios from 'axios';axios.get('https://jsonplaceholder.typicode.com/posts/1', {validateStatus: function (status) {return status >= 200 && status < 400; // 將 2xx 和 3xx 狀態碼視為成功}
})
.then(response => {console.log('響應數據:', response.data);
})
.catch(error => {console.error('請求失敗:', error);
});

七、Axios 的請求攔截器和響應攔截器

Axios 的請求攔截器和響應攔截器是 Axios 提供的強大功能,用于在請求發送之前和響應返回之后對數據進行處理。它們可以用于多種場景,例如統一設置請求頭、添加認證信息、處理錯誤、格式化響應數據等。

1. 請求攔截器

請求攔截器可以在請求發送之前對請求進行處理。你可以通過 axios.interceptors.request.use() 方法添加請求攔截器。

示例:添加請求攔截器

以下是一個示例,展示如何在請求攔截器中統一設置請求頭和添加認證信息:

import axios from 'axios';// 添加請求攔截器
axios.interceptors.request.use(config => {// 在發送請求之前做些什么config.headers['Authorization'] = 'Bearer your_token_here'; // 添加認證信息config.headers['Custom-Header'] = 'CustomValue'; // 添加自定義請求頭return config;},error => {// 對請求錯誤做些什么return Promise.reject(error);}
);// 測試請求
axios.get('https://jsonplaceholder.typicode.com/posts/1').then(response => {console.log('響應數據:', response.data);}).catch(error => {console.error('請求失敗:', error);});

2. 響應攔截器

響應攔截器可以在響應返回之后對響應進行處理。你可以通過 axios.interceptors.response.use() 方法添加響應攔截器。

示例:添加響應攔截器

以下是一個示例,展示如何在響應攔截器中統一處理響應數據和錯誤:

import axios from 'axios';// 添加響應攔截器
axios.interceptors.response.use(response => {// 對響應數據做點什么console.log('響應狀態碼:', response.status);return response.data; // 只返回響應數據},error => {// 對響應錯誤做點什么if (error.response) {// 請求已發出,但服務器響應的狀態碼不在 2xx 范圍內console.error('響應狀態碼:', error.response.status);console.error('響應消息:', error.response.statusText);} else if (error.request) {// 請求已發出,但沒有收到響應console.error('請求已發出,但未收到響應');} else {// 在設置請求時發生了一些事情,觸發了一個錯誤console.error('請求配置錯誤:', error.message);}return Promise.reject(error);}
);// 測試請求
axios.get('https://jsonplaceholder.typicode.com/posts/1').then(response => {console.log('響應數據:', response);}).catch(error => {console.error('請求失敗:', error);});

3. 自定義實例的攔截器

除了全局攔截器,你還可以為自定義的 Axios 實例添加攔截器。這在項目中需要使用多個不同配置的 Axios 實例時非常有用。

示例:為自定義實例添加攔截器
import axios from 'axios';// 創建自定義實例
const customInstance = axios.create({baseURL: 'https://api.example.com',timeout: 3000,
});// 為自定義實例添加請求攔截器
customInstance.interceptors.request.use(config => {config.headers['Authorization'] = 'Bearer your_token_here';return config;},error => {return Promise.reject(error);}
);// 為自定義實例添加響應攔截器
customInstance.interceptors.response.use(response => {return response.data; // 只返回響應數據},error => {console.error('請求失敗:', error);return Promise.reject(error);}
);// 使用自定義實例發起請求
customInstance.get('/posts/1').then(response => {console.log('響應數據:', response);}).catch(error => {console.error('請求失敗:', error);});

4. 移除攔截器

如果需要移除某個攔截器,可以通過返回的 id 來移除它:

import axios from 'axios';// 添加請求攔截器并獲取 id
const requestInterceptorId = axios.interceptors.request.use(config => {config.headers['Authorization'] = 'Bearer your_token_here';return config;},error => {return Promise.reject(error);}
);// 移除請求攔截器
axios.interceptors.request.eject(requestInterceptorId);// 添加響應攔截器并獲取 id
const responseInterceptorId = axios.interceptors.response.use(response => {return response.data;},error => {return Promise.reject(error);}
);// 移除響應攔截器
axios.interceptors.response.eject(responseInterceptorId);

5. 使用場景

(1)請求攔截器
  • 統一設置請求頭:例如,添加認證信息(如 Authorization)、內容類型(如 Content-Type)等。

  • 添加公共參數:例如,為每個請求添加時間戳或用戶 ID。

  • 請求取消:通過 CancelTokenAbortController 實現請求取消功能。

(2)響應攔截器
  • 統一處理響應數據:例如,只返回響應體中的數據部分。

  • 統一處理錯誤:例如,根據狀態碼顯示不同的錯誤消息。

  • 處理重定向:例如,根據狀態碼(如 401)跳轉到登錄頁面。

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

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

相關文章

模板方法模式Template Method Pattern

模式定義 定義一個操作中算法的骨架&#xff0c;而將一些步驟延遲到子類中&#xff0c;模板方法使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟 類行為型模式 模式結構 AbstractClass&#xff1a;抽象類ConcreteClass&#xff1a;具體子類 只有類之間的繼…

【行云流水AI筆記】游戲里面的強化學習使用場景

強化學習在游戲中的應用已從早期的棋類博弈擴展到現代復雜游戲的全流程優化&#xff0c;以下是結合最新技術進展的核心應用場景及典型案例&#xff1a; 一、競技游戲的策略突破 1. 策略博弈類游戲 代表案例&#xff1a;AlphaGo/AlphaZero&#xff08;圍棋&#xff09;、Alph…

使用Python和PyTorch框架,基于RetinaNet模型進行目標檢測,包含數據準備、模型訓練、評估指標計算和可視化

下面是一個完整的實現方案,使用Python和PyTorch框架,基于RetinaNet模型進行目標檢測,包含數據準備、模型訓練、評估指標計算和可視化。 import os import numpy as np import matplotlib.pyplot as plt import torch import torchvision from torchvision.models.detection…

springboot服務如何獲取pod當前ip方案及示例

在 Kubernetes 集群中&#xff0c;Spring Boot 服務獲取 Pod 當前 IP 的方案主要有兩種&#xff1a;通過環境變量注入 或 通過 Java 代碼動態獲取網絡接口 IP。以下是兩種方案的詳細說明及示例&#xff1a; 方案一&#xff1a;通過 Kubernetes Downward API 注入環境變量 原理…

1.MySQL三層結構

1.所謂安裝的Mysql數據庫&#xff0c;就是在電腦上安裝了一個數據庫管理系統&#xff08;【DBMS】database manage system&#xff09;&#xff0c;這個管理程序可以管理多個數據庫。 2.一個數據庫中可以創建多個表&#xff0c;以保存數據&#xff08;信息&#xff09;。【數據…

[深度學習]目標檢測基礎

目錄 一、實驗目的 二、實驗環境 三、實驗內容 3.1 LM_BoundBox 3.1.1 實驗代碼 3.1.2 實驗結果 3.2 LM_Anchor 3.2.1 實驗代碼 3.2.2 實驗結果 3.3 LM_Multiscale-object-detection 3.3.1 實驗代碼 3.3.2 實驗結果 四、實驗小結 一、實驗目的 了解python語…

ALOHA機器人平臺:低成本、高精度雙臂操作及其進展深度解析

原創1從感知決策到具身智能的技術躍遷與挑戰(基座模型與VLA模型)2ALOHA機器人平臺&#xff1a;低成本、高精度雙臂操作及其進展深度解析3(上)通用智能體與機器人Transformer&#xff1a;Gato和RT-1技術解析及與LLM Transformer的異同4(下)通用智能體與機器人Transformer&#x…

C++: 類 Class 的基礎用法

&#x1f3f7;? 標簽&#xff1a;C、面向對象、類、構造函數、成員函數、封裝、繼承、多態 &#x1f4c5; 更新時間&#xff1a;2025年6月15日 &#x1f4ac; 歡迎在評論區留言交流你的理解與疑問&#xff01; 文章目錄 前言一、什么是類&#xff1f;二、類的定義1.基本語法2.…

Java EE與Jakarta EE命名空間區別

在 Java 生態中&#xff0c;javax 和 jakarta 代表了 企業級 Java 規范&#xff08;Java EE/Jakarta EE&#xff09;的命名空間演進&#xff0c;核心區別在于歸屬權和管理組織的變更。以下是詳細對比&#xff1a; 1. 歷史背景 javax&#xff1a; 源自 Java EE&#xff08;Java …

2 Studying《Arm A715 Technical Reference Manual》

目錄 2. The Cortex?A715 core 2.1 Cortex?A715 core features 2.2 Cortex?A715 core confifiguration options 2.3 DSU-110 dependent features 2.4 Supported standards and specifications 2.6 Design tasks 3. Technical overview 3.1 Core components 3.2 Int…

使用Nodejs嘗試小程序后端服務編寫:簡單的待辦事項管理demo

文章目錄 結構demo步驟demo運行效果API測試(1) 添加待辦事項(2) 獲取所有待辦事項(3) 切換完成狀態(4) 刪除待辦事項 API測試-RESTClient一些其他的高級功能環境變量管理不同環境配置授權認證 測試需要登錄的接口保存響應測試腳本編寫自動化測試 bug解決 結構 嘗試寫一個簡單的…

CSS“多列布局”

多列布局是一種非常常見的布局方式&#xff0c;適用于內容豐富的頁面&#xff0c;如新聞網站、雜志或博客。 一、CSS多列布局概述 CSS多列布局允許我們將內容分成多個垂直列&#xff0c;使頁面布局更加靈活和多樣化。多列布局的主要屬性包括 ??column-count??、??col…

Pump上狙擊機制的功能優勢和實戰教學

加密世界的發展永遠伴隨著速度的革命。無論是新的 Token 上線&#xff0c;還是熱點項目的第一波流動性注入&#xff0c;搶先一步往往意味著利潤的幾何級增長。在這個講究「秒殺」與「先機」的賽道中&#xff0c;一項關鍵策略正悄然成為鏈上操作者的常規武器——狙擊&#xff08…

條件收斂的級數中項必須趨于 0,正負項抵消,但趨于 0 的速度不需要“足夠快”

條件收斂的級數中&#xff0c;項必須趨于 0&#xff0c;但趨于 0 的速度不需要“足夠快”的原因可以從以下幾個方面理解&#xff1a; 1. 收斂的必要條件&#xff1a;項趨于 0 對于任何收斂的級數&#xff08;無論是絕對收斂還是條件收斂&#xff09;&#xff0c;都必須滿足 li…

Tomcat 和 Spring MVC

Tomcat 和 Spring MVC 是 Java Web 開發中兩大核心組件&#xff0c;分別承擔不同的角色&#xff1a; 一、Tomcat 定義 Apache Tomcat 是一個開源的 Servlet 容器&#xff08;也稱為 Servlet 引擎&#xff09;&#xff0b; JSP 引擎&#xff0c;實現了 Java EE&#xff08;現稱 …

【微服務】134:SpringCloud

今天是劉小愛自學Java的第134天。 感謝你的觀看&#xff0c;謝謝你。 image 學習內容安排如下&#xff1a; SpringCloud的接觸。利用SpringCloud搭建微服務架構&#xff0c;當然這個估計要3天時間才能完成&#xff0c;今天主要是注冊中心Eureka的學習。 一、SpringCloud 微服務…

三次貝塞爾曲線,二次貝塞爾曲線有什么區別

三次貝塞爾曲線和二次貝塞爾曲線在控制點數量、數學表達式和曲線復雜度上有所不同。以下是它們的主要區別&#xff1a; 1. 控制點數量 二次貝塞爾曲線&#xff1a;由3 個點定義&#xff08;起點、終點和 1 個控制點&#xff09;。三次貝塞爾曲線&#xff1a;由4 個點定義&…

springboot集成dubbo

BeanDefinitionRegistryPostProcessor public interface BeanDefinitionRegistryPostProcessor extends BeanFactoryPostProcessor {/*** 允許開發者在Spring容器加載Bean定義(BeanDefinition)后&#xff0c;實例化Bean之前&#xff0c;動態修改或注冊新的BeanDefinition* 該接…

Seata 全面深入學習指南

Seata 全面深入學習指南 學習目錄 第一部分:Seata 基礎篇 分布式事務基礎概念Seata 概述與核心架構Seata 部署與快速入門第二部分:Seata 核心機制 Seata 事務模式詳解 AT 模式TCC 模式SAGA 模式XA 模式Seata 事務協調機制Seata 高可用設計第三部分:Seata 高級特性 Seata 配…

【Linux】基于策略模式的簡單日志設計

&#x1f4dd;前言&#xff1a; 這篇文章我們來講講Linux——基于策略模式的簡單日志設計 &#x1f3ac;個人簡介&#xff1a;努力學習ing &#x1f4cb;個人專欄&#xff1a;Linux &#x1f380;CSDN主頁 愚潤求學 &#x1f304;其他專欄&#xff1a;C學習筆記&#xff0c;C語…