ActiveMQ 性能優化與網絡配置實戰(二)

五、性能優化實戰

5.1 基礎配置調整

5.1.1 增加并發消費者

在 ActiveMQ 中,增加并發消費者是提高消息處理效率的重要手段之一。通過配置多個消費者并行處理消息,可以充分利用系統資源,加快消息的消費速度,從而提高系統的整體吞吐量。

在activemq.xml文件中,可以通過<destinationPolicy>標簽來配置并發消費者。以下是一個配置示例:

 

<destinationPolicy>

<policyMap>

<policyEntries>

<policyEntry queue=">" concurrentConsumers="10">

<!-- 其他配置 -->

</policyEntry>

</policyEntries>

</policyMap>

</destinationPolicy>

在這個示例中,queue=">"表示對所有隊列應用此配置,concurrentConsumers="10"表示每個隊列配置 10 個并發消費者 。當有消息到達隊列時,這 10 個消費者可以同時從隊列中獲取消息并進行處理,大大提高了消息的處理速度。

在實際應用中,需要根據系統的負載情況和消息處理的復雜程度來合理調整并發消費者的數量。如果并發消費者數量設置過少,可能無法充分利用系統資源,導致消息處理速度緩慢;而如果設置過多,可能會造成資源競爭,反而降低系統性能。可以通過性能測試工具,如 JMeter,模擬不同的負載場景,觀察系統的性能指標,如吞吐量、響應時間等,來確定最佳的并發消費者數量。

5.1.2 調整預取限制

預取限制是指 Broker 一次向消費者發送準備消費的消息數量。合理調整預取限制可以提高消費效率,避免消費者頻繁向 Broker 請求消息,減少網絡開銷和系統資源的浪費。

在activemq.xml文件中,同樣可以通過<destinationPolicy>標簽來配置預取限制。以下是一個配置示例:

 

<destinationPolicy>

<policyMap>

<policyEntries>

<policyEntry queue=">" prefetch="100">

<!-- 其他配置 -->

</policyEntry>

</policyEntries>

</policyMap>

</destinationPolicy>

在這個示例中,queue=">"表示對所有隊列應用此配置,prefetch="100"表示 Broker 一次向消費者發送 100 條消息 。消費者在處理完這些消息后,再向 Broker 請求新的消息。

不同類型的消費者(隊列消費者、主題消費者等)有不同的默認預取限制值 。隊列消費者的默認預取限制通常為 1000,主題消費者的默認預取限制通常為 32766(short 類型的最大值) 。在實際應用中,需要根據消費者的處理能力和消息的生產速度來調整預取限制。如果消費者處理能力較強,消息生產速度也較快,可以適當提高預取限制,以減少網絡請求次數,提高消費效率;反之,如果消費者處理能力較弱,或者消息生產速度不穩定,應適當降低預取限制,避免消費者積壓過多未處理的消息。

5.2 高級配置策略

5.2.1 持久化優化
  • 異步寫盤:ActiveMQ 在處理持久化消息時,默認是同步寫盤,即消息寫入磁盤后才返回確認信息給生產者。這種方式雖然保證了數據的可靠性,但在高并發場景下,磁盤 I/O 操作會成為性能瓶頸。通過配置異步寫盤,可以將消息的存儲過程異步執行,降低磁盤 I/O 對性能的影響。在activemq.xml文件中,可以通過修改<persistenceAdapter>標簽來配置異步寫盤,如下所示:
 

<persistenceAdapter>

<kahaDB directory="${activemq.data}/kahadb" journalMaxFileLength="32768" journalArchive="true" asyncWrite="true"/>

</persistenceAdapter>

這里的asyncWrite="true"表示開啟異步寫盤 ,journalMaxFileLength指定了日志文件的最大長度,journalArchive表示是否啟用日志歸檔 。開啟異步寫盤后,消息會先寫入內存緩沖區,然后由后臺線程異步寫入磁盤,大大提高了消息的處理速度。

  • 數據庫持久化優化:當使用 JDBC 進行消息持久化時,選擇合適的數據庫和調整數據庫參數可以提高數據存取速度。對于高并發寫入操作,應選擇支持高并發寫入的數據庫,如 MySQL、PostgreSQL 等,并根據實際需求和資源情況進行選擇。針對選定的數據庫,調整其連接池大小、緩存策略等參數,以提高寫入性能。在使用 C3P0 連接池時,可以通過以下配置來調整連接池大小:
 

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">

<property name="driverClass" value="com.mysql.jdbc.Driver"/>

<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/activemq?relaxAutoCommit=true"/>

<property name="user" value="root"/>

<property name="password" value="password"/>

<property name="initialPoolSize" value="5"/>

<property name="maxPoolSize" value="20"/>

</bean>

這里的initialPoolSize表示初始連接數,maxPoolSize表示最大連接數 ,通過合理調整這些參數,可以提高數據庫連接的復用率,減少連接創建和銷毀的開銷,從而提升消息持久化的性能。

5.2.2 消息壓縮設置

開啟消息壓縮可以減少網絡傳輸的數據量,提高網絡傳輸效率,尤其在網絡帶寬有限的情況下,能夠顯著提升系統性能。然而,消息壓縮會增加 CPU 的使用率,因為在發送端需要對消息進行壓縮,在接收端需要對消息進行解壓縮,這都需要消耗 CPU 資源。因此,在開啟消息壓縮時,需要權衡 CPU 使用率和網絡傳輸效率之間的關系。

在activemq.xml文件中,可以通過<destinationPolicy>標簽來配置消息壓縮,如下所示:

 

<destinationPolicy>

<policyMap>

<policyEntries>

<policyEntry queue=">" useCompression="true">

<!-- 其他配置 -->

</policyEntry>

</policyEntries>

</policyMap>

</destinationPolicy>

這里的queue=">"表示對所有隊列應用此配置,useCompression="true"表示開啟消息壓縮 。當消息生產者發送消息時,ActiveMQ 會對消息進行壓縮后再發送,消息消費者接收消息后,會對消息進行解壓縮后再處理。

為了確定是否適合開啟消息壓縮以及選擇合適的壓縮算法,可以進行性能測試 。使用不同的壓縮算法(如 GZIP、Snappy 等)進行測試,觀察系統在不同負載下的性能表現,包括網絡傳輸時間、CPU 使用率、消息處理延遲等指標,根據測試結果選擇最優的配置。

5.2.3 優先級隊列使用

在實際業務中,不同的消息可能具有不同的重要性和緊急程度。通過設置消息優先級,ActiveMQ 可以根據消息的優先級來合理調度資源,優先處理高優先級的消息,確保重要業務的時效性。

在 Java 代碼中,可以通過以下方式設置消息優先級:

 

import org.apache.activemq.ActiveMQConnectionFactory;

import javax.jms.Connection;

import javax.jms.MessageProducer;

import javax.jms.Session;

import javax.jms.TextMessage;

public class PriorityMessageProducer {

public static void main(String[] args) throws Exception {

ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616");

Connection connection = connectionFactory.createConnection();

connection.start();

Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

MessageProducer producer = session.createProducer(session.createQueue("PriorityQueue"));

// 設置消息優先級為9(最高優先級)

TextMessage highPriorityMessage = session.createTextMessage("High Priority Message");

highPriorityMessage.setJMSPriority(9);

producer.send(highPriorityMessage);

// 設置消息優先級為1(最低優先級)

TextMessage lowPriorityMessage = session.createTextMessage("Low Priority Message");

lowPriorityMessage.setJMSPriority(1);

producer.send(lowPriorityMessage);

session.close();

connection.close();

}

}

在這個示例中,創建了兩個消息,一個設置為最高優先級(9),一個設置為最低優先級(1) 。ActiveMQ 在處理消息時,會優先處理高優先級的消息。

優先級隊列適用于多種場景,在電商系統中,訂單支付成功的消息可以設置為高優先級,以便及時更新庫存、發貨等操作;而用戶評論、反饋等消息可以設置為低優先級,在系統資源空閑時再進行處理。在金融交易系統中,交易確認消息、資金變動消息等對時效性要求較高,應設置為高優先級,確保交易的準確性和及時性。

5.3 硬件及網絡優化

在硬件選擇方面,磁盤 I/O 性能對 ActiveMQ 的性能影響較大,尤其是在處理持久化消息時。因此,建議選擇高性能的 SSD 硬盤,相比傳統的機械硬盤,SSD 硬盤具有更快的讀寫速度和更低的延遲,能夠顯著提高消息的存儲和讀取效率。根據負載情況,合理配置 CPU 和內存也至關重要。如果系統負載較高,消息處理任務繁重,應選擇多核高性能的 CPU,以確保能夠快速處理大量的消息。同時,根據消息量的大小和系統的并發需求,合理分配內存,避免因內存不足導致系統性能下降。

在網絡配置方面,使用高質量的網絡設備和線路是確保網絡通暢的基礎。選擇性能優良的交換機、路由器等網絡設備,以及穩定可靠的網絡線路,可以減少網絡故障和丟包現象,提高消息傳輸的穩定性和可靠性。避免網絡環境復雜,減少消息傳輸延遲。在分布式系統中,應盡量優化網絡拓撲結構,減少網絡跳數,縮短消息傳輸路徑,降低網絡延遲。例如,避免在消息傳輸路徑中出現過多的中間節點或網絡設備,確保消息能夠快速、直接地從生產者傳輸到消費者。

為了提升磁盤性能,可以采用 RAID 技術。RAID(Redundant Array of Independent Disks)是一種將多個物理磁盤組合成一個邏輯磁盤陣列的技術,通過數據冗余和并行讀寫等方式,提升磁盤性能和數據安全。RAID 0 可以提高磁盤的讀寫速度,但不提供數據冗余;RAID 1 提供數據鏡像,保證數據的安全性,但讀寫性能提升有限;RAID 5 則在提供一定數據冗余的同時,兼顧了讀寫性能的提升。可以根據實際需求選擇合適的 RAID 級別,以提高磁盤的性能和可靠性。

在內存優化方面,根據業務量調整 JVM 堆內存大小是關鍵。如果堆內存過小,可能會導致頻繁的垃圾回收,影響消息的處理速度;而堆內存過大,則可能會浪費系統資源。可以通過性能測試工具,如 JProfiler,對系統進行性能分析,觀察 JVM 的內存使用情況和垃圾回收頻率,根據分析結果合理調整堆內存大小。使用現代 GC 算法,如 G1(Garbage-First),也可以減少 GC 停頓時間。G1 算法采用了分區的內存管理方式,能夠更有效地處理大內存和高并發的場景,減少垃圾回收對系統性能的影響。

5.4 集群與負載均衡

搭建 ActiveMQ 集群環境可以提高系統的可用性和性能,通過多個 Broker 節點協同工作,實現自動的消息負載均衡和故障轉移。ActiveMQ 提供了多種搭建集群的方式,其中一種常用的方式是使用網絡連接器(Network of Brokers)功能 。在activemq.xml文件中,可以通過<networkConnectors>標簽來配置集群連接,如下所示:

 

<networkConnectors>

<networkConnector uri="static:(tcp://192.168.1.100:61616,tcp://192.168.1.101:61616,tcp://192.168.1.102:61616)" duplex="true" name="cluster-connection">

<staticallyIncludedDestinations>

<queue physicalName="Queue.A"/>

<topic physicalName="Topic.B"/>

</staticallyIncludedDestinations>

</networkConnector>

</networkConnectors>

在這個示例中,uri指定了集群中其他 Broker 的地址和端口,duplex="true"表示連接是雙向的,name為該連接指定了一個名稱 。staticallyIncludedDestinations用于指定哪些隊列和主題的消息會被橋接到遠程 Broker,這里配置了Queue.A和Topic.B。

在集群環境下,負載均衡策略對于實現消息的高效處理至關重要。靜態負載均衡是通過配置文件靜態指定 Broker 節點,實現負載均衡。在activemq.xml文件中,可以通過<destinationPolicy>標簽來配置靜態負載均衡策略,如下所示:

 

<destinationPolicy>

<policyMap>

<policyEntries>

<policyEntry queue=">" loadBalancePolicy="round-robin">

<!-- 其他配置 -->

</policyEntry>

</policyEntries>

</policyMap>

</destinationPolicy>

這里的queue=">"表示對所有隊列應用此配置,loadBalancePolicy="round-robin"表示采用輪詢的負載均衡策略 ,即按照順序依次將消息分配到各個 Broker 節點上進行處理。

動態負載均衡則是通過監控各節點的負載情況,動態調整消息路由,實現更優的負載均衡效果 。ActiveMQ 可以結合一些負載均衡工具,如 Nginx、HAProxy 等,實現動態負載均衡。以 Nginx 為例,可以通過配置 upstream 模塊來定義 ActiveMQ 集群的后端服務器,如下所示:

 

upstream activemq_cluster {

server 192.168.1.100:61616;

server 192.168.1.101:61616;

server 192.168.1.102:61616;

ip_hash;

}

這里的ip_hash表示根據客戶端的 IP 地址進行哈希計算,將請求分配到不同的后端服務器上,實現動態負載均衡。Nginx 會實時監控后端服務器的狀態,當某個服務器出現故障時,會自動將請求轉發到其他正常的服務器上,確保系統的高可用性。

六、監控與維護

6.1 監控 ActiveMQ 狀態

使用 JMX(Java Management Extensions)或 Web Console 可以實時監控 ActiveMQ 的狀態和性能指標。

  • JMX 監控:JMX 是 Java 平臺提供的一種管理和監控 Java 應用程序的技術,通過它可以獲取 ActiveMQ 的各種內部狀態信息。首先,需要在activemq.xml文件中開啟 JMX 支持,如下配置:
 

<broker xmlns="http://activemq.apache.org/schema/core" brokerName="localhost" useJmx="true" dataDirectory="${activemq.data}">

<managementContext>

<managementContext createConnector="true"/>

</managementContext>

<!-- 其他配置 -->

</broker>

這里的useJmx="true"表示啟用 JMX,createConnector="true"表示創建 JMX 連接器 。然后,可以使用 JConsole 或 VisualVM 等工具連接到 ActiveMQ 的 JMX 服務,以查看各種性能指標。在命令行中輸入jconsole,啟動 JConsole 工具,在連接對話框中選擇 ActiveMQ 的 JMX 服務地址(默認端口為 1099),輸入用戶名和密碼(可在jmx.password和jmx.access文件中配置),即可連接。連接成功后,可以在 JConsole 中查看 ActiveMQ 的內存使用情況、線程狀態、消息隊列的消息數量、消費者數量等信息。

  • Web Console 監控:ActiveMQ 自帶的 Web Console 提供了一個直觀的 Web 界面,用于監控和管理 ActiveMQ。要使用 Web Console,需要在activemq.xml文件中引入jetty.xml配置文件,如下配置:
 

<import resource="file:${activemq.conf}/jetty.xml"/>

然后,通過瀏覽器訪問http://localhost:8161/admin(默認用戶名和密碼為 admin) ,即可進入 Web Console 界面。在 Web Console 中,可以查看 Queues 和 Topics 的詳細信息,包括隊列或主題中的消息數量、消費者數量、生產者數量、消息的入隊和出隊速率等。還可以進行一些簡單的管理操作,如暫停或恢復隊列、清除隊列中的消息等。

6.2 日志分析與問題診斷

通過分析 Broker 的日志文件,可以快速定位問題原因,并采取相應的優化措施。ActiveMQ 的日志文件通常位于activemq-data目錄下,主要的日志文件是activemq.log 。在日志文件中,記錄了 ActiveMQ 的啟動過程、消息的收發情況、錯誤信息等重要內容。

當出現消息丟失的問題時,可以在日志中查找是否有與消息持久化、消息確認機制相關的錯誤信息。如果使用的是 KahaDB 持久化策略,可能會出現磁盤空間不足導致消息無法持久化的情況,日志中會記錄相關的錯誤提示,如 “Disk space is full, unable to write message to KahaDB” 。通過分析這些錯誤信息,可以確定是磁盤空間不足導致的問題,進而采取清理磁盤空間或調整持久化存儲位置等措施來解決問題。

在日志中還會記錄網絡連接相關的信息 。當出現網絡連接異常時,如連接超時、連接被拒絕等,日志中會記錄詳細的錯誤信息,如 “Connection timed out: connect” 或 “Connection refused” 。通過分析這些信息,可以確定網絡連接問題的原因,可能是網絡配置錯誤、防火墻限制、目標服務器故障等,然后針對性地進行排查和修復。

6.3 定期維護和調優

定期的系統檢查、性能測試和參數調優,是確保 ActiveMQ 長期穩定運行的關鍵。建議每周進行一次系統檢查,檢查內容包括服務器的硬件資源使用情況(如 CPU 使用率、內存使用率、磁盤空間等)、ActiveMQ 的運行狀態(如消息隊列的堆積情況、消費者的活躍狀態等)以及日志文件中是否有異常信息。每月進行一次性能測試,使用 JMeter 等工具模擬不同的負載場景,測試 ActiveMQ 的吞吐量、響應時間等性能指標,根據測試結果調整相關參數,如并發消費者數量、預取限制、JVM 堆內存大小等,以確保 ActiveMQ 在各種負載情況下都能保持良好的性能。

隨著業務的發展和系統的演進,ActiveMQ 的配置可能需要不斷調整 。當業務量突然增加時,可能需要增加并發消費者的數量,以提高消息的處理速度;當消息內容變得更大時,可能需要調整消息壓縮策略或增大網絡傳輸的緩沖區大小。定期的維護和調優可以使 ActiveMQ 始終處于最佳運行狀態,為業務系統提供可靠的消息通信支持。

七、案例分析

在某電商項目中,系統使用 ActiveMQ 作為消息中間件,用于訂單處理、庫存更新、物流通知等業務場景。隨著業務量的快速增長,系統逐漸出現消息處理延遲、隊列堆積等問題,嚴重影響了業務的正常運行。通過對系統進行全面分析,發現存在以下性能瓶頸:

  • 網絡延遲:項目中生產者、消費者和 Broker 分布在不同的機房,網絡延遲較高,導致消息傳輸時間長。
  • 磁盤 I/O 瓶頸:采用傳統機械硬盤存儲持久化消息,磁盤 I/O 性能低下,在高并發情況下成為性能瓶頸。
  • 內存管理問題:JVM 堆內存設置不合理,頻繁的垃圾回收導致消息處理線程阻塞,影響消息處理速度。
  • 消息持久化策略:默認的 KahaDB 持久化策略在處理大規模消息時,索引文件增長過快,導致性能下降。

針對以上問題,采取了以下優化措施:

  • 網絡配置優化:將傳輸協議從默認的 TCP 改為 NIO,提高網絡傳輸效率;優化網絡拓撲結構,減少網絡跳數,降低網絡延遲;配置連接池,減少連接創建和銷毀的開銷,提高連接復用率。
  • 磁盤 I/O 優化:將磁盤更換為高性能的 SSD 硬盤,顯著提升了磁盤的讀寫速度;采用 RAID 5 技術,在提高磁盤性能的同時,保證數據的安全性。
  • 內存管理優化:根據業務量和系統負載情況,合理調整 JVM 堆內存大小;選用 G1 垃圾回收算法,減少垃圾回收的停頓時間,提高系統的響應速度。
  • 消息持久化策略優化:將持久化策略從 KahaDB 改為 LevelDB,LevelDB 在處理大規模消息時具有更高的性能和穩定性;同時,調整持久化相關參數,如增加日志文件大小,減少日志切換頻率,提高消息存儲效率。

經過上述優化后,系統性能得到了顯著提升。消息處理延遲從原來的平均幾百毫秒降低到了幾十毫秒,消息隊列堆積問題得到了有效解決,系統的吞吐量提高了數倍,能夠滿足業務快速增長的需求。通過這個案例可以看出,全面深入地分析性能瓶頸,并采取針對性的優化措施,對于提升 ActiveMQ 性能和保障系統穩定運行至關重要。在實際項目中,應根據具體業務場景和需求,靈活運用各種優化方法,不斷調整和優化系統配置,以達到最佳的性能表現。

八、總結與展望

在本次探索中,我們全面剖析了 ActiveMQ 性能優化與網絡配置的關鍵要點。從基礎原理回顧,到深入挖掘性能瓶頸,再到詳細闡述網絡配置和性能優化的實戰技巧,以及監控維護和案例分析,每一個環節都緊密相扣,共同構成了提升 ActiveMQ 性能和穩定性的關鍵體系。

在網絡配置方面,合理選擇傳輸協議,精心配置連接池,謹慎設置端口監聽與防火墻規則,靈活運用靜態和動態網絡連接,能夠顯著改善消息傳輸的效率和穩定性。而在性能優化領域,基礎配置調整如增加并發消費者、調整預取限制,高級配置策略如持久化優化、消息壓縮設置、優先級隊列使用,以及硬件及網絡優化和集群與負載均衡的應用,都能從不同角度提升 ActiveMQ 的性能,使其更好地適應復雜多變的業務需求。

展望未來,隨著分布式系統和微服務架構的持續發展,消息中間件將扮演更為重要的角色。ActiveMQ 也在不斷演進,未來有望在以下幾個方向取得突破:一是進一步提升性能和可擴展性,以應對日益增長的大規模消息處理需求;二是加強對云原生環境的支持,更好地融入云生態系統,實現更便捷的部署和管理;三是持續優化與其他技術的集成,如與大數據、人工智能等領域的深度融合,為企業數字化轉型提供更強大的技術支撐。

相信通過不斷的技術探索和實踐,ActiveMQ 將在未來的技術浪潮中持續發光發熱,為各類企業級應用提供可靠、高效的消息通信服務 。希望本文能為大家在 ActiveMQ 的應用和優化之路上提供有益的參考和幫助,共同推動消息中間件技術的發展與創新。

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

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

相關文章

C++/SDL 進階游戲開發 —— 雙人塔防(代號:村莊保衛戰 17)

&#x1f381;個人主頁&#xff1a;工藤新一 &#x1f50d;系列專欄&#xff1a;C面向對象&#xff08;類和對象篇&#xff09; &#x1f31f;心中的天空之城&#xff0c;終會照亮我前方的路 &#x1f389;歡迎大家點贊&#x1f44d;評論&#x1f4dd;收藏?文章 文章目錄 二…

貪心算法精解(Java實現):從理論到實戰

一、貪心算法概述 貪心算法&#xff08;Greedy Algorithm&#xff09;是一種在每一步選擇中都采取當前狀態下最優決策的算法策略。它通過局部最優選擇來達到全局最優解&#xff0c;具有高效、簡潔的特點。 核心特點&#xff1a; 局部最優選擇&#xff1a;每一步都做出當前看…

深度學習框架:PyTorch使用教程 !!

文章目錄 一、PyTorch框架簡介 1.1 什么是PyTorch 1.2 PyTorch的優勢 二、從入門到精通的PyTorch使用教程 2.1 入門階段 2.1.1 環境安裝與配置 2.1.2 Tensor基礎操作 2.1.3 自動求導&#xff08;Autograd&#xff09; 2.1.4 構建神經網絡&#xff08;nn模塊&#xff09; 2.1.5 …

系統架構設計師:設計模式——創建型設計模式

一、創建型設計模式 創建型模式抽象了實例化過程&#xff0c;它們幫助一個系統獨立于如何創建、組合和表示它的那些對象。一個類創建型模式使用繼承改變被實例化的類&#xff0c;而一個對象創建型模式將實例化委托給另一個對象。 隨著系統演化得越來越依賴于對象復合而不是類…

Dinero.js - 免費開源的 JavaScript 貨幣處理工具庫,完美解決 JS 浮點數精度丟失問題

今天介紹一個在前后端處理貨幣的工具庫&#xff0c;logo 很可愛&#xff0c;是一只藍色的招財小貓。 本文封面圖底圖來自免費 AI 圖庫 StockCake。 Dinero.js 是一個用于貨幣計算的 JavaScript 工具庫&#xff0c;解決開發者在金融、電商、會計等場景中處理貨幣時的精度丟失、…

HNUST湖南科技大學-嵌入式考試選擇題題庫(109道糾正詳解版)

HNUST嵌入式選擇題題庫 1.下面哪點不是嵌入式操作系統的特點。(B) A.內核精簡 B.功能強大 C.專用性強 D.高實時性 解析&#xff1a; 嵌入式操作系統特點是內核精簡、專用性強、高實時性&#xff0c;而"功能強大"通常指的是通用操作系統&#x…

【工具】Windows批量文件復制教程:用BAT腳本自動化文件管理

一、引言 在日常開發與部署過程中&#xff0c;文件的自動化復制是一個非常常見的需求。無論是在構建過程、自動部署&#xff0c;還是備份任務中&#xff0c;開發者經常需要將某個目錄中的 DLL、配置文件、資源文件批量復制到目標位置。相比使用圖形界面的復制粘貼操作&#xf…

xray-poc編寫示例

禁止未授權掃描和測試行為&#xff01;&#xff01;&#xff01; 1. SQL 時間盲注檢測 (Time-Based Blind SQLi) name: generic/time-based-sqli rules:- method: GETpath: "/product?id1 AND (SELECT 1 FROM (SELECT SLEEP(5))a)--"expression: |response.status…

【Day 14】HarmonyOS分布式數據庫實戰

一、分布式數據庫基礎 1. 核心概念速記表 術語解釋示例場景分布式數據庫數據自動同步到同賬號設備手機添加商品→平板立即顯示KV數據模型鍵值對存儲&#xff08;類似JSON&#xff09;{"cart_item1": {"name":"牛奶","price":10}}數據…

【數據結構】- 棧

前言&#xff1a; 經過了幾個月的漫長歲月&#xff0c;回頭時年邁的小編發現&#xff0c;數據結構的內容還沒有寫博客&#xff0c;于是小編趕緊停下手頭的活動&#xff0c;補上博客以洗清身上的罪孽 目錄 前言&#xff1a; 棧的應用 括號匹配 逆波蘭表達式 數制轉換 棧的實…

TDA4VM SDK J721E (RTOS/Linux) bootloaders梳理筆記

文章目錄 1. 前言2. RTOS BootLoader2.1 引導模式2.2 啟動序列2.2.1 流程框圖2.2.2 Memory map2.3 鏡像格式詳解3. Linux BootLoader鏡像格式詳解啟動流程參考1. 前言 TDA4VM的BootLoader包含兩部分:RTOS的和Linux的。 2. RTOS BootLoader 這是在SoC上的所有內核運行FreeRTO…

Spring Boot + MyBatis-Plus 的現代開發模式

之前的Maven項目和本次需要的環境配置并不一樣 之前使用的是&#xff1a; 傳統的 MyBatis 框架&#xff08;非 Spring Boot 環境&#xff09; 手動管理 SqlSession 使用了 .xml 的 Mapper 映射文件 沒有 Spring 容器管理&#xff08;沒有 Service / RestController 等&…

【Quest開發】極簡版!透視環境下摳出身體并能遮擋身體上的服裝

前兩天發了一個很復雜的版本&#xff0c;又鼓搗了一下發現完全沒有必要。我之前的理解有點偏&#xff08;不是錯誤的但用法錯了&#xff09;&#xff0c;但是有一些小伙伴收藏了&#xff0c;害怕里面的某些東西對誰有用&#xff0c;所以寫了一篇新的&#xff0c;前兩步配置環境…

vue 常見ui庫對比(element、ant、antV等)

Element UI 1. 簡介 Element UI 是一個基于 Vue 2 和 Vue 3 的企業級 UI 組件庫&#xff0c;提供了豐富的組件和主題定制功能。官方網站&#xff1a;Element UI 2. 主要特點 豐富的組件&#xff1a;包括表單、表格、布局、導航、彈窗等多種組件。主題定制&#xff1a;支持主…

MATLAB畫一把傘

% 傘的參數num_ribs 5; % 傘骨數量修改為5R 1; % 傘的半徑height 0.5; % 傘的高度handle_length 2; % 傘柄長度semicircle_radius 0.26; % 傘柄末端半圓的半徑% 生成傘葉網格theta linspace(0, 2*pi, 100);phi linspace(0, pi/2, 50);[Theta, Phi] meshgrid(theta, phi…

如何在 Go 中實現各種類型的鏈表?

鏈表是動態內存分配中最常見的數據結構之一。它由一組有限的元素組成&#xff0c;每個元素&#xff08;節點&#xff09;至少占用兩塊內存&#xff1a;一塊用于存放數據&#xff0c;另一塊用于存放指向下一個節點的指針。本文教程將說明在 Go 語言中如何借助指針和結構體類型來…

新一代機載相控陣雷達的發展

相控陣雷達以其優越的性能在軍事領域中有著廣闊的應用前景&#xff0c;但由于復雜的技術、昂貴的造價使其應用范圍還存在一定的局限性。然而&#xff0c;國內外對相控陣技術的研究非常重視&#xff0c;并取得了豐碩的成果。 軍用相控陣雷達主要分為陸基、海基和空基幾種類型。 …

多數元素題解(LC:169)

169. 多數元素 核心思想&#xff08;Boyer-Moore 投票算法&#xff09;&#xff1a; 解題思路&#xff1a;可以使用 Boyer-Moore 投票算法、該算法的核心思想是&#xff1a; 維護一個候選元素和計數器、初始時計數器為 0。 遍歷數組&#xff1a; 當計數器為 0 時、設置當前元…

數據庫 AI 助手測評:Chat2DB、SQLFlow 等工具如何提升開發效率?

一、引言:數據庫開發的 “效率革命” 正在發生 在某互聯網金融公司的凌晨故障現場,資深 DBA 正滿頭大汗地排查一條執行超時的 SQL—— 該語句涉及 7 張核心業務表的復雜關聯,因索引缺失導致全表掃描,最終引發交易系統阻塞。這類場景在傳統數據庫開發中屢見不鮮:據 Gartne…

【中間件】bthread效率為什么高?

bthread效率為什么更高&#xff1f; 1 基本概念 bthread是brpc中的用戶態線程&#xff08;也可稱為M:N線程庫&#xff09;&#xff0c;目的是&#xff1a;提高程序的并發度&#xff0c;同時降低編碼難度&#xff0c;在多核cpu上提供更好的scalability和cache locality。其采用…