2025年優化算法:龍卷風優化算法(Tornado optimizer with Coriolis force,TOC)

龍卷風優化算法(Tornado optimizer with Coriolis force)是發表在中科院二區期刊“ARTIFICIAL INTELLIGENCE REVIEW”(IF:11.7)的2025年智能優化算法

01.引言

當自然界的狂暴之力,化身數字世界的智慧引擎:龍卷風,自然界最神秘的力量之一——雷暴盤旋、風切變激蕩、科里奧利力牽引,最終凝聚成摧毀萬物的旋轉風暴。科學家們從這場“天地博弈”中捕捉靈感,打造出?「Tornado Optimizer with Coriolis Force (TOC)」?算法,將風暴形成的動態過程轉化為優化問題的終極解法。無需復雜數學模型,不依賴初始參數,僅憑對自然規律的模擬,即可在浩瀚解空間中精準捕獲最優答案!

傳統算法的困局:為什么我們需要一場“風暴革命”?

在人工智能與工程優化領域,經典算法正面臨三大挑戰:

?梯度陷阱:傳統方法依賴精確的數學梯度,面對噪聲數據或非線性問題時束手無策。

?早熟收斂:元啟發式算法常陷入局部最優,如同探險者被困山谷,錯失遠方高峰。

?維度災難:高維問題中,解空間呈指數級膨脹,計算資源如泥牛入海。

TOC算法的突破,在于用自然界的混沌之力對抗數學的確定性困局——龍卷風的形成、旋轉與消散,恰好映射了優化過程中探索、聚焦與迭代的智慧。

02.優化算法的流程

所提出的具有科里奧利力 (TOC) 的龍卷風優化器的想法是基于對龍卷風形成和消散以及風暴和雷暴如何在自然界中演變形成龍卷風的觀察而受到啟發。為了進一步澄清,關于龍卷風如何產生并向陸地移動的一些基本知識,它們遵循可識別的生命周期,如下所述:當風暴系統內的風速和風向發生變化時,該周期就開始了。這會產生一種旋轉效果,該效果由穿過雷云的上升氣流垂直傾斜。在這種情況下,風暴通常會發生在那個點。當風暴增強時,它通常會變成超級單體雷暴。另一種說法是,強大的雷暴在大氣層幾英里高的地方發展出一個旋轉系統,成為超級單體或雷云單體。這些超級單體雷暴是獨特的、孤立的單體,不屬于風暴線的一部分。超級單體風暴是兜兜轉轉的風暴。當旋轉的垂直氣柱和超級單體雷暴一起時,風暴云可能會產生龍卷風。龍卷風形成過程的各個階段可以在圖下中觀察到。

1. 風暴初生:種群的混沌與秩序

算法初始化時,隨機生成三類“風暴個體”:

?普通風暴?(隨機探索者):廣泛散布在解空間,尋找潛力區域。

?雷暴?(精英個體):當前較優解,吸引周圍風暴向其靠攏。

?龍卷風?(全局最優):吞噬能量,成為局部區域的絕對核心。

?自然隱喻:就像真實風暴需要溫度、濕度與風切變的配合,算法通過動態調整“風暴能量”,平衡搜索的廣度與深度。

?2. 科里奧利效應:給優化加上“地球自轉”的智慧

龍卷風在北半球逆時針旋轉、南半球順時針旋轉的現象,被抽象為方向擾動機制:

?北半球模式:解向量向右偏轉,增強對未知區域的探索。

?南半球模式:解向量向左偏轉,強化對已知優勢區域的挖掘。

這種動態偏轉有效避免了算法“原地打轉”,仿佛為搜索過程裝上導航羅盤。

?3. 氣旋平衡方程:暴力美學中的數學優雅

借鑒流體力學中的梯度風速模型,TOC將氣壓梯度力、離心力與科里奧利力的平衡關系轉化為迭代公式:

?高壓區?(局部最優解):離心力主導,推動個體逃離“舒適區”。

?低壓區?(潛力區域):科里奧利力牽引,引導種群螺旋式逼近。

整個過程宛如一場精心編排的“風暴之舞”,在破壞與重建中逼近全局最優。

?4. 消散與重生:劣解的淘汰與新星的崛起

當風暴能量衰減(適應度不再提升),算法自動觸發“消散機制”:

淘汰停滯個體,釋放計算資源。

隨機生成新風暴,注入新鮮血液。

這一機制完美復刻自然界的物競天擇,確保種群永葆進化活力。

論文偽代碼:

3.論文中算法對比圖

04.本代碼效果圖

05.部分代碼

function [TornadoCost,Tornadoposition,ccurve]=TOC(n,max_it,lb,ub,dim,fobj,nto,nt)
%% Convergence curve
ccurve=zeros(1,max_it);%% Generate initial population for the Tornado Optimizer with Coriolis force (TOC) 
% Create initial population for Tornado, thunderstorms, and windstorms, and initialize the positions of populationy=initialization(n,dim,ub,lb);
% Evaluate the fitness of initial population for Tornado, thunderstorms, and windstorms 
fit = zeros(size(y,1),1);
for i=1:size(y,1)fit(i,1)=fobj(y(i,:));
end
[~,index]=sort(fit) ;
%% Forming Windstorms, Thunderstorms, and Tornado of the Tornado Optimizer with Coriolis force (TOC) 
% nto: Number of thunderstorms and tornadoes
% Nt : Number of thunderstorms
% To:  Number of tornadoes
% nw: number of windstorms
To= nto - nt;% Tornadoes
nw=n-nto; % Windstorms
%================ Forming and evaluating the population of the Tornadoes ================
Tornadoposition=y(index(1:To),:) ; % 
TornadoCost=fit(index(1:To)); %================ Forming and evaluating the population of the Thunderstorms ================
Thunderstormsposition(1:nto-1,:)=y(index(2:nto),:);
ThunderstormsCost(1:nto-1)=fit(index(2:nto));
bThunderstormsCost = ThunderstormsCost;
gThunderstormsCost=zeros(1,nto-1);[~,ind]=min(ThunderstormsCost);
bThunderstormsposition = Thunderstormsposition; % Initial best Thunderstorms position
gThunderstormsCost = Thunderstormsposition(ind,:); % Initial global Thunderstorms position
%================ Forming and evaluating the population of the Windstorms ================Windstormsposition(1:nw,:)=y(index(nto+1:nto+nw),:) ; 
WindstormsCost(1:nw)=fit(index(nto+1:nto+nw)) ;  
gWindstormsposition=zeros(1,nw);
bWindstormsCost = WindstormsCost;
[~,ind]=min(WindstormsCost);
bWindstormsposition = Windstormsposition; % % Initial best windstorms position (Update the best positions of windstorms)
gWindstormsposition = Windstormsposition(ind,:); % Initial global windstorms position%% Velcity term of TOC 
vel_storm = 0.1*Windstormsposition; % Velocity of windstorms
%%  Designate windstorms to thunderstorms and Tornadoes 
nwindstorms=1:nw;nwindstorms=nwindstorms(sort(randperm(nw,nto)));% Combining windstorms to tornado
nWT=diff(nwindstorms)';
nWT(end+1)= nw-sum(nWT);
% nWT1=sort(nWT1,'descend');
nWT1 = nWT(1);
% Combining windstorms to thunderstorms
nWH=nWT(2:end);
%% Parameter setting s for TOC
b_r=100000;  
fdelta=[-1,1];
%% Key functions of Tornado Optimizer with Coriolis force (TOC) 
chi=4.10;
eta=2/abs(2-chi-sqrt(chi^2-4*chi)) ;
%% ================  Main Loop for TOC ================ 
disp('================  Tornado Optimizer with Coriolis force (TOC) ================ ');
t=1;while t<=max_it%% Key adaptive functions (Adaptive parameters) of TOCnu  =(0.1*exp(-0.1*(t/max_it)^0.1))^16;mu = 0.5 + rand/2;ay=(max_it-(t^2/max_it))/max_it ;Rl = 2/(1+exp((-t+max_it/2)/2)) ;  Rr = -2/(1+exp((-t+max_it/2)/2)) ;  %%  Evolution of windstorms to Tornadoes% Update velocity     
for i=1:nwfor j = 1:dimif rand > 0.5delta1=fdelta(ceil(2*rand()));zeta=ceil((To).*rand(1,To))'; %  wmin=1; wmax=4.0; rr=wmin+rand()*(wmax-wmin);wr= (((2*rand()) - (1*rand()+rand()))/rr); c=b_r*delta1*wr;omega = 0.7292115E-04; 
%            w_r = sin(-1 + 2.*rand(1,1));f= 2*omega*sin(-1 + 2.*rand(1,1));phi(i,j) = Tornadoposition(zeta,j) - Windstormsposition(i,j);if sign(Rl)>=0 if sign(phi(i,j))>=0 phi(i,j) = -phi(i,j);endendCFl =(((f^2*Rl^2)/4) -Rl* 1 *phi(i,j));if sign(CFl)< 0 CFl= -CFl;endvel_storm(i,j)= eta*  (mu*vel_storm(i,j) - c* (f*Rl)/2 +(sqrt(CFl)));elsedelta1=fdelta(ceil(2*rand()));zeta=ceil((To).*rand(1,To))'; %  rmin=1; rmax=4.0; rr=rmin+rand()*(rmax-rmin);wr= (((2*rand()) - (1*rand()+rand()))/rr); c=b_r*delta1*wr; phi(i,j) = Tornadoposition (zeta,j)-Windstormsposition(i,j);if sign(Rr)<=0 if sign(phi(i,j))<=0 phi(i,j) = -phi(i,j);endendomega =0.7292115E-04;% s�1
%          w_r = sin(-1 + 2.*rand(1,1));f= 2*omega*sin(-1 + 2.*rand(1,1));CFr =(((f^2*Rr^2)/4) -Rr* 1 *phi(i,j));if sign(CFr)<0 CFr= -CFr;end vel_storm(i,j)= eta  *(mu* vel_storm(i,j) - c* (f*Rr)/2 +(sqrt(CFr)))  ;        endendend %% %% Exploration - Evolution of windstorms to Tornadoesfor i=1:nWT1rand_index = floor((nWT1).*rand(1,nWT1))+1;rand_w = Windstormsposition(rand_index, :);alpha=abs(2*ay*rand-1*rand)   ;Windstormsposition(i,:)=Windstormsposition(i,:)+2*alpha*(Tornadoposition  - rand_w(i,:)) + vel_storm(i,:);
%  ub_=Windstormsposition(i,:)>ub; lb_=Windstormsposition(i,:)<lb;Windstormsposition(i,:)=(Windstormsposition(i,:).*(~(ub_+lb_)))+ub.*ub_+lb.*lb_;WindstormsCost (i)=fobj(Windstormsposition(i,:));%%% Finding out the best positionsif WindstormsCost(i)<bWindstormsCost(i)bWindstormsposition(i,:)=Windstormsposition(i,:) ; % Best solutionsbWindstormsCost(i)=WindstormsCost(i);   % Best costendend[minTornadoCost,in]=min(bWindstormsCost); % finding out the best Posif (minTornadoCost<TornadoCost)TornadoCost=minTornadoCost;Tornadoposition = bWindstormsposition(in,:); % Update the global best positionsend %% ================ Exploitation -  Evolution of windstorms to thunderstorms ================ 
%% ================  Combining windstorms together to form thunderstorms ================  for i=1:ntfor j=1:nWH(i)rand_index = floor((nt).*rand(nt))+1;rand_w = Windstormsposition(rand_index, :);c1=abs(2*ay*rand-1*ay); c2=abs(ay - 2*ay*rand);Windstormsposition((j+sum(nWT(1:i))),:)=Windstormsposition((j+sum(nWT(1:i))),:)+2*rand*(Thunderstormsposition(i,:)-Windstormsposition((j+sum(nWT(1:i))),:))+...+ 2*rand*(Tornadoposition (1,:)-Windstormsposition((j+sum(nWT(1:i))),:));ub_=Windstormsposition((j+sum(nWT(1:i))),:)>ub; lb_=Windstormsposition((j+sum(nWT(1:i))),:)<lb;Windstormsposition((j+sum(nWT(1:i))),:)=(Windstormsposition((j+sum(nWT(1:i))),:).*(~(ub_+lb_)))+ub.*ub_+lb.*lb_;WindstormsCost((j+sum(nWT(1:i))))=fobj(Windstormsposition((j+sum(nWT(1:i))),:));if WindstormsCost((j+sum(nWT(1:i))))<ThunderstormsCost(i)              bThunderstormsposition(i,:) =Windstormsposition((j+sum(nWT(1:i))),:);Thunderstormsposition(i,:)=Windstormsposition((j+sum(nWT(1:i))),:);ThunderstormsCost(i)=WindstormsCost((j+sum(nWT(1:i))));end endend   %[minTornadoCost, in]=min(ThunderstormsCost); % finding out the best Posif (minTornadoCost<TornadoCost)TornadoCost=minTornadoCost;Tornadoposition = bThunderstormsposition(in,:); % Update the global best positionsend %% ================  Evolution of thunderstorms to tornado ================ for i=1:nt        zeta=ceil((To).*rand(1,To)); %  alpha=abs(2*ay*rand-1*rand)    ; p = floor((nt).*rand(1,nt))+1;rand_w = Thunderstormsposition(p, :);Thunderstormsposition(i,:)=Thunderstormsposition(i,:)+2.*alpha*(Thunderstormsposition(i,:) - Tornadoposition(zeta,:))+...+2.*alpha*(rand_w(i,:) - Thunderstormsposition(i,:));ub_=Thunderstormsposition(i,:)>ub; lb_=Thunderstormsposition(i,:)<lb;Thunderstormsposition(i,:)=(Thunderstormsposition(i,:).*(~(ub_+lb_)))+ub.*ub_+lb.*lb_;ThunderstormsCost(i) =fobj(Thunderstormsposition(i,:));if ThunderstormsCost(i)<bThunderstormsCost(i)         bThunderstormsposition(i,:) =Thunderstormsposition(i,:);bThunderstormsCost(i) =ThunderstormsCost(i);endend[minTornadoCost,in]=min(bThunderstormsCost); % finding out the best Posif (minTornadoCost<TornadoCost)TornadoCost=minTornadoCost;Tornadoposition = bThunderstormsposition(in,:); % Update the global best positionsend %%   ================  Random formation of windstorms, tornadoes and thunderstorms ================ % Check windstorms formation for windstorms and tornadoesfor i=1:nWT1if  ((norm(Windstormsposition(i,:)-Tornadoposition)<nu))delta2=fdelta(floor(2*rand()+1));Windstormsposition(i,:)=  Windstormsposition(i,:) - (2*ay*(rand*(lb-ub) - lb))*delta2;end
end  % Check windstorms formation for windstorms and thunderstormsfor i=1:ntif  ((norm(Windstormsposition(i,:)-Thunderstormsposition(i,:))<nu))for j=1:nWH(i)delta2=fdelta(floor(2*rand()+1)) ;Windstormsposition((j+ sum(nWT(1:i))),:)=  Windstormsposition((j+ sum(nWT(1:i))),:) - (2*ay*(rand*(lb-ub) - lb))*delta2;endend
end %% Results and Plot   disp(['Iteration: ',num2str(t),'   minTornadoCost= ',num2str(TornadoCost)]);ccurve(t)=TornadoCost;%{if t>2line([t-1 t], [ccurve(t-1) ccurve(t)],'Color','b'); title({'Convergence characteristic curve'},'interpreter','latex','FontName','Times','fontsize',12);xlabel('Iteration');ylabel('Best score obtained so far');drawnow end 
%}t=t+1;endend

?作者簡介:信號處理方向在校博士研究生,目前專研于MATLAB算法及科學繪圖等,熟知各種信號分解算法、神經網絡時序、回歸和分類預測算法、數據擬合算法以及濾波算法。提供一個可以相互學習相互進步的平臺

🚩技術信仰:知行合一,讓每一行代碼都成為解決問題的利器

🔍后臺私信備注個人需求(比如TOC-BP)定制以下TOC算法優化模型(看到秒回):

1.回歸/時序/分類預測類:BP、RF、XGBoost、RBF、LSSVM、SVM、ELM、DELM、ESN、RELM等等均可,優化算法優化BP為例,可達到以下效果:

(1)優化BP神經網絡的數據時序預測

(2)優化BP神經網絡的數據回歸(多輸入多輸出)預測

(3)優化BP神經網絡的數據回歸預測

2.分解類:EEMD、VMD、REMD、CEEMDAN、ICEEMDAN、SVMD等分解模型均可,優化算法優化VMD/ICEEMDAN為例,可達到以下效果:

(1)基于改進天鷹優化算法(IAO)優化的VMD參數

(2)基于改進天鷹優化算法(IAO)優化ICEEMDAN參數

3.去噪算法算法類:VMD/CEEMDAN/ICEEMDAN/SVMD+小波閾值/SVD去噪,可在去噪算法前加智能優化算法優化參數以VMD-WT/SVD為例,可達到以下效果:

(1)基于VMD-SpEn(樣本熵)聯合小波閾值去噪

(2)基于SVMD-SVD的信號去噪算法

(3)基于ZOA優化VMD-IAWT巖石聲發射信號降噪算法

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

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

相關文章

面試中如何回答性能優化的問題

性能問題和Bug不同,后者的分析和解決思路更清晰,很多時候從應用日志(文中的應用指分布式服務下的單個節點)即可直接找到問題根源,而性能問題,其排查思路更為復雜一些。 對應用進行性能優化,是一個系統性的工程,對工程師的技術廣度和技術深度都有所要求。一個簡單的應用…

CMake 函數和宏

CMake 函數 CMake 函數定義語法如下, 其中 name 為函數名, <arg1> 為參數名, <commands> 為函數體. 函數定義后, 可以通過 name 調用函數. 函數名允許字母數字下劃線, 不區分大小寫. function(name [<arg1> ...])<commands> endfunction()如下的樣例…

【QA】Qt有哪些迭代器模式的應用?

在 Qt/C 中&#xff0c;迭代器模式的設計主要分為 標準 C 風格 和 Qt 框架特有風格&#xff0c;以下結合代碼詳細說明兩種實現方式的關鍵設計及其應用場景&#xff1a; 一、Qt 框架中的迭代器模式設計 Qt 提供了兩種迭代器風格&#xff1a;Java 風格&#xff08;顯式迭代器&am…

Mysql表的簡單操作

&#x1f3dd;?專欄&#xff1a;Mysql_貓咪-9527的博客-CSDN博客 &#x1f305;主頁&#xff1a;貓咪-9527-CSDN博客 “欲窮千里目&#xff0c;更上一層樓。會當凌絕頂&#xff0c;一覽眾山小。” 目錄 3.1 創建表 3.2 查看表結構 3.3 修改表 1. 添加字段 2. 修改字段 3…

【云馨AI-大模型】自動化部署Dify 1.1.2,無需科學上網,Linux環境輕松實現,附Docker離線安裝等

Dify介紹 官網&#xff1a;https://dify.ai/zh生成式 AI 應用創新引擎開源的 LLM 應用開發平臺。提供從 Agent 構建到 AI workflow 編排、RAG 檢索、模型管理等能力&#xff0c;輕松構建和運營生成式 AI 原生應用。 Dify安裝腳本 目錄創建 mkdir -p /data/yunxinai &&a…

WordPress上傳圖片時顯示“未提供數據”錯誤

在WordPress中上傳圖片時顯示“未提供數據”的錯誤&#xff0c;通常是由多種原因引起的&#xff0c;以下是一些常見的問題及其解決方法&#xff1a; 1. 文件權限問題 WordPress需要正確的文件和目錄權限才能正常上傳圖片。如果權限設置不正確&#xff0c;可能會導致無法上傳圖…

python3面試題20個(python web篇)

更多內容請見: python3案例和總結-專欄介紹和目錄 文章目錄 1.python asyncio的原理?2.對Flask藍圖(Blueprint)的理解?3.Flask 和 Django 路由映射的區別?4.什么是wsgi,uwsgi,uWSGI?5.Django、Flask、Tornado的對比?6.CORS 和 CSRF的區別?7.Session,Cookie,JWT的理解8.簡…

RedisTemplate和RedissonClient適用的場景有什么不同

在 Spring Boot 項目中&#xff0c;RedisTemplate 和 RedissonClient 分別針對不同的使用場景設計&#xff0c;以下是它們的核心區別和適用場景分析&#xff1a; 一、RedisTemplate&#xff08;Spring Data Redis&#xff09; 定位 Spring 官方提供的 Redis 操作工具&#xf…

人臉表情識別系統分享(基于深度學習+OpenCV+PyQt5)

最近終于把畢業大論文忙完了&#xff0c;眾所周知碩士大論文需要有三個工作點&#xff0c;表情識別領域的第三個工作點一般是做一個表情識別系統出來&#xff0c;如下圖所示。 這里分享一下這個表情識別系統&#xff1a; 采用 深度學習OpenCVPyQt5 構建&#xff0c;主要功能包…

GitHub供應鏈攻擊事件:Coinbase遭襲,218個倉庫暴露,CI/CD密鑰泄露

此次供應鏈攻擊涉及GitHub Action "tj-actions/changed-files"&#xff0c;最初是針對Coinbase的一個開源項目的高度定向攻擊&#xff0c;隨后演變為范圍更廣的威脅。 攻擊過程與影響 Palo Alto Networks Unit 42在一份報告中指出&#xff1a;“攻擊載荷主要針對其…

Redis 核心源碼解析:從設計哲學到企業級應用實踐

一、Redis 的核心設計哲學 Redis 的成功源于其 「用內存換時間」 的核心理念&#xff0c;圍繞以下三個核心原則構建&#xff1a; 極簡主義&#xff1a;單線程模型避免鎖競爭&#xff0c;代碼保持高度內聚。 性能至上&#xff1a;所有數據常駐內存&#xff0c;網絡層采用事件驅…

GZCTF平臺搭建及題目上傳

前言 我用手里的Ubuntu虛擬機搭建的&#xff0c;大家根據自己的實際情況來吧 安裝及部署 首先&#xff0c;你的虛擬機需要有Docker和Docker-Compose&#xff0c;前者可以看我之前的文章&#xff0c;另外一個可以輸入下面的命令安裝&#xff0c;注意先獲取管理員權限&#xff…

Pycharm社區版創建Flask項目詳解

一、創建工程項目 二、配置工程目錄 新建的空項目下創建目錄。 1、新建app.py文件 2、app.py代碼如下&#xff1a; from flask import Flask, render_templateapp Flask(__name__)app.route("/") def root():"""主頁:return: Index.html"&qu…

CentOS 7 64位安裝Docker

以下是在已有的 CentOS 7 64 位虛擬機上安裝 Docker 并配置華為鏡像源的詳細步驟&#xff1a; 1. 備份原有 Yum 源&#xff08;可選&#xff0c;建議操作&#xff09; # 備份原有倉庫文件 sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backu…

運動仿真——phased.Platform

在雷達仿真過程中&#xff0c;運動仿真的必要性&#xff0c;以及運動仿真可以實現哪些功能&#xff0c;在matlab對應的user guide中已經講的很清楚了&#xff0c;這里不再贅述。 本文主要介紹phased.Platform的一些“坑”&#xff0c;和典型的用法。 第一坑&#xff1a;系統對…

緩存刪除三級補償方案:延遲隊列+消息隊列+定時任務兜底

問題背景: 在 Cache-Aside 模式中&#xff0c;更新數據庫后刪除緩存失敗會導致數據不一致。本文提供工業級三級補償方案&#xff0c;實現最終一致性保障。 整體架構: 更新操作觸發 → 一級延遲隊列 → 二級消息隊列 → 三級定時任務方案實現: 一、第一級補償&#xff1a;延遲隊…

從零開始實現 C++ TinyWebServer 數據庫連接池 SqlConnectPool詳解

文章目錄 數據庫連接池是什么&#xff1f;Web Server 中為什么需要數據庫連接池&#xff1f;SqlConnectPool 成員變量實現 Init() 函數實現 ClosePool() 函數SqlConnectRAII 類SqlConnectPool 代碼SqlConnectPool 測試 從零開始實現 C TinyWebServer 項目總覽 項目源碼 數據庫連…

C++題目

1、內存管理 1.內存模型 棧:在執行函數時&#xff0c;函數內局部變量的存儲單元都可以在棧上創建&#xff0c;函數執行結束時這些存儲單元自動被釋放。 堆&#xff1a;就是那些由new分配的內存塊&#xff0c;其釋放由程序員控制&#xff08;一個new對應一個delete&#xff09…

天地圖InfoWindow插入React自定義組件

截至2025年03月21日天地圖的Marker不支持添加Label; 同時Label和Icon是不支持自定義HTMLElement只支持String&#xff1b;目前只有InfoWindow支持自定義HTMLElement; 效果圖 React核心api import ReactDOM from react-dom/client const content document.createElement(div);…

Java并發編程面試匯總

Java并發編程 一、 基礎概念1. 進程與線程的區別是什么&#xff1f;2. 創建線程的幾種方式&#xff1f;3. 線程的生命周期&#xff08;狀態&#xff09;有哪些&#xff1f;4. 什么是守護線程&#xff08;Daemon Thread&#xff09;&#xff1f;5. 線程優先級&#xff08;Priori…