模擬服務器響應的測試框架:moco

第1章:引言

大家好,我是小黑,在這篇博客中,咱們要聊聊Moco測試框架。這個框架,可不是一般的小伙伴,它在模擬服務器響應這塊兒,可是有不少看家本領。

首先,Moco是啥呢?簡單說,Moco是一個用來模擬服務器行為的輕量級測試框架,尤其在處理HTTP和RESTful API測試方面表現出色。對于咱們這些程序員來說,測試是個既重要又頭疼的活兒,特別是當你需要一個穩定、可控的測試環境時。這時候,Moco就像是一個救星,它能幫你模擬各種服務器響應,讓測試變得簡單又高效。

那為啥要用Moco而不是別的呢?主要有幾個理由:首先,它超級簡單易用。你不需要搭建復雜的測試環境,幾行代碼就能搞定。其次,它靈活多變,無論是靜態響應還是動態邏輯,Moco都能輕松應對。

第2章:Moco的基本概念

接下來,咱們深入一下,聊聊Moco的基本概念和工作原理。理解了這些,用起Moco來會更得心應手。

Moco的核心理念是“模擬真實”,它通過提供一個虛擬的服務器環境,讓你能在不依賴真實服務器的情況下進行各種測試。這聽起來可能有點抽象,咱們用個例子來說明。

假設你正在開發一個需要調用第三方API的應用。在開發過程中,頻繁地向真實的第三方服務器發送請求不僅效率低,而且可能因為網絡問題或第三方服務器的不穩定性影響開發進度。這時,Moco就能發揮作用了。你可以用Moco來模擬這個第三方API的響應,這樣在開發和測試階段就不用依賴真實的第三方服務了。

import com.github.dreamhead.moco.HttpServer;
import com.github.dreamhead.moco.Runner;
import com.github.dreamhead.moco.Moco;public class MocoDemo {public static void main(String[] args) {// 創建一個Moco的HTTP服務器,監聽12306端口HttpServer server = Moco.httpServer(12306);// 當接收到對"/hello"路徑的GET請求時,響應"Hello"server.get(Moco.path("/hello")).response("Hello");// 啟動服務器Runner runner = Runner.runner(server);runner.start();// 這里可以寫測試代碼,模擬發送請求到服務器// ...// 測試結束,停止服務器runner.stop();}
}// 在這個例子中,咱們創建了一個Moco的HTTP服務器,它監聽12306端口。
// 當有請求訪問"/hello"這個路徑時,服務器就會回應一句“Hello”。
// 這樣,咱們就可以在本地測試這個響應,而不用依賴真實的服務器環境。

通過這個簡單的例子,咱們可以看到Moco的基本使用方法。但這只是冰山一角,Moco還有很多高級功能等著咱們去挖掘。比如說,動態響應、條件響應、甚至模擬復雜的業務邏輯,Moco都能輕松搞定。

小黑偷偷告訴你一個生財信息差網站: 小黑的生財資料站

第3章:環境搭建與配置

Moco環境搭建

要使用Moco,你得有Java環境。因為Moco是用Java寫的,所以必須安裝Java Development Kit (JDK)。一般來說,安裝最新的版本是最好的選擇,這樣能確保兼容性和安全性。

接著,咱們需要一個構建工具。Moco支持多種構建工具,比如Maven或Gradle。這里以Maven為例,展示怎么配置。

在你的項目的pom.xml文件中,加入Moco的依賴。這樣,Maven就會在構建時自動下載和管理Moco庫。下面是Moco依賴的例子:

<dependencies><dependency><groupId>com.github.dreamhead</groupId><artifactId>moco-core</artifactId><version>最新版本號</version></dependency><!-- 根據需要,可能還要加入其他依賴 -->
</dependencies>
基本配置

好了,環境搭建好了,咱們來看看怎么配置一個基本的Moco服務器。這里小黑用一個簡單的例子,展示怎么啟動一個HTTP服務器,并對一個請求做出響應。

import com.github.dreamhead.moco.HttpServer;
import com.github.dreamhead.moco.Runner;
import com.github.dreamhead.moco.Moco;public class SimpleMocoServer {public static void main(String[] args) {// 創建一個Moco的HTTP服務器,監聽8080端口HttpServer server = Moco.httpServer(8080);// 當接收到對"/test"路徑的GET請求時,響應"測試成功"server.get(Moco.path("/test")).response("測試成功");// 啟動服務器Runner runner = Runner.runner(server);runner.start();// 這里可以加入你的測試代碼// ...// 記得測試完成后,要停止服務器runner.stop();}
}

這段代碼創建了一個監聽8080端口的HTTP服務器。當有請求訪問/test路徑時,服務器會回應一句“測試成功”。這樣,你就可以在本地測試這個響應了。

小提示
  • 保證你的防火墻設置允許Moco使用指定的端口。
  • 測試時,用瀏覽器或者任何HTTP客戶端工具,像Postman這樣的,都能向你的Moco服務器發送請求。

這樣一來,咱們就完成了Moco的環境搭建和基本配置。下一步,就是開始使用Moco來模擬各種各樣的HTTP響應了。

第4章:使用Moco模擬HTTP響應

咱們已經準備好了Moco的環境和基本配置。現在,小黑要帶大家深入一下,看看如何使用Moco模擬HTTP響應。這不僅僅是關于代碼,更是一種模擬的藝術。

模擬簡單的文本響應

讓我們先從最基本的開始,模擬一個簡單的文本響應。比如,當客戶端請求某個路徑時,我們讓服務器返回一段簡單的文本。

import com.github.dreamhead.moco.HttpServer;
import com.github.dreamhead.moco.Runner;
import com.github.dreamhead.moco.Moco;public class TextResponseDemo {public static void main(String[] args) {// 創建HTTP服務器,監聽12345端口HttpServer server = Moco.httpServer(12345);// 當訪問"/text"時,返回文本"這是一段文本響應"server.get(Moco.path("/text")).response("這是一段文本響應");// 啟動服務器Runner runner = Runner.runner(server);runner.start();// 在這里進行你的測試// ...// 測試結束后,不要忘記停止服務器runner.stop();}
}

這個例子很直白。當有請求訪問/text這個路徑時,服務器就會回應一段文本:“這是一段文本響應”。

模擬JSON響應

文本響應固然簡單,但在實際開發中,我們更多時候會處理JSON格式的數據。Moco在這方面也很給力,可以輕松模擬JSON響應。

import com.github.dreamhead.moco.HttpServer;
import com.github.dreamhead.moco.Runner;
import com.github.dreamhead.moco.Moco;import static com.github.dreamhead.moco.Moco.json;public class JsonResponseDemo {public static void main(String[] args) {HttpServer server = Moco.httpServer(12345);// 模擬JSON響應server.get(Moco.path("/json")).response(json(Moco.map("message", "這是一個JSON響應","status", "成功")));Runner runner = Runner.runner(server);runner.start();// 進行你的測試// ...runner.stop();}
}

在這個例子中,當請求訪問/json路徑時,Moco服務器會返回一個JSON格式的響應。這個響應包含了兩個字段:messagestatus,分別對應的值是“這是一個JSON響應”和“成功”。

處理不同類型的HTTP請求

在現實的HTTP通信中,不僅僅有GET請求。POST、PUT、DELETE這些HTTP方法同樣重要。Moco能夠模擬這些不同類型的請求。比如,咱們來看看如何模擬一個POST請求。

import com.github.dreamhead.moco.HttpServer;
import com.github.dreamhead.moco.Runner;
import com.github.dreamhead.moco.Moco;public class PostRequestDemo {public static void main(String[] args) {HttpServer server = Moco.httpServer(12345);// 模擬POST請求server.post(Moco.path("/submit")).response("提交成功");Runner runner = Runner.runner(server);runner.start();// 在這里進行你的POST請求測試// ...runner.stop();}
}

在這個例子里,當服務器接收到對/submit路徑的POST請求時,會返回“提交成功”的響應。

模擬請求參數和響應

現實場景中,請求通常會攜帶一些參數,Moco也可以模擬這樣的情況。假設我們要模擬一個GET請求,這個請求帶有一個查詢參數,并且服務器根據這個參數返回不同的響應。

import com.github.dreamhead.moco.HttpServer;
import com.github.dreamhead.moco.Runner;
import com.github.dreamhead.moco.Moco;public class RequestParamDemo {public static void main(String[] args) {HttpServer server = Moco.httpServer(12345);// 模擬帶參數的請求server.get(Moco.path("/query")).request(Moco.query("key")).response("你查詢的關鍵詞是: " + Moco.var("key"));Runner runner = Runner.runner(server);runner.start();// 在這里進行你的參數測試// ...runner.stop();}
}

在這個例子中,當服務器收到對/query路徑的GET請求,并且請求中包含了key這個查詢參數時,服務器會返回一個包含該參數值的響應。

通過這些例子,你應該對如何使用Moco模擬不同類型的HTTP響應有了基本的了解。Moco的強大之處在于它的靈活性和易用性,讓我們可以很方便地模擬出各種復雜的服務器行為。

第5章:使用Moco進行RESTful API測試:模擬與驗證

小黑在這一章要帶大家深入到Moco的另一個重要應用領域:RESTful API測試。在現代的Web應用開發中,RESTful API扮演著至關重要的角色。但測試它們往往不是一件輕松的事情。幸運的是,Moco在這方面也展現出了它的強大。

RESTful API的基本概念

RESTful API,簡單來說,就是一種遵循REST(Representational State Transfer,表述性狀態轉移)原則的網絡應用程序接口。這種類型的API通常使用標準的HTTP方法,比如GET、POST、PUT和DELETE,來進行數據的讀取、創建、更新和刪除操作。

模擬RESTful API

咱們來看看怎么用Moco來模擬一個簡單的RESTful API。假設咱們有一個用戶信息的API,它可以讓你查詢、創建和更新用戶信息。

import com.github.dreamhead.moco.HttpServer;
import com.github.dreamhead.moco.Runner;
import com.github.dreamhead.moco.Moco;
import static com.github.dreamhead.moco.Moco.json;public class RestfulApiDemo {public static void main(String[] args) {HttpServer server = Moco.httpServer(12345);// 模擬GET請求:獲取用戶信息server.get(Moco.path("/users/1")).response(json(Moco.map("id", 1,"name", "張三","email", "zhangsan@example.com")));// 模擬POST請求:創建新用戶server.post(Moco.path("/users")).response("用戶創建成功");// 模擬PUT請求:更新用戶信息server.put(Moco.path("/users/1")).response("用戶信息更新成功");Runner runner = Runner.runner(server);runner.start();// 這里可以進行你的API測試// ...runner.stop();}
}

在這個例子里,咱們設置了三個路由:一個用于獲取用戶信息(GET請求),一個用于創建新用戶(POST請求),還有一個用于更新用戶信息(PUT請求)。

驗證RESTful API

模擬API只是第一步,驗證它們的行為同樣重要。Moco提供了一些功能,讓我們能夠驗證API的行為是否符合預期。

// 示例:驗證POST請求的響應
server.post(Moco.path("/users")).request(Moco.and(Moco.with(Moco.jsonPath("$.name")),  // 請求體中包含name字段Moco.with(Moco.jsonPath("$.email"))  // 請求體中包含email字段)).response("用戶創建成功");

在這個例子中,當POST請求到/users路徑時,Moco會驗證請求體中是否包含nameemail字段。這樣,咱們就能確保發送到這個API的數據是符合預期的。

通過上面的例子,你應該對如何使用Moco模擬和驗證RESTful API有了一個基本的了解。Moco的這種靈活性和強大功能,使得它成為測試RESTful API的得力工具。

深入理解Moco的請求匹配和響應

在實際的應用場景中,你可能需要更精細的控制。比如,你想根據不同的請求內容返回不同的響應。Moco提供了強大的匹配器(Matcher),可以實現這一點。

// 示例:根據請求體中的內容返回不同的響應
server.post(Moco.path("/users")).request(Moco.eq(Moco.jsonPath("$.type"), "admin")).response(json(Moco.map("message", "管理員創建成功")));server.post(Moco.path("/users")).request(Moco.eq(Moco.jsonPath("$.type"), "user")).response(json(Moco.map("message", "普通用戶創建成功")));

這個例子展示了如何根據POST請求體中的type字段來決定返回的響應。如果type的值是admin,則返回“管理員創建成功”的消息;如果是user,則返回“普通用戶創建成功”的消息。

完善的測試體驗

Moco不僅僅是模擬響應那么簡單,它還提供了一系列的工具來幫助你更好地測試你的API。比如,你可以記錄和檢查請求日志,或者使用Moco提供的斷言來確保API的行為完全符合你的預期。

通過Moco模擬RESTful API,你可以在沒有實際后端服務的情況下,對前端應用進行全面的測試。這不僅加快了開發過程,還提高了整體的質量和穩定性。

這樣一來,咱們對使用Moco進行RESTful API的測試就有了一個清晰的認識。通過結合不同的請求類型、匹配條件和響應,你可以構建出幾乎任何你需要的API測試場景。Moco在這里展示出了它的真正力量,讓API測試變得既簡單又高效。

第6章:高級功能:動態響應和條件模擬

這一章,咱們要探索Moco的一些高級功能:動態響應和條件模擬。這些功能在復雜的測試場景中特別有用,比如當響應需要根據請求的不同而變化時。來看看Moco怎么讓這些復雜的任務變得簡單。

動態響應的魅力

在實際開發中,服務器的響應往往需要根據請求的內容動態生成。Moco可以模擬這樣的動態響應。比如,你可能想根據請求中的某個參數來定制響應。Moco可以輕松做到這一點。


java
import com.github.dreamhead.moco.HttpServer;
import com.github.dreamhead.moco.Runner;
import com.github.dreamhead.moco.Moco;import static com.github.dreamhead.moco.Moco.by;
import static com.github.dreamhead.moco.Moco.text;public class DynamicResponseDemo {public static void main(String[] args) {HttpServer server = Moco.httpServer(12345);// 模擬根據請求內容動態生成響應server.get(Moco.path("/dynamic")).request(by(Moco.uri("/dynamic"))).response((request) -> {String query = request.getUri().getQuery();return text("你發送的查詢參數是: " + query);});Runner runner = Runner.runner(server);runner.start();// 在這里進行你的動態響應測試// ...runner.stop();}
}

在這個例子中,當接收到對/dynamic的GET請求時,服務器會根據請求中的查詢參數,動態生成響應內容。

條件模擬的實現

除了動態響應,Moco還能根據不同的條件來模擬不同的服務器行為。這在你需要模擬服務器在不同情況下的行為時特別有用。

import com.github.dreamhead.moco.HttpServer;
import com.github.dreamhead.moco.Runner;
import com.github.dreamhead.moco.Moco;public class ConditionResponseDemo {public static void main(String[] args) {HttpServer server = Moco.httpServer(12345);// 當請求的header中包含特定值時,返回特定響應server.get(Moco.path("/condition")).request(Moco.header("Authorization", "Bearer your_token")).response("授權成功,訪問允許");server.get(Moco.path("/condition")).response("未授權,訪問拒絕");Runner runner = Runner.runner(server);runner.start();// 進行條件響應的測試// ...runner.stop();}
}

在這個例子里,服務器會根據請求頭中的Authorization字段來決定響應內容。如果請求頭包含了正確的Authorization值,則返回“授權成功,訪問允許”;否則,返回“未授權,訪問拒絕”。

動態與條件相結合

Moco的真正強大之處在于,你可以將動態響應和條件模擬相結合,以適應更加復雜的測試場景。例如,你可以根據請求的不同,動態地選擇不同的處理邏輯。

// 示例:根據請求類型動態選擇處理邏輯
server.get(Moco.path("/combined")).request(Moco.ajax()).response("這是一個Ajax請求");server.get(Moco.path("/combined")).response("這是一個普通請求");

在這個例子中,服務器會根據請求是否為Ajax請求來決定響應的內容。如果是Ajax請求,就返回“這是一個Ajax請求”;否則,返回“這是一個普通請求”。

小總結

通過這些例子,咱們可以看出,Moco在動態響應和條件模擬方面的能力是相當強大的。這些高級功能讓Moco不僅僅是一個簡單的模擬工具,而是一個能夠應對復雜測試場景的強大助手。無論是需要根據請求內容動態生成響應,還是要根據不同的條件來模擬服務器的不同行為,Moco都能輕松搞定。

通過靈活運用Moco的這些高級特性,你可以構建出幾乎任何你想要的測試場景,使得測試工作更加高效和準確。

第7章:集成與自動化測試:讓Moco成為你的測試利器

嘿,各位朋友們,小黑又來和大家聊聊Moco的話題了。這一章,我們要討論的是如何將Moco集成到你的項目中,并利用它實現自動化測試。這不僅能提高測試效率,還能確保你的應用質量更上一層樓。

Moco與Java項目的集成

首先,讓我們看看如何將Moco集成到一個標準的Java項目中。這里假設你已經在項目中添加了Moco的依賴。接下來的關鍵是如何在項目的測試代碼中啟動和使用Moco。

import com.github.dreamhead.moco.HttpServer;
import com.github.dreamhead.moco.Runner;
import com.github.dreamhead.moco.Moco;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;public class MocoIntegrationTest {private Runner runner;private HttpServer server;@Beforepublic void setup() {// 創建并配置Moco服務器server = Moco.httpServer(12345);server.get(Moco.path("/test")).response("這是一個測試響應");// 啟動Moco服務器runner = Runner.runner(server);runner.start();}@Testpublic void testResponse() {// 在這里寫你的測試代碼,比如使用HttpClient來發送請求// ...}@Afterpublic void tearDown() {// 測試完成后停止Moco服務器runner.stop();}
}

在這個例子中,我們使用JUnit作為測試框架。在每個測試開始前,我們使用@Before注解來設置和啟動Moco服務器;在測試結束后,使用@After注解來停止服務器。這樣,你就可以在測試中使用Moco服務器了。

自動化測試流程

自動化測試是現代軟件開發不可或缺的一部分。它可以幫助你快速地驗證應用的功能,并確保代碼更改不會引入新的錯誤。將Moco集成到你的自動化測試流程中,可以讓你更輕松地測試那些依賴外部服務的部分。

比如,如果你的應用需要從某個API獲取數據,你可以使用Moco來模擬這個API。這樣,即使真實的API暫時不可用,你也能繼續你的測試。

結合其他測試工具

Moco可以很好地與其他測試工具一起工作。比如,你可以結合JUnit和Mockito來進行更深入的測試。JUnit負責管理測試的生命周期,Mockito幫助你模擬那些復雜的依賴,而Moco則專注于模擬HTTP服務。

// 示例代碼:結合JUnit和Mockito使用Moco
// 假設你有一個需要測試的類,這個類依賴于一個HTTP服務
public class MyService {// 這個類的邏輯...
}public class MyServiceTest {private MyService service;@Beforepublic void setup() {// 使用Moco創建一個模擬的HTTP服務// 使用Mockito創建其他的模擬對象// 初始化你的測試類,注入這些模擬對象// ...}@Testpublic void testServiceLogic() {// 在這里進行具體的測試,驗證MyService的行為// ...}@Afterpublic void tearDown() {// 清理操作// ...}
}

在這個例子中,我們假設MyService是一個依賴于HTTP服務的類。通過結合Moco、JUnit和Mockito,我們能夠全面地測試這個類的行為,無論是依賴的外部服務還是內部邏輯。

自動化測試的最佳實踐

要充分利用Moco進行自動化測試,有幾個最佳實踐你應該記住:

  1. 保持測試的獨立性:每個測試應該獨立于其他測試,確保不互相影響。
  2. 清晰的測試目標:每個測試應該有一個明確的目標,避免測試過于復雜或涵蓋范圍過廣。
  3. 適當的模擬級別:使用Moco來模擬外部服務的行為,而用Mockito等工具來模擬內部依賴。
  4. 持續集成:將自動化測試集成到你的持續集成流程中,確保每次代碼提交都能通過測試。

更多推薦

詳解SpringCloud之遠程方法調用神器Fegin

掌握Java Future模式及其靈活應用

小黑整的視頻會園優惠站

小黑整的生財資料站

使用Apache Commons Chain實現命令模式

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

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

相關文章

stable diffusion webUI之賽博菩薩【秋葉】——工具包新手安裝與使用教程

stable diffusion webUI之賽博菩薩【秋葉】——工具包新手安裝與使用教程 AI浪潮襲來&#xff0c;還是學習學習為妙賽博菩薩【秋葉】簡介——&#xff08;葉ye&#xff0c;四聲&#xff0c;同葉&#xff09;A繪世啟動器.exe&#xff08;sd-webui-aki-v4.6.x&#xff09;工具包安…

【面試題解析--Java基礎】回顧與加深,淺淺回顧JAVA常規八股,利用起碎片化時間。

一、Java基礎 1. final 關鍵字的作用&#xff1a; 修飾類時&#xff0c;被修飾的類無法被繼承。修飾方法時&#xff0c;被修飾的方法無法被重寫。修飾變量時&#xff0c;變量為常量&#xff0c;初始化后無法重新賦值。 2. static 關鍵字的作用&#xff1a; 修飾變量和方法時…

住房貸款利息退稅筆記

應該繳稅了才能退稅&#xff0c;如果是學生&#xff0c;沒有繳稅應該是無法退稅的。 產權證明 如果是商品房&#xff0c;沒有取得房產證&#xff0c;那就是房屋預售合同 扣除年度 應選擇上一年 扣除比例 沒有結婚&#xff0c;選否 申報方式

unity 數學 如何計算線和平面的交點

已知一個平面上的一點P0和法向量n&#xff0c;一條直線上的點L0和方向L,求該直線與該平面的交點P 如下圖 首先我們要知道向量歸一化點乘之后得到就是兩個向量的夾角的余弦值&#xff0c;如果兩個向量相互垂直則值是0&#xff0c;小于0則兩個向量的夾角大于90度&#xff0c;大于…

(C語言)函數詳解上

&#xff08;C語言&#xff09;函數詳解上 目錄&#xff1a; 1. 函數的概念 2. 庫函數 2.1 標準庫和頭文件 2.2 庫函數的使用方法 2.2.1 sqrt 功能 2.2.2 頭文件包含 2.2.3 實踐 2.2.4 庫函數文檔的一般格式 3. 自定義函數 3.1 函數的語法形式 3.2 函數的舉例 4. 形參和實參 4.…

MySQL-CDC 新增同步表確無法捕獲增量問題處理

Flink-CDC版本&#xff1a;2.3.0 問題描述 之前通過Flink-CDC捕獲Mysql數據庫的數據變更情況&#xff0c;代碼大致如下&#xff1a; StreamExecutionEnvironment env StreamExecutionEnvironment.getExecutionEnvironment(flinkEnvConf);MySqlSource<String> mysql …

Redis--事務機制的詳解及應用

Redis事務的概念&#xff1a; Redis事務就是將一系列命令包裝成一個隊列&#xff0c;在執行時候按照添加的順序依次執行&#xff0c;中間不會被打斷或者干擾&#xff0c;在執行事務中&#xff0c;其他客戶端提交的命令不可以插入到執行事務的隊列中&#xff0c;簡單來說Redis事…

【Linux】進程優先級以及Linux內核進程調度隊列的簡要介紹

進程優先級 基本概念查看系統進程修改進程的優先級Linux2.6內核進程調度隊列的簡要介紹和進程優先級有關的概念進程切換 基本概念 為什么會存在進程優先級&#xff1f; ??進程優先級用于確定在資源競爭的情況下&#xff0c;哪個進程將被操作系統調度為下一個運行的進程。進程…

SSH教程

ssh 是遠程連接的利器, 可以說凡是涉及到 linux 服務器, ssh 就是一個繞不開的話題. 本文作為一個教程, 盡可能詳細的幫助讀者設置 ssh, 并給出一些常用的 ssh 配置方法 (主要用于 linux 系統的遠程登錄和文件傳輸). 1. 簡介 ssh 分為兩個部分, sshd 服務端和 ssh 客戶端. ssh…

黑馬鴻蒙學習筆記1:TEXT組件

業余時間學習下黑馬鴻蒙課程&#xff0c;主要截取重要的PPT學習&#xff1a; 其實就是用$r&#xff08;&#xff09;的方法&#xff0c;去調用本地化資源文件&#xff0c;可以做多語言了。 比如每個語言目錄下都有個string.json文件&#xff0c;然后用鍵值對name,value的方式搭…

JVM 補充——StringTable

具體哪些String是相等的&#xff0c;各種String的情況&#xff0c;看這個&#xff1a; https://javaguide.cn/java/basis/java-basic-questions-02.html#string-%E4%B8%BA%E4%BB%80%E4%B9%88%E6%98%AF%E4%B8%8D%E5%8F%AF%E5%8F%98%E7%9A%84 String的基本特性 String&#xf…

[算法沉淀記錄] 分治法應用 —— 二分搜索(Binary Search)

分治法應用 —— 二分搜索 算法基本思想 二分搜索&#xff08;Binary Search&#xff09;是一種在有序數組中查找特定元素的高效算法。它每次將搜索區間減半&#xff0c;從而快速地縮小搜索范圍。二分搜索的基本思想是&#xff1a;首先將待查關鍵字與數組中間位置的關鍵字比較…

【C++】STL簡介 | STL六大組件 | string類 | string類對象操作

目錄 1. 什么是STL 2. STL的版本 3. STL的六大組件 4. STL的缺陷 5. 引出string類 6. 標準庫中的string類 6.1 string類簡介 6.2 string類對象的構造 6.3. string類對象的容量 6.4. string類對象的遍歷 6.5. string類對象的修改 6.6. string類非成員函數 6.7. vs…

使用濾鏡屬性將網頁從彩色變黑白

在某些情況下&#xff0c;例如為了表達哀悼或紀念&#xff0c; 許多網站會將頁面顏色從彩色調整為黑白灰色。我到網上查找答案&#xff0c;發現有些是通過javascript或jQuery實現的&#xff0c;我試了一下居然無效。 后來找到一個方法&#xff0c;是僅用一行CSS代碼就能搞定的&…

基于CNN-LSTM-Attention的時間序列回歸預測matlab仿真

目錄 1.算法運行效果圖預覽 2.算法運行軟件版本 3.部分核心程序 4.算法理論概述 4.1卷積神經網絡&#xff08;CNN&#xff09;在時間序列中的應用 4.2 長短時記憶網絡&#xff08;LSTM&#xff09;處理序列依賴關系 4.3 注意力機制&#xff08;Attention&#xff09; 5…

MySQL 學習記錄 2

原文&#xff1a;https://blog.iyatt.com/?p13818 13 存儲引擎 查看一下前面創建的一張表的創建語句&#xff0c;當時并沒有顯式指定引擎&#xff0c;MySQL 自動指定的 InnoDB&#xff0c;即默認引擎是這個。 創建表的時候要顯式指定引擎可以參考這個語句 查看當前 MySQL …

【牛客】SQL130 試卷發布當天作答人數和平均分

描述 現有用戶信息表user_info&#xff08;uid用戶ID&#xff0c;nick_name昵稱, achievement成就值, level等級, job職業方向, register_time注冊時間&#xff09;&#xff0c;示例數據如下&#xff1a; iduidnick_nameachievementleveljobregister_time11001牛客1號31007算…

rke方式安裝k8s集群

一、新機環境準備 1.1主機名設置 hostnamectl set-hostname XXX1.2 主機名與ip地址解析 vim /etc/hosts 192.168.0.140 rke 192.168.0.147 master1 192.168.0.152 node1 192.168.0.153 node21.3安裝docker tar -xf docker-20.10.24.tgz cp ${SHELL_FOLDER}/docker/*…

【java】19:內部類(3)

成員內部類&#xff1a; 1.可以直接訪問外部類的所有成員&#xff0c;包含私有的 class Outer01{//外部類 private int n1 10; public String name "張三"; class Innter01{ public void say0(){ System.out.println("Outer01 的n1 " n1 " outer…

JWT基于Cookie的會話保持,并解決CSRF問題的方案

使用JWT進行瀏覽器接口請求&#xff0c;在使用Cookie進行會話保持傳遞Token時&#xff0c;可能會存在 CSRF 漏洞問題&#xff0c;同時也要避免在產生XSS漏洞時泄漏Token問題&#xff0c;如下圖在盡可能避免CSRF和保護Token方面設計了方案。 要點解釋如下&#xff1a; 將JWT存入…