国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目錄
回復(fù):" >回復(fù):
什么是數(shù)據(jù)傾斜?" >什么是數(shù)據(jù)傾斜?
數(shù)據(jù)傾斜有哪些原因呢?" >數(shù)據(jù)傾斜有哪些原因呢?
1、存在大key" >1、存在大key
2、HashTag 使用不當(dāng)" >2、HashTag 使用不當(dāng)
3、slot 槽位分配不均" >3、slot 槽位分配不均
什么是緩存熱點(diǎn)?" >什么是緩存熱點(diǎn)?
1、復(fù)制多份副本" >1、復(fù)制多份副本
2、本地內(nèi)存緩存" >2、本地內(nèi)存緩存
Redis Cluster 不用一致性Hash?" >Redis Cluster 不用一致性Hash?
首頁(yè) Java Java面試題 面試官:如何解決 Redis 數(shù)據(jù)傾斜、熱點(diǎn)等問(wèn)題

面試官:如何解決 Redis 數(shù)據(jù)傾斜、熱點(diǎn)等問(wèn)題

Aug 15, 2023 pm 04:43 PM
java java面試題

Redis 作為一門(mén)主流技術(shù),應(yīng)用場(chǎng)景非常多,很多大中小廠面試都列為重點(diǎn)考察內(nèi)容

前幾天有星球小伙伴學(xué)習(xí)時(shí),遇到下面幾個(gè)問(wèn)題,來(lái)咨詢 Tom哥

考慮到這些問(wèn)題比較高頻,工作中經(jīng)常會(huì)遇到,這里寫(xiě)篇文章系統(tǒng)講解下

問(wèn)題描述:

向你提問(wèn):在復(fù)習(xí)redis時(shí),有些疑問(wèn),麻煩看看:?

如果redis集群出現(xiàn)數(shù)據(jù)傾斜,數(shù)據(jù)分配不均,該如何解決?

處理hotKey時(shí),為key創(chuàng)建多個(gè)副本,如k-1,k-2…, 如何讓這些副本能均勻?qū)懭??如何均勻訪問(wèn)?

redis使用hash slot來(lái)維護(hù)集群。與一致性哈希類似,都可以避免全量遷移。為什么不直接使用一致性hash?

回復(fù):

分布式緩存作為性能加速器,在系統(tǒng)優(yōu)化中承擔(dān)著非常重要的角色。相比本地緩存,雖然增加了一次網(wǎng)絡(luò)傳輸,大約占用不到 1 毫秒外,但是卻有集中化管理的優(yōu)勢(shì),并支持非常大的存儲(chǔ)容量。

分布式緩存領(lǐng)域,目前應(yīng)用比較廣泛的要數(shù) Redis 了,該框架是純內(nèi)存儲(chǔ)存,單線程執(zhí)行命令,擁有豐富的底層數(shù)據(jù)結(jié)構(gòu),支持多種維度的數(shù)據(jù)存儲(chǔ)和查找。

當(dāng)然,數(shù)據(jù)量一大,各種問(wèn)題就出現(xiàn)了,比如:數(shù)據(jù)傾斜、數(shù)據(jù)熱點(diǎn)等

什么是數(shù)據(jù)傾斜?

單臺(tái)機(jī)器的硬件配置有上限制約,一般我們會(huì)采用分布式架構(gòu)將多臺(tái)機(jī)器組成一個(gè)集群,下圖的集群就是由三臺(tái)Redis單機(jī)組成??蛻舳送ㄟ^(guò)一定的路由策略,將讀寫(xiě)請(qǐng)求轉(zhuǎn)發(fā)到具體的實(shí)例上。

由于業(yè)務(wù)數(shù)據(jù)特殊性,按照指定的分片規(guī)則,可能導(dǎo)致不同的實(shí)例上數(shù)據(jù)分布不均勻,大量的數(shù)據(jù)集中到了一臺(tái)或者幾臺(tái)機(jī)器節(jié)點(diǎn)上計(jì)算,從而導(dǎo)致這些節(jié)點(diǎn)負(fù)載多大,而其他節(jié)點(diǎn)處于空閑等待中,導(dǎo)致最終整體效率低下。

面試官:如何解決 Redis 數(shù)據(jù)傾斜、熱點(diǎn)等問(wèn)題


數(shù)據(jù)傾斜有哪些原因呢?

1、存在大key

比如存儲(chǔ)一個(gè)或多個(gè) String 類型的 bigKey 數(shù)據(jù),內(nèi)存占用很大。

Tom哥之前排查過(guò)這種問(wèn)題,有同事開(kāi)發(fā)時(shí)為了省事,采用JSON格式,將多個(gè)業(yè)務(wù)數(shù)據(jù)合并到一個(gè) value,只關(guān)聯(lián)一個(gè)key,導(dǎo)致了這個(gè)鍵值對(duì)容量達(dá)到了幾百M(fèi)。

頻繁的大key讀寫(xiě),內(nèi)存資源消耗比較重,同時(shí)給網(wǎng)絡(luò)傳輸帶了極大的壓力,進(jìn)而導(dǎo)致請(qǐng)求響應(yīng)變慢,引發(fā)雪崩效應(yīng),最后系統(tǒng)各種超時(shí)報(bào)警。


解決方案:

辦法非常簡(jiǎn)單,采用<code style='font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace;background-color: rgba(0, 0, 0, 0.06);border-width: 1px;border-style: solid;border-color: rgba(0, 0, 0, 0.08);border-radius: 2px;padding-right: 2px;padding-left: 2px;'><span style="font-size: 16px;">化整為零</span>的策略,將一個(gè)bigKey拆分為多個(gè)小key,獨(dú)立維護(hù),成本會(huì)降低很多。當(dāng)然這個(gè)拆也講究些原則,既要考慮業(yè)務(wù)場(chǎng)景也要考慮訪問(wèn)場(chǎng)景,將關(guān)聯(lián)緊密的放到一起。

比如:有個(gè)RPC接口內(nèi)部對(duì) Redis 有依賴,之前訪問(wèn)一次就可以拿到全部數(shù)據(jù),拆分將要控制單值的大小,也要控制訪問(wèn)的次數(shù),畢竟調(diào)用次數(shù)增多了,會(huì)拉大整體的接口響應(yīng)時(shí)間。

浙江的政府機(jī)構(gòu)都在提倡優(yōu)化流程,最多跑一次,都是一個(gè)道理。

面試官:如何解決 Redis 數(shù)據(jù)傾斜、熱點(diǎn)等問(wèn)題


2、HashTag 使用不當(dāng)

Redis 采用單線程執(zhí)行命令,從而保證了原子性。當(dāng)采用集群部署后,為了解決mset、lua 腳本等對(duì)多key 批量操作,為了保證不同的 key 能路由到同一個(gè) Redis 實(shí)例上,引入了 HashTag 機(jī)制。

用法也很簡(jiǎn)單,使用<span style="font-size: 16px;">{}</span>化整為零的策略,將一個(gè)bigKey拆分為多個(gè)小key,獨(dú)立維護(hù),成本會(huì)降低很多。當(dāng)然這個(gè)拆也講究些原則,既要考慮業(yè)務(wù)場(chǎng)景也要考慮訪問(wèn)場(chǎng)景,將關(guān)聯(lián)緊密的放到一起。

比如:有個(gè)RPC接口內(nèi)部對(duì) Redis 有依賴,之前訪問(wèn)一次就可以拿到全部數(shù)據(jù),拆分將要控制單值的大小,也要控制訪問(wèn)的次數(shù),畢竟調(diào)用次數(shù)增多了,會(huì)拉大整體的接口響應(yīng)時(shí)間。

浙江的政府機(jī)構(gòu)都在提倡優(yōu)化流程,最多跑一次,都是一個(gè)道理。

面試官:如何解決 Redis 數(shù)據(jù)傾斜、熱點(diǎn)等問(wèn)題

2、HashTag 使用不當(dāng)

????????Redis 采用單線程執(zhí)行命令,從而保證了原子性。當(dāng)采用集群部署后,為了解決mset、lua 腳本等對(duì)多key 批量操作,為了保證不同的 key 能路由到同一個(gè) Redis 實(shí)例上,引入了 HashTag ??機(jī)制。????????用法也很簡(jiǎn)單,使用????{}????大括號(hào),指定key只計(jì)算大括號(hào)內(nèi)字符串的哈希,從而將不同key的健值對(duì)插入到同一個(gè)哈希槽。??????????舉個(gè)例子:????????
192.168.0.1:6380> CLUSTER KEYSLOT testtag
(integer) 764
192.168.0.1:6380> CLUSTER KEYSLOT {testtag}
(integer) 764
192.168.0.1:6380> CLUSTER KEYSLOT mykey1{testtag}
(integer) 764
192.168.0.1:6380> CLUSTER KEYSLOT mykey2{testtag}
(integer) 764
??????check 下業(yè)務(wù)代碼,有沒(méi)有引入HashTag,將太多的key路由到了一個(gè)實(shí)例。結(jié)合具體場(chǎng)景,考慮如何做下拆分。????????就像 RocketMQ 一樣,很多時(shí)候只要能保證分區(qū)有序,就可以滿足我們的業(yè)務(wù)需求。具體實(shí)戰(zhàn)中,要找到這個(gè)平衡點(diǎn),而不是為了解決問(wèn)題而解決問(wèn)題。????

3、slot 槽位分配不均

如果采用 Redis Cluster 的部署方式,集群中的數(shù)據(jù)庫(kù)被分為16384個(gè)槽(slot),數(shù)據(jù)庫(kù)中的每個(gè)健都屬于這16384個(gè)槽的其中一個(gè),集群中的每個(gè)節(jié)點(diǎn)可以處理的0個(gè)或最多16384個(gè)槽。

你可以手動(dòng)做遷移,將一個(gè)比較大的 slot 遷移到稍微空閑的機(jī)器上,保證存儲(chǔ)和訪問(wèn)的均勻性。


什么是緩存熱點(diǎn)?

緩存熱點(diǎn)是指大部分甚至所有的業(yè)務(wù)請(qǐng)求都命中同一份緩存數(shù)據(jù),給緩存服務(wù)器帶來(lái)了巨大壓力,甚至超過(guò)了單機(jī)的承載上限,導(dǎo)致服務(wù)器宕機(jī)。


解決方案:

1、復(fù)制多份副本

我們可以在key的后面拼上有序編號(hào),比如key#01、key#02。。。key#10多個(gè)副本,這些加工后的key位于多個(gè)緩存節(jié)點(diǎn)上。

客戶端每次訪問(wèn)時(shí),只需要在原key的基礎(chǔ)上拼接一個(gè)分片數(shù)上限的隨機(jī)數(shù),將請(qǐng)求路由不到的實(shí)例節(jié)點(diǎn)。

注意:緩存一般都會(huì)設(shè)置過(guò)期時(shí)間,為了避免緩存的集中失效,我們對(duì)緩存的過(guò)期時(shí)間盡量不要一樣,可以在預(yù)設(shè)的基礎(chǔ)上增加一個(gè)隨機(jī)數(shù)。

至于數(shù)據(jù)路由的均勻性,這個(gè)由 Hash 算法來(lái)保證。


2、本地內(nèi)存緩存

把熱點(diǎn)數(shù)據(jù)緩存在客戶端的本地內(nèi)存中,并且設(shè)置一個(gè)失效時(shí)間。對(duì)于每次讀請(qǐng)求,將首先檢查該數(shù)據(jù)是否存在于本地緩存中,如果存在則直接返回,如果不存在再去訪問(wèn)分布式緩存的服務(wù)器。

本地內(nèi)存緩存徹底“解放”了緩存服務(wù)器,不會(huì)對(duì)緩存服務(wù)器有任何壓力。

缺點(diǎn):實(shí)時(shí)感知最新的緩存數(shù)據(jù)有點(diǎn)麻煩,會(huì)產(chǎn)生數(shù)據(jù)不一致的情況。我們可以設(shè)置一個(gè)比較短的過(guò)期時(shí)間,采用被動(dòng)更新。當(dāng)然,也可以用監(jiān)控機(jī)制,如果感知到數(shù)據(jù)已經(jīng)發(fā)生了變化,及時(shí)更新本地緩存。


Redis Cluster 不用一致性Hash?

Redis Cluster 集群有16384個(gè)哈希槽,每個(gè)<code style='font-family: SFMono-Regular, Consolas, "Liberation Mono", Menlo, Courier, monospace;background-color: rgba(0, 0, 0, 0.06);border-width: 1px;border-style: solid;border-color: rgba(0, 0, 0, 0.08);border-radius: 2px;padding-right: 2px;padding-left: 2px;'><span style="font-size: 16px;">key</span>通過(guò)<span style="font-size: 16px;">CRC16</span>校驗(yàn)后對(duì)<span style="font-size: 16px;">16384</span>取模來(lái)決定放置哪個(gè)槽。集群的每個(gè)節(jié)點(diǎn)負(fù)責(zé)一部分hash槽,舉個(gè)例子,比如當(dāng)前集群有3個(gè)節(jié)點(diǎn),那么 <span style="font-size: 16px;">node-1</span> 包含 0 到 5460 號(hào)哈希槽,<span style="font-size: 16px;">node-2</span> 包含 5461 到 10922 號(hào)哈希槽,<span style="font-size: 16px;">node-3</span>key

通過(guò)<p style="min-height: 24px;margin-bottom: 24px;">CRC16<br></p>面試官:如何解決 Redis 數(shù)據(jù)傾斜、熱點(diǎn)等問(wèn)題校驗(yàn)后對(duì)<p style="min-height: 24px;margin-bottom: 24px;">16384<br></p>取模來(lái)決定放置哪個(gè)槽。集群的每個(gè)資源負(fù)責(zé)一部分hash槽,舉了個(gè)例子,比如當(dāng)前資源有3個(gè)節(jié)點(diǎn),那么

<span style="color: rgb(43, 43, 43);font-size: 16px;">節(jié)點(diǎn)- 1</span>

包含0到5460號(hào)哈希槽,

<span style="color: rgb(0, 0, 0);font-size: 16px;">node-2</span>

包含 5461 到 10922 號(hào)哈希槽,
<blockquote data-tool="mdnice編輯器" style="border-top: none;border-right: none;border-bottom: none;font-size: 0.9em;overflow: auto;color: rgb(106, 115, 125);padding: 10px 10px 10px 20px;margin-bottom: 20px;margin-top: 20px;background: rgb(249, 249, 249);border-left-color: rgb(92, 157, 255);">node-3<p style="font-size: 16px;line-height: 26px;color: rgb(153, 153, 153);padding-top: 3px;padding-bottom: 3px;"></p> </blockquote>包含10922到16383號(hào)哈希槽。

面試官:如何解決 Redis 數(shù)據(jù)傾斜、熱點(diǎn)等問(wèn)題

一致性梯度算法是1997年年麻省理工學(xué)院的Karger等人提出了,為的就是分散解決存儲(chǔ)的問(wèn)題。


??一致性對(duì)稱算法本質(zhì)上也是一種取模算法,相反按服務(wù)器數(shù)量取模,一致性哈希是對(duì)固定值 2^32 取模。??????????公式 = hash(key) % 2^32????????????其取模的結(jié)果必然在 [0, 2^32-1]區(qū)間這個(gè)中的整數(shù),??從圓上映射的位置開(kāi)始順時(shí)針?lè)较蛘业降牡谝粋€(gè)節(jié)點(diǎn)即為存儲(chǔ)key的節(jié)點(diǎn)????????????????

一致性哈希算法大大緩解了擴(kuò)容或者縮容導(dǎo)致的緩存失效問(wèn)題,只影響本節(jié)點(diǎn)負(fù)責(zé)的那一小段key。如果集群的機(jī)器不多,且平時(shí)單機(jī)的負(fù)載水位很高,某個(gè)節(jié)點(diǎn)宕機(jī)帶來(lái)的壓力很容易引發(fā)雪崩效應(yīng)。


舉個(gè)例子:

Redis 集群 總共有4臺(tái)機(jī)器,假設(shè)數(shù)據(jù)分布均衡,每臺(tái)機(jī)器承擔(dān) 四分之一的流量,如果某一臺(tái)機(jī)器突然掛了,順時(shí)針?lè)较蛳乱慌_(tái)機(jī)器將要承擔(dān)這多出來(lái)的 四分之一 流量,最終要承擔(dān) 二分之一 的流量,還是有點(diǎn)恐怖。

但是如果采用 <span style="font-size: 16px;">CRC16</span>CRC16計(jì)算后,并結(jié)合槽位與實(shí)例的綁定關(guān)系,無(wú)論是擴(kuò)容還是縮容,只需將相應(yīng)節(jié)點(diǎn)的key做下數(shù)據(jù)平滑遷移,廣播存儲(chǔ)新的槽位映射關(guān)系,不會(huì)產(chǎn)生緩存失效,靈活性很高。

另外,如果服務(wù)器節(jié)點(diǎn)配置存在差異化,我們可以自定義分配不同節(jié)點(diǎn)負(fù)責(zé)的 slot 編號(hào),調(diào)整不同節(jié)點(diǎn)的負(fù)載能力,非常方便。

??

以上是面試官:如何解決 Redis 數(shù)據(jù)傾斜、熱點(diǎn)等問(wèn)題的詳細(xì)內(nèi)容。更多信息請(qǐng)關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請(qǐng)聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動(dòng)的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機(jī)

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強(qiáng)大的PHP集成開(kāi)發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺(jué)化網(wǎng)頁(yè)開(kāi)發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)代碼編輯軟件(SublimeText3)

熱門(mén)話題

Java Classloader在內(nèi)部如何工作 Java Classloader在內(nèi)部如何工作 Jul 06, 2025 am 02:53 AM

Java的類加載機(jī)制通過(guò)ClassLoader實(shí)現(xiàn),其核心工作流程分為加載、鏈接和初始化三個(gè)階段。加載階段由ClassLoader動(dòng)態(tài)讀取類的字節(jié)碼并創(chuàng)建Class對(duì)象;鏈接包括驗(yàn)證類的正確性、為靜態(tài)變量分配內(nèi)存及解析符號(hào)引用;初始化則執(zhí)行靜態(tài)代碼塊和靜態(tài)變量賦值。類加載采用雙親委派模型,優(yōu)先委托父類加載器查找類,依次嘗試Bootstrap、Extension和ApplicationClassLoader,確保核心類庫(kù)安全且避免重復(fù)加載。開(kāi)發(fā)者可自定義ClassLoader,如URLClassL

現(xiàn)代爪哇的異步編程技術(shù) 現(xiàn)代爪哇的異步編程技術(shù) Jul 07, 2025 am 02:24 AM

Java支持異步編程的方式包括使用CompletableFuture、響應(yīng)式流(如ProjectReactor)以及Java19 中的虛擬線程。1.CompletableFuture通過(guò)鏈?zhǔn)秸{(diào)用提升代碼可讀性和維護(hù)性,支持任務(wù)編排和異常處理;2.ProjectReactor提供Mono和Flux類型實(shí)現(xiàn)響應(yīng)式編程,具備背壓機(jī)制和豐富的操作符;3.虛擬線程減少并發(fā)成本,適用于I/O密集型任務(wù),與傳統(tǒng)平臺(tái)線程相比更輕量且易于擴(kuò)展。每種方式均有適用場(chǎng)景,應(yīng)根據(jù)需求選擇合適工具并避免混合模型以保持簡(jiǎn)潔性

了解Java Nio及其優(yōu)勢(shì) 了解Java Nio及其優(yōu)勢(shì) Jul 08, 2025 am 02:55 AM

JavaNIO是Java1.4引入的新型IOAPI,1)面向緩沖區(qū)和通道,2)包含Buffer、Channel和Selector核心組件,3)支持非阻塞模式,4)相比傳統(tǒng)IO更高效處理并發(fā)連接。其優(yōu)勢(shì)體現(xiàn)在:1)非阻塞IO減少線程開(kāi)銷(xiāo),2)Buffer提升數(shù)據(jù)傳輸效率,3)Selector實(shí)現(xiàn)多路復(fù)用,4)內(nèi)存映射加快文件讀寫(xiě)。使用時(shí)需注意:1)Buffer的flip/clear操作易混淆,2)非阻塞下需手動(dòng)處理不完整數(shù)據(jù),3)Selector注冊(cè)需及時(shí)取消,4)NIO并非適用于所有場(chǎng)景。

在Java中使用枚舉的最佳實(shí)踐 在Java中使用枚舉的最佳實(shí)踐 Jul 07, 2025 am 02:35 AM

在Java中,枚舉(enum)適合表示固定常量集合,最佳實(shí)踐包括:1.用enum表示固定狀態(tài)或選項(xiàng),提升類型安全和可讀性;2.為枚舉添加屬性和方法以增強(qiáng)靈活性,如定義字段、構(gòu)造函數(shù)、輔助方法等;3.使用EnumMap和EnumSet提高性能和類型安全性,因其基于數(shù)組實(shí)現(xiàn)更高效;4.避免濫用enum,如動(dòng)態(tài)值、頻繁變更或復(fù)雜邏輯場(chǎng)景應(yīng)使用其他方式替代。正確使用enum能提升代碼質(zhì)量并減少錯(cuò)誤,但需注意其適用邊界。

如何在Java中正確處理異常? 如何在Java中正確處理異常? Jul 06, 2025 am 02:43 AM

處理Java中的異常關(guān)鍵在于捕獲得當(dāng)、處理明確、不掩蓋問(wèn)題。一要按需捕獲具體異常類型,避免籠統(tǒng)catch,優(yōu)先處理checkedexception,運(yùn)行時(shí)異常應(yīng)提前判斷;二要使用日志框架記錄異常,根據(jù)類型決定重試、回滾或拋出;三要利用finally塊釋放資源,推薦try-with-resources;四要合理定義自定義異常,繼承RuntimeException或Exception,攜帶上下文信息便于調(diào)試。

Java中的單例設(shè)計(jì)模式是什么? Java中的單例設(shè)計(jì)模式是什么? Jul 09, 2025 am 01:32 AM

單例設(shè)計(jì)模式在Java中通過(guò)私有構(gòu)造器和靜態(tài)方法確保一個(gè)類只有一個(gè)實(shí)例并提供全局訪問(wèn)點(diǎn),適用于控制共享資源的訪問(wèn)。實(shí)現(xiàn)方式包括:1.懶加載,即首次請(qǐng)求時(shí)才創(chuàng)建實(shí)例,適用于資源消耗大且不一定需要的情況;2.線程安全處理,通過(guò)同步方法或雙重檢查鎖定確保多線程環(huán)境下只創(chuàng)建一個(gè)實(shí)例,并減少性能影響;3.餓漢式加載,在類加載時(shí)直接初始化實(shí)例,適合輕量級(jí)對(duì)象或可接受提前初始化的場(chǎng)景;4.枚舉實(shí)現(xiàn),利用Java枚舉天然支持序列化、線程安全及防止反射攻擊的特性,是推薦的簡(jiǎn)潔可靠方式。不同實(shí)現(xiàn)方式可根據(jù)具體需求選

什么是匿名的內(nèi)部班級(jí)? 什么是匿名的內(nèi)部班級(jí)? Jul 07, 2025 am 02:18 AM

匿名內(nèi)部類在Java中用于即時(shí)創(chuàng)建子類或?qū)崿F(xiàn)接口,常用于覆蓋方法以實(shí)現(xiàn)特定目的,如GUI應(yīng)用中的事件處理。其語(yǔ)法形式為new接口或類后直接定義類體,并要求訪問(wèn)的局部變量必須是final或等效不可變的。它們雖便捷但不宜過(guò)度使用,尤其在邏輯復(fù)雜時(shí),可用Java8 的Lambda表達(dá)式替代。

Java字符串與StringBuilder vs StringBuffer Java字符串與StringBuilder vs StringBuffer Jul 09, 2025 am 01:02 AM

String不可變,StringBuilder可變且非線程安全,StringBuffer可變且線程安全。1.String一旦創(chuàng)建內(nèi)容不可修改,適合少量拼接;2.StringBuilder適合單線程頻繁拼接,性能高;3.StringBuffer適合多線程共享場(chǎng)景,但性能略低;4.合理設(shè)置初始容量、避免循環(huán)中用String拼接能提升性能。

See all articles