国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Java開(kāi)發(fā)面試--RabbitMQ專(zhuān)區(qū)

這篇具有很好參考價(jià)值的文章主要介紹了Java開(kāi)發(fā)面試--RabbitMQ專(zhuān)區(qū)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

Java開(kāi)發(fā)面試--RabbitMQ專(zhuān)區(qū),Java開(kāi)發(fā)面試,1024程序員節(jié),rabbitmq

1、 RabbitMQ 是什么,它的優(yōu)勢(shì)和使用場(chǎng)景是什么?

答:

RabbitMQ是一種開(kāi)源的消息代理和隊(duì)列服務(wù)器,它允許應(yīng)用程序順序地讀寫(xiě)、發(fā)送和接收消息?;贓rlang語(yǔ)言開(kāi)發(fā),支持多種客戶(hù)端,如Python、Ruby、.NET、Java等,支持多種消息協(xié)議,如AMQP、STOMP、MQTT等。

RabbitMQ的主要優(yōu)勢(shì)包括

  1. 可靠性:RabbitMQ使用一種事務(wù)機(jī)制來(lái)保證消息的安全交付,如果消費(fèi)者在處理消息時(shí)發(fā)生錯(cuò)誤,消息可以返回隊(duì)列重試或者轉(zhuǎn)入死信隊(duì)列,避免丟失。

  2. 擴(kuò)展性:可以通過(guò)添加更多的節(jié)點(diǎn)到現(xiàn)有的RabbitMQ服務(wù)器集群來(lái)提高處理能力,也可以通過(guò)隊(duì)列和交換機(jī)的配置選項(xiàng)來(lái)靈活的調(diào)度消息分發(fā)。

  3. 靈活的路由:通過(guò)直接、主題、頭部和扇出四種交換類(lèi)型,能夠滿足各種復(fù)雜的消息路由規(guī)則。

  4. 多協(xié)議支持:支持多種消息協(xié)議,比如AMQP、 STOMP、 MQTT等。

  5. 可追蹤:RabbitMQ易于監(jiān)控和追蹤,可以看到單個(gè)節(jié)點(diǎn)或群集的行為和消息的過(guò)程。

RabbitMQ的常見(jiàn)使用場(chǎng)景包括

  1. 解耦:當(dāng)你向?qū)⒁粋€(gè)大的服務(wù)或者系統(tǒng)拆解為一系列小的系統(tǒng)或服務(wù)時(shí),可以通過(guò)RabbitMQ來(lái)解耦這些系統(tǒng),使得系統(tǒng)之間的通信變得簡(jiǎn)單,便于獨(dú)立開(kāi)發(fā)和擴(kuò)展。

  2. 流量削峰:在高流量的系統(tǒng)中,可以通過(guò)RabbitMQ來(lái)緩存高峰期的消息,然后在合適的時(shí)候處理這些消息,從而防止因處理高流量導(dǎo)致的系統(tǒng)崩潰。

  3. 異步處理:如果有一些需要大量計(jì)算或者需要等待一段時(shí)間才能完成的任務(wù),可以通過(guò)RabbitMQ將請(qǐng)求作為消息放入隊(duì)列,然后由后臺(tái)的worker進(jìn)行異步處理。

  4. 消息分發(fā):當(dāng)你需要將消息或任務(wù)分發(fā)給多個(gè)worker進(jìn)行處理時(shí),可以通過(guò)RabbitMQ的發(fā)布/訂閱模式來(lái)完成。

2、 RabbitMQ 和其他消息中間件的區(qū)別是什么?

答:

  1. RabbitMQ vs ActiveMQ

    ActiveMQ是Apache提供的消息中間件,它也是基于AMQP協(xié)議實(shí)現(xiàn)的。兩者都支持事務(wù)處理和消息持久化,但在實(shí)現(xiàn)上略有差別。RabbitMQ的主要優(yōu)勢(shì)在于它的易用性,以及更強(qiáng)大的路由功能。在復(fù)雜的路由以及消息過(guò)濾方面,RabbitMQ由于其靈活的交換機(jī)類(lèi)型和綁定規(guī)則,往往更具優(yōu)勢(shì)。但是,ActiveMQ在某些方面也有優(yōu)勢(shì),例如,它支持JMS規(guī)范,對(duì)Java開(kāi)發(fā)者更友好,而且它對(duì)分布式事務(wù)(XA)有更好的支持。

  2. RabbitMQ vs Kafka

    Kafka是LinkedIn開(kāi)發(fā)的一款分布式流平臺(tái),它的設(shè)計(jì)初衷主要是為了處理大數(shù)據(jù)實(shí)時(shí)處理的場(chǎng)景。Kafka和RabbitMQ的主要區(qū)別在于消息處理的方式:RabbitMQ更適合傳統(tǒng)的消息隊(duì)列處理,而Kafka更多的是作為了流處理平臺(tái)。此外,Kafka的吞吐量比RabbitMQ大很多,因此它經(jīng)常被用于日志收集和大數(shù)據(jù)處理的場(chǎng)景。但是,RabbitMQ在消息路由和多協(xié)議支持方面具有優(yōu)勢(shì)。

  3. RabbitMQ vs RocketMQ

    RocketMQ是阿里巴巴開(kāi)發(fā)的消息中間件,這是一種針對(duì)大規(guī)模消息處理的解決方案。RocketMQ的主要優(yōu)勢(shì)在于它的性能和可擴(kuò)展性,它能夠處理高并發(fā)、大規(guī)模的消息隊(duì)列,因此經(jīng)常被用于電商等交易量大、需求實(shí)時(shí)性高的場(chǎng)景。同時(shí),RocketMQ也支持事務(wù)消息、定時(shí)消息等特性。相較于RocketMQ,RabbitMQ更輕量級(jí),部署和配置也相對(duì)簡(jiǎn)單。

3、RabbitMQ 的主要組件是什么?請(qǐng)簡(jiǎn)單描述它們的作用。

答:

  1. Producer(生產(chǎn)者):生產(chǎn)者是創(chuàng)建消息并發(fā)送消息到RabbitMQ broker的應(yīng)用程序。消息可以包含任意的信息,通常用于在應(yīng)用程序或服務(wù)之間傳輸數(shù)據(jù)。

  2. Consumer(消費(fèi)者):消費(fèi)者是從RabbitMQ broker接收消息并處理消息的應(yīng)用程序。多個(gè)消費(fèi)者可以同時(shí)接收和處理隊(duì)列中的消息。

  3. Broker(服務(wù)器):RabbitMQ服務(wù)器,也叫做Broker,是存儲(chǔ)和路由消息的主體。生產(chǎn)者將消息發(fā)布到Broker,消費(fèi)者則從Broker接收消息。

  4. Queues(隊(duì)列):隊(duì)列被用來(lái)存儲(chǔ)消息。消息在隊(duì)列中等待被消費(fèi)者消費(fèi)。RabbitMQ中的隊(duì)列是多生產(chǎn)者和多消費(fèi)者模型。

  5. Exchanges(交換器):交換器是RabbitMQ的核心,它負(fù)責(zé)接收生產(chǎn)者發(fā)送的消息并根據(jù)路由規(guī)則將其路由到相應(yīng)的隊(duì)列中。RabbitMQ包含幾種類(lèi)型的交換器,包括direct、fanout、topic和headers。

  6. Bindings(綁定):綁定定義了交換器和隊(duì)列之間的關(guān)系。綁定可以包含路由鍵,RabbitMQ將使用該路由鍵來(lái)確定如何路由消息。

  7. Channels(通道):通道是在TCP連接內(nèi)部建立的虛擬連接,通道是發(fā)送和接收大多數(shù)命令的地方,比如發(fā)布消息、訂閱隊(duì)列等。通過(guò)復(fù)用TCP連接,可以減少創(chuàng)建TCP連接的開(kāi)銷(xiāo),以及操作系統(tǒng)維護(hù)大量TCP連接的負(fù)擔(dān)。

  8. Connections(連接):這是指RabbitMQ Broker和生產(chǎn)者、消費(fèi)者之間的網(wǎng)絡(luò)連接。在該連接上,通訊雙方可以建立多個(gè)Channels進(jìn)行數(shù)據(jù)交互。

4、 RabbitMQ 消息傳遞的過(guò)程是什么樣的?請(qǐng)盡量詳細(xì)地描述。

答:

RabbitMQ的消息傳遞過(guò)程包括以下幾個(gè)步驟:

  1. 生產(chǎn)消息:首先,生產(chǎn)者創(chuàng)建一條消息,這個(gè)消息可以包含兩部分信息,消息頭和消息體。消息頭一般包含了一些元數(shù)據(jù),比如路由鍵(routing key)、交換器名稱(chēng)等。消息體則是真正需要傳遞的數(shù)據(jù)。

  2. 發(fā)送消息到交換器:然后,生產(chǎn)者將消息發(fā)布到RabbitMQ broker中的一個(gè)交換器上。生產(chǎn)者在發(fā)送消息時(shí),會(huì)指定一個(gè)交換器和路由鍵,這個(gè)交換器負(fù)責(zé)接收生產(chǎn)者的消息,并根據(jù)路由鍵將消息路由到一個(gè)或多個(gè)隊(duì)列。

  3. 路由消息到隊(duì)列:交換器接收到消息后,將根據(jù)消息的路由鍵和它自身類(lèi)型(direct、topic、fanout或headers等)以及當(dāng)前的綁定規(guī)則,決定將消息路由到哪一個(gè)或哪些隊(duì)列上。如果找不到符合條件的隊(duì)列,那么這條消息可能會(huì)被丟棄,或者返回給生產(chǎn)者,具體行為取決于生產(chǎn)者在發(fā)布消息時(shí)的一些參數(shù)設(shè)置。

  4. 消費(fèi)消息:最后,RabbitMQ的消費(fèi)者從隊(duì)列中獲取到消息并處理。消費(fèi)者和隊(duì)列之間通常是持久訂閱關(guān)系,消費(fèi)者一旦啟動(dòng),會(huì)不斷的從隊(duì)列中拉取消息來(lái)處理。處理完成之后,消費(fèi)者需要向RabbitMQ發(fā)送一個(gè)確認(rèn)信號(hào),告訴RabbitMQ這個(gè)消息已經(jīng)被正確處理,RabbitMQ收到確認(rèn)信號(hào)后,會(huì)從隊(duì)列中移除這條消息。

5、RabbitMQ 如何實(shí)現(xiàn)延遲消息?

答:

延遲消息是指消息被發(fā)送后,不會(huì)立即被消費(fèi),而是需要等待指定的延遲時(shí)間后才能被消費(fèi)。RabbitMQ可以通過(guò)兩種方式實(shí)現(xiàn)延遲消息:

  1. 使用RabbitMQ的Dead-letter功能和TTL(Time to Live)屬性:這種方法需要使用RabbitMQ的兩個(gè)特性:消息TTL和死信交換器。消息TTL是設(shè)置消息在隊(duì)列中的生存時(shí)間,如果超過(guò)這個(gè)時(shí)間消息還沒(méi)有被消費(fèi),那么這個(gè)消息就會(huì)被標(biāo)記為死信。死信交換器是用來(lái)處理死信的交換器,當(dāng)消息變成死信后,RabbitMQ會(huì)自動(dòng)將其發(fā)送到綁定的死信交換器上。

    具體過(guò)程如下:

    • 當(dāng)生產(chǎn)者發(fā)送消息時(shí),在消息或者隊(duì)列上設(shè)置TTL屬性,這個(gè)屬性表示消息在隊(duì)列中的生存時(shí)間。

    • 同時(shí),在隊(duì)列上設(shè)置x-dead-letter-exchange參數(shù),這個(gè)參數(shù)表示當(dāng)前隊(duì)列的死信交換器。

    • 當(dāng)消息因?yàn)槌^(guò)TTL變成死信后,RabbitMQ會(huì)將其發(fā)送到上面設(shè)置的死信交換器上。

    • 死信交換器上需要綁定一個(gè)或多個(gè)隊(duì)列,這些隊(duì)列的消費(fèi)者就可以消費(fèi)到這些“延遲”的消息了。

    這種方法的缺點(diǎn)是在延遲時(shí)間很長(zhǎng),且消息較多的情況下,會(huì)浪費(fèi)大量的存儲(chǔ)空間,因?yàn)樗醒舆t消息在RabbitMQ中都按照消息形式存儲(chǔ)。

  2. 使用RabbitMQ的插件rabbitmq_delayed_message_exchange:這是RabbitMQ社區(qū)提供的一個(gè)插件,它提供了一個(gè)新類(lèi)型的交換器,叫做x-delayed-message。使用這個(gè)交換器,生產(chǎn)者在發(fā)送消息時(shí),可以在消息頭部的“x-delay”參數(shù)上,設(shè)置消息的延遲時(shí)間(單位為毫秒)。然后,在RabbitMQ端,消息在被路由到隊(duì)列之前,會(huì)先等待指定的延遲時(shí)間。 這種方式的優(yōu)點(diǎn)是使用簡(jiǎn)單,缺點(diǎn)是需要在RabbitMQ服務(wù)器上安裝插件。

6、RabbitMQ 如何實(shí)現(xiàn)消息確認(rèn)機(jī)制?

答:

RabbitMQ實(shí)現(xiàn)消息確認(rèn)機(jī)制主要有兩種方式:

  1. 生產(chǎn)者發(fā)布確認(rèn)(Publisher Confirms):這是RabbitMQ針對(duì)生產(chǎn)者的消息確認(rèn)機(jī)制。生產(chǎn)者在發(fā)布消息到交換器時(shí),可以指定該消息需要RabbitMQ的確認(rèn)。RabbitMQ收到消息后,會(huì)返回一個(gè)確認(rèn)消息給生產(chǎn)者。如果生產(chǎn)者沒(méi)有收到確認(rèn)消息,那么就有可能需要重新發(fā)送該消息。這種機(jī)制保證了消息被成功接收到RabbitMQ。

    在Java的RabbitMQ客戶(hù)端中,可以通過(guò)調(diào)用Channel的confirmSelect方法來(lái)啟用發(fā)布確認(rèn),然后發(fā)布消息后調(diào)用waitForConfirms方法來(lái)等待RabbitMQ的確認(rèn)。如果消息發(fā)布成功,waitForConfirms會(huì)返回true,否則返回false。

  2. 消費(fèi)者消息確認(rèn)(Consumer Acknowledgements):這是RabbitMQ針對(duì)消費(fèi)者的消息確認(rèn)機(jī)制。消費(fèi)者從隊(duì)列中獲取消息后,完成消息處理,然后需要向RabbitMQ發(fā)送一個(gè)確認(rèn)消息,告訴RabbitMQ這個(gè)消息已經(jīng)被處理,可以從隊(duì)列中刪除了。這種機(jī)制保證了每個(gè)消息都被成功處理。

    在Java的RabbitMQ客戶(hù)端中,消費(fèi)者在注冊(cè)時(shí),可以指定是否需要自動(dòng)確認(rèn)。如果需要手動(dòng)確認(rèn),可以調(diào)用Channel的basicAck方法來(lái)確認(rèn)消息。如果處理消息時(shí)出錯(cuò),還可以調(diào)用basicNack或者basicReject方法,告訴RabbitMQ消息處理失敗,RabbitMQ可以選擇將消息重新放回隊(duì)列,或者發(fā)送給其他消費(fèi)者。

7、RabbitMQ 如何實(shí)現(xiàn)消費(fèi)者限流?

答:

  1. RabbitMQ提供了QoS(服務(wù)質(zhì)量)設(shè)置,可以實(shí)現(xiàn)消費(fèi)者限流。具體來(lái)說(shuō),通過(guò)設(shè)置每個(gè)消費(fèi)者一次可以預(yù)取(prefetch)的消息數(shù)量,就可以實(shí)現(xiàn)限流。

  2. 在Java的RabbitMQ客戶(hù)端中,可以通過(guò)調(diào)用Channel的basicQos方法來(lái)設(shè)置預(yù)取數(shù)量。預(yù)取數(shù)量表示消費(fèi)者一次性能從RabbitMQ的服務(wù)器獲取的消息數(shù)量。如果設(shè)置為1,那么意味著消費(fèi)者處理完一個(gè)消息并發(fā)送確認(rèn)后,才會(huì)再次向RabbitMQ獲取一個(gè)消息來(lái)處理。

  3. 預(yù)取數(shù)量的設(shè)定,既要考慮到消費(fèi)者的處理能力,也要考慮到系統(tǒng)的實(shí)時(shí)性和資源利用率。如果預(yù)取數(shù)量設(shè)定太大,那么如果某個(gè)消費(fèi)者處理消息很慢,可能會(huì)堆積大量的未處理消息,浪費(fèi)內(nèi)存資源,也會(huì)影響系統(tǒng)的實(shí)時(shí)性;如果設(shè)定太小,那么消費(fèi)者可能會(huì)頻繁地向RabbitMQ請(qǐng)求消息,增加了網(wǎng)絡(luò)開(kāi)銷(xiāo),而且如果消費(fèi)者處理消息很快,可能會(huì)導(dǎo)致消費(fèi)者的空閑時(shí)間增加。

  4. 除了預(yù)取數(shù)量,還可以設(shè)置預(yù)取大?。╬refetch size)。這是一個(gè)更細(xì)粒度的控制,表示消費(fèi)者一次能從RabbitMQ獲取的消息的總體積大小。但是要注意,設(shè)置預(yù)取大小需要RabbitMQ服務(wù)器和客戶(hù)端都支持。

8、RabbitMQ 可以和哪些編程語(yǔ)言進(jìn)行交互?

答:

RabbitMQ提供了許多編程語(yǔ)言的客戶(hù)端庫(kù)支持,因此可以和多種編程語(yǔ)言進(jìn)行交互。以下是一些主要的編程語(yǔ)言:

  1. Java:RabbitMQ提供了一個(gè)Java客戶(hù)端庫(kù),使用AMQP協(xié)議和RabbitMQ進(jìn)行交互。它提供了功能強(qiáng)大,操作簡(jiǎn)單的接口,可以很方便的在Java程序中集成RabbitMQ。

  2. Python:RabbitMQ為Python提供了pika和kombu兩個(gè)客戶(hù)端庫(kù)。pika是RabbitMQ官方推薦的Python客戶(hù)端庫(kù),提供了純Python實(shí)現(xiàn)的功能完備的AMQP 0-9-1客戶(hù)端API;kombu是一個(gè)消息框架,除了支持RabbitMQ,還支持Redis、Amazon SQS和ZooKeeper等多種消息隊(duì)列。

  3. .NET/C#:RabbitMQ提供了一個(gè).NET客戶(hù)端庫(kù),用于在.NET/C#應(yīng)用程序中與RabbitMQ進(jìn)行交互。

  4. JavaScript/Node.js:amqplib是一個(gè)開(kāi)源的Node.js AMQP客戶(hù)端,用于在Node.js應(yīng)用程序中與RabbitMQ進(jìn)行交互。

  5. Ruby:RabbitMQ提供了bunny和amqp兩個(gè)Ruby客戶(hù)端庫(kù),用于在Ruby應(yīng)用程序中與RabbitMQ進(jìn)行交互。

  6. PHP: php-amqplib提供了一個(gè)PHP客戶(hù)端庫(kù),用于在PHP應(yīng)用程序中與RabbitMQ進(jìn)行交互。

9、RabbitMQ 的消息模型是什么?可以詳細(xì)描述一下其核心概念,例如生產(chǎn)者、消費(fèi)者、隊(duì)列、交換機(jī)、綁定等。

答:

RabbitMQ的消息模型是基于AMQP協(xié)議的,其核心概念包括生產(chǎn)者、消費(fèi)者、隊(duì)列、交換機(jī)和綁定。以下對(duì)這些概念進(jìn)行詳細(xì)描述:

  1. 生產(chǎn)者(Producer):生產(chǎn)者是消息的發(fā)送方,負(fù)責(zé)創(chuàng)建消息并將其發(fā)布到RabbitMQ中。

  2. 消費(fèi)者(Consumer):消費(fèi)者是消息的接收方,負(fù)責(zé)從RabbitMQ中取出消息并進(jìn)行處理。

  3. 隊(duì)列(Queue):在RabbitMQ中,消息是存儲(chǔ)在隊(duì)列里的。消費(fèi)者從隊(duì)列中獲取消息,生產(chǎn)者將消息發(fā)送到交換器,然后由交換器路由到相應(yīng)的隊(duì)列。

  4. 交換器(Exchange):交換器的主要作用是接收生產(chǎn)者發(fā)送的消息,然后根據(jù)特定規(guī)則將消息路由到一個(gè)或多個(gè)隊(duì)列。RabbitMQ提供了幾種類(lèi)型的交換器:Direct(直接), Topic(主題), Fanout(扇出)和 Headers,每種類(lèi)型的交換器都有不同的路由策略。

  5. 綁定(Binding):綁定是連接交換器和隊(duì)列的規(guī)則。交換器根據(jù)這些規(guī)則來(lái)決定消息送往哪個(gè)隊(duì)列。綁定可以帶有一個(gè)Optional的Routing key,此key在交換器類(lèi)型為Direct和Topic時(shí)起作用。

10、RabbitMQ 中的交換機(jī)類(lèi)型有哪些?它們之間的區(qū)別是什么?在什么情況下選擇使用不同的交換機(jī)類(lèi)型?

答:

RabbitMQ中的交換機(jī)主要有四種類(lèi)型

  1. Direct Exchange(直接交換機(jī)):這是最簡(jiǎn)單的交換機(jī)類(lèi)型。它會(huì)將消息路由到那些binding key與routing key完全匹配的隊(duì)列中。

    在路由規(guī)則需要簡(jiǎn)單且明確,且只需要將消息路由到一個(gè)或少數(shù)幾個(gè)隊(duì)列的情況下使用。

  2. Fanout Exchange(扇出交換機(jī)):它會(huì)忽略binding key和routing key,將所有發(fā)送到該交換機(jī)的消息路由到所有與它綁定的隊(duì)列中。

    當(dāng)你希望消息廣播到所有的消費(fèi)者時(shí),可以選擇使用。

  3. Topic Exchange(主題交換機(jī)):它允許在binding key和routing key之間進(jìn)行模糊匹配,規(guī)則為"*"匹配一個(gè)單詞,"#"匹配零個(gè)或多個(gè)單詞。這種交換機(jī)在處理較為復(fù)雜的路由情況,如多層級(jí)、分類(lèi)的路由時(shí)非常有用。

  4. Headers Exchange(頭交換機(jī)):它不依賴(lài)routing key進(jìn)行路由,而是根據(jù)發(fā)送的消息內(nèi)容中的headers屬性進(jìn)行匹配。如果定義的多個(gè)headers屬性都匹配上,那么該消息就會(huì)路由到對(duì)應(yīng)的隊(duì)列上。在需要根據(jù)多個(gè)條件進(jìn)行復(fù)雜匹配規(guī)則的情況下可以選擇使用。

11、RabbitMQ 如何處理消息的持久化?在什么情況下需要將消息設(shè)置為持久化?

答:

RabbitMQ提供了消息的持久化功能,可以確保即使RabbitMQ服務(wù)器崩潰,消息也不會(huì)丟失。

消息的持久化主要涉及到三個(gè)方面

  1. 交換器的持久化:當(dāng)聲明交換器時(shí),可以通過(guò)設(shè)置"durable"參數(shù)為true,來(lái)使得交換器成為持久的。持久的交換器會(huì)在RabbitMQ服務(wù)器重啟后仍然存在。

  2. 隊(duì)列的持久化:同樣地,當(dāng)聲明隊(duì)列時(shí),也可以設(shè)置"durable"參數(shù)為true,使得隊(duì)列成為持久的。持久的隊(duì)列同樣會(huì)在RabbitMQ服務(wù)器重啟后仍然存在。

  3. 消息的持久化:在發(fā)送消息時(shí),可以設(shè)置消息的"deliveryMode"參數(shù)為2,使得消息成為持久的。持久的消息會(huì)被RabbitMQ存儲(chǔ)到磁盤(pán)上,即使RabbitMQ服務(wù)器重啟,消息也不會(huì)丟失。

    需要注意的是,消息的持久化并不能保證消息絕對(duì)的不丟失,因?yàn)閺南l(fā)送到真正寫(xiě)入磁盤(pán)之間存在一個(gè)時(shí)間窗口,如果在這個(gè)時(shí)間窗口內(nèi)RabbitMQ服務(wù)器崩潰,消息還是有可能丟失。為了保證消息的真正持久化,可以配合使用發(fā)布確認(rèn)(Publisher Confirms)機(jī)制。

消息的持久化會(huì)增加RabbitMQ的IO操作,可能會(huì)影響到RabbitMQ的性能。因此,是否需要將消息設(shè)置為持久化,取決于你對(duì)消息丟失的容忍度和對(duì)性能的需求。如果你不能容忍消息的丟失,那么就需要將消息設(shè)置為持久化;如果你對(duì)性能的需求較高,對(duì)消息的丟失可以容忍,那么就可以不需要設(shè)置消息持久化。

12、如何保證消息的順序性?

答:

在某些場(chǎng)景下,我們需要保證消息的順序性。例如,如果消息代表的是某個(gè)對(duì)象的狀態(tài)變化,那么就需要保證這些狀態(tài)變化的事件按照發(fā)生的順序被處理。

可以通過(guò)以下方式來(lái)保證消息的順序性

  1. 單一隊(duì)列、單一消費(fèi)者:由于RabbitMQ 保證消息在單一隊(duì)列中的順序,也就是說(shuō),消息是按照發(fā)送到隊(duì)列的順序來(lái)存儲(chǔ)的。如果隊(duì)列只有一個(gè)消費(fèi)者,那么消費(fèi)者就會(huì)按照消息的發(fā)送順序來(lái)處理消息,從而保證了消息的順序性。但是這種方法的缺點(diǎn)是無(wú)法進(jìn)行消費(fèi)者的并發(fā)處理,可能會(huì)影響到消息處理的吞吐量。

  2. 使用順序消息插件:RabbitMQ社區(qū)提供了一款插件rabbitmq-sequencer,用于在多個(gè)消費(fèi)者之間保證消息的順序性。但請(qǐng)注意這個(gè)插件可能存在一定的風(fēng)險(xiǎn),所以在生產(chǎn)環(huán)境使用前需要進(jìn)行充分的測(cè)試。

  3. 根據(jù)業(yè)務(wù)進(jìn)行分區(qū):將需要按照順序處理的消息(如同一用戶(hù)的操作行為)發(fā)送到同一個(gè)隊(duì)列。由于RabbitMQ 保證了單一隊(duì)列中的消息順序性,所以可以保證這類(lèi)消息的順序性。這種方法結(jié)合了前兩種方法的優(yōu)點(diǎn),既保證了消息的順序性,又能進(jìn)行消費(fèi)者的并發(fā)處理。

需要注意的是,RabbitMQ雖然可以提供消息的順序性,但最終是否能保證消息的順序性,還取決于消費(fèi)者消息處理的邏輯和整個(gè)系統(tǒng)的設(shè)計(jì)。

13、RabbitMQ 如何處理消費(fèi)者異常導(dǎo)致的消息丟失?

答:

如果消費(fèi)者由于異常情況導(dǎo)致消息丟失,可以通過(guò)以下方式來(lái)處理:

  1. 設(shè)置手動(dòng)消息確認(rèn)模式:在消費(fèi)者端,可以將消息確認(rèn)模式設(shè)置為手動(dòng)(manual)模式。這樣,在消費(fèi)者成功處理完一條消息后,手動(dòng)調(diào)用channel.basicAck(deliveryTag, false)來(lái)確認(rèn)消息,告知RabbitMQ該消息已經(jīng)被處理。如果消費(fèi)者在處理消息期間發(fā)生異常,可以選擇不確認(rèn)消息,這樣消息會(huì)重新進(jìn)入隊(duì)列,等待其他消費(fèi)者重新消費(fèi)。

  2. 設(shè)置消息的TTL(Time-to-Live):可以給消息設(shè)置一個(gè)過(guò)期時(shí)間,即消息的TTL。當(dāng)消息的TTL過(guò)期時(shí),RabbitMQ會(huì)將其標(biāo)記為過(guò)期,并將其丟棄。通過(guò)設(shè)置合理的TTL,可以保證異常情況下未及時(shí)消費(fèi)的消息不會(huì)一直堆積在隊(duì)列中,從而避免消息堆積過(guò)多的問(wèn)題。

  3. 使用死信隊(duì)列(Dead-Letter Queue):可以設(shè)置一個(gè)死信隊(duì)列來(lái)接收由于消費(fèi)者異常導(dǎo)致的消息。當(dāng)消費(fèi)者無(wú)法成功處理消息時(shí),可以將消息發(fā)送到死信隊(duì)列,以便后續(xù)進(jìn)行處理??梢允褂肦abbitMQ的DLX(Dead-Letter Exchange)機(jī)制,將具有異常的消息路由到一個(gè)特定的死信交換器,再通過(guò)死信交換器將消息發(fā)送到死信隊(duì)列。

  4. 處理消費(fèi)者異常:消費(fèi)者應(yīng)該捕獲處理異常,并進(jìn)行相應(yīng)的日志記錄,以便排查和處理問(wèn)題??梢允褂胻ry-catch塊來(lái)捕獲異常,并在異常處理邏輯中選擇是否確認(rèn)消息、發(fā)送到死信隊(duì)列等操作。

需要注意的是,以上方法僅能盡量減少消息丟失的可能性,并不能完全避免。因此,在設(shè)計(jì)系統(tǒng)時(shí),還需要考慮一些附加的安全機(jī)制,例如備份消費(fèi)者、消息持久化等,來(lái)提高系統(tǒng)的可靠性和魯棒性。

14、RabbitMQ 如何實(shí)現(xiàn)消息的重試機(jī)制?有哪些常見(jiàn)的重試策略?

答:

實(shí)現(xiàn)消息的重試機(jī)制可以通過(guò)以下兩種方式來(lái)實(shí)現(xiàn):

  1. 使用延遲隊(duì)列:將需要進(jìn)行重試的消息發(fā)送到一個(gè)延遲隊(duì)列中,該隊(duì)列將消息暫存一段時(shí)間,當(dāng)指定的時(shí)間到達(dá)后,將消息重新發(fā)送到原隊(duì)列,等待重新消費(fèi)??梢酝ㄟ^(guò)設(shè)置隊(duì)列的x-dead-letter-exchangex-dead-letter-routing-key參數(shù),將延遲隊(duì)列中的消息轉(zhuǎn)發(fā)到原隊(duì)列中。

  2. 手動(dòng)重試:通過(guò)捕獲異常信息,在消費(fèi)者端主動(dòng)重試消費(fèi)失敗的消息??梢栽谥卦囍?,將消息的重試次數(shù)遞增,并設(shè)定最大重試次數(shù)。當(dāng)重試次數(shù)達(dá)到限制時(shí),可將消息發(fā)送到死信隊(duì)列,不再進(jìn)行重試。

常見(jiàn)的重試策略有以下幾種:

  1. 固定間隔重試:指定一個(gè)固定的時(shí)間間隔,在每次重試時(shí)都按照該間隔進(jìn)行重試。例如,每10秒鐘重試一次。

  2. 指數(shù)退避重試:在每次重試之后,將重試的時(shí)間間隔乘以一個(gè)增長(zhǎng)因子,從而實(shí)現(xiàn)指數(shù)退避,避免連續(xù)重試。例如,第一次重試等待5秒,第二次重試等待10秒,第三次重試等待20秒,以此類(lèi)推。

  3. 隨機(jī)間隔重試:在每次重試時(shí),隨機(jī)生成一個(gè)時(shí)間間隔,避免多個(gè)消費(fèi)者同時(shí)進(jìn)行重試。例如,每次重試之前,等待1-10秒鐘的隨機(jī)時(shí)間。

重試策略需要根據(jù)實(shí)際業(yè)務(wù)場(chǎng)景進(jìn)行選擇和調(diào)整,并且也需要考慮到系統(tǒng)的性能和可靠性。

15、RabbitMQ 如何實(shí)現(xiàn)分布式事務(wù)?

答:

RabbitMQ是一個(gè)消息中間件,本身并不支持分布式事務(wù)。但可以通過(guò)以下幾種方式來(lái)實(shí)現(xiàn)分布式事務(wù):

  1. 使用事務(wù)機(jī)制:在消費(fèi)者端使用事務(wù)機(jī)制,包括開(kāi)啟事務(wù)、執(zhí)行事務(wù)操作、提交或回滾事務(wù)。在開(kāi)啟事務(wù)之后,執(zhí)行所有操作并最終進(jìn)行提交或回滾。這種方式可以確保所有的操作要么全部成功,要么全部失敗。但是,由于事務(wù)機(jī)制的開(kāi)銷(xiāo)比較大,這種方式會(huì)影響系統(tǒng)的性能。

  2. 使用異步確認(rèn)模式:在消費(fèi)者端使用異步確認(rèn)模式,即在接收到消息時(shí),先將消息狀態(tài)改為“未確認(rèn)”,然后在消費(fèi)者處理完該消息后,發(fā)送確認(rèn)消息給RabbitMQ,將消息狀態(tài)改為“已確認(rèn)”。如果消費(fèi)者異常終止,則消息會(huì)重新被投遞到隊(duì)列中。但是,由于消息的異步確認(rèn)不能保證事務(wù)性,可能會(huì)造成消息重復(fù)或丟失等情況。

  3. 使用兩階段提交:在生產(chǎn)者端和消費(fèi)者端均使用兩階段提交模式。由一個(gè)協(xié)調(diào)者來(lái)協(xié)調(diào)并統(tǒng)一提交或回滾操作,以保證事務(wù)的一致性。但是,兩階段提交需要增加額外的復(fù)雜性,并且因?yàn)樾枰獏f(xié)調(diào)者的參與,可能會(huì)影響系統(tǒng)的性能和可靠性。

  4. 使用可靠消息投遞模式:通過(guò)使用RabbitMQ的可靠消息投遞模式,可以保證消息傳遞的可靠性。在生產(chǎn)者發(fā)送消息時(shí),將消息設(shè)置為持久化消息,并開(kāi)啟事務(wù)機(jī)制;在消費(fèi)者處理消息時(shí),也將消息標(biāo)記為已處理,并在處理完所有消息之后再進(jìn)行事務(wù)提交。這樣可以確保消息能夠成功投遞,并且保證消費(fèi)者端的數(shù)據(jù)一致性。

需要注意的是,以上方式均不是完整的分布式事務(wù)實(shí)現(xiàn)方式,都需要根據(jù)實(shí)際業(yè)務(wù)場(chǎng)景進(jìn)行選擇和調(diào)整。同時(shí),為了保證系統(tǒng)的可靠性和魯棒性,還需要考慮一些附加的安全機(jī)制,例如備份消費(fèi)者、消息持久化等。

16、RabbitMQ 如何處理消息的過(guò)期?

答:

在RabbitMQ中,可以通過(guò)設(shè)置消息TTL(Time-To-Live)來(lái)控制消息的過(guò)期時(shí)間。當(dāng)消息的TTL過(guò)期時(shí),RabbitMQ會(huì)將該消息從隊(duì)列中移除,并將其發(fā)送到死信隊(duì)列,以便進(jìn)行其他處理。

通常情況下,可以通過(guò)以下兩種方式來(lái)設(shè)置消息的TTL

  1. 消息級(jí)別的TTL:針對(duì)單個(gè)消息進(jìn)行TTL設(shè)置,即在生產(chǎn)者端設(shè)置消息的過(guò)期時(shí)間??梢酝ㄟ^(guò)在發(fā)送消息時(shí),在消息的屬性中設(shè)置expiration字段,指定消息的TTL。

  2. 隊(duì)列級(jí)別的TTL:對(duì)整個(gè)隊(duì)列中的消息進(jìn)行TTL設(shè)置,即在創(chuàng)建隊(duì)列時(shí)設(shè)置隊(duì)列的TTL??梢酝ㄟ^(guò)在聲明隊(duì)列時(shí),設(shè)置x-message-ttl參數(shù)來(lái)指定隊(duì)列的TTL。

需要注意的是,TTL設(shè)置的精確度的取決于RabbitMQ的檢查間隔和負(fù)載。因此,不應(yīng)該將TTL設(shè)置得過(guò)短,以避免因不必要的性能開(kāi)銷(xiāo)而對(duì)系統(tǒng)造成負(fù)擔(dān)。同時(shí),還需要考慮到消息在隊(duì)列中的存活時(shí)間、隊(duì)列大小等因素。

17、RabbitMQ 如何實(shí)現(xiàn)死信隊(duì)列?什么情況下會(huì)出現(xiàn)死信隊(duì)列?

答:

在RabbitMQ中,可以通過(guò)設(shè)置死信交換機(jī)和死信隊(duì)列來(lái)實(shí)現(xiàn)死信隊(duì)列的功能。

要實(shí)現(xiàn)死信隊(duì)列,需要以下幾個(gè)步驟:

  1. 定義死信交換機(jī)和死信隊(duì)列:首先,需要定義一個(gè)死信交換機(jī)和一個(gè)用于存儲(chǔ)死信消息的死信隊(duì)列??梢允褂?code>direct、fanouttopic類(lèi)型的交換機(jī),具體根據(jù)業(yè)務(wù)需求來(lái)選擇。

  2. 設(shè)置源隊(duì)列的相關(guān)參數(shù):在源隊(duì)列(例如普通的業(yè)務(wù)隊(duì)列)的聲明時(shí),需要設(shè)置一些相關(guān)參數(shù)來(lái)指定死信隊(duì)列的信息??梢酝ㄟ^(guò)在聲明隊(duì)列時(shí),設(shè)置x-dead-letter-exchangex-dead-letter-routing-key參數(shù)來(lái)指定死信交換機(jī)和死信隊(duì)列的路由規(guī)則。

  3. 將源隊(duì)列綁定到死信交換機(jī):在聲明死信隊(duì)列之后,需要將源隊(duì)列與死信交換機(jī)進(jìn)行綁定,以便將過(guò)期或被拒絕的消息發(fā)送到死信隊(duì)列。

  4. 處理死信隊(duì)列的消息:在定義死信隊(duì)列的消費(fèi)者端,可以針對(duì)死信隊(duì)列中的消息進(jìn)行特定的處理,例如記錄日志、重試或其他業(yè)務(wù)邏輯。

死信隊(duì)列通常出現(xiàn)在以下情況

  1. 消息過(guò)期:當(dāng)消息的TTL過(guò)期時(shí),會(huì)被發(fā)送到死信隊(duì)列。可以通過(guò)設(shè)置消息的TTL(Time-To-Live)來(lái)控制消息的過(guò)期時(shí)間。

  2. 消息被拒絕:當(dāng)消費(fèi)者拒絕處理某條消息并將其標(biāo)記為拒絕時(shí),該消息也會(huì)被發(fā)送到死信隊(duì)列。例如,消費(fèi)者在處理消息時(shí)發(fā)現(xiàn)數(shù)據(jù)錯(cuò)誤或無(wú)法處理該消息,可選擇拒絕并將其發(fā)送到死信隊(duì)列。

  3. 隊(duì)列溢出:當(dāng)隊(duì)列達(dá)到最大長(zhǎng)度限制時(shí),新的消息無(wú)法入隊(duì),可以選擇將其中一些消息發(fā)送到死信隊(duì)列,以防止隊(duì)列溢出。

通過(guò)使用死信隊(duì)列,可以將無(wú)法處理的消息進(jìn)行處理或進(jìn)一步分析,以提高系統(tǒng)的可靠性和穩(wěn)定性。

18、RabbitMQ 如何實(shí)現(xiàn)消息的優(yōu)先級(jí)?

答:

在RabbitMQ中,默認(rèn)情況下是不支持消息的優(yōu)先級(jí)排序的。但是,可以通過(guò)一些技巧來(lái)實(shí)現(xiàn)消息的優(yōu)先級(jí)。

以下是一種常見(jiàn)的實(shí)現(xiàn)方式:

  1. 使用多個(gè)隊(duì)列:創(chuàng)建多個(gè)隊(duì)列,每個(gè)隊(duì)列對(duì)應(yīng)一個(gè)優(yōu)先級(jí)。例如,創(chuàng)建3個(gè)隊(duì)列,分別表示高、中、低優(yōu)先級(jí)。

  2. 設(shè)置消費(fèi)者的優(yōu)先級(jí):為了確保消息按照優(yōu)先級(jí)被消費(fèi),需為每個(gè)隊(duì)列創(chuàng)建對(duì)應(yīng)數(shù)量的消費(fèi)者。例如,為高優(yōu)先級(jí)隊(duì)列創(chuàng)建多個(gè)消費(fèi)者,中優(yōu)先級(jí)隊(duì)列創(chuàng)建適量的消費(fèi)者,低優(yōu)先級(jí)隊(duì)列同理。

  3. 發(fā)送消息到對(duì)應(yīng)的隊(duì)列:根據(jù)消息的優(yōu)先級(jí),將消息發(fā)送到對(duì)應(yīng)的隊(duì)列中。

這樣就可以模擬實(shí)現(xiàn)消息的優(yōu)先級(jí),因?yàn)橄M(fèi)者會(huì)根據(jù)隊(duì)列的優(yōu)先級(jí)順序去消費(fèi)消息,高優(yōu)先級(jí)隊(duì)列的消息會(huì)被更快地處理。

需要注意的是,這種方式只能在有限數(shù)量的優(yōu)先級(jí)下操作,并且需要額外創(chuàng)建消費(fèi)者。另外,由于RabbitMQ的負(fù)載均衡機(jī)制,消費(fèi)者可能無(wú)法按照完全相同的優(yōu)先級(jí)順序處理消息。如果需要更精細(xì)的消息優(yōu)先級(jí)控制,可能需要考慮其他消息中間件或自定義開(kāi)發(fā)的解決方案。

19、RabbitMQ 如何進(jìn)行集群部署?在集群中如何確保高可用性和負(fù)載均衡?

答:

  1. 集群概述

RabbitMQ集群是由多個(gè)節(jié)點(diǎn)組成的,每個(gè)節(jié)點(diǎn)都可以獨(dú)立地處理消息。集群中的每個(gè)節(jié)點(diǎn)都有相同的隊(duì)列和交換機(jī)信息,這意味著消息可以在集群中任何一個(gè)節(jié)點(diǎn)上被處理。集群中的節(jié)點(diǎn)可以通過(guò)網(wǎng)絡(luò)連接進(jìn)行通信,并且可以通過(guò)負(fù)載均衡器進(jìn)行流量分配。

  1. 集群部署

在部署RabbitMQ集群時(shí),需要考慮以下幾個(gè)方面:

  • 確定節(jié)點(diǎn)數(shù)量:通常情況下,集群中至少需要三個(gè)節(jié)點(diǎn)來(lái)確保高可用性。如果只有兩個(gè)節(jié)點(diǎn),則當(dāng)一個(gè)節(jié)點(diǎn)失敗時(shí),另一個(gè)節(jié)點(diǎn)將無(wú)法正常工作。

  • 配置節(jié)點(diǎn):每個(gè)節(jié)點(diǎn)都應(yīng)該使用相同的配置文件,以確保它們具有相同的隊(duì)列和交換機(jī)信息。配置文件中應(yīng)包括以下內(nèi)容:

    • 節(jié)點(diǎn)名稱(chēng)

    • 集群名稱(chēng)

    • 監(jiān)聽(tīng)端口

    • 存儲(chǔ)路徑

    • 內(nèi)存限制

  • 啟動(dòng)節(jié)點(diǎn):?jiǎn)?dòng)每個(gè)節(jié)點(diǎn)時(shí),需要指定節(jié)點(diǎn)名稱(chēng)和集群名稱(chēng)。節(jié)點(diǎn)名稱(chēng)應(yīng)該是唯一的,并且應(yīng)該在所有節(jié)點(diǎn)之間保持一致。

  1. 高可用性和負(fù)載均衡

為了確保高可用性和負(fù)載均衡,可以采用以下策略:

  • 使用負(fù)載均衡器:將流量分配到集群中的每個(gè)節(jié)點(diǎn)上,以確保負(fù)載均衡。

  • 配置鏡像隊(duì)列:在集群中的每個(gè)節(jié)點(diǎn)上創(chuàng)建相同的隊(duì)列,并將它們配置為鏡像隊(duì)列。這意味著當(dāng)一個(gè)節(jié)點(diǎn)失敗時(shí),其他節(jié)點(diǎn)可以繼續(xù)處理該隊(duì)列中的消息。

  • 使用HA模式:在集群中的每個(gè)節(jié)點(diǎn)上啟用HA模式,以確保隊(duì)列和交換機(jī)信息在所有節(jié)點(diǎn)之間進(jìn)行復(fù)制。這樣,當(dāng)一個(gè)節(jié)點(diǎn)失敗時(shí),其他節(jié)點(diǎn)可以繼續(xù)處理消息。

20、RabbitMQ 客戶(hù)端中常用的連接方式有哪些?它們之間有什么區(qū)別?

答:

  1. AMQP URI 連接方式

AMQP URI 連接方式是 RabbitMQ 客戶(hù)端連接 RabbitMQ 服務(wù)端最簡(jiǎn)單的方式之一,它使用一個(gè) URI 字符串來(lái)描述 RabbitMQ 的連接信息。這種方式可以通過(guò)解析 URI 字符串來(lái)創(chuàng)建 Connection 對(duì)象。

  1. 連接工廠(ConnectionFactory)連接方式

連接工廠(ConnectionFactory)連接方式是另一種常用的連接方式,它使用 ConnectionFactory對(duì)象來(lái)創(chuàng)建 Connection 對(duì)象。ConnectionFactory 對(duì)象包含了 RabbitMQ 的連接信息,例如主機(jī)名、端口號(hào)、虛擬主機(jī)等。使用 ConnectionFactory 連接方式可以更加靈活地配置連接參數(shù)。

  1. 集成框架連接方式

除了上述兩種方式外,還有許多集成框架可以用來(lái)連接 RabbitMQ,例如 Spring AMQP、Apache Camel等。這些框架提供了更高層次的抽象,可以使連接 RabbitMQ 更加容易和方便。

這些連接方式之間的區(qū)別主要在于它們的實(shí)現(xiàn)方式和使用方式不同。AMQP URI 連接方式是最簡(jiǎn)單的連接方式,適用于簡(jiǎn)單的應(yīng)用場(chǎng)景;連接工廠連接方式可以更加靈活地配置連接參數(shù),適用于復(fù)雜的應(yīng)用場(chǎng)景;集成框架連接方式則提供了更高層次的抽象,可以使連接 RabbitMQ 更加容易和方便。

盈若安好,便是晴天文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-712980.html

到了這里,關(guān)于Java開(kāi)發(fā)面試--RabbitMQ專(zhuān)區(qū)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 1024 程序員節(jié),圓一個(gè)小小的夢(mèng)

    Hope is a good thing, maybe the best of things, and no good thing ever dies. 希望是件美麗的東西,也許是最好的東西,而美好的東西是永遠(yuǎn)不會(huì)消逝的。 大家好,我是勇哥 。 1024 , 程序員節(jié),圓了我一個(gè)小小的夢(mèng)。 花了半年時(shí)間,我寫(xiě)了一本電子書(shū) ,書(shū)名是:《 RocketMQ4.X設(shè)計(jì)精要 》,我想

    2024年02月08日
    瀏覽(30)
  • 1024程序員節(jié)特輯:【Spring Boot自動(dòng)配置原理揭秘】

    1024程序員節(jié)特輯:【Spring Boot自動(dòng)配置原理揭秘】

    主頁(yè)傳送門(mén):?? 傳送 ??Spring Boot 是一個(gè)用于創(chuàng)建獨(dú)立的、生產(chǎn)級(jí)別的 Spring 應(yīng)用程序的框架。它極大地簡(jiǎn)化了 Spring 應(yīng)用程序的開(kāi)發(fā)過(guò)程,其中一個(gè)關(guān)鍵的功能就是自動(dòng)配置(Auto-Configuration)。 ??自動(dòng)配置可以根據(jù)項(xiàng)目需求自動(dòng)配置各種服務(wù)和組件,它可以幫助開(kāi)發(fā)者

    2024年02月08日
    瀏覽(35)
  • 解決github ping不通的問(wèn)題(1024程序員節(jié)快樂(lè)!

    1024程序員節(jié)快樂(lè)?。?隨便粘貼一個(gè)文檔,參加活動(dòng) 域名解析(域名-IP):https://www.ipaddress.com/ Ubuntu平臺(tái) github經(jīng)常ping不通或者訪問(wèn)緩慢,方法是更改hosts文件 在hosts里添加github的ip 140.82.114.4 www.github.com 199.232.5.194 github.global.ssl.fastly.net 54.231.114.219 github-cloud.s3.amazonaws.com 可以訪

    2024年01月18日
    瀏覽(35)
  • 好用且免費(fèi)的CodeWhisperer,給1024程序員節(jié)送禮來(lái)了

    好用且免費(fèi)的CodeWhisperer,給1024程序員節(jié)送禮來(lái)了

    ? ? ? 國(guó)慶期間沒(méi)有膽量去人從眾的景點(diǎn),關(guān)在家里刷手機(jī)時(shí)意外在亞馬遜的User Group公眾號(hào)上發(fā)現(xiàn)了CodeWhisperer這么個(gè)好東西(bu yao qian),以后擼代碼也可以提高生產(chǎn)力(fang yang mo yu)了,這還不趕緊上手試一下??垂俜浇榻B說(shuō)它支持流行的IDE開(kāi)發(fā)工具,包括VS Code、Intelli

    2024年02月08日
    瀏覽(30)
  • 1024程序員節(jié)帶你玩轉(zhuǎn)圖片Exif信息獲取之JavaScript

    1024程序員節(jié)帶你玩轉(zhuǎn)圖片Exif信息獲取之JavaScript

    目錄 一、前言 二、背景 三、Exif.js ? ? ? ? ?1、Exif.js 簡(jiǎn)介 2、Exif.js 引入 四、多場(chǎng)景展示數(shù)據(jù)獲取 1、原始圖片直接獲取 ?2、base64 編碼文件加載 ?3、文件上傳的方式加載 ?五、總結(jié) ? ? ? ?1024是2的十次方,二進(jìn)制計(jì)數(shù)的基本計(jì)量單位之一。1G=1024M,而1G與1級(jí)諧音,也有一

    2024年02月20日
    瀏覽(97)
  • 【Java程序員面試專(zhuān)欄 數(shù)據(jù)結(jié)構(gòu)】四 高頻面試算法題:哈希表

    【Java程序員面試專(zhuān)欄 數(shù)據(jù)結(jié)構(gòu)】四 高頻面試算法題:哈希表

    一輪的算法訓(xùn)練完成后,對(duì)相關(guān)的題目有了一個(gè)初步理解了,接下來(lái)進(jìn)行專(zhuān)題訓(xùn)練,以下這些題目就是匯總的高頻題目,一個(gè)O(1)查找的利器哈希表,所以放到一篇Blog中集中練習(xí) 題目 解題思路 時(shí)間 空間 兩數(shù)之和 輔助哈希 使用map存儲(chǔ)出現(xiàn)過(guò)的值,key為值大小,v

    2024年02月22日
    瀏覽(28)
  • Java程序員必備的面試技巧與高頻面試題,內(nèi)有面經(jīng)

    Java程序員必備的面試技巧與高頻面試題,內(nèi)有面經(jīng)

    作為一名Java程序員,面對(duì)職業(yè)生涯中不可避免的面試環(huán)節(jié)時(shí),準(zhǔn)備全面且具有針對(duì)性的面試技巧是非常關(guān)鍵的。 以下是根據(jù)我的面試百場(chǎng)總結(jié)的一些建議和技巧,我將從“面試經(jīng)歷”和“面試技巧”兩個(gè)方面來(lái)幫助你更好地準(zhǔn)備Java技術(shù)面試。 文章目錄 Q1 - 能否自我介紹一下

    2024年02月02日
    瀏覽(23)
  • 1024程序員節(jié)特輯 | Spring Boot實(shí)戰(zhàn) 之 MongoDB分片或復(fù)制集操作

    1024程序員節(jié)特輯 | Spring Boot實(shí)戰(zhàn) 之 MongoDB分片或復(fù)制集操作

    Spring實(shí)戰(zhàn)系列文章: Spring實(shí)戰(zhàn) | Spring AOP核心秘笈之葵花寶典 Spring實(shí)戰(zhàn) | Spring IOC不能說(shuō)的秘密? 國(guó)慶中秋特輯系列文章: 國(guó)慶中秋特輯(八)Spring Boot項(xiàng)目如何使用JPA 國(guó)慶中秋特輯(七)Java軟件工程師常見(jiàn)20道編程面試題 國(guó)慶中秋特輯(六)大學(xué)生常見(jiàn)30道寶藏編程面試題

    2024年02月08日
    瀏覽(44)
  • 面試了一個(gè) 5 年 Java 程序員,一個(gè)問(wèn)題也不會(huì)。。

    面試了一個(gè) 5 年 Java 程序員,一個(gè)問(wèn)題也不會(huì)。。

    大家好,我是R哥。 周末愉快呀,最近我在做 Java 面試輔導(dǎo),也模擬面試了好些個(gè)學(xué)員,說(shuō)說(shuō)其中一個(gè)學(xué)員吧, 一個(gè)工作 5 年的 Java 程序員,模擬面試,居然一個(gè)問(wèn)題也不會(huì)。。 當(dāng)晚模擬面試完,我的心情很復(fù)雜。 我之前做系統(tǒng)架構(gòu)師,同時(shí)也是面試官,這些年,少說(shuō)也面

    2024年03月14日
    瀏覽(30)
  • 【Java程序員面試專(zhuān)欄 分布式中間件】Redis 核心面試指引

    【Java程序員面試專(zhuān)欄 分布式中間件】Redis 核心面試指引

    關(guān)于Redis部分的核心知識(shí)進(jìn)行一網(wǎng)打盡,包括Redis的基本概念,基本架構(gòu),工作流程,存儲(chǔ)機(jī)制等,通過(guò)一篇文章串聯(lián)面試重點(diǎn),并且?guī)椭訌?qiáng)日?;A(chǔ)知識(shí)的理解,全局思維導(dǎo)圖如下所示 明確redis的特性、應(yīng)用場(chǎng)景和數(shù)據(jù)結(jié)構(gòu) Redis是一個(gè) 開(kāi)源的、內(nèi)存中的數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)系統(tǒng)

    2024年02月20日
    瀏覽(16)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包