香港環團呼籲 支援回收廢棄塑膠

摘錄自2020年6月22日蘋果日報香港報導

香港政府近年力倡回收減廢,惟廢塑膠回收率每況愈下。垃圾徵費遲未通過,有環保團體促加快落實中央回收廢棄塑膠、加強社區回收網,同時加快推出「飲品塑膠瓶生產者責任計劃」,提高回收率。

香港環保廢料再造業總會會長劉耀成,在大埔工業邨設廠回收、再造塑膠瓶,年底投入運作,劉批評政府沒提供經濟誘因,吸引前線人員回收廢棄塑膠。

他指出,香港2018年PET塑膠瓶每日平均棄置量達139噸,若被棄置的塑膠瓶得以回收,可讓至少五間塑膠廠房生存。香港環保署回覆指,政府今年下半年將就塑膠飲料容器推展生產者責任計劃進行公眾諮詢,並會視「塑膠可回收物料回收服務先導計劃」成效,考慮長遠將服務擴展至全港。

公害污染
污染治理
國際新聞
香港
一次性塑膠製品
回收
廢棄物

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

【其他文章推薦】

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

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

南投搬家公司費用需注意的眉眉角角,別等搬了再說!

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

※回頭車貨運收費標準

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

優惠末班車!回家過年的抓緊入手熱門SUV的最後機會!

6-31。90萬購置稅優惠(元):12222-13632寶馬X1定位於一款緊湊型SUV,在外觀方面,寶馬X1保留了海外車型的設計風格,但是軸距卻比海外版本加長了110mm,經典的雙腎格柵搭配天使眼造型的大燈組霸氣十足。相比與同級別的對手來說,寶馬X1擁有一個更大的車型尺寸,看起來更為大氣。

告訴你們一個喜悅但是有暗含悲傷的好消息,16年已經進入尾聲而且春節又來得特別早,不少朋友都開始計劃搶回家的車票了。除此以外,不少消費者還會選擇在春節前購買一輛心儀的座駕自駕回家!這樣還能在親戚朋友面前倍有面子!

買車是個好消息,但是為什麼要悲傷呢?原因很簡單,因為國家頒布的1.6L及以下排量購置稅優惠減半的優惠政策在31日就已經正式結束了。至於明年是否還有減半的優惠,在這兒可以明確地告訴你是“沒有的!”這個消息夠傷心了吧。

經計算

10萬的車能省4274元

20萬的車能省8547元

30萬的車能省12821元

近日國家有發布了一項購車優惠政策,雖然5折是沒希望了,但是在購置稅方面則給你打了個7.5折,雖然有打折,但是年後買車你依舊需要多付一定的費用。16年所剩的日子不多了,想要買車更便宜、想要見親戚朋友倍有面子,買一台高端大氣上檔次的SUV就是最佳選擇!

別克昂科威20T

售價:20.99-25.99萬

購置稅優惠(元):8970-11107

作為合資SUV榜單上的冠軍車型,別克昂科威是一輛為中國消費者打造的神級SUV,一副高端大氣的外觀設計是吸引消費者最重要的利器!無論是在設計上還是整車的高級感方面,昂科威這台車都做得相當好。

除了一副高能吸睛的外觀,別克昂科威的內心也是十分強大。高檔的內飾設計、極為豐富的配置水平以及寬敞的車內空間都能很好地滿足眾多消費者的購車需求,另外最值得點贊的是昂科威的隔音降噪水平和搭載Onstar 車載4G LTE,絕對是領先同級的存在。

在動力方面,1.5T+7速DCG 智能啟停雙離合變速箱這套動力總成推動這樣一台中型SUV完全夠用,而且在油耗方面也是值得點贊。雖然別克昂科威還有2.0T的車型,但是為了符合購置稅優惠減半的政策,今天推薦的主要是1.5T的車型,這也是目前走量的車型,而且目前昂科威整體的優惠幅度普遍比較大,所以入門版的車型在終端售價方面已經能下探到20萬以內,所以競爭力是相當大的。

寶馬X1 18Li

售價:28.6-31.90萬

購置稅優惠(元):12222-13632

寶馬X1定位於一款緊湊型SUV,在外觀方面,寶馬X1保留了海外車型的設計風格,但是軸距卻比海外版本加長了110mm,經典的雙腎格柵搭配天使眼造型的大燈組霸氣十足。相比與同級別的對手來說,寶馬X1擁有一個更大的車型尺寸,看起來更為大氣!

在內飾方面儘管X1在用料方面有所提升,但是整體的設計依舊是眾多消費者的槽點,而在空間方面是X1最大的亮點,堪比中型SUV的空間也是同級罕有,這也是眾多消費者選擇X1的最主要因素之一。

在動力方面,18Li實則是一台1.5T三缸渦輪增壓發動機,搭配上愛信的6AT變速箱,這套動力總成是可以滿足我們的日常駕駛所需。寶馬一直以操控見長,雖然新X1採用了前驅平台,對比上一代車型確實是有所下降,但是對於同級別的競爭對手來說,X1營造出來的運動感依舊存在。

奧迪Q3 30TFSI

售價:23.42-28.38萬

購置稅優惠(元):10008-12128

奧迪Q3屬於一台緊湊型SUV,在外觀方面依舊延續了奧迪的經典風格,在整體設計比較平庸,但是這樣的設計也能吸引到不少消費者的關注,奧迪就給到你一種高端豪華的感覺。

在內飾方面,內飾整體設計依舊平庸,中控台中央部分偏向主駕駛位一側,副駕駛座前方大面積銀色飾板等設計是Q3問世之後一直保持至今的元素之一,但整體的做工水平均屬上乘。

在動力上,EA211+6DSG整體表現中規中矩,最大馬力150匹,最大扭矩250牛米的水平對於家用車來說也算夠用。而奧迪Q3最吸引消費者的要數它的優惠幅度,豪華車卻能賣出堪比合資車型的價格,而且奧迪的車標也是眾多消費者所喜愛的。

標緻4008 350THp

售價:18.57-23.07萬

購置稅優惠(元):7936-9858

在前段時間,標緻4008終於換代了,新車的外觀設計無疑是讓人眼前一亮,時尚前衛、大膽有活力,極為個性的外觀讓它一舉成為顏值極高的個性选手,當然這樣過於“前衛”也並不是所有消費者能夠接受的。

環抱式的內飾設計,狂拽炫酷吊炸天是對它內飾的評價,科技感十足的設計逼格滿滿,這樣的設計跟其它同級別的选手壓根就不在同一個維度上,標緻就是這樣不走尋常路。

在動力方面1.6T+6AT的動力總成足夠日常使用,如果想要更爽快的動力,4008還提供1.8T的車型。4008採用的是麥弗遜式前懸架以及扭力梁式后懸架,但法系車一直以底盤調校見長,而4008也是如此,整車開起來底盤沉穩紮實。

2016已經走到了尾聲,17年就沒有減半優惠了,過了這個村就沒這個店了,在購車時又得多給錢了,抓緊最後的步伐吧。值得提醒的一點是就目前的時間來看,最好就是買現車,現在訂車的話時間相當緊促。本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

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

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

※超省錢租車方案

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

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

※回頭車貨運收費標準

從10萬的SUV到70萬的豪華轎車,分析銷量最好的熱門車!

緊湊型車中大型車緊湊型SUV總結:金無赤足,人無完人。汽車是個綜合體商品,在一輛車定型之前,工程師要對外觀設計、空間造型、材質用料以及功能配置等綜合起來進行考量,以取得消費者體驗的最佳平衡點,這一切還須建立在產品成本不超標的前提下。

發現十有八九的朋友都是買車以後才開始去了解車,其中對選購的車感到後悔的不知凡幾,你是否其中一員呢?

這些朋友普遍對汽車市場一知半解,不多加體驗,就單憑一款車的外觀、汽車銷量榜和別人片面的評價就為它買賬,一意孤行、不聽勸阻,也甚是無奈。

今年1-10月的汽車總銷量榜單出爐,銷量能否成為購車的參考?告訴你,銷量最好的車未必是產品力最強的車,但一定是最迎合消費者口味的車,對這些公司在營銷方面的造詣深感佩服。下面為你簡單點評幾款熱度相當高的車型。

緊湊型車

中大型車

緊湊型SUV

總結:金無赤足,人無完人。汽車是個綜合體商品,在一輛車定型之前,工程師要對外觀設計、空間造型、材質用料以及功能配置等綜合起來進行考量,以取得消費者體驗的最佳平衡點,這一切還須建立在產品成本不超標的前提下。所以沒有最好的車,只有最適合自己的車。明確個人用車需求、預算,平時多看的推文,總能找到最適合你的車。對了,別吝嗇你的贊!本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

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

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※回頭車貨運收費標準

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

※超省錢租車方案

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

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

月銷3萬多輛,這款實力出眾的車型即將趕超英朗!

編者先賣個關子,一會再詳細解讀。國人買車最在意的就是性價比,都想花最少的錢,獲得最大的享受。和英朗pK中可以發現,福睿斯標配6氣囊、天窗、真皮坐椅、定速巡航、駐車雷達、皮質座椅等,這些都是消費者特別重視的配置。

在這個社會上,事物的結果都有一定的衡量標準。對於考生而言,試卷上的分數決定他是否能上一所更好的大學;對於公司職員來講,能否提高業績,是他升職加薪的主要原因;同樣,對於一台車來說,銷量的多寡,可以直接看出來他是否得到消費者的滿意和肯定。

銷量是判定這款車是否成功的重要標準。所以在銷量榜上面,你可以發現那些很有價值的信息。尤其是福特福睿斯,這款如此低調的車,但是銷量卻能達到三萬台。

看到福睿斯的銷量如此之高,大家一定會感到意外吧!在這個級別,我們比較熟悉的車型,比如科魯茲,寶來,K3,朗動等,都被福睿斯無情的壓在腳下。至於呼聲更高的別克英朗,銷量和福睿斯也只是“一個車身”的差距。

是騾子是馬拉出來溜溜就知道了,解析一下福睿斯就知道為什麼他可以取得高銷量了。我們就拿同為美系,銷量和福睿斯比較接近的英朗作對比,看看孰優孰劣(至於為什麼不和科魯茲比,是因為他和福睿斯不是一個銷量級別的)。

福睿斯1.5L 自動時尚型(11.98萬元)

VS

英朗 15N 自動進取型(11.99萬元)

既然要對比肯定要選擇同價位的車型,同時兩車的優惠程度要非常接近,這樣可以更公平的進行pK。

兩者車長竟然都是4587mm,這僅僅只是巧合?還是冥冥之中註定必然是對手?當然狹路相逢“大”者勝,福睿斯的每一項尺寸幾乎都要領先英朗,在國內這個以大為美的市場裏面,較大的車身可以更好的俘獲國內消費者的芳心,從這一點來看,福睿斯已經領先第一步了。

英朗採用了別克的家族式設計,直瀑式的前進氣格柵辨識度很高,整體看起來比較中庸、柔和。當然福睿斯也不例外,也是採用了福特的家族式設計,福特家族的標誌性前臉-馬丁臉自然是必不可少的,霸氣的前臉、立體的車身線條,使得福睿斯看起來更加時尚。不過外觀沒有統一的評判標準,主要是消費者喜歡就好。

兩者的乘坐空間較為接近,滿足家用沒問題。有一點需要着重指出來,英朗的底盤雖貴為多連桿獨立懸架,但是日常駕駛並不能感覺出來它是獨立懸架,底盤感覺比較單薄,慮震較差,這是為什麼呢?編者先賣個關子,一會再詳細解讀。

國人買車最在意的就是性價比,都想花最少的錢,獲得最大的享受。和英朗pK中可以發現,福睿斯標配6氣囊、天窗、真皮坐椅、定速巡航、駐車雷達、皮質座椅等,這些都是消費者特別重視的配置。所以就性價比來說,毫無疑問,福睿斯完勝。

對於底盤,有必要細究一下,從圖中可以看出來,現款英朗和已經停產的凱越的底盤結構是一樣的。這時候你就明白為什麼福睿斯在底盤調教上的造詣更高一層,底盤非常紮實厚重,韌性十足,無論是慮震、隔音還是底盤行駛的厚重感,福睿斯都會給你一個不小的驚喜。

隨後我們又發現,英朗和凱越的發動機也是一樣的。目前凱越已經停產,停產原因是車型過於老舊,其實我看未必吧,這很明顯是為英朗讓步罷了,英朗和凱越的底盤、發動機都極其相似,不禁讓我想入非非…這樣的“凱越”,怎麼和福睿斯競爭。

乘坐過這兩個車子的人都會發現和英朗比起來,福睿斯很關注乘客的舒適性,比如座椅的坐墊很厚實,填充物軟硬適中,有一種美式大沙發的感覺,而英朗就相形見絀了,座椅比較單薄包裹性較差,又比如在隔音方面,福睿斯的用料更實在…畢竟福睿斯要比英朗重將近100斤,所以可以理解福睿斯在車身用料方面“更下本”了。

有對比才有傷害。福睿斯在2014年12月30日上市,車型歷史只有1年多的時間,但是卻能在今年10月份斬獲三萬多的銷量。而英朗作為老牌的合資家轎,有着多年的歷史,卻被一個新秀追着打。不過,群眾的眼睛是雪亮的,性價比高的車型,消費者會用手裡的現金去投票的。

福睿斯的銷量,頗有點“扮豬吃老虎”的特點,因為福睿斯平時“話不多”,比較低調,廣告宣傳什麼的也很少見。但是英朗就不一樣了,在很多地方都可以看到關於英朗的宣傳,高銷量也被各種讚譽,比起福睿斯要高調太多了,但是真到了銷量上面,兩者只有微乎其微的差距。

福睿斯最大程度的滿足國內人民的用車需求—以家用為主,但是眾口難調,有些消費者就是想要純粹的駕駛激情,那這個時候,他通常會把關注點轉向福克斯,因為在這個價位的車型裏面,福克斯的操控無出其右,幾乎被當作標杆來看待。福特在這個級別緊密布局了兩個車型,看來確實是仔細研究過國內的用車環境。

追求純粹操控的消費者可以選擇福克斯,想要操控又想要大空間的消費者就會鍾情於福睿斯。因為雙福車型精準的市場定位和強大的產品競爭力,使得它們取得了極大的勝利,雙福在9月份的銷量為51163輛,10月份的銷量為52806輛,取得了驕人的成績。

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

【其他文章推薦】

※超省錢租車方案

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

※回頭車貨運收費標準

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

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

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

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

都說發飄的車不是好車,為什麼現在的車還越造越輕?

一般來說升力:Y= Cy1/2 ρv2sρ—空氣密度s—機翼面積Cy—升力係數v—氣流速度Cy = Y/(qS)在公式中Cy:升力係數Y :升力(升力垂直於氣流速度方向,向上為正)q :動壓,q=ρv*v/2 (ρ為空氣密度,v為氣流相對於物體的流速)S :參考面積(飛機一般選取機翼面積為參考面積)所以機翼的形狀決定空氣流速產生壓強差從而產生升力。

老一輩的人買衣服,除了看面料,還要看裡子,老一輩的司機除了看車質量好不好,還要聽關門聲音厚不厚重,關門聲音好聽,恩~~~好車。

中國的汽車發展說快也不快,但是說慢也不慢了。真正的發展就在近20年。如風起雲涌。以前的車少,能開上車的不是土豪官宦就是司機。所以關於車的一切都是老司機說了算,因為車開得多,說什麼都對,你TM連車都沒碰過居然敢質疑我的觀點?

那麼這些年老司機說過哪些經典段子做過哪些經典事情呢?

1.XX國的車太輕,開起來發飄。

輕飄飄輕飄飄,輕所以飄,聽起來沒毛病啊!但是為什麼這麼簡單的道理這些國際大廠就是不懂呢?

反而各家的鋁製車身越來越多,把車子越造越輕。難道他們都不知道“車子輕了會發飄”?你看開卡車就從不會發飄,就是因為重。

為什麼飛機那麼重照樣可以上天呢?最基本的原理我們都知道,物理課吹紙的實驗誰都做過。空氣流速快的地方壓強小。

一般來說升力:Y= Cy1/2 ρv2s

ρ—空氣密度

s—機翼面積

Cy—升力係數

v—氣流速度

Cy = Y/(qS)

在公式中

Cy:升力係數

Y :升力(升力垂直於氣流速度方向,向上為正)

q :動壓,q=ρv*v/2 (ρ為空氣密度,v為氣流相對於物體的流速)

S :參考面積(飛機一般選取機翼面積為參考面積)

所以機翼的形狀決定空氣流速產生壓強差從而產生升力。

而我們看到汽車的側面和機翼也一樣,會產生上下不一的氣流。到達一定車速的時候也會產生升力。

這就是我們廣義上說的發飄。競速摩托車之所以不需要尾翼增加下壓力就是因為不會產生這兩股相對氣流。

在上述公式當中V和S是變量,而我們說車飄的時候也多是跑高速。所以最後就只有S這一個變量了。怎麼搞?把車頂做平,底盤做凸出來?很顯然不可能。這個時候就有尾翼的出現了。

尾翼的效果就是反過來裝的機翼,簡單粗暴,原理就是在車屁股產生一個下壓力,所以就算跑車很輕只要尾翼能夠產生足夠的下壓力,車也不會發飄。所以就算車再輕只要有相對的下壓力,都不會發飄。但是這樣一來問題又來了。

你想下要是你走路的時候有個人拚命按着你的頭你會走得輕鬆嗎?這個時候下壓力大又影響油耗,所以,怎樣在下壓力和油耗之間達到一個平衡才是汽車廠商考慮的。

和車身重量並沒有直接關係,而車的體重減下來,腰不酸了,油耗低了,腿不疼了,操控好了,一箱油能跑更遠了,油價上漲也不怕了。但是覺得鋁製車身修起來太貴的贊一個。本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

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

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

※回頭車貨運收費標準

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

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

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

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

2016“鴻情•粵意”捷豹路虎媒體品鑒會在廣州舉行

得益於捷豹家族引以為傲的智能全鋁車身架構,全新捷豹XFL雖然擁有同級領先的修長車身,但整體表現依然輕盈靈活,表現出良好的動態性能。首次引入的後排開門警示系統,在監測到後方有車輛靠近時,會提醒後排乘客暫勿開啟車門,保護車內外人員安全,首次應用於捷豹車型上的nanoe™車內空氣凈化技術為乘客奉上純凈空氣。

12月18日,廣州鴻粵銳虎捷豹路虎4S中心聯手廣東鴻粵銳虎捷豹路虎4S中心舉辦了2016“鴻情•粵意”捷豹路虎媒體品鑒會。品鑒會上,來自廣州地區的30位主流媒體再度體驗了捷豹路虎車型的非凡魅力、進一步加深了對捷豹“性能美學”品牌DNA和路虎品牌始終如一的探索和發現精神的了解。

廣州鴻粵銳虎汽車銷售服務有限公司是集銷售、維修、零配件供應、信息反饋四位一體的4S標準捷豹路虎經銷店。公司在成立一年之內,先後榮獲“南區最佳售後經銷商”、“季度最佳區域售後服務獎”、“路虎中國誠信經銷商”、“年度最佳售後服務團隊”等獎項。這些殊榮,是鴻粵銳虎實力的見證,也是尊貴路虎車主們卓越服務的保證。

廣東鴻粵銳虎汽車銷售服務有限公司,是華南區最大的捷豹路虎旗艦4S店,也是廣州唯一一家擁有路虎越野體驗中心旗艦店。它致力於為廣東客戶帶來頂級豪華座駕體驗,把具有純正英倫皇室的血統和文化呈現給高端消費群體。

此次媒體品鑒會在雅韻軒精素茶館舉行,來自廣州地區網站、電台、自媒體等20家主流媒體共同體驗品鑒了包括捷豹XFL、路虎發現神行、路虎攬勝極光等捷豹路虎車型的卓越性能。

為中國市場專屬打造的全新捷豹XFL,表現出新格調運動商務座駕的獨特風範,就像一位身着套裝,舉止優雅的英倫紳士。在軸距增加140毫米后,其軸距達到3100毫米,帶來寬綽舒適的後排乘坐空間。得益於捷豹家族引以為傲的智能全鋁車身架構,全新捷豹XFL雖然擁有同級領先的修長車身,但整體表現依然輕盈靈活,表現出良好的動態性能。首次引入的後排開門警示系統,在監測到後方有車輛靠近時,會提醒後排乘客暫勿開啟車門,保護車內外人員安全,首次應用於捷豹車型上的nanoe™車內空氣凈化技術為乘客奉上純凈空氣。

路虎品牌旗下的全能全地形豪華SUV發現神行以優秀的全地形能力輕鬆征服各種複雜地形,在城市道路上,發現神行又表現出優異的駕乘舒適性和燃油經濟性。超凡多功能設計讓全家出遊非常實用。靈活的座椅布局營造超強的儲物能力,容納所有行李,42處儲物空間讓手機、平板電腦、玩具,保溫杯都有各自的安身之處。最多4個12V電源接口和4個USB接口,滿足多個电子設備同時充電的需求。攬勝極光又是另外一種風格,其動感時尚的設計超越了人們對SUV車型的傳統認知,引領時尚潮流,滿足年輕消費者對個性的追求,其內飾在簡潔精緻的基礎上,更凸顯了對豪華的追求,是追求時尚的不二之選。

通過現場品鑒體驗,廣州地區媒體記者親身領略了捷豹車型誘人設計、卓越性能、精湛工藝以及路虎旗下車型豪華理念和強大的全地形能力、增進了對捷豹路虎的品牌的了解,對於捷豹和路虎品牌在廣州地區的知名度提升起到重要作用。

同時,歷時一個多月的捷豹路虎系列區域活動也隨着這場品鑒會進入尾聲。北至呼和浩特、吉林,西至西安、甘肅,南至廣州、深圳,東至青島,捷豹和路虎已為全國20餘座城市的消費者帶去獨一無二的專屬體驗,一次次踐行了品牌深耕全國區域市場的承諾。未來,捷豹路虎也將持續在區域市場發力,不斷將更多更好的產品、更尊貴的體驗,帶給地區媒體與消費者。本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

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

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

※回頭車貨運收費標準

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

※超省錢租車方案

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

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

一部有內涵的車,這些功能必不可少

另外,相信有了感應式尾門的MpV,也沒有像全新GL8這麼人性化,電動尾門能夠在任意角度停止,方便了不同身高的用戶使用。除了感應式尾門,全新GL8幾乎將人性化配置做到極致,還配備了電動滑移門,其具備仿夾功能,在滑移門關閉過程中,如遇到一定阻力,滑移們會自動停止,避免傷害用戶。

不知道從什麼時候開始,很多車一上來就要用 “大氣”、“亮麗”等外在的詞去定義自身,殊不知隨着生活品質的不斷提高,用戶對車的 “內涵”也有更多的追求。而什麼樣的車才能算得上有“內涵”?這個應該是被定義,而非自定義。它需要經歷時間的積累以及用戶的考驗。

時光荏苒,從1999年上市至今,17年來別克GL8在受眾心中都享有極高口碑,前後經歷4次換代,從最初的“大轎子“大空間,到追求舒適與”陸上公務艙“,再到升級的陸尊、GL8商務版,科技配置一直在升級,品質不斷在提高,”內涵“可以說滲透到了全新GL8骨子里。全新GL8也一直身體力行的在詮釋真正的“內涵”不是簡單的堆砌,而是從“心”出發。

領先科技——安吉星4G LTE/WiFi、HUD抬頭显示、Carplay

在這個幾乎每個人都離不開網絡的時代,無論到哪裡,WiFi都顯得無比重要。全新一代GL8,自帶4G Wi-Fi熱點,速度高達100M/s,穩定可靠的4G LTE最多可支持7台移動設備同時接入,幾乎覆蓋了整車人的WiFi。讓全新GL8在點火的狀態下,成為了一個大的移動熱點,可隨時隨地暢享車內信息娛樂,大大豐富車生活,給用戶帶來了真切的需求。

第10代Onstar還可全時在線助理為用戶提供包括碰撞自動求助、緊急救援協助、安全保障、導航、車況監測、全聲控免提電話、手機應用等7大類26項服務,全新GL8簡直可以說應有盡有,讓移動辦公暢通無阻。

導航不必低頭的HUD抬頭显示配置,更是貼心的領先科技配備。HUD抬頭显示可以在很大程度上避免分散駕駛員的注意力,從而提高行車安全性。

而Carplay配置目前在很多高端車身上都使用了,如:法拉利、奧迪Q7等等,但在MpV車型裏面,全新GL8無疑是做了領頭羊,這也展現GL8不斷追求科技、提升“內涵”的表現。其可以利用智能手機的絕大部分常用App,比如:QQ音樂、導航等,這點相信大家都知道手機的App永遠比車載的要更新更方便。

再則, Carplay不僅可以給手機充電,同時能夠通過數據線將手機的基本功能,比如:撥打電話、切換音樂等,通過車輛的多功能方向盤直接控制,這科技,大大提高了行車安全性。

人性化配置——感應式尾門、電動滑移門、車輛自動上鎖

全新GL8的感應式尾門配置,給用戶帶來的將是很大的便捷服務。據說這個配置在多數MpV裏面是沒有的,如夏朗這款車型,便經常有車主抱怨雙手搬着行李箱的時候,沒有感應式尾門很不方便。另外,相信有了感應式尾門的MpV,也沒有像全新GL8這麼人性化,電動尾門能夠在任意角度停止,方便了不同身高的用戶使用。

除了感應式尾門,全新GL8幾乎將人性化配置做到極致,還配備了電動滑移門,其具備仿夾功能,在滑移門關閉過程中,如遇到一定阻力,滑移們會自動停止,避免傷害用戶;在滑移門開啟過程中,如果車窗處於打開狀態,滑移門開啟時將停止在安全位置,防止夾傷用戶手或頭部。

像GL8這樣,才是真正從每個用戶的角度考慮,如:車輛自動上鎖功能,當車輛熄火后,用戶帶着鑰匙,關車門離開車輛后,即使忘記上鎖,當用戶走出3米的距離車輛會自動上鎖,並鳴號提示。以及其音響和空調系統會在用戶撥打藍牙電話時自動降低風速和調低音量,並在掛電話后自動恢復。

周全防護——智慧安全系統

看到這裏,可能有人會說全新GL8配置在服務這方面確實是很人性化,但這麼大的車,駕駛方面有沒有保障。這方面無需擔心,GL8在安全配置方面一直以來都是“自帶光環”,全新GL8更是採用了智慧安全系統,擁有ACC自適應巡航、FCA 前方碰撞預警、CMB 碰撞自動剎車、LKA 車道保持、SBZA 側盲區預警、ApA自動泊車系統等。

當在城市中行駛時需要頻繁的停車和起步,如果你開的是GL8,ACC自適應巡航可以幫你實現“停車/起步”功能,以及“自動跟車”。

另外,FCA 前方碰撞預警則可以幫你綜合評估,前方慢速行駛或者靜止的車輛進行碰撞危險指數,並採取主動躲避動作,從而提高安全保護。

如果前方有障礙物,沒來得及採取操作,CMB 碰撞自動剎車系統不單可避免了車子不必要的損失,重要的是保護了乘員的安全。

再則,你是否曾有這樣的顧慮,自己的車是否有壓線,對方車輛是否會在毫不知情的情況下變線等等,開GL8有LKA 車道保持系統,從此,這些顧慮再也不會有。

當你在轉彎或車速比較高時,側盲區預警系統將時刻幫用戶注意着左右車輛;如果你是新手,發現停車位有點窄,那就用自動泊車。

全新GL8以上的大部分配置幾乎可以說是被很多同級別MpV忽視的,如今市面上很多車型,為了迎合大眾年輕時尚化的需求,紛紛在外觀造型等元素上堆砌、下“功夫”,但這些做法可能只會是曇花一現。唯有像全新GL8真正從用戶的角度出發考慮,讓用戶享受到最佳體驗,把每個細節、“內涵”做到極致,必不可少的功能一個都不少,才能贏得用戶持久的支持。

事實也在證明,在全新一代GL8還沒上市前,上汽通用別克GL8今年1-10月份在華累計銷量61516萬輛,比奧德賽和艾力紳銷量加起來還高出不少。相信這個不斷提升“內涵”、擁有高科技的全新GL8,會俘獲更多用戶的心。本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※回頭車貨運收費標準

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

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

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

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

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

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

小師妹學JavaIO之:Buffer和Buff

目錄

  • 簡介
  • Buffer是什麼
  • Buffer進階
  • 創建Buffer
  • Direct VS non-Direct
  • Buffer的日常操作
    • 向Buffer寫數據
    • 從Buffer讀數據
    • rewind Buffer
    • Compact Buffer
    • duplicate Buffer
  • 總結

簡介

小師妹在學習NIO的路上越走越遠,唯一能夠幫到她的就是在她需要的時候給她以全力的支持。什麼都不說了,今天介紹的是NIO的基礎Buffer。老鐵給我上個Buff。

Buffer是什麼

小師妹:F師兄,這個Buffer是我們縱橫王者峽谷中那句:老鐵給我加個Buff的意思嗎?

當然不是了,此Buffer非彼Buff,Buffer是NIO的基礎,沒有Buffer就沒有NIO,沒有Buffer就沒有今天的java。

因為NIO是按Block來讀取數據的,這個一個Block就可以看做是一個Buffer。我們在Buffer中存儲要讀取的數據和要寫入的數據,通過Buffer來提高讀取和寫入的效率。

更多精彩內容且看:

  • 區塊鏈從入門到放棄系列教程-涵蓋密碼學,超級賬本,以太坊,Libra,比特幣等持續更新
  • Spring Boot 2.X系列教程:七天從無到有掌握Spring Boot-持續更新
  • Spring 5.X系列教程:滿足你對Spring5的一切想象-持續更新
  • java程序員從小工到專家成神之路(2020版)-持續更新中,附詳細文章教程

更多內容請訪問www.flydean.com

還記得java對象的底層存儲單位是什麼嗎?

小師妹:這個我知道,java對象的底層存儲單位是字節Byte。

對,我們看下Buffer的繼承圖:

Buffer是一個接口,它下面有諸多實現,包括最基本的ByteBuffer和其他的基本類型封裝的其他Buffer。

小師妹:F師兄,有ByteBuffer不就夠了嗎?還要其他的類型Buffer做什麼?

小師妹,山珍再好,也有吃膩的時候,偶爾也要換個蘿蔔白菜啥的,你以為乾隆下江南都幹了些啥?

ByteBuffer雖然好用,但是它畢竟是最小的單位,在它之上我們還有Char,int,Double,Short等等基礎類型,為了簡單起見,我們也給他們都搞一套Buffer。

Buffer進階

小師妹:F師兄,既然Buffer是這些基礎類型的集合,為什麼不直接用結合來表示呢?給他們封裝成一個對象,好像有點多餘。

我們既然在面向對象的世界,從表面來看自然是使用Object比較合乎情理,從底層的本質上看,這些封裝的Buffer包含了一些額外的元數據信息,並且還提供了一些意想不到的功能。

上圖列出了Buffer中的幾個關鍵的概念,分別是Capacity,Limit,Position和Mark。Buffer底層的本質是數組,我們以ByteBuffer為例,它的底層是:

final byte[] hb; 
  • Capacity表示的是該Buffer能夠承載元素的最大數目,這個是在Buffer創建初期就設置的,不可以被改變。
  • Limit表示的Buffer中可以被訪問的元素個數,也就是說Buffer中存活的元素個數。
  • Position表示的是下一個可以被訪問元素的index,可以通過put和get方法進行自動更新。
  • Mark表示的是歷史index,當我們調用mark方法的時候,會把設置Mark為當前的position,通過調用reset方法把Mark的值恢復到position中。

創建Buffer

小師妹:F師兄呀,這麼多Buffer創建起來是不是很麻煩?有沒有什麼快捷的使用辦法?

一般來說創建Buffer有兩種方法,一種叫做allocate,一種叫做wrap。

public void createBuffer(){
        IntBuffer intBuffer= IntBuffer.allocate(10);
        log.info("{}",intBuffer);
        log.info("{}",intBuffer.hasArray());
        int[] intArray=new int[10];
        IntBuffer intBuffer2= IntBuffer.wrap(intArray);
        log.info("{}",intBuffer2);
        IntBuffer intBuffer3= IntBuffer.wrap(intArray,2,5);
        log.info("{}",intBuffer3);
        intBuffer3.clear();
        log.info("{}",intBuffer3);
        log.info("{}",intBuffer3.hasArray());
    }

allocate可以為Buffer分配一個空間,wrap同樣為Buffer分配一個空間,不同的是這個空間背後的數組是自定義的,wrap還支持三個參數的方法,後面兩個參數分別是offset和length。

INFO com.flydean.BufferUsage - java.nio.HeapIntBuffer[pos=0 lim=10 cap=10]
INFO com.flydean.BufferUsage - true
INFO com.flydean.BufferUsage - java.nio.HeapIntBuffer[pos=0 lim=10 cap=10]
INFO com.flydean.BufferUsage - java.nio.HeapIntBuffer[pos=2 lim=7 cap=10]
INFO com.flydean.BufferUsage - java.nio.HeapIntBuffer[pos=0 lim=10 cap=10]
INFO com.flydean.BufferUsage - true

hasArray用來判斷該Buffer的底層是不是數組實現的,可以看到,不管是wrap還是allocate,其底層都是數組。

需要注意的一點,最後,我們調用了clear方法,clear方法調用之後,我們發現Buffer的position和limit都被重置了。這說明wrap的三個參數方法設定的只是初始值,可以被重置。

Direct VS non-Direct

小師妹:F師兄,你說了兩種創建Buffer的方法,但是兩種Buffer的後台都是數組,難道還有非數組的Buffer嗎?

自然是有的,但是只有ByteBuffer有。ByteBuffer有一個allocateDirect方法,可以分配Direct Buffer。

小師妹:Direct和非Direct有什麼區別呢?

Direct Buffer就是說,不需要在用戶空間再複製拷貝一份數據,直接在虛擬地址映射空間中進行操作。這叫Direct。這樣做的好處就是快。缺點就是在分配和銷毀的時候會佔用更多的資源,並且因為Direct Buffer不在用戶空間之內,所以也不受垃圾回收機制的管轄。

所以通常來說只有在數據量比較大,生命周期比較長的數據來使用Direct Buffer。

看下代碼:

public void createByteBuffer() throws IOException {
        ByteBuffer byteBuffer= ByteBuffer.allocateDirect(10);
        log.info("{}",byteBuffer);
        log.info("{}",byteBuffer.hasArray());
        log.info("{}",byteBuffer.isDirect());

        try (RandomAccessFile aFile = new RandomAccessFile("src/main/resources/www.flydean.com", "r");
             FileChannel inChannel = aFile.getChannel()) {
            MappedByteBuffer buffer = inChannel.map(FileChannel.MapMode.READ_ONLY, 0, inChannel.size());
            log.info("{}",buffer);
            log.info("{}",buffer.hasArray());
            log.info("{}",buffer.isDirect());
        }
    }

除了allocateDirect,使用FileChannel的map方法也可以得到一個Direct的MappedByteBuffer。

上面的例子輸出結果:

INFO com.flydean.BufferUsage - java.nio.DirectByteBuffer[pos=0 lim=10 cap=10]
INFO com.flydean.BufferUsage - false
INFO com.flydean.BufferUsage - true
INFO com.flydean.BufferUsage - java.nio.DirectByteBufferR[pos=0 lim=0 cap=0]
INFO com.flydean.BufferUsage - false
INFO com.flydean.BufferUsage - true

Buffer的日常操作

小師妹:F師兄,看起來Buffer確實有那麼一點複雜,那麼Buffer都有哪些操作呢?

Buffer的操作有很多,下面我們一一來講解。

向Buffer寫數據

向Buffer寫數據可以調用Buffer的put方法:

public void putBuffer(){
        IntBuffer intBuffer= IntBuffer.allocate(10);
        intBuffer.put(1).put(2).put(3);
        log.info("{}",intBuffer.array());
        intBuffer.put(0,4);
        log.info("{}",intBuffer.array());
    }

因為put方法返回的還是一個IntBuffer類,所以Buffer的put方法可以像Stream那樣連寫。

同時,我們還可以指定put在什麼位置。上面的代碼輸出:

INFO com.flydean.BufferUsage - [1, 2, 3, 0, 0, 0, 0, 0, 0, 0]
INFO com.flydean.BufferUsage - [4, 2, 3, 0, 0, 0, 0, 0, 0, 0]

從Buffer讀數據

讀數據使用get方法,但是在get方法之前我們需要調用flip方法。

flip方法是做什麼用的呢?上面講到Buffer有個position和limit字段,position會隨着get或者put的方法自動指向後面一個元素,而limit表示的是該Buffer中有多少可用元素。

如果我們要讀取Buffer的值則會從positon開始到limit結束:

public void getBuffer(){
        IntBuffer intBuffer= IntBuffer.allocate(10);
        intBuffer.put(1).put(2).put(3);
        intBuffer.flip();
        while (intBuffer.hasRemaining()) {
            log.info("{}",intBuffer.get());
        }
        intBuffer.clear();
    }

可以通過hasRemaining來判斷是否還有下一個元素。通過調用clear來清除Buffer,以供下次使用。

rewind Buffer

rewind和flip很類似,不同之處在於rewind不會改變limit的值,只會將position重置為0。

public void rewindBuffer(){
        IntBuffer intBuffer= IntBuffer.allocate(10);
        intBuffer.put(1).put(2).put(3);
        log.info("{}",intBuffer);
        intBuffer.rewind();
        log.info("{}",intBuffer);
    }

上面的結果輸出:

INFO com.flydean.BufferUsage - java.nio.HeapIntBuffer[pos=3 lim=10 cap=10]
INFO com.flydean.BufferUsage - java.nio.HeapIntBuffer[pos=0 lim=10 cap=10]

Compact Buffer

Buffer還有一個compact方法,顧名思義compact就是壓縮的意思,就是把Buffer從當前position到limit的值賦值到position為0的位置:

public void useCompact(){
        IntBuffer intBuffer= IntBuffer.allocate(10);
        intBuffer.put(1).put(2).put(3);
        intBuffer.flip();
        log.info("{}",intBuffer);
        intBuffer.get();
        intBuffer.compact();
        log.info("{}",intBuffer);
        log.info("{}",intBuffer.array());
    }

上面代碼輸出:

INFO com.flydean.BufferUsage - java.nio.HeapIntBuffer[pos=0 lim=3 cap=10]
INFO com.flydean.BufferUsage - java.nio.HeapIntBuffer[pos=2 lim=10 cap=10]
INFO com.flydean.BufferUsage - [2, 3, 3, 0, 0, 0, 0, 0, 0, 0]

duplicate Buffer

最後我們講一下複製Buffer,有三種方法,duplicate,asReadOnlyBuffer,和slice。

duplicate就是拷貝原Buffer的position,limit和mark,它和原Buffer是共享原始數據的。所以修改了duplicate之後的Buffer也會同時修改原Buffer。

如果用asReadOnlyBuffer就不允許拷貝之後的Buffer進行修改。

slice也是readOnly的,不過它拷貝的是從原Buffer的position到limit-position之間的部分。

public void duplicateBuffer(){
        IntBuffer intBuffer= IntBuffer.allocate(10);
        intBuffer.put(1).put(2).put(3);
        log.info("{}",intBuffer);
        IntBuffer duplicateBuffer=intBuffer.duplicate();
        log.info("{}",duplicateBuffer);
        IntBuffer readOnlyBuffer=intBuffer.asReadOnlyBuffer();
        log.info("{}",readOnlyBuffer);
        IntBuffer sliceBuffer=intBuffer.slice();
        log.info("{}",sliceBuffer);
    }

輸出結果:

INFO com.flydean.BufferUsage - java.nio.HeapIntBuffer[pos=3 lim=10 cap=10]
INFO com.flydean.BufferUsage - java.nio.HeapIntBuffer[pos=3 lim=10 cap=10]
INFO com.flydean.BufferUsage - java.nio.HeapIntBufferR[pos=3 lim=10 cap=10]
INFO com.flydean.BufferUsage - java.nio.HeapIntBuffer[pos=0 lim=7 cap=7]

總結

今天給小師妹介紹了Buffer的原理和基本操作。

本文的例子https://github.com/ddean2009/learn-java-io-nio

本文作者:flydean程序那些事

本文鏈接:http://www.flydean.com/java-io-nio-buffer/

本文來源:flydean的博客

歡迎關注我的公眾號:程序那些事,更多精彩等着您!

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

【其他文章推薦】

USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能

台北網頁設計公司這麼多該如何選擇?

※智慧手機時代的來臨,RWD網頁設計為架站首選

※評比南投搬家公司費用收費行情懶人包大公開

※回頭車貨運收費標準

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

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

掌握SpringBoot-2.3的容器探針:深入篇

歡迎訪問我的GitHub

https://github.com/zq2599/blog_demos

  • 內容:原創分類匯總及配套源碼,涉及Java、Docker、K8S、DevOPS等

關於《SpringBoot-2.3容器化技術》系列

  • 《SpringBoot-2.3容器化技術》系列,旨在和大家一起學習實踐2.3版本帶來的最新容器化技術,讓咱們的Java應用更加適應容器化環境,在雲計算時代依舊緊跟主流,保持競爭力;
  • 全系列文章分為主題和輔助兩部分,主題部分如下:
  1. 《體驗SpringBoot(2.3)應用製作Docker鏡像(官方方案)》;
  2. 《詳解SpringBoot(2.3)應用製作Docker鏡像(官方方案)》;
  3. 《掌握SpringBoot-2.3的容器探針:基礎篇》;
  4. 《掌握SpringBoot-2.3的容器探針:深入篇》;
  5. 《掌握SpringBoot-2.3的容器探針:實戰篇》;
  • 輔助部分是一些參考資料和備忘總結,如下:
  1. 《SpringBoot-2.3鏡像方案為什麼要做多個layer》;
  2. 《設置非root賬號不用sudo直接執行docker命令》;
  3. 《開發階段,將SpringBoot應用快速部署到K8S》;

前文回顧

  1. 本文是《掌握SpringBoot-2.3的容器探針》系列的第二篇,前文 《掌握SpringBoot-2.3的容器探針:基礎篇》知道了kubernetes的存活和就緒探針,以及SpringBoot-2.3的actuator新增的兩個endpoint,當我們把應用部署到kubernetes環境時,這些知識讓我們能配置出官方推薦的探針方案,如下圖:
  1. 儘管上述配置已經可以覆蓋多數場景,依然有三個問題未解決:
  • 首先,SpringBoot為kubernetes提供了兩個actuator項,但是那些並未部署在kubernetes的SringBoot應用呢?用不上這兩項也要對外暴露這兩個服務地址嗎?

  • 其次,就緒探針是什麼時候開始返回200返回碼的?應用啟動階段,業務服務可能需要一段時間才能正常工作,就緒探針要是提前返回了200,那k8s就認為容器可以正常工作了,這時候把外部請求調度過來是無法正常響應的,所以搞清楚就緒探針的狀態變化邏輯很重要;

  • 最後,也是最重要的一點:有的場景下,例如外部依賴服務異常、本地全局異常等情況下,業務不想對外提供服務,等到問題解決后業務又可以對外提供服務了,如果此時我們能自己寫代碼控制就緒探針的返回碼,那就做到了控制kubernetes是否將外部請求調度到此容器上,這可是個很實用的功能!

本篇就是為了解決上述問題而作,這些問題解決后才能用好探針技術,讓它在容器環境帶來更大價值;

關鍵知識點

解決上述問題的關鍵集中在以下幾個知識點:

  1. SpringBoot對容器環境的判斷;
  2. SpringBoot對狀態定義;
  3. 獲取狀態;
  4. 監聽狀態;
  5. 修改狀態;

接下來挨個學習這些知識點;

SpringBoot對容器環境的判斷

  1. 官方文檔如下圖所示,SpringBoot判斷是否是kubernetes環境的邏輯很簡單:是否有_SERVICE_HOST_SERVICE_PORT這兩個環境變量:

  2. 熟悉kubernetes的讀者看到_SERVICE_HOST”_SERVICE_PORT,應該會想起KUBERNETES_SERVICE_HOSTKUBERNETES_SERVICE_PORT,這是k8s給pod中配置的環境變量,看來SpringBoot也是針對k8s的這個規則來判定是否是容器環境的(如果將來k8s的某個版本不給pod設置這個環境變量,那些原本可以正常運行的pod豈不是有危險了?);

  3. 接下來通過實踐來驗證上述規則是否有效;

  4. 創建一個SpringBoot-2.3.0.RELEASE的應用,其pom.xml中的parent信息如下:

<parent>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-parent</artifactId>
  <version>2.3.0.RELEASE</version>
  <relativePath/>
</parent>
  1. 增加actuator依賴:
<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
  1. 啟動該應用,瀏覽器訪問:http://localhost:8080/actuator/health/liveness,返回404錯誤:
  1. 以上返回是符合預期的,因為此時並非在kubernetes環境,接下來將”_SERVICE_HOST_SERVICE_PORT這兩個環境變量加入應用進程,看看是否有變化;
  2. 如下圖,編輯啟動類的配置信息:
  1. 點擊下圖紅框位置,即可進入編輯環境變量的窗口:
  1. 新的窗口中,操作如下圖紅框中所示,新增了兩個環境變量:
  1. 再次運行程序,這次返回的狀態碼是200:
  1. 至此,我們弄明白了SpringBoot是否開啟探針的邏輯,即應用是否運行在容器環境,而是否是容器環境的判定邏輯則是_SERVICE_HOST_SERVICE_PORT這兩個環境變量是否存在;

非kubernetes環境開啟探針

/actuator/health/liveness/actuator/health/readiness在kubernetes環境才會開啟,但是一般情況下,在開發階段SpringBoot應用可能運行在自己的電腦上,此時如果想查看這兩個接口的返回值有兩種方式:

第一種,就是前面提到的添加_SERVICE_HOST_SERVICE_PORT這兩個環境變量,讓SpringBoot以為當前環境是kubernetes環境;

第二種,是按照官方指導添加屬性,如下圖紅框所示:

SpringBoot對探針相關狀態定義

  1. 首先要弄清楚有哪些狀態,源碼是最準確的;
  2. 如下圖,存活探針一共有兩種狀態:CORRECT表示應用運行中並且內部狀態正常,BROKEN表示應用運行中並且內部是BROKEN狀態(請原諒我的英語水平)
  1. 如下圖,就緒探針一共有兩種狀態:ACCEPTING_TRAFFIC表示應用可以對外提供服務,REFUSING_TRAFFIC表示應用無法對外提供服務;
  1. 另外,上圖的since註解显示這兩個枚舉是從2.3.0版本開始生效的;

  2. 小小八卦一下,上述兩個枚舉的作者Brian Clozel,坐標法國里昂,目前在sringboot的提交次數排第8名:

  1. 在SpringBoot啟動過程中,應用、存活探針、就緒探針三者狀態對應關係如下圖:
  1. 在SpringBoot停止過程中,應用、存活探針、就緒探針三者狀態對應關係如下圖:

獲取狀態

如果業務應用想獲取當前的存活和就緒狀態,將ApplicationAvailability接口autowire進來即可,下一篇《實戰篇》會有詳細的使用方式,這裏看下關鍵代碼:

監聽狀態

得益於Spring完整的事件發布和訂閱機制,業務應用通過EventListener註解就能監聽到存活和就緒狀態的變化,在EventListener註解修飾的方法中寫入必要的業務代碼即可實現狀態監聽,下一篇《實戰篇》會有詳細的使用方式,這裏看下關鍵代碼:

修改狀態

  1. 修改狀態,尤其是就緒狀態,這應該是我們最關注的功能了,在某些業務場景下,應用無法對外提供服務,這時候我們希望K8S不要將外部請求調度到這裏,如果K8S通過就緒探針收到返回碼非200,就不再將請求調度到這個pod上;
  2. 下一篇《實戰篇》會有詳細的代碼介紹,這裏給出關鍵代碼作為參考:

請注意

重要的事情一定要強調:咱們修改狀態的最終目的,不是為了取得applicationAvailability.getReadinessState()返回新的枚舉對象,而是要改變/actuator/health/readiness接口的返回碼(就緒是200,未就緒是503),這是kubernetes的探針規則要用到的;

為啥都放在下一篇

  1. 文章看到這裏您可能已經火冒三丈了:關鍵代碼都貼出來了,為啥不在本章給出完整源碼?騙點擊量?湊字數?湊文章數?
  2. 存活和就緒探針是在kubernetes環境下的工具,為了給您提供盡量準確和完整的參考,所有的代碼和操作都必須在kubernetes環境完成調試才能發布,而且這些操作應該作為單獨章節,與當前的理論知識分開;
  3. 歡迎進入《實戰篇》,隨SpringBoot-2.3.0.RELEASE,一起在kubernetes世界暢遊;

歡迎關注我的公眾號:程序員欣宸

https://github.com/zq2599/blog_demos

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

【其他文章推薦】

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

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

南投搬家公司費用,距離,噸數怎麼算?達人教你簡易估價知識!

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

※超省錢租車方案

※回頭車貨運收費標準

動手造輪子:實現一個簡單的依賴注入(三) — 支持屬性注入

動手造輪子:實現一個簡單的依賴注入(三) — 支持屬性注入

Intro

前面寫了幾篇依賴注入的文章,有興趣的小夥伴可以參考文末 Reference 部分中的鏈接,一直有小夥伴希望增加屬性注入的支持,昨天試着加了一下,思路很簡單,在獲取到服務實例之後檢查實例中有沒有需要注入的屬性,如果有並且不為 null 就從服務容器中獲取一個對應屬性類型的實例

代碼修改

FromServiceAttribute

完整的代碼修改可以參考這個 commit https://github.com/WeihanLi/WeihanLi.Common/commit/91dc0b515d12e7c036771fba9419824cd0219544

首先我們需要增加一個 FromServiceAttribute 用來標識哪些屬性需要注入,代碼如下:

[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter, AllowMultiple = false, Inherited = false)]
public sealed class FromServiceAttribute : Attribute
{
}

這裏 AttributeTargets 除了屬性之外增加了字段和參數,是想可能以後會用到,參數典型的應用場景就是類似於 asp.net core 里的 [FromServices] 用來實現方法注入參數

EnrichObject

增加了一個 EnrichObject 方法,用來在獲取到服務實例之後,對服務實例做一些補充的配置,如我們要加的屬性注入,如果我們要加字段注入等也可以在這個方法內完成,來看實現:

private object EnrichObject(object obj)
{
    if (null != obj)
    {
        // PropertyInjection
        var type = obj.GetType();
        foreach (var property in CacheUtil.TypePropertyCache.GetOrAdd(type, t => t.GetProperties())
            .Where(x => x.IsDefined(typeof(FromServiceAttribute))))
        {
            if (property.GetValueGetter()?.Invoke(obj) == null)
            {
                property.GetValueSetter()?.Invoke(
                    obj,
                    GetService(property.PropertyType)
                    );
            }
        }
    }

    return obj;
}

上面的邏輯就是獲取這個 object 定義的所有需要注入的屬性,如果屬性的值不為 null 則,從服務容器中獲取對應的服務實例,之所以要檢查是不是null

上面的 CacheUtil.TypePropertyCache 是一個 Type 為 key,PropertyInfo 數組為 Value 的併發字典,用來緩存類型的屬性

GetValueGetter/GetValueSetter 是 PropertyInfo 的擴展方法,利用表達式樹和緩存提高屬性 Get/Set 的效率

GetSertviceInstance

修改原來的 GetServiceInstance 方法為 GetServiceInstanceInternal,增加一個一樣的方法,實現邏輯是在 GetServiceInstanceInternal 的基礎上調用上面的 Enrich 方法來實現屬性注入

More

雖然增加了屬性注入的支持,但是還是不太推薦使用,從上面屬性注入的代碼中可以看得到,如果用不好很容易出現循環依賴的問題,而且用構造器注入的話依賴關係很清晰,分析方法的構造方法即可,如果要使用屬性注入請謹慎使用

Reference

  • https://github.com/WeihanLi/WeihanLi.Common/commit/91dc0b515d12e7c036771fba9419824cd0219544
  • https://github.com/WeihanLi/WeihanLi.Common/tree/dev/src/WeihanLi.Common/DependencyInjection
  • https://www.cnblogs.com/weihanli/p/implement-dependency-injection.html
  • https://www.cnblogs.com/weihanli/p/implement-dependency-injection-01.html
  • https://www.cnblogs.com/weihanli/p/implement-dependency-injection-02.html

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

【其他文章推薦】

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

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

※Google地圖已可更新顯示潭子電動車充電站設置地點!!

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

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

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

※回頭車貨運收費標準