最低7.98萬起 本周的新款SUV都高端的嚇人!

最後才是產品收益相較過去應有更大的改善。在採訪環節的開頭,李春榮說:“今年是東風乘用車九年了,明年翻過去就是十年,我們經常說十年磨一劍,這個用在我們東風風神身上非常貼切。”可以看出在過去近十年的時間里,東風風神為產品質量打下了紮實穩固的基礎。

2017年第一周,不少廠家選擇了在這周時間內搶先發布新款車型。這一周新上市的車型僅有幾款,但都是值得考慮的貨色!其中最賣力的要數東風本田!

12月29日,武漢正寒風凜凜,而此時東風風神卻熱情絲毫不減。當天受邀參加國家信息中心、搜狐汽車共同舉辦的“中國本土品牌創新之旅”,來到了位於武漢的東風風神廠區,共同見證“2016年度第15萬台整車發運暨第10萬台發動機下線”儀式。而這,也可視為東風乘用車公司為“十三五”開局之年畫上了一個圓滿的句號。

在過去的11個月,東風乘用車公司累計銷售超13萬輛,而現今第15萬台整車發運,意味着東風風神將邁上年銷15萬輛台階,同比增長速近50%。從銷量數據上看,東風風神AX7、AX5、AX3等組成的SUV軍團貢獻最大,合計銷量超過十萬輛,其中明星車型東風風神AX7穩步站上月銷7000輛台階,並向月銷過萬挺進。另外在海外市場也作出了好成績,年銷量超1.5萬輛,同比增長近4倍,成績斐然。

隨着東風風神在技術研發以及生產製造體系的不斷投入,東風風神已經形成完善的發動機製造價值鏈。如今,東風風神的發動機銷量佔東風公司自主發動機整體銷量近50%,成為公司最大的自主品牌發動機製造陣地。目前,東風風神研發生產的發動機主要分為A、B、C三個系列平台,其中A系列包含A16、A14T等型號,而A14T正是東風風神目前主打的1.4T渦輪增壓發動機,在未來的規劃中A系列平台也將會以1.4L為主進行研發。

李春榮表示,要當中國品牌的主力軍,得有幾個方面,首先產品質量要好,質量不好就是“游擊隊”,這一點在AX5的誕生地東風風神常州工廠有所體現,具備國際一流水平的自動化生產線和智能生產管理系統,工廠的生產標準與設備均向合資品牌東風日產看齊。其次是銷量規模,目前東風乘用車在中國汽車市場排名第31位,自主品牌排名第17位,李春榮坦言道明年銷量要做到20萬輛。再者是產品構架,東風風神要成為主力軍,明年將要在轎車、SUV、高端轎車、新能源車、海外市場5個方面均衡發展。最後才是產品收益相較過去應有更大的改善。

在採訪環節的開頭,李春榮說:“今年是東風乘用車九年了,明年翻過去就是十年,我們經常說十年磨一劍,這個用在我們東風風神身上非常貼切。”可以看出在過去近十年的時間里,東風風神為產品質量打下了紮實穩固的基礎。這裏用“博觀而約取,厚積而薄發”這句話來形容目前的東風乘用車是最合適不過了。

俗話說,40不惑,50知天命。作為成立48年的大型汽車企業,東風就像一個成熟穩重的中年人,沒有更多刻意追求數據的漂亮,而是着重穩定可靠和節油。對汽車企業來說,質量是最本質的東西。“我們已經是中國品牌的生力軍,接下來明年我們希望成為中國品牌的主力軍。”東風乘用車總經理李春榮說道。

久違的重逢,路虎發現神行安吉之旅

“遙憐十景試春遊,東嶺迢迢一徑幽。記得碧門村口去,籃輿輕度到杭州”所形容正是此時此刻的場景,駕駛全新路虎發現神行踏上了前往安吉的路上到處都是鬱郁蔥蔥的竹林、陽光透過竹恭弘=叶 恭弘灑在馬路上、竹恭弘=叶 恭弘沙沙作響。

“發現神行”作為路虎在國內投放的一款重磅中型SUV,自上市之初便飽受關注。無奈當時進口版過高的售價使得許多喜歡它的消費者都望而卻步,而在與奇瑞捷豹路虎“聯婚”后價格比起進口版直接下降十多萬,這可讓很多崇尚路虎品牌的車友們對它產生了極大的興趣。那麼國產之後的路虎又可否保持與進口版同樣的出色品質呢,讓來帶你們一探究竟。

身為一台路虎,與生俱來的越野能力毋庸置疑,但更多的城市用戶購買SUV只是為了更好的都市駕乘,在鋪裝路面的駕駛神行同樣為我們交上了一份滿意的答卷。全時四驅系統,能根據道路的實際狀況,在兩驅以及四驅之間自由切換,當檢測到到前輪打滑時它能迅速將動力分配到後輪,讓車輛在雨天濕滑路面擁有更好的循跡性。

而更值得一提的當屬是路虎家族名聲在外的全地形反饋適應系統了,只需簡單點擊按鈕即可在普通、草地-砂礫-雪地、泥濘-車轍、沙土、岩石五大駕駛模式中任意切換,讓駕駛員不必具有專業技術,也可以輕鬆應對各種路況。

“發現神行”是奇瑞捷豹路虎的第二款車型,一輛擁有優異的公路性和同級最強的四驅系統的七座中型SUV,通過大量的高科技配置和先進的技術應用,為此次安吉之旅保駕護航。

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

【其他文章推薦】

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

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

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

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

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

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

玩車教授洗車券兌換方法與注意事項

本券可在全國300餘個城市,20000餘家汽車超人服務門店通用,具體商戶以汽車超人平台為準。兌換流程:

感謝各位粉絲對玩車的支持

玩車洗車券是由汽車超人提供的“一分錢洗車券”,僅需一分錢就能做一次完整的洗車服務。洗車券使用時間為:2017年1月13日-2017年1月19日使用。本券可在全國300餘個城市,20000餘家汽車超人服務門店通用,具體商戶以汽車超人平台為準。

兌換流程:

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

【其他文章推薦】

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

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

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

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

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

參加北汽幻樂會周年慶典,論優秀的品牌文化如何誕生?

對於這些原本素未謀面的車主,通過一次有趣的幻樂會活動之後大家便成了好朋友,一起玩耍一起交流幻速帶來的歡樂。而在活動晚宴上,廠家眾多大人物齊聚現場也是讓車主們驚訝,而北汽幻速也正式公布了幻樂會粉絲新名稱:“可樂”,譜寫了幻樂會的全新篇章。

就在2017年元旦的時候,小編受邀參加北汽幻速幻樂會的活動,說白了這就是一個由廠家組織的讓一些車主與幻速粉絲等人一起慶祝元旦並且參与遊戲娛樂的活動,有的人可能會疑惑,不去老實試車,參加車主聚會幹什麼?

其實對於一個優秀的品牌來說,用戶與企業之間的溝通十分重要,就像國內某車企總是說他們的產品是廣泛徵集廣大基盤用戶的意見后打造的一樣,其實對於幻速來說,也是一樣的道理,聽取用戶的聲音才是正確的發展方向。

因此除了賣車之外,車企要做的更多,比如建立一個優秀的品牌文化,這也是難度不遜色於造出大賣產品的工程,寶馬費盡了力氣也沒能改變它在國內就是暴發戶用車的形象,而親民的幻速在品牌文化打造上顯然更加偏向於互動性質。

就拿這次的幻樂會周年慶典來說,來自全國各地的將近上百位的車主粉絲聚集在珠海,元旦當天車主們分成7隊,加上1隊媒體組的朋友們一起參加團隊挑戰項目,刺激的過山車、垂直極限等項目需要隊友們齊心協力完成,在經過了幾個小時的挑戰之後,車主們順利完成挑戰,贏得豐厚獎品;對於這些原本素未謀面的車主,通過一次有趣的幻樂會活動之後大家便成了好朋友,一起玩耍一起交流幻速帶來的歡樂。

而在活動晚宴上,廠家眾多大人物齊聚現場也是讓車主們驚訝,而北汽幻速也正式公布了幻樂會粉絲新名稱:“可樂”,譜寫了幻樂會的全新篇章。

北汽幻速擅長製造熱銷產品是大家有目共睹的,幻速品牌推出幾年的時間累計銷量直逼60萬,2015年12月31日幻樂會成立,短短的一年內幻樂會成為了國內十分少見的優秀官方車友會,而眾多企業高層出現在幻樂會也證明了幻樂會在幻速的地位。

縱觀國內車市,大家幾乎都沉浸在努力賣車的工作中,真的願意去花費這麼大的精力打造一個粉絲圈子,組織粉絲車友自駕/遊玩等活動的少之又少,而幻速就是其中一個,從長遠的角度看這樣的活動是十分有助於建立良好的品牌形象的,這也是十分利於企業發展的一個舉措,只有幻速這種高瞻遠矚的戰略眼光才能夠做出這樣的抉擇。因此有什麼不看好幻速的理由呢?本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

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

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

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

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

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

這款中型SUV樣子“值”幾十萬 卻只賣10.49萬起

內飾的按鍵比較少,檔把區域質感出色,整體還是蠻不錯的。前期上市的車型只有1。8T發動機+5擋手動變速箱的動力組合,喜歡自動擋的可以再等等,這台1。8T發動機來頭可不小了,最大功率130千瓦,最大扭矩245牛米。這台1。8T發動機代號TN4G18T,來自銅陵銳展科技有限公司,銅陵銳展科技有限公司由鐵牛集團控股,鐵牛集團正是眾泰的大股東。

又是周一,又是美好的一星期開始,我愛工作,工作使我充實((ง •̀_•́)ง)

話說小編美美一大早看新聞就看到一對奇葩,兩夫妻去迪拜淘金,付出6萬賺回37塊,小編美美想說,咱們國家這麼好,何必去國外淘金?我們有12萬買得到的的“路虎極光/保時捷卡宴”,還有7萬塊的“途觀”8萬塊的“奧迪Q3”,其它國家有嗎?

這不,今天又有一件大事發生了,那就是大邁X7預售價公布,廢話不多說,先看看售價↓↓↓

1.8T+5MT 精英型 10.49萬

1.8T+5MT 豪華型 11.69萬

1.8T+5MT 尊貴型 12.49萬

1.8T+5MT 至尊型 13.09萬

這時候有人就要說了,大邁X7是什麼車?

大邁X7是眾泰推出的一款中型SUV,它最大的特點便是:外觀和大眾Cross Coupe GTE十分相似,好吧,真相是這樣的。

大眾在2015年1月的北美車展上推出Cross Coupe GTE概念車,並計劃於2016年實現量產,當然2016年我們沒有見到它,卻被手拿皮尺的眾泰搶了先機,眾泰於2016年8月發布大邁X7,同年10月份大邁X7正式下線,還沒來得及量產的大眾SUV卻被眾泰山寨並且量產,大眾表示哭暈在廁所。

既然是山寨大眾Cross Coupe GTE的造型,那麼造型上大邁X7肯定是十分有特點了。大邁X7的長寬高尺寸為4736/1942/1672mm,軸距為2850mm,4736mm的長度卻有着2850mm的軸距,2850mm的軸距在SUV中屬於非常長的類型,保證了內部空間,而寬度1942mm的大邁X7相信在橫向空間上也不錯。

外觀設計上大邁X7和大眾概念車的相似度達到90%,整車設計上趨向平直,高窗線小側窗的設計比較有動感,但是這個外觀比較偏向於大叔一點,鍍鉻裝飾使用比較多。大邁X7全系標配19英寸輪圈,這也是比較下本了~

在內飾上大邁X7和大眾Cross Coupe GTE也十分相似,大邁X7在內飾上也是平直設計,木紋的使用量非常大,由此看來大邁X7定位和外觀一樣更加偏向年長一些的消費者。內飾的按鍵比較少,檔把區域質感出色,整體還是蠻不錯的。

前期上市的車型只有1.8T發動機+5擋手動變速箱的動力組合,喜歡自動擋的可以再等等,這台1.8T發動機來頭可不小了,最大功率130千瓦,最大扭矩245牛米。這台1.8T發動機代號TN4G18T,來自銅陵銳展科技有限公司,銅陵銳展科技有限公司由鐵牛集團控股,鐵牛集團正是眾泰的大股東。這台發動機也在眾泰Z700上使用,不過在眾泰的銷量擔當SUV上使用,這在小編美美印象中還是第一次。

其實說這麼多只是告訴你,相比之前購買上汽和三菱的發動機,現在眾泰用上自己的發動機了。而前期沒有自動擋,估計也是自動擋的匹配還沒做好~

作為一台眾泰,配置不多怎麼行,大邁X7標配車內氛圍燈、一鍵啟動/無鑰匙進入、电子手剎、後排出風口等配置,當然10.49萬的手動精英型沒有配備ESp這種事我也不會隨便告訴你的。

最後小編美美來回答幾個大家最關心的問題:

1、大邁X7是一款什麼樣的車?

一款中型SUV,定位偏向年長消費者,外觀靚麗尺寸大空間大配置高的車。

2、大邁X7預售價貴嗎?

手動車型10.49萬還沒有配備ESp,小編美美覺得略貴,不過要是你覺得買了個大眾概念車,那也不錯哇~

3、推出自動擋的話,估計多少錢?

預售價來看,大邁X7是比眾泰SR9便宜一丟丟的,加上發動機的規格比SR9略低,所以自動車型的售價肯定也比SR9略低,因此小編美美估計自動擋的大邁X7會12.89萬起。

總結:

大邁X7其實是眾泰車系中定位比較高的車型了,目前眾泰SUV主要有入門的大邁X5和SR7,中端的眾泰T600以及高端的SR9和大邁X7,SR9主打年輕人的市場,而大邁X7主打年長的消費者也就順理成章了,動力規格不高,缺乏自動擋的大邁X7在動態上的表現讓小編美美沒什麼期待,但是想想配置高空間大外觀靚麗,大邁X7的銷量估計也不成為題。本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

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

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

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

※超省錢租車方案

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

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

合資小型SUV中的銷量冠軍 顏值高油耗低車主們滿意嗎

28萬車主點評:外觀給人非常時尚前衛的感覺,圓潤飽滿緊湊感十足,配置上將將夠用吧,自動駐車和上坡輔助還是蠻好用的,然後就是令人驚訝的乘坐空間了,堪比一些緊湊級SUV了,家裡人對這車的空間都好評,1。8L的動力很足,隨叫隨到,加上CVT變速箱很平順,駕駛感受很舒服,就是懸挂有點硬。

前言

最近很多粉絲後台都有留言,其頻率最高的為15萬買什麼SUV好,的確這個價位是目前很多消費者所最能接受的價位,而且要求就是省油、耐用、空間大,那麼綜合考慮就只有本田家的繽智和XR-V了,雖然出自同一平台,但是XR-V的銷量一直要比繽智要好,那車主們當初為什麼選擇它呢!

東風本田-本田XR-V

指導價:12.78-16.28萬

車主:扳手小歐歐

購買車型:2015款 1.5L LXi CVT經典版

裸車價格:13.20萬

車主點評:一眼望去最滿意的首先是它的外觀,顏值比較高,看着很順眼,但進到裏面的內飾的塑料感就比較強了,而且配置比較低;但是日常代步很滿意的一點是它的油耗和動力,非常的省心,還有就是空間真的沒話說,坐上去感覺非常寬敞,比較完美的一輛家用車。

我是7月份提的車,目前行駛里程4500公里,市區油耗7.5L,高速油耗6L左右,用車成本相當低

車主:愛吃才會贏

購買車型:2015款 1.8L EXi CVT舒適版

裸車價格:14.28萬

車主點評:外觀給人非常時尚前衛的感覺,圓潤飽滿緊湊感十足,配置上將將夠用吧,自動駐車和上坡輔助還是蠻好用的,然後就是令人驚訝的乘坐空間了,堪比一些緊湊級SUV了,家裡人對這車的空間都好評,1.8L的動力很足,隨叫隨到,加上CVT變速箱很平順,駕駛感受很舒服,就是懸挂有點硬。

9月份提的車,現在4100公里,多數是市區開,油耗7L左右,還是很滿意的,我是開車比較溫柔的那種。

車主:我在東北玩泥沙

購買車型:2015款 1.8L VTi CVT豪華版

裸車價格:15.38萬

車主點評:對於XRV這輛車各方面都很滿意的,外觀很耐看,之所以上頂配,是為了發動機啟停、自動空調、無鑰匙啟動/進入、定速巡航等配置,空間上簡直就是無敵,1.8米的大胖子坐在後排也表示沒壓力,加速很線性,油門反應很靈敏,轉向也足夠精準,儲物空間夠豐富,日常使用很方便。

6月份提的車,跑了1萬公里了,平均油耗8L,表現還是相當不錯的,動力和油耗比較均衡。

總結:說起本田,除了發動機牛逼以外,還有就是它在空間處理上值得稱道了,乘坐空間非常寬敞,後排魔術座椅在空間擴展性上增加了不少分數,1.5L地球夢發動機動力強,油耗低,用車成本方面很有優勢。本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

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

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

※超省錢租車方案

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

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

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

依舊高級感十足,為什麼教授會更喜歡這款11萬的手動擋RX5?

親自感受了一番榮威RX5的6MT之後,想用一個字去形容——爽,首先是換擋行程短,換擋時候手臂動作不大,其次是掛擋手感非常乾脆,不會有那種油膩的黏黏糊糊的感覺。離合器的腳感很輕,不會是很彈腳的那種,這種設定對於經常在市區走走停停的路況會比較好,確實能有效減輕左腳的負擔。

有些事情總是在不知不覺中發生,就在幾年前,大多數消費者的購車預算還停留在十萬元內,不管是國產車還是合資車,大家選擇的大多都是手動擋車型,然而到了2017的今天,不知不覺中手動擋已經淡出我們的視線。

應該有不少人都覺得現在買個手動擋就是掉檔次,和親戚朋友聊天時問起都不好意思說出來,但是試駕完這台SUV界網紅——榮威RX5 20T 手動旗艦版,真心覺得手動擋也很有面子。

外觀與高配車型差別不大,很良心

大家先不要着急,好戲在後頭,雖然大家都已經對榮威RX5非常熟悉,但還是要先來回顧一下它的外觀內飾,因為前不久剛剛試過了榮威RX5的30T車型,所以對這次試駕的榮威RX5 20T 手動旗艦版有一些獨特的見解。

先來看看外觀上最大的“亮點”,這次試駕的20T 手動旗艦版配備了遠近光一體帶透鏡鹵素大燈,大燈燈組內集成了燈帶式的LED日間行車燈,造型相當好看,非常亮眼,順帶提一句,20T 手動旗艦版可以選裝全LED大燈,效果非常驚艷,強烈推薦准車主選裝這個配置。

作為整個RX5車系中的中低配車型,全LED大燈需要選裝其實很正常,如果你覺得稍有遺憾的話,不要緊,因為那個吸取了小提琴元素,點亮后辨識度非常高的尾燈還是在的,每次看到RX5都會忍不住看多兩眼。

榮威RX5能夠在短時間內突破兩萬輛的銷量,其“律於形而動於心”的律動設計理念有很大的功勞,車身多處使用了0.618的黃金分割比例,最終呈現出一個非常精悍的造型,這也是榮威RX5和競爭對手們的區別,一點都不顯得臃腫,而是精神秀氣。

內飾簡約大氣,中控操作便利

一坐進車內,那個互聯網車型獨有,並且讓無數消費者津津樂道的10.4英寸中控大屏不見了,取而代之的是一塊8英寸的屏幕,不要以為屏幕大就是好用,只能說大家都有各自的特點,20T 手動旗艦版配備的這個8英寸屏幕,功能齊全,導航、藍牙電話、Apple Carplay和百度CarLife等等一應俱全。

看到中控屏幕下方的空調操作面板,非常欣慰,如果你和一樣覺得在觸控屏上調節空調不方便的話,那麼你一定更加喜歡這個實體操作面板,熟悉之後能夠在行車當中進行盲操作,除此之外,整个中控台按鍵、旋鈕的裝配工藝和阻尼感都非常出色,在同級別當中處於領先水準。

好開順手,懸架支撐性強

終於到了最激動人心的部分,到底這個6擋手動變速箱的表現如何了,到底值不值得買呢?親自感受了一番榮威RX5的6MT之後,想用一個字去形容——爽,首先是換擋行程短,換擋時候手臂動作不大,其次是掛擋手感非常乾脆,不會有那種油膩的黏黏糊糊的感覺。

離合器的腳感很輕,不會是很彈腳的那種,這種設定對於經常在市區走走停停的路況會比較好,確實能有效減輕左腳的負擔。因為配備的1.5T發動機扭矩平台足夠低和寬廣,離合器和變速箱的結合匹配寬容度很高,都很容易上手,各個擋位間切換順滑。缺點也是有的,美中不足的地方是離合器的結合點模糊,起步時空擋掛入1擋鬆開離合過程中結合點不好找,一不留神就容易憋熄火,還好憑藉多年老司機臨床經驗,基本上靜下心來試個三兩次就好了。1.5T渦輪增壓發動機的表現也是很盡職,如果你第一次接觸它,不跟你說它是渦輪增壓發動機的話,你一定會以為是自然吸氣發動機。

發動機與渦輪的噪音控制讓感到驚喜,發動機轉速在2700轉內,發動機艙傳來的聲音不會打擾到乘客。另外發動機動力輸出平順,日常行車狀態下絕對夠用,得益於6擋手動變速箱,高速巡航時的燃油經濟性表現很好,100km/h時速下發動機轉速為2000轉,120km/h的時候是2500轉,儀錶盤還會根據當前擋位和踩油門的深度給出ECO節油指示。

榮威RX5的底盤懸架調校也是比較喜歡的,過彎時候的支撐性很好,側傾控制出色,讓駕駛員很有信心,與此同時,還能夠做到對路面的坑窪顛簸進行有效過濾,保證良好的舒適性,再加上方向盤轉向手感適中,整個駕駛體驗比的預想要好不少,感覺它的實力已經超出了它11.98萬的指導價,性價比高。

有話說

其實喜歡手動擋的大有人在,但是為什麼大家最後都選擇了自動擋車型,估計不是因為不顯檔次就是因為開起來不順手,雖然這次試駕的榮威RX5的20T 兩驅手動旗艦版還沒有達到完美,但是並不妨礙它成為一輛好車,一輛值得推薦的車。本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

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

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

※回頭車貨運收費標準

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

※超省錢租車方案

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

過年回家好多人買了哈弗和眾泰,到底該不該也買一輛?

再舉個生動栗子,的朋友陳二狗是一個下水道維修人員,經過幾年的艱苦工作,終於存夠錢買車了,但是不知道買什麼車。然鵝看到了隔壁的老王買了一台新車,外觀挺好看的,坐進去看起來配置也不錯,問一下價格竟然還不貴。

春節回家過年,是我們中國人傳統的習俗。過年除了回家探望親人,最大的目的還是在“炫耀”上,中國人都存在一種攀比的心理,比誰混得更好是春節回家的一個必備項目。汽車是一件“奢飾品”,作為身份的象徵,不少人都會在過年前買一台小汽車,開回老家彰顯身份。

也正是有這樣的“攀比”心理,導致中國人買車變得極度不理性。說實話“沒主見”是最主要的因素之一。因為購車所需要考慮的因素很多,不管你對車輛熟不熟悉,到了真正購車時,購車前所有的準備都煙消雲散,到了4S店你也只會 一味地跟着銷售的套路走下去。

為什麼消費者的購車思想都不理性?

影響消費者買車的因素有很多,像車型的品牌、車型的顏值、車型的配置、汽車的售價/優惠幅度、提車時間等,另外消費者們還有一個最為致命的共通點:就是跟風消費。

舉個栗子,就像哈弗H6那樣,每個月都有幾萬的銷量,一年能賣上幾十萬台的車型,難道就真的這麼多人買?那是肯定的,就好比國家在發展,人們的生活質量日益提高,所以不少家庭都開始將購車的計劃提上了議程。相對於一線大城市,在汽車保有量方面已經趨向於飽和甚至是過剩的狀態,所以目前銷售主力主要集中在二三線甚至是更偏的城市,而其中絕大部分的人都是首次購車的消費者。

其實大部分人都是和一樣的普通人,如果不是專業做汽車,也不知道買什麼車才是最好的選擇。對於自己本身來說,大多都是靠自己的努力辛辛苦苦存錢買車,很重視汽車的價格以及優惠幅度。也可以這樣說,如果是比較極端的消費者,在15萬以內的購車預算,兩個相差不大的競品車型,也許是因為某個車型有更多的優惠、價格更低。於是選擇了這台車。

再舉個生動栗子,的朋友陳二狗是一個下水道維修人員,經過幾年的艱苦工作,終於存夠錢買車了,但是不知道買什麼車。然鵝看到了隔壁的老王買了一台新車,外觀挺好看的,坐進去看起來配置也不錯,問一下價格竟然還不貴。再過了两天同村的老李又買了輛一模一樣的車,哇!同村這麼多人都買這車,質量肯定可以了,於是二狗高高興興地又買了一輛,於是他們愉快地創辦了二貨村殺馬特車友會。

其實大家都一樣,往往容易被表面迷惑,買車大多是看外觀數配置,這也是目前眾多車型品牌在追求的一個東西,外觀越來越大氣、配置越來越高,價格也越來越低了。這也是為什麼能夠火了部分喜歡“山寨”的品牌,譬如最近新出的保時泰SR9,10多萬的售價竟然有百萬級SUV的外觀,不僅如此連內飾的設計都有極高的相似度。當然消費者對於保時泰SR9的熱情是非常高的,關鍵是逼格夠高。還得說一下,能不能開上蘭博基尼就得看眾泰了。

只不過買這些車的人在選擇的時候壓根就沒有想過這車的質量到底行不行,至於眾泰這個品牌的質量能不能過關?還是建議去看一下車主的口碑,不是說質量不行,只是車型整體故障率還是比較高的。不過這類山寨車型還有一個好處呀,我還能剩下一大筆的設計費呀!

看得見的地方給到你逼格十足的感覺,但是在看不到不知道的地方就給你各方面的減配,你覺得這樣真的好嗎?為了降低成本,同一個部位的零件,哪個供應商便宜選哪個,就算質量差一點也是沒所謂,這樣的行為見得太多了!當然,這樣的行為不僅出現在國產品牌中,更有出現在合資品牌上。不過厚道的汽車廠家不少,只是消費者們不懂得識別,這也是目前我國消費者在購車方面最大的囧況。本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

※超省錢租車方案

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

※回頭車貨運收費標準

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

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

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

[Computer Vision]Harris角點檢測的詳細推導

Harris角點檢測

思想

為什麼要檢測角點呢?因為角點的特徵比較明顯。進行角點檢測的樸素思想是利用圖像梯度,也就是根據圖像強度的變化來尋找角點。如圖所示

這裏舉了個例子,給定一個小的區域(Patch),當這個小區域在不同位置滑動的時候,所呈現出來的一些特性是不同的,根據圖示,有三個方面。

  • Flat,平的地方,在任何方向,梯度都沒什麼變化。
  • Edge,邊的地方,當沿着邊方向的時候,梯度沒什麼變化。
  • Corner,角的地方,沿着任何方向,梯度都有變化。

Error Function

\[E(u,v)=\sum_{x,y}{w(x,y)[I(x+u,y+v)-I(x,y)]^2} \]

  • \(x,y\)是相對於一個小patch來說的,例如一個5*5的區域
  • \((u,v)\)是一個很小的移動量
  • \(w(x,y)\)是windows function,也就是對於每個點的權重,例如想讓中心的點權重高,可以用高斯核,一般就是全1或者高斯。
  • \(I(x,y)\)就代表圖像在\((x,y)\)的強度值。
  • 後面做差其實就是類似求梯度一樣

根據之前的討論,在一個patch里,如果有角點的存在,各個方向的梯度值都很大,於是乎,我們的目標是讓\(E(u,v)\)盡可能的大。
因為\((u,v)\)的值很小,所以我們可以利用二元函數的泰勒展開,來近似計算。
二元函數的泰勒展開,當然扔掉了一些項。

\[f(x+u,y+v) \approx f(x,y)+uf_x(x,y)+vf_y(x,y) \]

那麼我們對Error function中的關鍵部分進行展開

\[\begin{aligned} [I(x+u,y+v)-I(x,y)]^2 &\approx [I(x,y)+uI_x+vI_y-I(x,y)]\\ &=(uI_x+vI_y)^2\\ &=[u,v] \begin{bmatrix} I_x^2 &I_xI_y\\ I_xI_y&I_y^2 \end{bmatrix} \begin{bmatrix} u\\v \end{bmatrix} \end{aligned} \]

所以Error Function可以近似為

\[E(u,v)\approx [u,v]M\begin{bmatrix} u\\v \end{bmatrix} \]

\[M= \sum_{x,y}{w(x,y) \begin{bmatrix} I_x^2 &I_xI_y\\ I_xI_y&I_y^2 \end{bmatrix} } \]

這就涉及到線性代數里的二次型問題了。

簡單的二次型

例如 \(f(x,y) = x^2+y^2\)的可以寫作矩陣的形式

\[[x,y]\begin{bmatrix} 1 & 0\\ 0 & 1 \end{bmatrix} \begin{bmatrix} x\\y \end{bmatrix} \]

由中間這個矩陣來決定這個二次型的形狀,因為我們研究的二次型只有兩個變量,所以可以可視化來理解如下圖所示。對形狀矩陣可以進行特徵分解,分為中間的對角陣(對角線都是特徵值)兩邊是特徵向量。特徵向量代表了橢圓切片的長短軸的方向,而特徵值平方根的倒數代表了軸的長短。至於為什麼分解完會和橢圓對應,線性代數書上會有。

這樣就把Error Function給可視化了,有了幾何含義,更加直觀了。

  • Flat的時候,\((u,v)\)往哪個方向變化都不大,反應在幾何上,應該是一個較為平坦的面
  • Edge的時候,\((u,v)\)往某個方向變化大,反應在幾何上,應該是某個方向翹起。
  • Corner的時候,\((u,v)\)往大部分方向變化都大,反應在幾何上,應該是大部分方向都翹起。

如圖所示

我們可以通過兩個特徵值之間的大小關係,以及他們自身的關係來作為評估的依據。

當兩個特徵值都很大,且差不多時,意味着角點。

角點響應的度量

以上分析了,要兩個特徵值都很大,且同時大,那怎麼來度量?於是乎在最原始的論文里,這樣定義了響應函數,並且對不同的\(\lambda\)有以下的響應圖

\[R = det(M)-k(trace(M))^2\\ det(M) = \lambda_1\lambda_2\\ trace(M) = \lambda_1+\lambda_2 \]

\(k\)一般在是0.04-0.06

如圖所示,黃色的線是等值線,代表\(R\)的值都相同,左上角是\((0,0)\)點,往右下角去\(R\)的值越大,代表角點的響應越高,圖中畫了個綠線,右側的R值基本可以判斷為是角點了。另外還有一些別的響應函數,基本大同小異吧。

算法

所以現在經過以上的分析,總結一下角點檢測的算法步驟。

  1. 計算整個圖像的梯度值\(I_x,I_y\)
  2. 對於每個像素的\(I_{x^2}=I_xI_x,I_{y^2}=I_yI_y,I_{xy}=I_xI_y\)
  3. 計算每一個像素窗口的和,意思就是對於一個像素,定義一個領域例如5*5,就和之前提及的那樣,然後計算這個鄰域裏面所有第二步計算出來的值的和。\(S_{x^2}=G_{\sigma}*I_{x^2},S_{y^2}=G_{\sigma}*I_{y^2},S_{xy}=G_{\sigma}*I_{xy}\)
  4. 對於每個點\((x,y)\),定義矩陣\(\begin{bmatrix}S_{x^2}&S_{xy}\\S_{xy}&S_{y^2}\end{bmatrix}\)
  5. 對於每個點,計算響應值\(R=Det(H)-k(Trace(H))^2\)
  6. 對\(R\)設定閾值,並且計算非極大值抑制(nonmax suppression, NMS),這個的意思應該就是比如5*5的鄰域內有好幾個點通過了閾值的篩選,那麼選擇最大的那個,抑制其他的點。

一些特性

  • Harris角點響應具有旋轉不變性,因為旋轉不會改變特徵值的大小。
  • Harris角點響應對強度變化具有一定的不變性,縮放或者平移。因為經過縮放或者平移,最大值還是最大值,但是閾值可能要改改。
  • Harris角點響應不對尺度有不變性,改變尺度可能會改變檢測的結果。可能在某一尺度下檢測出為角點,而另一尺度檢測出為邊緣。

參考

  • [1]CSE486 PSU http://www.cse.psu.edu/~rtc12/CSE486/
  • [2]16-385 CMU 5http://www.cs.cmu.edu/~16385/

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

【其他文章推薦】

※帶您來了解什麼是 USB CONNECTOR  ?

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

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!

※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

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

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

ASP.NET Core Blazor WebAssembly 之 .NET JavaScript互調

Blazor WebAssembly可以在瀏覽器上跑C#代碼,但是很多時候顯然還是需要跟JavaScript打交道。比如操作dom,當然跟angular、vue一樣不提倡直接操作dom;比如瀏覽器的後退導航。反之JavaScript也有可能需要調用C#代碼來實現一些功能,畢竟客戶的需求是千變萬化的,有的時候只能通過一些hack的手段來實現。

.NET調用JavaScript函數

使用JSRuntime.InvokeVoidAsync調用無返回值的JavaScript函數

顯然我們的.NET類庫里不會有JavaScript內置的alert方法來显示提示,這裏演示下如何調用JavaScript的alert方法:

<h3>.net call javascript</h3>

<button @onclick="CallJs">
    Call alert
</button>

@inject IJSRuntime jsRuntime
@code {
    private void CallJs()
    {
        jsRuntime.InvokeVoidAsync("alert", "this message from .net runtime .");
    }
}

使用JSRuntime.InvokeVoidAsync調用具有返回值的JavaScript函數

我們在JavaScript環境定義一個加法函數然後.NET這邊調用拿到結果:

    <script>
        function add(a, b) {
            return a + b;
        }
    </script>

注意:JavaScript代碼要放到wwwroot/index.html頁面上里,不能直接放在組件里。

組件代碼:

<h3>.net call javascript</h3>

sum: @sum

<button @onclick="CallJs">
    Call Add
</button>

@inject IJSRuntime jsRuntime
@code {

    private int sum = 0;

    private async void CallJs()
    {
        sum = await jsRuntime.InvokeAsync<int>("add", sum, 2);
        this.StateHasChanged();
    }
}

運行一下:

JavaScript調用.NET方法

JavaScript調用.NET靜態方法

JavaScript調用.NET靜態方法比較簡單,把靜態方法加上[JSInvokable],然後在JavaScript環境使用DotNet對象直接call就行:
定義.NET靜態方法:


    [JSInvokable]
    public static string GetNow()
    {
        return DateTime.Now.ToString();
    }

使用JavaScript調用GetNow:

  $(document).ready(
            setTimeout(() => {
                $('#btn1').on('click', function () {
                    DotNet.invokeMethodAsync('BlazorWasmComponent', 'GetNow')
                        .then(data => {
                            alert(data);
                        });
                })
            }, 10000)
        ); 

由於Blazor渲染UI結束后按鈕才會插入到dom樹上,所以這裏使用一個傻辦法讓綁定事件的JavaScript代碼置后運行。
運行一下:

JavaScript調用組件里的方法

JavaScript調用組件里的方法比較繞,其實還是通過一個靜態方法作為入口,把實例方法綁定一個靜態delegate,然後讓這個靜態方法去執行delegate。
.NET代碼:

<h3>javascript call .net</h3>

<button id="btn1">
   Js call .net
</button>

@inject IJSRuntime jsRuntime
@code {

    [JSInvokable]
    public static string GetNow()
    {
        return Act("");
    }

    public static Func<string, string> Act;

    protected override void OnInitialized()
    {
        Act = GetNowInInstance;
        base.OnInitialized();
    }

    public string GetNowInInstance(string str)
    {
        return DateTime.Now.ToString();
    }
}

JavaScript代碼:

 $(document).ready(
            setTimeout(() => {
                $('#btn1').on('click', function () {
                    DotNet.invokeMethodAsync('BlazorWasmComponent', 'GetNow')
                        .then(data => {
                            alert(data);
                        });
                })
            }, 10000)
        ); 

運行一下:

調用對象的方法

Blazor還可以把.NET對象(引用)直接傳遞到JavaScript運行時來讓JavaScript直接調用.NET對象的方法。

總的來說大概分4步:

  1. 實例化.net對象
  2. DotNetObjectReference.Create方法把.NET對象包裝
  3. 通過JSRuntime調用一個JavaScript方法把第二步生成的對象傳遞到JavaScript運行時
  4. 在JavaScript側通過invokeMethodAsync方法調用.NET對象里的方法

下面演示下把組件整個實例傳遞出去,然後調用裏面的GetNowInInstance方法。

.net代碼:

<h3>javascript call .net</h3>

<button id="btn1">
    Js call .net
</button>
@implements IDisposable
@inject IJSRuntime jsRuntime
@code {
    IDisposable _objRef;
    protected async override Task OnInitializedAsync()
    {
        _objRef = DotNetObjectReference.Create(this);
        await jsRuntime.InvokeAsync<string>(
            "receiveNetObj",
           _objRef);
        base.OnInitialized();
    }

    [JSInvokable]
    public string GetNowInInstance()
    {
        return DateTime.Now.ToString();
    }

    public void Dispose()
    {
        _objRef?.Dispose();
    }
}

注意:把.NET對象傳遞到JavaScript運行時存在內存泄漏的風險,所以組件需要實現IDisposable接口,在Dispose方法內調用objRef的Dispose方法來釋放內存。

JavaScript代碼:

        var _netObj = null;

        function receiveNetObj(obj) {
            _netObj = obj;
        }

        $(document).ready(
            setTimeout(() => {
                $('#btn1').on('click', function () {
                    _netObj.invokeMethodAsync("GetNowInInstance").then(
                        r => alert(r)
                    );
                })
            }, 10000)
        );

運行一下:

總結

使用JSRuntime可以在.NET里調用JavaScript的方法,這些方法必須是全局的,也就是掛載在window對象上的。
在JavaScript里調用.NET方法主要有兩種:

  1. 通過DotNet方式調用.NET的靜態方法
  2. 把.NET對象直接傳遞到JavaScript運行時來調用對象上的方法

相關內容

ASP.NET Core Blazor Webassembly 之 路由
ASP.NET Core Blazor Webassembly 之 數據綁定
ASP.NET Core Blazor Webassembly 之 組件
ASP.NET Core Blazor 初探之 Blazor WebAssembly
ASP.NET Core Blazor 初探之 Blazor Server

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

【其他文章推薦】

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

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

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

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

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

線程池運用不當的一次線上事故

在高併發、異步化等場景,線程池的運用可以說無處不在。線程池從本質上來講,即通過空間換取時間,因為線程的創建和銷毀都是要消耗資源和時間的,對於大量使用線程的場景,使用池化管理可以延遲線程的銷毀,大大提高單個線程的復用能力,進一步提升整體性能。

今天遇到了一個比較典型的線上問題,剛好和線程池有關,另外涉及到死鎖、jstack命令的使用、JDK不同線程池的適合場景等知識點,同時整個調查思路可以借鑒,特此記錄和分享一下。

01 業務背景描述

該線上問題發生在廣告系統的核心扣費服務,首先簡單交代下大致的業務流程,方便理解問題。

綠框部分即扣費服務在廣告召回扣費流程中所處的位置,簡單理解:當用戶點擊一個廣告后,會從C端發起一次實時扣費請求(CPC,按點擊扣費模式),扣費服務則承接了該動作的核心業務邏輯:包括執行反作弊策略、創建扣費記錄、click日誌埋點等。

02 問題現象和業務影響

12月2號晚上11點左右,我們收到了一個線上告警通知:扣費服務的線程池任務隊列大小遠遠超出了設定閾值,而且隊列大小隨着時間推移還在持續變大。詳細告警內容如下:

相應的,我們的廣告指標:點擊數、收入等也出現了非常明顯的下滑,幾乎同時發出了業務告警通知。其中,點擊數指標對應的曲線表現如下:

該線上故障發生在流量高峰期,持續了將近30分鐘后才恢復正常。

03 問題調查和事故解決過程

下面詳細說下整個事故的調查和分析過程。

第1步:收到線程池任務隊列的告警后,我們第一時間查看了扣費服務各個維度的實時數據:包括服務調用量、超時量、錯誤日誌、JVM監控,均未發現異常。

第2步:然後進一步排查了扣費服務依賴的存儲資源(mysql、redis、mq),外部服務,發現了事故期間存在大量的數據庫慢查詢。

上述慢查詢來自於事故期間一個剛上線的大數據抽取任務,從扣費服務的mysql數據庫中大批量併發抽取數據到hive表。因為扣費流程也涉及到寫mysql,猜測這個時候mysql的所有讀寫性能都受到了影響,果然進一步發現insert操作的耗時也遠遠大於正常時期。

第3步:我們猜測數據庫慢查詢影響了扣費流程的性能,從而造成了任務隊列的積壓,所以決定立馬暫定大數據抽取任務。但是很奇怪:停止抽取任務后,數據庫的insert性能恢復到正常水平了,但是阻塞隊列大小仍然還在持續增大,告警並未消失。

第4步:考慮廣告收入還在持續大幅度下跌,進一步分析代碼需要比較長的時間,所以決定立即重啟服務看看有沒有效果。為了保留事故現場,我們保留了一台服務器未做重啟,只是把這台機器從服務管理平台摘掉了,這樣它不會接收到新的扣費請求。

果然重啟服務的殺手鐧很管用,各項業務指標都恢復正常了,告警也沒有再出現。至此,整個線上故障得到解決,持續了大概30分鐘。

04 問題根本原因的分析過程

下面再詳細說下事故根本原因的分析過程。

第1步:第二天上班后,我們猜測那台保留了事故現場的服務器,隊列中積壓的任務應該都被線程池處理掉了,所以嘗試把這台服務器再次掛載上去驗證下我們的猜測,結果和預期完全相反,積壓的任務仍然都在,而且隨着新請求進來,系統告警立刻再次出現了,所以又馬上把這台服務器摘了下來。

第2步:線程池積壓的幾千個任務,經過1個晚上都沒被線程池處理掉,我們猜測應該存在死鎖情況。所以打算通過jstack命令dump線程快照做下詳細分析。

#找到扣費服務的進程號
$ ps aux|grep "adclick"

# 通過進程號dump線程快照,輸出到文件中
$ jstack pid > /tmp/stack.txth

在jstack的日誌文件中,立馬發現了:用於扣費的業務線程池的所有線程都處於waiting狀態,線程全部卡在了截圖中紅框部分對應的代碼行上,這行代碼調用了countDownLatch的await()方法,即等待計數器變為0后釋放共享鎖。

第3步:找到上述異常后,距離找到根本原因就很接近了,我們回到代碼中繼續調查,首先看了下業務代碼中使用了newFixedThreadPool線程池,核心線程數設置為25。針對newFixedThreadPool,JDK文檔的說明如下:

創建一個可重用固定線程數的線程池,以共享的無界隊列方式來運行這些線程。如果在所有線程處於活躍狀態時提交新任務,則在有可用線程之前,新任務將在隊列中等待。

關於newFixedThreadPool,核心包括兩點:

1、最大線程數 = 核心線程數,當所有核心線程都在處理任務時,新進來的任務會提交到任務隊列中等待;

2、使用了無界隊列:提交給線程池的任務隊列是不限制大小的,如果任務被阻塞或者處理變慢,那麼顯然隊列會越來越大。

所以,進一步結論是:核心線程全部死鎖,新進的任務不對湧入無界隊列,導致任務隊列不斷增加。

第4步:到底是什麼原因導致的死鎖,我們再次回到jstack日誌文件中提示的那行代碼做進一步分析。下面是我簡化過後的示例代碼:

/*** 執行扣費任務 */
public Result<Integer> executeDeduct(ChargeInputDTO chargeInput) {  
    ChargeTask chargeTask = new ChargeTask(chargeInput);  
    bizThreadPool.execute(() -> chargeTaskBll.execute(chargeTask ));  
    return Result.success();
}

/*** 扣費任務的具體業務邏輯 */
public class ChargeTaskBll implements Runnable {  
    public void execute(ChargeTask chargeTask) {     
        // 第一步:參數校驗     
        verifyInputParam(chargeTask);     

        // 第二步:執行反作弊子任務     
        executeUserSpam(SpamHelper.userConfigs);     

        // 第三步:執行扣費     
        handlePay(chargeTask);     

        // 其他步驟:點擊埋點等     ...  
    }
}

/*** 執行反作弊子任務 */
public void executeUserSpam(List<SpamUserConfigDO> configs) {  
    if (CollectionUtils.isEmpty(configs)) {     
        return;  
    }  try {    
        CountDownLatch latch = new CountDownLatch(configs.size());    
        for (SpamUserConfigDO config : configs) {      
           UserSpamTask task = new UserSpamTask(config,latch);      
           bizThreadPool.execute(task);    
        }    
        latch.await();  
    } catch (Exception ex) {    
        logger.error("", ex);  
    }
}

通過上述代碼,大家能否發現死鎖是怎麼發生的呢?根本原因在於:一次扣費行為屬於父任務,同時它又包含了多次子任務:子任務用於并行執行反作弊策略,而父任務和子任務使用的是同一個業務線程池。當線程池中全部都是執行中的父任務時,並且所有父任務都存在子任務未執行完,這樣就會發生死鎖。下面通過1張圖再來直觀地看下死鎖的情況:

假設核心線程數是2,目前正在執行扣費父任務1和2。另外,反作弊子任務1執行完了,反作弊子任務2和4都積壓在任務隊列中等待被調度。因為反作弊子任務2和4沒執行完,所以扣費父任務1和2都不可能執行完成,這樣就發生了死鎖,核心線程永遠不可能釋放,從而造成任務隊列不斷增大,直到程序OOM crash。

死鎖原因清楚后,還有個疑問:上述代碼在線上運行很長時間了,為什麼現在才暴露出問題呢?另外跟數據庫慢查詢到底有沒有直接關聯呢?

暫時我們還沒有復現證實,但是可以推斷出:上述代碼一定存在死鎖的概率,尤其在高併發或者任務處理變慢的情況下,概率會大大增加。數據庫慢查詢應該就是導致此次事故出現的導火索。

05 解決方案

弄清楚根本原因后,最簡單的解決方案就是:增加一個新的業務線程池,用來隔離父子任務,現有的線程池只用來處理扣費任務,新的線程池用來處理反作弊任務。這樣就可以徹底避免死鎖的情況了。

06 問題總結

回顧事故的解決過程以及扣費的技術方案,存在以下幾點待繼續優化:

1、使用固定線程數的線程池存在OOM風險,在阿里巴巴Java開發手冊中也明確指出,而且用的詞是『不允許』使用Executors創建線程池。 而是通過ThreadPoolExecutor去創建,這樣讓寫的同學能更加明確線程池的運行規則和核心參數設置,規避資源耗盡的風險。

2、廣告的扣費場景是一個異步過程,通過線程池或者MQ來實現異步化處理都是可選的方案。另外,極個別的點擊請求丟失不扣費從業務上是允許的,但是大批量的請求丟棄不處理且沒有補償方案是不允許的。後續採用有界隊列后,拒絕策略可以考慮發送MQ做重試處理。— 結束 —

– End –

作者簡介:程序員,985碩士,前亞馬遜Java工程師,現58轉轉技術總監。持續分享技術和管理方向的文章。如果感興趣,可微信掃描下面的二維碼關注我的公眾號:『IT人的職場進階』

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

【其他文章推薦】

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

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

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

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

※回頭車貨運收費標準