RocketMQ系列(三)消息的生產與消費

前面的章節,我們已經把RocketMQ的環境搭建起來了,是一個兩主兩從的異步集群。接下來,我們就看看怎麼去使用RocketMQ,在使用之前,先要在NameServer中創建Topic,我們知道RocketMQ是基於Topic的消息隊列,在生產者發送消息的時候,要指定消息的Topic,這個Topic的路由規則是怎樣的,這些都要在NameServer中去創建。

Topic的創建

我們先看看Topic的命令是如何使用的,如下:

./bin/mqadmin updateTopic -h

usage: mqadmin updateTopic -b <arg> | -c <arg>  [-h] [-n <arg>] [-o <arg>] [-p <arg>] [-r <arg>] [-s <arg>] -t
       <arg> [-u <arg>] [-w <arg>]
 -b,--brokerAddr <arg>       create topic to which broker
 -c,--clusterName <arg>      create topic to which cluster
 -h,--help                   Print help
 -n,--namesrvAddr <arg>      Name server address list, eg: 192.168.0.1:9876;192.168.0.2:9876
 -o,--order <arg>            set topic's order(true|false)
 -p,--perm <arg>             set topic's permission(2|4|6), intro[2:W 4:R; 6:RW]
 -r,--readQueueNums <arg>    set read queue nums
 -s,--hasUnitSub <arg>       has unit sub (true|false)
 -t,--topic <arg>            topic name
 -u,--unit <arg>             is unit topic (true|false)
 -w,--writeQueueNums <arg>   set write queue nums

其中有一段,-b <arg> | -c <arg>,說明這個Topic可以指定集群,也可以指定隊列,我們先創建一個Topic指定集群,因為集群中有兩個隊列broker-abroker-b,看看我們的消息是否在兩個隊列中負載;然後再創建一個Topic指向broker-a,再看看這個Topic的消息是不是只在broker-a中。

創建兩個Topic,

./bin/mqadmin updateTopic -c 'RocketMQ-Cluster' -t cluster-topic -n '192.168.73.130:9876;192.168.73.131:9876;192.168.73.132:9876'

./bin/mqadmin updateTopic -b 192.168.73.130:10911 -t broker-a-topic

第一個命令創建了一個集群的Topic,叫做cluster-topic;第二個命令創建了一個只在broker-a中才有的Topic,我們指定了-b 192.168.73.130:10911,這個是broker-a的地址和端口。

生產者發送消息

我們新建SpringBoot項目,然後引入RocketMQ的jar包,

<dependency>
    <groupId>org.apache.rocketmq</groupId>
    <artifactId>rocketmq-client</artifactId>
    <version>4.3.0</version>
</dependency>

然後配置一下生產者的客戶端,在這裏使用@Configuration這個註解,具體如下:

@Configuration
public class RocketMQConfig {

    @Bean(initMethod = "start",destroyMethod = "shutdown")
    public DefaultMQProducer producer() {
        DefaultMQProducer producer = new
                DefaultMQProducer("DefaultMQProducer");
											producer.setNamesrvAddr("192.168.73.130:9876;192.168.73.131:9876;192.168.73.132:9876;");
        return producer;
    }
}
  • 首先創建一個生產者組,名字叫做DefaultMQProducer;
  • 然後指定NameServer,192.168.73.130:9876;192.168.73.131:9876;192.168.73.132:9876;
  • 最後在@Bean註解中指定初始化的方法,和銷毀的方法;

這樣,生產者的客戶端就配置好了,然後再寫個Test類,在Test類中向MQ中發送消息,如下,

@SpringBootTest
class RocketmqDemoApplicationTests {

    @Autowired
    public DefaultMQProducer defaultMQProducer;

    @Test
    public void producerTest() throws Exception {

        for (int i = 0;i<5;i++) {
            Message message = new Message();
            message.setTopic("cluster-topic");
            message.setKeys("key-"+i);
            message.setBody(("this is simpleMQ,my NO is "+i).getBytes());

            SendResult sendResult = defaultMQProducer.send(message);
            System.out.println("SendStatus:" + sendResult.getSendStatus());
            System.out.println("BrokerName:" + sendResult.getMessageQueue().getBrokerName());
        }
    }
}
  • 我們先自動注入前面配置DefaultMQProducer;
  • 然後在Test方法中,循環5次,發送5個消息,消息的Topic指定為cluster-topic,是集群的消息,然後再設置消息的key和內容,最後調用send方法發送消息,這個send方法是同步方法,程序運行到這裡會阻塞,等待返回的結果;
  • 最後,我們打印出返回的結果和broker的名字;

運行一下,看看結果:

SendStatus:SEND_OK
BrokerName:broker-b
SendStatus:SEND_OK
BrokerName:broker-b
SendStatus:SEND_OK
BrokerName:broker-b
SendStatus:SEND_OK
BrokerName:broker-b
SendStatus:SEND_OK
BrokerName:broker-a

5個消息發送都是成功的,而發送的隊列有4個是broker-b,1個broker-a,說明兩個broker之間還是有負載的,負載的規則我們猜測是隨機。

我們再寫個測試方法,看看broker-a-topic這個Topic的發送結果是什麼樣子的,如下:

@Test
public void brokerTopicTest() throws Exception {

    for (int i = 0;i<5;i++) {
        Message message = new Message();
        message.setTopic("broker-a-topic");
        message.setKeys("key-"+i);
        message.setBody(("this is broker-a-topic's MQ,my NO is "+i).getBytes());

        defaultMQProducer.send(message, new SendCallback() {
            @Override
            public void onSuccess(SendResult sendResult) {
                System.out.println("SendStatus:" + sendResult.getSendStatus());
                System.out.println("BrokerName:" + sendResult.getMessageQueue().getBrokerName());
            }

            @Override
            public void onException(Throwable e) {
                e.printStackTrace();
            }
        });

        System.out.println("異步發送 i="+i);

    }
}
  • 消息的Topic指定的是broker-a-topic,這個Topic我們只指定了broker-a這個隊列;
  • 發送的時候我們使用的是異步發送,程序到這裏不會阻塞,而是繼續向下執行,發送的結果正常或者異常,會調用對應的onSuccess和onException方法;
  • 我們在onSuccess方法中,打印出發送的結果和隊列的名稱;

運行一下,看看結果:

異步發送 i=0
異步發送 i=1
異步發送 i=2
異步發送 i=3
異步發送 i=4
SendStatus:SEND_OK
SendStatus:SEND_OK
SendStatus:SEND_OK
SendStatus:SEND_OK
BrokerName:broker-a
SendStatus:SEND_OK
BrokerName:broker-a
BrokerName:broker-a
BrokerName:broker-a
BrokerName:broker-a

由於我們是異步發送,所以最後的日誌先打印了出來,然後打印出返回的結果,都是發送成功的,並且隊列都是broker-a,完全符合我們的預期。

消費者

生產的消息已經發送到了隊列當中,再來看看消費者端如何消費這個消息,我們在這個配置類中配置消費者,如下:

@Bean(initMethod = "start",destroyMethod = "shutdown")
public DefaultMQPushConsumer pushConsumer() throws MQClientException {
    DefaultMQPushConsumer consumer = new DefaultMQPushConsumer("DefaultMQPushConsumer");
    consumer.setNamesrvAddr("192.168.73.130:9876;192.168.73.131:9876;192.168.73.132:9876;");
    consumer.subscribe("cluster-topic","*");
    consumer.registerMessageListener(new MessageListenerConcurrently() {
        @Override
        public ConsumeConcurrentlyStatus consumeMessage(List<MessageExt> msgs, ConsumeConcurrentlyContext context) {
            if (msgs!=null&&msgs.size()>0) {
                for (MessageExt msg : msgs) {
                    System.out.println(new String(msg.getBody()));
                    System.out.println(context.getMessageQueue().getBrokerName());
                }
            }

            return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
        }
    } );
    return consumer;
}
  • 我們創建了一個消費者組,名字叫做DefaultMQPushConsumer;
  • 然後指定NameServer集群,192.168.73.130:9876;192.168.73.131:9876;192.168.73.132:9876;
  • 消費者訂閱的Topic,這裏我們訂閱的是cluster-topic,後面的*號是對應的tag,代表我們訂閱所有的tag;
  • 最後註冊一個併發執行的消息監聽器,實現裡邊的consumeMessage方法,在方法中,我們打印出消息體的內容,和消息所在的隊列;
  • 如果消息消費成功,返回CONSUME_SUCCESS,如果出現異常等情況,我們要返回RECONSUME_LATER,說明這個消息還要再次消費;

好了,這個訂閱了cluster-topic的消費者,配置完了,我們啟動一下項目,看看消費的結果如何,

this is simpleMQ,my NO is 2
broker-b
this is simpleMQ,my NO is 3
broker-b
this is simpleMQ,my NO is 1
broker-b
this is simpleMQ,my NO is 0
broker-a
this is simpleMQ,my NO is 4
broker-b

結果符合預期,cluster-topic中的5個消息全部消費成功,而且隊列是4個broker-b,1個broker-a,和發送時的結果是一致的。

大家有問題歡迎評論區討論~

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※產品缺大量曝光嗎?你需要的是一流包裝設計!

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

※回頭車貨運收費標準

※推薦評價好的iphone維修中心

※超省錢租車方案

台中搬家遵守搬運三大原則,讓您的家具不再被破壞!

※推薦台中搬家公司優質服務,可到府估價

「MoreThanJava」Java發展史及起航新世界

  • 「MoreThanJava」 宣揚的是 「學習,不止 CODE」,本系列 Java 基礎教程是自己在結合各方面的知識之後,對 Java 基礎的一個總回顧,旨在 「幫助新朋友快速高質量的學習」
  • 當然 不論新老朋友 我相信您都可以 從中獲益。如果覺得 「不錯」 的朋友,歡迎 「關注 + 留言 + 分享」,文末有完整的獲取鏈接,您的支持是我前進的最大的動力!

Part 1. Java 發展簡史

  • 圖片來源:https://www.geeksforgeeks.org/the-complete-history-of-java-programming-language/

起源:”Green” 項目

20 世紀 90 年代,單片式計算機系統誕生,單片式計算機系統不僅廉價,而且功能強大,使用它可以大幅度提升消費性电子產品的智能化程度。

SUN 公司為了搶佔市場先機,在 1991 年成立了一個由詹姆斯·高斯林(James Gosling)領導,名為 “Green” 項目小組,目的是開發一種 能夠在各種消費性电子產品上運行的程序架構(主要是像 有線電視轉換盒 這一類 處理能力和內存都很有限,並且 CPU 廠商又各不相同 的消費設備)。

由於這些消費設備的處理能力和內存都有限,所以語言必須 非常小且能夠生成非常緊湊的代碼。另外,由於不同廠商會選擇不同的 CPU,因此很重要的一點是這種語言 不應該與任何特定的體繫結構綁定。代碼短小、緊湊且與平台無關,這些要求促使開發團隊設計出一個 可移植的語言,可以為虛擬機生成中間代碼。

不過,Sun 公司的人都有 UNIX 的應用背景。因此,所開發的語言以 C++ 為基礎,而不是 Lisp/ Smalltalk 或 Pascal。不過,就像 Gosling 在專訪中談道:“畢竟,語言只是實現目標的工具,而不是目標本身。”

Gosling 把這種語言稱為 “Oak”(直譯為橡樹,大概是因為它非常喜歡自己辦公室窗外的一顆橡樹…)。後來 Sun 公司發現,Oak 是一種已有的計算機語言名字,於是 Gosling 和他的團隊進行了一次頭腦風暴,多次討論后,從 Java/ DNA/ SILK/ RUBY 中決定使用 Java 來命名。事實證明這是一個很有靈感的選擇。

埋沒:沒人為 “Green” 項目買單

1992 年,Green 項目發布了它的第一個產品,稱之為 「* 7」。這個產品可以提供非常智能的遠程控制。遺憾的是,Sun 公司對生產這個產品並不感興趣。Green 項目組的人員必須找出其他的方法來講他們的技術推向市場。

然而,仍然沒有任何一家標準消費品电子公司對此感興趣。於是,Green 項目組投標了一個設計有線電視盒的項目,它能提供視頻點播等新型有線服務,但他們沒能拿到這個合同 (有趣的是,得到這個項目的公司的領導恰恰是開闢 Netscape 公司的 Jim Clark。Netscape 公司後來對 Java 的成功給予了很大的幫助。)

Green 項目 (這時已經換了一個新名字 ———— “First Person 公司”)1993 年一整年以及 1994 年上半年,一直在苦苦尋找買家購買他們的技術。然而,一個也沒有找到 (Partick Naughton ———— 項目組的創始人之一,也是完成了大多數營銷工作的人,聲稱為了銷售這項技術,已累計飛行了 300,000 英里)

1994 年 First Person 公司解散了。

轉機:Internet 的壯大

當這一切在 Sun 公司發生的時候,Internet 的萬維網也在日漸發展壯大。萬維網的關鍵是把超文本頁面轉換到屏幕上的瀏覽器。

1994 年大多數人都在使用 Mosaic,這是一個 1993 年出自伊利諾斯大學超級計算中心的非商業化的 Web 瀏覽器( Mosaic 的一部分是由 Marc Andreessen 編寫的。當時,他作為一名參加半工半讀項目的本科生, 編寫了這個軟件,每小時的薪水只有 6.85 美元。他後來成了 Netscape 公司的創始人之一和技術總監, 可謂名利雙收。)

在接受 SunWorld 採訪的時候,Gosling 說在 1994 年中期,Java 語言的開發者意識到: “我們能夠建立一個相當酷的瀏覽器。在客戶機/ 服務器主流模型中,瀏覽器恰好需要我們已經完成的一些工作:體繫結構中立、實時、可靠、安全 ———— 這些在工作站環境並不太重要,所以,我們決定開發瀏覽器”

實際的瀏覽器是由 Patrick Naughton 和 Jonathan Payne 開發的,並演變為 HotJava 瀏覽器。為了炫耀 Java 語言超強的能力,HotJava 瀏覽器採用 Java 編寫。設計者讓 HotJava 瀏覽器具有在網頁中執行內嵌代碼的能力。 這一 “技術證明” 在 1995523 日的 SunWorld’95 上得到展示,同時引發了人們延續至今的對 Java 的狂熱追逐。

至此,這一場持續長達 20 多年的「Java 熱」開始了。

  • 觀察近 20 年的數據,Java 的排名從未跌出過前三,而且有將近一半的年份搶佔了透明,不得不令人感嘆:「流水的程序員,鐵打的 Java 啊!」

Part 2. Java 與 Internet

  • 圖片來源:https://www.morethanshipping.com/internet-things-iot-will-help-logistics/

如果 Java 僅僅只是眾多的程序設計語言中的一種,你可能就會問:為什麼它如此重要呢?為什麼它促使計算機編程語言向前邁進了革命性的一步?

如果從傳統的程序設計的角度看,問題的答案似乎不太明顯。儘管 Java 對於解決傳統的單機程序設計問題非常有用,但同樣重要的事,它解決了在萬維網(WWW)上的程序設計問題

Web 1.0 時代的程序設計問題

在剛創造 Java 的年代(20 世紀 90 年代),整個互聯網還處於 Web 1.0 的網絡萌芽階段。

在 之前的一篇文章 其實有對 Web 做了一些概念性的描述(概念、發展、體繫結構)。

問題一:網頁沒有交互

Web 1.0 的網站是靜態的。最初的互聯網只有一種很簡單的 單向過程:你 對某一個服務器發起一個請求,然後它 返回 給你一個 文件,你的機器(俗稱客戶端)上的 瀏覽器軟件 根據本地機器的格式來 解讀並展示 這個文件的內容。這期間沒有任何的交互發生,因為最初的瀏覽器只是一個 “展示器”,它甚至不能執行最簡單的計算任務。(另一方面,它確是安全的,因為它在你的本地機器上不會執行任何程序,而這些程序可能包含 bug 和病毒)

用戶 只能訪問 這些站點而不會對它們做出任何貢獻。這就像你捧起書架中的一本書一樣,它是一種 「只讀」 模式的存在,如果你想與創造這本書的出版社也好,作者也好建立鏈接,只能通過其他的一些方式。(當時的網站也是主要是向消費者展示產品,從感興趣的消費者那裡收錢)

很快人們就不滿足於只是從服務器傳遞迴頁面,人們希望實現完整的客戶/ 服務器能力,使得客戶可以將信息反饋給服務器,來完成例如:在服務器上進行數據查找,並將用戶提供的新信息加到服務器中,服務器管理人員接受到新信息之後就下發訂單的操作。

問題二:響應緩慢

早期的瀏覽器不僅沒有交互,而且它還趨向於讓服務器和 Internet 阻塞。因為在任何時候,只要 你需要完成 通過編程 才能實現的 任務,就必須將信息發揮到 服務器處理。然而在互聯網中,在任意時刻都有可能會有 成百上千 的客戶向服務器發出請求,所以任何小的延遲都會產生重大的影響。

為了解決這個問題,人們採用了各種不同的方法。首先,圖形標準得到了加強,這使得在瀏覽器中可以播放質量更好的動畫和視頻。剩下的問題通過引入 在客戶端瀏覽器中運行程序 的能力就可以解決,這被稱為 「客戶端編程」

問題三:客戶端編程平台各異

大多數運行 Web 瀏覽器的機器都是能夠執行大型任務的強有力的引擎。在使用原始的靜態 HTML 方式的情況下,它們通常只是閑在那裡,等着服務器送來下一個頁面。

客戶端編程意味着 Web 瀏覽器能夠用來執行任何它可以完成的工作,使得返回給用戶的結果 更迅速 (不用全部的結果都等着服務器來運算),而且使得你的網站 更加具有交互性 (那些不需要使用服務器數據的操作可以完全在本地完成)

但客戶端編程的問題是:它與通常意義上的編程十分不同,參數幾乎相同,而平台卻不同。在 Web 瀏覽器中編程就像是使用一台功能受限的操作系統,而每一台功能還略微的有差別。最終,你不僅需要編寫程序,還需要處理因為平台不同帶來的兼容問題。

小結

因為「沒有交互」和「訪問緩慢」的問題,所以引入「客戶端編程」,因為引入客戶端編程,遇到「各種各樣不僅僅是平台差異帶來的問題」。

Java 的解決方案

插件和腳本語言 “差點意思”

在當時,客戶端編程所邁出的最重要的一步就是 插件(plug-in) 的開發。通過這種方式,用戶可以下載一段代碼,並將其插入到瀏覽器中適當的位置,以此來為瀏覽器添加新的功能。

  • 圖片來源:https://zhuanlan.zhihu.com/p/28889449

插件又引發了瀏覽器 腳本語言(scripting language) 的開發。通過使用某種腳本語言,你可以將客戶端程序的源代碼直接嵌入到 HTML 頁面中,解釋這種語言的插件在 HTML 頁面被显示時自動激活。(腳本語言可以解決客戶端編程中遇到的百分之八十的問題) 腳本語言先天就相當易於理解,因為它們只是作為 HTML 頁面一部分的簡單文本,當服務器收到要獲取該頁面的請求時,它們可以被快速加載。此方法的缺點是代碼會直接暴露給任何瀏覽(或竊取)的人,但是,通常不會使用腳本語言去做相當複雜的事情,所以這個缺點不會太嚴重。

如果腳本語言可以解決客戶端編程百分之八十的問題的話,那麼剩下那百分之二十 (那才是真正難啃的骨頭) 又該怎麼辦呢?

Java 帶來了 Applet

  • 圖片來源:https://www.ibm.com/developerworks/cn/java/

Java 帶着 Applet 及時出現。

1995 年, Java 之父 James Gosling 和 Sun 公司科學辦公室主任 John Gage 一起前往蒙特利,去參加一個 TED 會議,兩人要在那裡展示一個划時代的技術, 號稱向能把枯燥的靜態網頁變得栩栩如生,美輪美奐。

演示開始了,James Gosling 把鼠標指向了瀏覽器中的一個 3D 分子模型,來回地旋轉它,台下的觀眾發出陣陣驚嘆聲,他們被鎮住了,從沒有人想到在瀏覽器中也能實現這麼 “美輪美奐” 的效果 !

  • 圖片來源:https://zhuanlan.51cto.com/art/201911/606791.htm

Java 火了!

這個演示所使用的技術就是 Applet。

Applet 是只在 Web 瀏覽器中運行的小程序,它是作為網頁的一部分而自動下載的 (就像是網站圖片被自動下載一樣)。當 Applet 被激活時,它變開始執行一個程序,這正是它優雅的地方:它提供了一種分發軟件的方式,一旦用戶需要客戶端軟件時,就自動從服務器把客戶端軟件分發給用戶。

用戶獲取最新版本的客戶端軟件時不會產生錯誤,而且也不需要很麻煩的重新安裝過程 (有點像現在的小程序)。Java 的這種設計方式,使得程序員只需要創建單一的程序,而只要一台計算機有瀏覽器,且瀏覽器具有內置的 Java 解釋器 (大部分機器都有),那麼這個程序就可以自動在這台計算客戶端盡可能地多做事情。例如,不必跨網絡地發送一張請求表單來檢查自己是否填寫了錯誤的日期或者其他參數,客戶端計算機就可以快速地標出錯誤數據。

這不僅立即就獲得了快速的響應能力,而且也降低了網絡流量和服務器負載,從而不會使整個網絡的速度慢下來。

Java 對服務端編程的加持

當提出對服務器的請求之後,會發生什麼呢?大部分時間,請求只是要求「給我發送一個文件」,之後瀏覽器會以某種適當的形式解釋這個文件,例如將其作為 HTML 頁面、圖片、Java applet 或腳本程序等來解釋。

更複雜的對服務器的請求通常涉及數據庫,這可能會需要服務器端對請求到的數據進行一定的編排 (例如把數據嵌到一個表格之內) 來最終使其成為一個 HTML 文件發送給客戶端 (當然,如果客戶端具備更多的只能,你完全可以把原始數據發送給客戶端讓它自己進行編排工作..)。另一種常見的情形是:你註冊賬號或者提交訂單,這對數據庫數據造成了更改,而這些必須通過服務器端的某些代碼進行處理,這就是所謂的 服務端編程

Java 後來編寫的被稱為 Servlet 的程序 (及其衍生物 JSP),是許多開發網站的公司遷移到 Java 上的主要原因。尤其是因為憑藉 Java 跨平台的特性 消除了處理具有不同能力的瀏覽器時所遇到的問題

小結

Java 憑藉自身強大、安全、跨平台、國際化的特性,加上解決了當時客戶端、服務端開發的諸多 “痛點”,成功搭上 Internet 這列 “國際快車”,一躍成為了時下 20 實際 90 年代中) 最熱門的語言之一,並持續火熱至今 (這跟 Java 自身不斷地成熟有脫不開的關係)

現如今 Applet 和 Servlet 兩個技術已經逐步淡出人們的視野,但在 Java 的歷史上,是舉足輕重的兩個突破點。

Part 3. Hello Wrold!

  • 圖片來源:https://medium.com/@thiagonascimento/time-to-first-hello-world-11a4735602f2

當我們集中注意力 學習一種新的編程語言 時,教程上的 第一個案例 就是如何 在計算機屏幕上显示短語 Hello,world! 也許這條短語最知名的來源是貝爾實驗室的備忘錄《C 語言編程——一份教程》。這份材料編寫於 1974 年。不過在編寫於 1972 年的 B 語言教程中,我們同樣看到了這條短語的身影。

Hello, World! 是一種偉大的教學方法。這是一項能夠輕鬆完成的小任務,同時也代表着一種標準,體現出不同編程語言之間的重要差異。此外,這也是高級程序員在安裝新環境測試一切是否正常的快速簡便方法。(有時候,程序員們也會使用「hello world」運行時間來比較不同語言與環境的速度水平。) 也許更重要的是,Hello, world! 具有一種溫暖而柔和的力量,對編程新人有着一種莫名的親和力。

「代碼擁有無窮威力,而新的世界已經向你張開懷抱。」 ———— Chris Noessel,IBM 公司 AI 設計負責人

public class Main {

    public static void main(String[] args) {
        System.out.println("Hello World!");
    }
}

以上就是Java 語言版本 Hello World 程序。(現在看不懂也沒關係,可以進 https://c.runoob.com/compile/10 這個網站在線運行測試一下看看效果…)

至此,歡迎你進入 Java 的世界。

參考資料

  1. 《Thinking in Java》 第四版;
  2. 《Java 核心技術 卷 I》 第 11 版;
  3. The complete History of Java Programming Language – https://www.geeksforgeeks.org/the-complete-history-of-java-programming-language/
  4. Java 發展簡史:初生遇低谷,崛起於互聯網 – https://www.chainnews.com/articles/628715645859.htm
  5. 永別了,Java的“小蘋果”! – https://zhuanlan.51cto.com/art/201911/606791.htm
  6. 改變世界的代碼行 – https://www.infoq.cn/article/5CaYH8NbS6BmptWKRgkX

往期精彩

  1. 「MoreThanJava」當大學選擇了計算機之後應該知道的
  2. 「MoreThanJava」計算機發展史—從織布機到IBM
  3. 「MoreThanJava」計算機系統概述
  4. 「MoreThanJava」一文了解二進制和CPU工作原理
  5. 「MoreThanJava」機器指令到彙編再到高級編程語言
  • 本文已收錄至我的 Github 程序員成長系列 【More Than Java】,學習,不止 Code,歡迎 star:https://github.com/wmyskxz/MoreThanJava
  • 個人公眾號 :wmyskxz,個人獨立域名博客:wmyskxz.com,堅持原創輸出,下方掃碼關注,2020,與您共同成長!

非常感謝各位人才能 看到這裏,如果覺得本篇文章寫得不錯,覺得 「我沒有三顆心臟」有點東西 的話,求點贊,求關注,求分享,求留言!

創作不易,各位的支持和認可,就是我創作的最大動力,我們下篇文章見!

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※回頭車貨運收費標準

※產品缺大量曝光嗎?你需要的是一流包裝設計!

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

※推薦評價好的iphone維修中心

※教你寫出一流的銷售文案?

台中搬家公司教你幾個打包小技巧,輕鬆整理裝箱!

台中搬家遵守搬運三大原則,讓您的家具不再被破壞!

印尼梅拉比火山兩度噴發 巨大灰雲衝6公里高

摘錄自2020年6月21日中央社報導

印尼地質署表示,梅拉比火山(Mount Merapi)是世界上最活躍的火山之一,今(20日)兩度噴發,向空中噴出6公里高的火山灰雲。

法新社報導,印尼地質署指出,這兩次噴發持續約7分鐘,促使地方當局下令居民待在火山口方圓3公里的禁區外。

梅拉比火山噴發後,印尼地質署沒有提高火山警戒狀態,但建議民航機在飛經此區時保持謹慎。

梅拉比火山上次大爆發是在2010年,導致300多人死亡,迫使附近約28萬人撤離。這也是1930年以來最大規模的噴發。

公害污染
空氣污染
土地水文
污染治理
土地利用
國際新聞
印度
火山噴發
火山灰
災害

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※為什麼 USB CONNECTOR 是電子產業重要的元件?

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

※台北網頁設計公司全省服務真心推薦

※想知道最厲害的網頁設計公司"嚨底家"!

※推薦評價好的iphone維修中心

網頁設計最專業,超強功能平台可客製化

※別再煩惱如何寫文案,掌握八大原則!

連小李子也來中國支持環保 而他選擇了比亞迪

再深八一下,發現小李子代言比亞迪,可以用四個理由來總結——首先,他們都是以技服人的代表。小李子自然不必說,崇尚演技,出演過一部又一部大片,令人拍案叫絕。比亞迪不用說了,老闆王傳福就是工科男出身,一直推崇技術為王,也確實在新能源領域做到了,擦亮了“中國智造”的金字招牌。

最近幾天,有點方

先是網上瘋傳小李子代言某新能源車的計劃被提前泄密,引發身邊一群“李粉”們興奮連連;繼而是某娛樂圈知名狗仔突然爆料小李子在片場開車的花絮照片,並註明“你懂的”,更是引來一堆懂車帝們對着照片上的蛛絲馬跡隔空猜車。結果大家還在YY呢,今天比亞迪和小李子就手拉手地站出來,提前宣布了雙方合作的消息,真是官方逼死同人的典範啊。

你說這年頭,大家都不按常理出牌了,是真的方了。

其實一開始是不信的,一方面小李子今年剛拿了奧斯卡影帝稱號,排着隊來找他的大牌海了去,咋就那麼容易看上一个中國汽車品牌呢?另一方面,比亞迪在圈內向來以不請代言人出名,一眼看上去就是個高冷的技術宅,與娛樂圈的八卦緋聞無關。所以當今天比亞迪和小李子你一句我一句地宣布“在一起”后,方得瓜子都掉了。

但仔細想來,從般配程度來說,小李子和比亞迪確實有在一起的理由。小李子影帝的分量自不必說,另一方面他也是個堅定的環保主義者,就連今年他在奧斯卡頒獎典禮上,憑藉《荒野獵人》這部片獲得奧斯卡影帝獎項時說的感言,都不忘呼籲環保。

很多人以為小李子開了微博之後天天發關於環保的內容,是為代言比亞迪做伏筆,可翻牆幫你證實:小李子在推特和ins上面發的內容,沒有風花雪月,沒有八卦緋聞,儘是對氣候變化的關注和對環保理念的呼籲,和在中國的微博上畫風一致。

而比亞迪呢?在大家看來,可能知道他們家賣車,也知道他們賣電動車,但知道他賣電動大巴、電動貨車、電動鏟車、電動叉車、甚至電動軌道交通的可能不多,可能更少人知道比亞迪的電動大巴和電動出租車在國外賣得相當火爆,海外事業做得風生水起,產品深得老外們的喜愛。

再深八一下,發現小李子代言比亞迪,可以用四個理由來總結——

首先,他們都是以技服人的代表。小李子自然不必說,崇尚演技,出演過一部又一部大片,令人拍案叫絕;比亞迪不用說了,老闆王傳福就是工科男出身,一直推崇技術為王,也確實在新能源領域做到了,擦亮了“中國智造”的金字招牌;

其次,他們都有個情懷叫執着。小李子奧斯卡陪跑22年,不離不棄地堅持,堅持用好電影、好演技說話;比亞迪,以電池技術立身,在電池上投入了最大的技術力量去攻關,繼而打造出了世界一流水平的電池,最直觀地就是在電動汽車上,比亞迪的電動續航里程是排在行業前沿的,也正是因為最核心的電池技術先進、可靠,比亞迪的電動大巴和出租車才暢銷全球;

第三,他們都在盡己所能推動環保事業的發展,扎紮實實的。小李子自掏腰包拍紀錄片,籌辦環保基金,開新能源汽車,用自己的影響力帶動影迷和公眾;比亞迪,造出來的新能源車選擇豐富,既有零排放的超長續航里程純電動車,也有短途純電長途混動的插電混動車,讓那些對新能源汽車還有所顧慮的人,也能開着秦、唐,日常用電,偶爾用油,盡可能地踐行環保理念;

第四,小李子和比亞迪一樣,都遇到過坎坷,但都挺過來了。

這麼想來,呼籲環保的小李子,和推動環保事業的比亞迪走在一起,一點問題都沒。最後也提醒一下廣大小李子的粉絲,多多關注比亞迪的動態,據稱,很快小李子就會以比亞迪代言人的身份來中國參加活動,和“李粉”、“迪粉”零距離接觸哦!

本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計最專業,超強功能平台可客製化

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

※回頭車貨運收費標準

※推薦評價好的iphone維修中心

※教你寫出一流的銷售文案?

台中搬家公司教你幾個打包小技巧,輕鬆整理裝箱!

台中搬家公司費用怎麼算?

為什麼年輕人第一輛車都愛選這些SUV?因為只賣6萬出頭啊…

那今天推薦的這幾款車就太適合你了。近兩年自主品牌的不斷髮力,汽車的底價被一次次刷新,買車變得並不像從前那般高攀莫及,各類車型的受眾群體也變得更加清晰明了,像是各大合資廠專門生產的一些符合年輕人市場的微型車或是小型車正是為了迎合我們這類剛出社會不久的年輕人喜好,而本次推薦的對象則是目前消費者最熱衷的SUV車型,這些SUV在擁有不錯的品質同時售價比起傳統的小型車也更具優勢。

近兩年自主品牌的不斷髮力,汽車的底價被一次次刷新,買車變得並不像從前那般高攀莫及,各類車型的受眾群體也變得更加清晰明了,像是各大合資廠專門生產的一些符合年輕人市場的微型車或是小型車正是為了迎合我們這類剛出社會不久的年輕人喜好,而本次推薦的對象則是目前消費者最熱衷的SUV車型,這些SUV在擁有不錯的品質同時售價比起傳統的小型車也更具優勢。

上述的四款車都有着各自的特點,他們所面對的目標消費人群都是預算不是很充足但追求個性又不願意放棄配置的年輕消費者,個性帥氣的外觀設計,可玩性極高的內部裝備,舒適省心的駕乘感受這些都是他們買車的訴求,而這幾款車無疑在這幾個方面都是非常合格的。本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※產品缺大量曝光嗎?你需要的是一流包裝設計!

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

※回頭車貨運收費標準

※推薦評價好的iphone維修中心

※超省錢租車方案

台中搬家遵守搬運三大原則,讓您的家具不再被破壞!

※推薦台中搬家公司優質服務,可到府估價

10萬級這些車為何長盛不衰?值得買嗎?

不過至少在每月榜單上名列前茅的都不錯既然質量過關所以今天我們從配置入手。10萬左右的購車預算,除了買這種入門級別的合資車你還能買到更高配置、動力更強的國產車型。如果你是一個配置控而且預算不夠過的話,選擇這樣一台國產車型更好。

高價低配?

”高價低配“是最多消費者爭議的問題,根據社會調查,大部分消費者在首次購車時都會率先考慮選擇合資車型,而且在購車預算也大多數在10-15萬的價格區間。有的合資車價格高而且簡配嚴重,還不如選擇國產車,難道這些入門的合資車就這麼不堪?帶着這個問題,我們來看看這些15萬丐中丐版的合資A級車是否這麼不堪!

為什麼還選擇合資?

因為主管覺得“質量好”呀!

說全部的合資車質量都好

是錯的!

不過至少在每月榜單上

名列前茅的都不錯

既然質量過關

所以今天我們從配置入手!

10萬左右的購車預算,除了買這種入門級別的合資車你還能買到更高配置、動力更強的國產車型!如果你是一個配置控而且預算不夠過的話,選擇這樣一台國產車型更好。而這一個價位區間的合資車型,頂配車型的作用在於拉高車型配置,提升檔次;而入門版車型的最大任務的拉低車型的售價。所以一般這類入門版的車型廠家會選擇不排產或者你需要等待一段很長的時間才能拿到你的愛車,所以需要慎重考慮。你能發現,在介紹車型是都偏向於推薦中配以及中低配車型,原因在於配置已經足夠使用,而且作為主銷車型提車的時間也會更快。本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※回頭車貨運收費標準

※產品缺大量曝光嗎?你需要的是一流包裝設計!

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

※推薦評價好的iphone維修中心

※教你寫出一流的銷售文案?

台中搬家公司教你幾個打包小技巧,輕鬆整理裝箱!

台中搬家遵守搬運三大原則,讓您的家具不再被破壞!

空間更大、油耗更低,這些十來萬的車子只有我們國家才有

雖然也是定位緊湊型轎車,但是和凌派的尺寸比起來,還是小了不少,不過這倒是不用這麼介意的,畢竟科沃茲也比凌派便宜好多。不過因為科沃茲是剛上市不久,所以外觀設計還是更新的。車身線條凌厲,造型非常時尚。科沃茲的中控造型也比較簡介,沒有什麼太大的亮點,但是不至於不好看。

看到題目大家都會想到今天介紹的車子都是中國特供車吧!其實國人一聯想到特供,就覺得這肯定是好東西。但是一說中國特供汽車,不禁要皺眉頭了,很多人認為國內特供車肯定沒有全球車型好,特供車只是來圈中國的錢了,絕對又是區別對待。

其實編者這次也不是要為特供車洗白,只是個人覺得特供車沒有什麼不好的,畢竟國內的用車環境和國外肯定是不一樣的,特供車就是按照我們國內消費者的喜好,又量身定做了一些東西,比如國內消費者不太重視操控,他們會盡量弱化車子的操控,把省下來的的成本用在國內消費者在乎的地方,比如天窗、大空間、更低的油耗。

所以大家可以反過來想,車企其實挺重視我們國內市場的,專門為我國的消費者量身定做一些東西,更方便我們消費者的使用,何樂而不為呢?所以今天就說幾款比較受歡迎的特供車型。

廣汽本田-凌派

指導價:10.98-14.98萬

凌派的車身尺寸為4664*1750*1505mm,軸距為2650mm,凌派定位緊湊型轎車,但是尺寸在這一級別處於比較領先的地位。凌派的側面車身線條比較複雜,但是層次感非常強,車尾微微翹起,有一種向前俯衝的感覺。

中控造型是凌派比較成功的地方,內飾看起來具有一定的豪華感,並且比較大氣。凌派的動力系統為1.8L 136馬力+5擋手動/CVT。當時廠家就宣稱凌派是1.8L的動力,但是為1.5L的油耗,自動擋車型的百公里油耗約為7.7L,0-100km/h加速約為10s,對於一款家用車來說,這樣的加速已經很不錯了。

上汽通用雪佛蘭-科沃茲

指導價:7.99-10.99萬

科沃茲的車身尺寸為4544*1779*1467mm,軸距為2600mm。雖然也是定位緊湊型轎車,但是和凌派的尺寸比起來,還是小了不少,不過這倒是不用這麼介意的,畢竟科沃茲也比凌派便宜好多。不過因為科沃茲是剛上市不久,所以外觀設計還是更新的。車身線條凌厲,造型非常時尚。

科沃茲的中控造型也比較簡介,沒有什麼太大的亮點,但是不至於不好看。動力系統比較簡單,為1.5L 113馬力+5擋手動和6擋手自一體。科沃茲是今年9月2日才上市,到現在也就幾個月的歷史,但是11月份的銷量已經達到了12375輛,就銷量來說絕對是成功了,所以說特供車沒什麼不好的,也會很受消費者的歡迎。

上汽大眾-朗逸

指導價:10.99-15.99萬

朗逸車身尺寸為4605*1765*1460mm,軸距為2610mm。雖然尺寸只是處於一般水平,但是朗逸看起來很顯大。如果你對車子了解的不多,光看車頭的話,你甚至會把朗逸看成是帕薩特,這一下子身價可是倍增了。朗逸的整體造型比較中庸,車身側面修長,很符合國人的審美。

朗逸的動力系統比較多,但是主銷的車型還是1.6L車型,價格實惠,保養便宜,油耗較低,質量很讓人放心,絕對是家用的好幫手。其實說起特供車,朗逸是不可迴避的“祖師爺”級的人物,同時也是最成功的一款。朗逸11月份的銷量為42716輛,1-11月累計銷量441149輛,穩居霸主地位。朗逸不管是造型還是實用性都比較符合國人的需求,再加上大眾的光環,熱銷也不足為奇了。

總結:其實這三個車子的特點還是比較相似的,畢竟都是按照國內人民的用車需求設計的。外觀大氣,空間較大,油耗較低,質量也比較可靠,保養維護也比較實惠。所以說這些車子也是一個不錯的選擇。本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※為什麼 USB CONNECTOR 是電子產業重要的元件?

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

※台北網頁設計公司全省服務真心推薦

※想知道最厲害的網頁設計公司"嚨底家"!

※推薦評價好的iphone維修中心

網頁設計最專業,超強功能平台可客製化

※別再煩惱如何寫文案,掌握八大原則!

比寶馬奧迪要拉風的豪華車型 車主都說拉風到極點?

8AT變速箱在加速過程中順暢而且有強烈的推背感。還有F SpORT版車型的外觀真的很動感、犀利,和朋友那些寶馬、奧迪停在一起時,我的車真的要個性拉風很多。目前行駛里程:我是2015年9月份提車的,現在跑了也有11000公里了。平時跑高速多,在高速行駛平均百公里油耗7。

雷克薩斯-雷克薩斯IS

指導價:36.90-48.00萬

車主:秋名山文太

購買車型:2015款 200t 領先版

裸車價格:35.8萬

車主點評:最滿意的當然就是雷克薩斯的品質還有做工了!特別是內飾部分,它細節縫線工藝可以看出日本工匠精神。外觀不用多說,犀利又運動。車內的隔音也很棒,我特滿意。

比較不滿意的地方是腳剎,因為是進口車的原因,所以性價比和奔馳C級、寶馬3系對比沒有優勢。不過性能相當於對手車型的高功率版了,所以還能接受,買車就要買自己喜歡的!

目前行駛里程:我是今年3月份提車的,到現在行駛了7300公里,平均百公里油耗是9.8L。2.0T+8擋手自一體變速箱效率是不錯的。

車主:Elpacoco

購買車型:2015款 200t F SpORT

裸車價格:35.9萬

車主點評:裝配了2.0T發動機,動力提升油耗卻降低了。8AT變速箱在加速過程中順暢而且有強烈的推背感!

還有F SpORT版車型的外觀真的很動感、犀利,和朋友那些寶馬、奧迪停在一起時,我的車真的要個性拉風很多!

目前行駛里程:我是2015年9月份提車的,現在跑了也有11000公里了。平時跑高速多,在高速行駛平均百公里油耗7.8L,在城市郊區混合路面行駛則為8.4L左右!油耗比較省。

車主:德原朗

購買車型:2015款 200t F SpORT

裸車價格:34.8萬

車主點評:最滿意它騷氣的外觀,显示效果出色的儀錶盤。操控方面,在S模式下方向盤的回饋力度很適中,開起來讓人慾罷不能。跑山的時候會有一點側傾,但是不需要擔心,底盤的支撐性還是相當到位的。

還有紅色的座椅,視覺效果很出色。

中控屏幕尺寸有點小,手套箱的空間也有點小,看來這款進口車還是比較我行我素的!

目前行駛里程:我的IS目前行駛了4800公里,在磨合期,現在平均百公里油耗是10.8L。

編輯點評:

在BBA的一些對手車型給出比較大幅度優惠的現在,雷克薩斯IS的售價則非常堅挺。它的2.0T發動機,最大功率245馬力,並且搭配8AT變速箱的表現出色。在做工、隔音、操控方面都是有較高水準。如果你喜歡它的話,馬上去4S店體驗一番吧。本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計最專業,超強功能平台可客製化

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

※回頭車貨運收費標準

※推薦評價好的iphone維修中心

※教你寫出一流的銷售文案?

台中搬家公司教你幾個打包小技巧,輕鬆整理裝箱!

台中搬家公司費用怎麼算?

扭矩達230牛米!這輛前衛車型有思域、卡羅拉強嗎?

而懸架具有彈性,對於大小震動都做出了不錯的過濾。只是懸挂行程比起兩廂的標緻308S更長,所以過彎時的車身擺動稍大些,不過支撐性已經不錯了。油耗表現如何。1。2T自動擋車型的車主口碑油耗:7。5L/100km。1。2T發動機的排量小,而且變速箱在D擋時的經濟性不錯。

最近有很多粉絲提議我們多聊一下靈活好開的家用轎車,這讓編者想起前段時間試駕過朋友的標緻308 1.2T車型。

標緻308 1.2T車型售價:10.97-13.57萬

308的外觀設計是標緻最新設計語言的縮影,這個設計年輕、時尚,車尾的線條流暢,比較大氣。兩個尾燈之間還採用了黑色裝飾板來點綴,讓它給人一種過目不忘的感覺。

它靈活好開,有駕駛樂趣的同時也給乘客不錯的舒適性,下面我們就來聊聊編者對這款車的感受!

動力總成採用了新穎的1.2T(三缸)渦輪增壓發動機,最大功率136馬力、峰值扭矩還達到了230牛米/1750-3500轉!動力參數漂亮,而編者的朋友買這款車也是衝著這發動機去的。

傳動方面搭配的是6擋手自一體變速箱,而同級別的日系對手,如卡羅拉1.2T車型採用的則是CVT變速箱。

上到車內,前衛的內飾讓年輕人覺得它前衛和很有設計感。尺寸很小的方向盤充滿玩味!

但問題是,儀錶盤的位置設計在中控的頂部,容易出現方向盤頂端擋住部分儀錶盤的情況。這與方向盤的高度調節和駕駛人的身高有關,所以在駕駛前盡量調好方向盤的位置。

駕駛起來,在D擋模式下,它的調校側重於降低油耗,所以總是积極升擋、降擋出現一點點“猶豫”的情況,在市區中代步動力夠用也平順。

而打開運動模式,變速箱的降擋直接乾脆!發動機在1900轉以後的動力爆發比較猛,提速能力強,而且在時速超過100km/h后,再加速能力也不錯,這套動力總成實際的表現已經接近1.8L的自然吸氣發動機了,所以在動力方面不用擔心。

小尺寸方向盤握感出眾,指向性精準,所以轉動起來充滿着玩味。而懸架具有彈性,對於大小震動都做出了不錯的過濾!只是懸挂行程比起兩廂的標緻308S更長,所以過彎時的車身擺動稍大些,不過支撐性已經不錯了!

油耗表現如何?

1.2T自動擋車型的車主口碑油耗:7.5L/100km。

1.2T發動機的排量小,而且變速箱在D擋時的經濟性不錯!所以油耗是較低的。

競爭對手

東風本田-思域

1.0T車型售價:11.59-12.79萬

在駕駛體驗上,標緻308 1.2T車型表現更好、也更有樂趣,而思域的空間表現更佳,不過購買思域的買家大多會選擇1.5T車型,所以兩者在進行着差異化競爭!

一汽豐田-卡羅拉

1.2T車型售價:10.98-14.38萬

卡羅拉採用的1.2T發動機最大功率為116馬力,數據沒有標緻308的漂亮,但是卡羅拉普遍優惠較大、車型選擇豐富,所以性價比較高些。

最後總結:

其實標緻308在駕駛樂趣和舒適性方面達到了不錯的平衡,如果你想要一款開起來有樂趣、不乏味的家用車,它是不錯的選擇。而它的優惠沒有對手車型多,所以性價比不算太高。本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※產品缺大量曝光嗎?你需要的是一流包裝設計!

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

※回頭車貨運收費標準

※推薦評價好的iphone維修中心

※超省錢租車方案

台中搬家遵守搬運三大原則,讓您的家具不再被破壞!

※推薦台中搬家公司優質服務,可到府估價

要大,要硬,要安全,才是一輛好車

總結:一直以來,物流用途的商用車輛一味地追求大空間和低排放,注重燃油經濟性和裝載能力的提高卻忽視了一輛汽車最應該擁有的安全性能,而不斷在設計、品質、智能、安全方面超越自身的新全順卻從未被對手超越,擁有好品牌、大空間、高安全的福特新全順,是真正意義上的商用車佼佼者,也是創業者和物流運輸業的絕佳選擇。
老陳是物流公司創始人
因為業務擴本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※回頭車貨運收費標準

※產品缺大量曝光嗎?你需要的是一流包裝設計!

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

※推薦評價好的iphone維修中心

※教你寫出一流的銷售文案?

台中搬家公司教你幾個打包小技巧,輕鬆整理裝箱!

台中搬家遵守搬運三大原則,讓您的家具不再被破壞!