標籤: 台中搬家

  • 繼續等還是放棄?那麼多人愛的帝豪GS究竟值不值得等

    繼續等還是放棄?那麼多人愛的帝豪GS究竟值不值得等

    全景天窗真的太贊了,雖然不能打開,但是這種採光在傍晚以及晚上的時候,超有高檔車的感覺。最不滿意的地方:後備箱容積感覺上是比較小的,不過畢竟車身也不是很大的樣子。另外就是中控屏是電阻屏的,操作起來不是非常靈敏。

    前言

    帝豪GS,在尚未上市的時候就已經引起了不少人關注。不俗的顏值加上較高的配置,即使是和着價位相差不遠的合資緊湊型轎車相比也沒有太大的差距。但是,這款車在實際銷售上是供不應求的,提車需要等待很長的時候,不少人想要年前提車,那麼它是否真的值得購買呢?還是應該早點退訂金,換成別的車型?

    吉利帝豪GS

    官方指導價:7.78-10.88萬

    編者意見:顏值高,還有着同級中罕見的自動剎車以及ACC自適應巡航,就內飾來說是在該價位國產汽車的前列。

    車主:放羊買飛機

    購買車型:帝豪GS 2016款 運動版 1.3T 自動臻尚型

    裸車購買價:10.88 萬元

    綜合油耗:7.5L

    最滿意的地方:外觀以及配置,外觀非常時尚開出去有面子,而且內飾無論是做工還是設計都是不錯的,所以朋友們經常以為這是20多萬的車型。這個比較高的車身還有着比轎車好一點的視野,女士開起來也不費勁。

    最不滿意的地方:底盤太硬了,不是很舒服,過一些坑窪的地方的時候非常明顯。另外就是隔音水平是比較一般的,在高速上可以聽到胎噪以及風噪,在80km/h以上就出現了。

    車主:大山

    購買車型帝豪GS 2016款 運動版 1.3T 自動臻尚型

    裸車購買價:10.88 萬元

    綜合油耗:8L

    最滿意的地方:ACC自適應巡航在高速的時候真的非常好用,覺得自己選擇頂配是正確的,這樣的主動安全配置在這個價位真的是罕見的,關鍵給了不少的安全感。全景天窗真的太贊了,雖然不能打開,但是這種採光在傍晚以及晚上的時候,超有高檔車的感覺。

    最不滿意的地方:後備箱容積感覺上是比較小的,不過畢竟車身也不是很大的樣子。另外就是中控屏是電阻屏的,操作起來不是非常靈敏。

    車主:四年又四年

    購買車型:帝豪GS 2016款 運動版 1.8L 自動領尚型

    裸車購買價:9.48 萬元

    綜合油耗:9.5L

    最滿意的地方:運動版的外觀,真的非常好看,看起來非常協調。配置也是很高,這個價位的緊湊型SUV,還要有电子手剎、自動大燈、自動空調、定速巡航的真的沒有多少輛,而且自動駐車這個功能非常實用,解放了我的右腳刷新了我對開車的體驗。

    最不滿意的地方:可能是因為我的是1.8L自動擋的原因,感覺油耗真的是有點高。其次還是後備箱小以及底盤是比較硬。最後是個人覺得儲物空間比較少,想要放些東西都是比較困難。

    編者總結:

    根據車主反映,1.3T版本是明顯要比1.8L的省油,而且無論是手動擋還是自動擋油耗都相差無幾,所以我們建議選擇1.3T自動擋車型。帝豪GS有着超高的配置水平以及顏值,加上1.3T油耗表現不俗,所以這輛車是非常值得等的。本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

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

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

    ※回頭車貨運收費標準

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

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

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

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

  • 潤滑油巨頭強勢發布——雪佛龍金富力

    潤滑油巨頭強勢發布——雪佛龍金富力

    產品在抗腐蝕和抗磨損性,減少油泥與積碳,提升發動機性能和燃油經濟性這幾大方面均優於潤滑油行業最嚴格的標準。新品系列也採用了針對中國市場度身定製的配方和技術,滿足中國消費者對潤滑油產品的更高要求。”雪弗龍在發布會上展示產品的測試結果显示:金富力機油提供卓越的抗磨損保護和抗腐蝕保護,分別比ApI標準高出80%與90%。

    2016年12月8日,世界500強、世界領先的一體化能源企業雪弗龍,在浙江嘉興舉行了旗下金富力品牌全系潤滑油的新品發布會。

    這次發布會上,雪弗龍為消費者帶來了金富力全新系列產品,包括金富力全合成潤滑油、金富力合成型潤滑油及金富力方程式潤滑油三種。

    雪弗龍金富力在此次新品發布會主推油泥防禦盾™技術,雪佛龍(中國)投資有限公司產品技術專家,王琴女士表示:“因為雪佛龍是一家比較獨特的潤滑油生產商,它是目前全球為數不多的一家既有既具備基礎油生產能力,又具備添加劑生產能力的潤滑油生產廠商。所以在研發方面,雪佛龍一直都是比較領先的。而油泥防禦盾™是雪佛龍獨有的科技,它給消費者帶來最大的好處,第一個就是保護性能很強,它能夠很好地防止發動機內部磨損,保護髮動機。另外它能夠延長發動機的使用壽命,因為金富力的抗氧化性能很好,在整個潤滑油的使用過程中,它都能像新油一樣保護髮動機。最後油泥防禦盾™也能很好地提高發動機的燃油經濟性。”

    發布會上,雪佛龍潤滑油亞太區技術專家,Joyce女士介紹到:“此次上市的雪佛龍金富力全系產品,擁有包括油泥防禦盾
    TM科技在內的很多創新技術。產品在抗腐蝕和抗磨損性,減少油泥與積碳,提升發動機性能和燃油經濟性這幾大方面均優於潤滑油行業最嚴格的標準。新品系列也採用了針對中國市場度身定製的配方和技術,滿足中國消費者對潤滑油產品的更高要求。”

    雪弗龍在發布會上展示產品的測試結果显示:金富力機油提供卓越的抗磨損保護和抗腐蝕保護,分別比ApI標準高出80%與90%。在減少機油濾網上的油泥方面,金富力機油的性能比GM Dexos1標準要求高出 10%。採用油泥防禦盾配方的金富力機油的粘度保持性能比GM Dexos1 標準所要 求的高出70%。

    雪佛龍一直秉承着專業的研發態度,追求精湛的工藝,力求將產品做到極致。這次發布會上新產品,針對中國消費習慣與獨特的路況問題,提出了可行性的解決方案,為打開中國市場做好鋪墊。隨着雪佛龍金富力的發布,雪佛龍將為中國消費者及合作夥伴帶來全球領導的品牌,一流的產品。本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

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

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

    ※回頭車貨運收費標準

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

    ※超省錢租車方案

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

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

  • 實測傳說中的最強斯柯達SUV!如果定價十來萬肯定要賣瘋…

    實測傳說中的最強斯柯達SUV!如果定價十來萬肯定要賣瘋…

    高配車型還有電動尾門,實用性非常出色。至於它的第三排座椅,在看來更多的是應急使用。進入第三排仍然會有些困難,對於家裡的一些上了年紀的家人來說,還是安安分分坐在第二排吧,較高的離地間隙也是一個硬傷。因此7座的柯迪亞克更多是讓消費者有更多的選擇,5座的車型仍然廠家宣傳的主力車型。

    作為整篇的開頭,可以下一個結論了;試完柯迪亞克之後,我的心裏已經有一個答案了,看厭了大眾千篇一律的設計造型,如今的年輕人是時候換一台具有大眾品質但外觀與空間都表現更加出色的SUV了。

    作為大眾旗下的一個子公司,斯柯達一直受到的關注相對來說還是少了一點。但作為一家公司而言,斯柯達肯定不會一直甘於人下,被所有人都認為是大眾小弟的。於是斯柯達在醞釀已久之後,開始在全世界展示這台充滿北歐風情,但卻符合大眾消費者審美的SUV車型。

    犀利的外觀造型,人性化的設計

    之前得知柯迪亞克要在廣州車展做展示的消息,尋思着在車展期間好好欣賞一下這款出自斯柯達首款7座SUV,無奈是由於眾多媒體的圍觀,雖然對它非常感興趣,但能觸摸到的時間真的不多。如今不遠萬里來到充滿熱情的西班牙,我仍然按捺住自己心裏的躁動,只想靜靜品味它獨特的外觀造型。

    柯迪亞克這個有點拗口的名字是來源自身形龐大的棕熊,第一次看到它時候覺得這個名字改得相當貼切。龐大的車身採用凌厲的線條勾勒出動感的車身造型,飽滿之餘卻不臃腫。極富張力的前臉設計給人的印象相當深刻,粗壯的直瀑式進氣格柵與犀利的LED前大燈營造出的前臉氣場很足,一如它的名字。

    從大燈延伸要車尾的三維腰線使得車身具有不錯的立體感,C柱與D柱之間的小舷窗的設計使得車身的造型非常協調,配合外擴式輪罩設計,使得車身充滿力量感。簡潔的車尾卻不缺少變化,標誌性的C型LED尾燈造型與視覺效果相當出色。

    除了出色的外觀造型,柯迪亞克也變得相當的人性化,設計師有時候觀念的轉變最後受益是我們消費者。這個從它的一些設計小細節就可以看出。開門的時候,由於很多人都非常擔心碩大的車門會碰到隔壁的牆壁或者車,而柯迪亞克則設計了一套可伸縮的防擦條,開門的時候自動車身,很巧妙的設計卻不會影響美觀。之前在速派出現過的門板處設計摺疊傘存放槽,這在柯迪亞克也有看到,而且正副駕駛都有,是非常貼心的裝置。

    熟悉的內飾,貼心的配置

    進入車內,依然是熟悉的大眾設計風格,卻擁有斯柯達自家的基因,一切以實用為主。規整的中控造型配上仿木紋的裝飾面板,相當具有檔次。應用多年的老氣多輻式方向盤終於壽終正寢,換裝了一個手感良好大小適中的三輻式方向盤。

    8英寸的觸摸屏显示效果比較清晰,配合觸摸式的按鍵,上手比較簡單,由於海外版本搭載是谷歌地圖,在試駕途中沒有好好體驗。分區明確的中控台無論做工還是按鍵的手感都都相當出色,符合一款旗艦SUV的身價。中控下方的儲物格空間很大,能放置I7 plus,還有無線充電功能,希望到時國內上市時還有這個提升逼格的配置。

    讓驚喜是它的副駕駛後方設置了一個小桌板與手機支架,可以讓後排乘客在旅途當中不僅看看自己喜歡的電影,還能就着電影吃零食。後排頭枕兩側還有貼心護翼,後排乘客看累了電影還能舒服地睡個覺。

    五座為主,7座為輔

    進入車內,前排空間就不用多說了,雖然身材不算很高,但頭部空間與腿部空間都非常充裕。得益於2791mm的軸距,它的第二排空間非常寬敞,雖然坐墊有些短,但對這些身高一米7多點還是足夠的,舒適性不差。配合碩大的全景天窗,後排乘客體驗非常出色。後排整體放倒比較規整,後備箱的空間非常寬敞;高配車型還有電動尾門,實用性非常出色。

    至於它的第三排座椅,在看來更多的是應急使用。進入第三排仍然會有些困難,對於家裡的一些上了年紀的家人來說,還是安安分分坐在第二排吧,較高的離地間隙也是一個硬傷。因此7座的柯迪亞克更多是讓消費者有更多的選擇,5座的車型仍然廠家宣傳的主力車型。

    這是一台年輕人的SUV

    聊完最基礎的外觀、內飾與空間,剩下來的肯定就是好好試駕一番這台身材不少的SUV了。它的尺寸比目前剛上市的進口途觀還要大點,這樣的龐大的身軀,看到需要比較強勁的動力總成了,因此那款1.4T的發動機不會搭載在柯迪亞克身上。

    雖然歐洲是柴油車的天下,但為了更好與國內市場相一致,捨棄了試駕柴油版的柯迪亞克,選擇了一台搭載了2.0T發動機,可是號稱7.5秒能把柯迪亞克從0加速到100Km/h的車型。至於1.8T車型,想留着到時國內上市之後再來試駕。

    只要你開過斯柯達,那麼柯迪亞克是相當的容易上手。相比其他斯柯達車型,它有着更高的坐姿與更出色的視野,當然它的調校與其他斯柯達的車型還是有所區別的,那就是整體會更硬朗一些,很貼合它的名字與造型。

    在試駕的過程中,這台2.0T的發動機動力輸出非常直接,與其匹配的DQ500平順性做得相當出色,只是一路試駕的途中基本沒有體驗頓挫的酸爽感,換擋的非常积極聰明。如今唯一的念想就是希望國產之後仍然是這台出色的變速箱了。硬朗的懸挂調校,讓人在行駛當中非常踏實。雖然在試駕過程中路面不算很好,但柯迪亞克在靜音水平做得比較出色,相比途觀真的進步很大。

    試駕的這台車型還是四驅版本,車尾的4×4出賣了它的身份。它搭載的這台四驅系統與Tiguan相差不大,是一台適時四驅系統,通過多片離合器式限滑差速器來分配動力,但主要還是以前驅為主,對於操控有一定的提升,千萬不要以為能進行極限越野。

    合理的定價,將會是斯柯達的雄起之作

    從最近這幾年斯柯達的發展來說,已經有了很大的進步了;在明銳與晶銳身上可以逐漸看到全新的設計元素,以前比較老氣造型已經被丟進博物館了。再到最新的速派,採用MQB平台生產的中級車,雖然銷量仍然比不上帕薩特,但已經上了不止一個台階了。那麼未來的成績要想更上一層樓的話,就肯定需要一個非常切合年輕人的定價。

    柯迪亞克擁有着出眾的外觀顏值,非常實用的空間體驗,這些優勢已經吸引了許多消費者的關注,但是如果真的要賣到我們手中,恐怕差的只是一個合適的價格了。這個從它亮相以來不斷的有網友跟說,只要它性價比不錯,首選SUV一定是它了。既然這樣,就來猜測一下,假如定一個比較低的起步價的話,例如18萬的起步價格、同時爭取上市的時間比國產途觀更早,相信一定有很多年輕人會把它收入囊中的。如今消費者已經出好題目了,就看斯柯達會不會給個令人滿意的答案了。本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    ※回頭車貨運收費標準

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

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

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

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

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

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

  • 致G20領袖 全球醫療工作者呼籲採納綠色振興

    環境資訊中心綜合外電;姜唯 編譯;林大利 審校

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

    【其他文章推薦】

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

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

    ※超省錢租車方案

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

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

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

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

  • 印度猴群闖醫學院「毆打研究員」 下秒洗劫待驗的武肺檢體

    印度猴群闖醫學院「毆打研究員」 下秒洗劫待驗的武肺檢體

    摘錄自2020年05月30日三立新聞網印度報導

    武漢肺炎(COVID-19)仍持續在印度延燒,然29日卻發生一起「搶劫事件」,一群猴子突闖入北方省勒克瑙(Lucknow)一處醫學院、出手攻擊醫事人員,並將多個待檢驗新冠病毒的血液檢體劫走;消息一出,附近居民紛表擔憂,害怕病毒會因檢體洩漏而進一步擴散。

    醫學院領導人賈格(S. K. Garg)指出,現在沒有證據顯示人會傳染病毒給猴子,但不知道若猴子接觸有病毒的血液之後,是否會遭受感染。有關單位也表示,目前還沒掌握到猴子是否有把血液灑出來,但附近居民得知消息後,都很擔心若猴子將檢體帶到住宅區,恐會造成病毒擴散。

    猴子闖入人類居住區、造成騷亂甚至攻擊人類的事件近來在印度頻傳,環保人士對此表示,主要原因是猴子的棲息地遭破壞,而牠們為了尋找食物才會闖入人類的居住空間。

    ※ 本文與 行政院農業委員會 林務局   合作刊登

    國際新聞
    印度
    武漢肺炎
    猴子
    公共衛生
    處變不驚──與野生動物相遇
    人與動物衝突事件簿

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

    【其他文章推薦】

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

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

    ※回頭車貨運收費標準

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

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

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

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

  • 躲過大火又來疫情 無尾熊面臨斷炊危機

    摘錄自2020年05月31日TVBS新聞網澳洲報導

    澳洲在去年年底,發生世紀森林大火,至少造成8,000隻無尾熊喪命,沒想到躲過大火,現在澳洲無尾熊卻因為疫情,可能面臨斷炊危機。以澳洲雪梨郊區的野生動物園來說,因為七成以上收入是靠外國觀光客,現在因為疫情根本沒有收入,現在只能期待澳洲政府紓困,才能讓園內50隻無尾熊的飼料費有著落。

    費瑟代爾野生動物園公關:「就像大家知道的,夏天的時候,森林大火燒到動物園附近,剛想說逃過一劫,這下沒問題了,結果又遇到新冠病毒疫情。」

    這家野生動物園的無尾熊,儘管躲過了大火奪命,如今卻可能因為疫情,面臨斷炊危機,原來每頭無尾熊,每年的飼料費是1萬9000澳幣,現在沒了觀光客,業者只能期待澳洲政府救濟。

    生態保育
    物種保育
    生物多樣性
    國際新聞
    澳洲
    無尾熊
    動物與大環境變遷

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

    【其他文章推薦】

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

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

    ※回頭車貨運收費標準

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

    ※超省錢租車方案

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

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

  • 歐企推環保轉型 呼應下一代歐盟計劃

    摘錄自2020年05月31日台灣醒報歐洲報導

    面對疫情歐洲企業提倡環保轉型,配合歐盟永續發展新計劃。歐洲最大的時裝網購平台Zalando日前宣佈,將要求其合作品牌在2023年前達到永續發展的環保目標。如果不能符合規定將會強制下架該公司所有商品。

    目前約有2000個時尚品牌經由Zalando的平台銷售,包括Nike、Gucci、Ted Baker等。各界認為,此舉不僅提升環保意識,也能讓時尚圈有更明確的未來目標。

    據《科學人》報導,歐盟日前公佈一項金額高達7500億歐元,名為「下一代歐盟」的經濟復甦計劃,內容特別強調阻止氣候變遷的重要性。歐盟執委會主席馮德萊恩向媒體表示:「我們必須確保企業在疫情期間進行產業轉型時,也要符合環保的大方向。」

    環境哲學
    生活環境
    綠色消費
    全球變遷
    氣候變遷
    循環經濟
    國際新聞
    歐洲
    環境正義

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

    【其他文章推薦】

    ※回頭車貨運收費標準

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

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

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

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

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

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

  • 真的假的?10萬級的國產SUV已經擁有媲美合資的能力了!

    真的假的?10萬級的國產SUV已經擁有媲美合資的能力了!

    東風風神AX5新車指導價:8。97-12。87萬在外觀方面東風風神AX5擁有一個極高的原創外觀,採用了雙橫幅的鍍鉻前格柵,下部進氣口採用梯形設計,同時保險杠兩側還配備有類似進氣口造型的豎條狀LED日間行車燈,此外紅色卡鉗以及使用18寸風火輪式輪轂更能彰顯AX5的運動氣質,而AX5的離地間距達到190mm,處於中上游水準。

    合資水平是目前眾多國產車廠商一直追求境界。為什麼總有的人會說國產車追不上合資車型?在看來最主要的原因是個人的感受方面。

    國產品牌與合資到底差在哪兒?

    品牌影響力上的差距!“國產”“合資”看起來就覺得合資更高端,在這裏也存在一種崇洋媚外的心理。現在的消費者買車更看重面子!國產品牌在眾多人心中依舊是“山寨”“廉價”的代名詞,如果讓親戚朋友看到你開一台國產車,總是會覺得低人一等。在很多人看來,為什麼要買國產車?並不是因為愛過情懷,而是錢不夠。

    外觀內飾設計上的差距?認為設計是一種很主觀的東西,但凡有一些比較潮流的設計出現,喜歡的人會被吸引進來,不喜歡的人只會吐槽。所以在汽車設計方面越平庸的車型越受廣大消費者所喜愛,而且中國人更喜歡“大”這一個詞語,於是現在的新款車型在尺寸方面都越做越大。至於合資和國產是否存在差距?覺得現在國產車的設計已經相當不錯,除了那幾個不爭氣堅持模仿的廠商,大多都擁有了自己的一套家族式設計語言,而且原創度都相當高!

    行駛質感的差距!有的人說國產車型開上幾年底盤感覺就像要散掉一般,跟合資車型完全無法比較。決定汽車行駛整體的質感與汽車廠家的調校功力成正比關係,就像法系車能把扭力梁調得比你的獨立懸挂更牛逼一樣,幾乎所有的廠家將自己那套底盤數據當成國家機密一樣。而調校就是國產品牌的硬傷,有能力的國產品牌可以選擇直接向合資廠家買比較過時的底盤數據、或者直接給錢外包給國外的調校團隊,投入資金是相龐大的。說句難聽點的,有部分的國產廠商的車型在看來壓根就是跳過了“調校”這個步驟。

    國產品牌就這麼菜?

    其實並不是,相反10萬左右的購車預算,選擇國產車型性價比更高!首先是配置更高、而且車子比合資車型更為大氣!有的人說國產車質量不行,國產車型的故障率是稍高,但這是對於故障率極低的品牌而言(就像豐田這些),不是所有的合資品牌故障率都很低的!10年前的國產車都在路上跑着,也不要說現在的新車型了。

    外觀夠大氣、配置夠高、內飾檔次夠高、車型質量過關!是判斷一台國產車型能否擁有與合資車競爭的最主要因素!

    東風風神AX5

    新車指導價:8.97-12.87萬

    在外觀方面東風風神AX5擁有一個極高的原創外觀,採用了雙橫幅的鍍鉻前格柵,下部進氣口採用梯形設計,同時保險杠兩側還配備有類似進氣口造型的豎條狀LED日間行車燈,此外紅色卡鉗以及使用18寸風火輪式輪轂更能彰顯AX5的運動氣質,而AX5的離地間距達到190mm,處於中上游水準。

    中控台設計層次感挺高,採用了軟性材料覆蓋給到的質感也非常不錯,而且最讓喜歡的是它的實用性配置上,像副駕駛地下的鞋盒給愛穿高跟鞋的女生提供了放鞋的地方、配備了獨立的8英寸液晶屏和一鍵啟動等配置,內置的Windlink系統支持與安卓手機的連接。

    AX5提供1.4T渦輪增壓發動機,與之匹配的是一台5擋手動/6擋擋雙離合,在質量方面值得肯定,另外AX5的底盤平台源自東風與pSA集團共同研發的DF2平台,在行駛質感方面真心不錯。

    榮威RX5

    新車指導價:9.98-18.68萬

    榮威RX5在上市之初一直以“網紅”的形式登場,極高的顏值受到廣泛消費者的關注,作為榮威“律動設計”理念下的首款車型,“展翼格柵”的中控與矩陣式LED大燈相連,整體造型時尚大氣,原創度極高,逼格十足。

    採用黃金比例進行打造設計的中控台也是滿滿的逼格,大面積使用軟材料包裹,摸到哪兒都是軟的,中控10.4英寸的大显示屏更是成為了中控台的點睛之筆,整體給人的質感相當高檔。另外與阿里共同打造出來的車載互聯繫統更是將其“網紅”的定位推上了頂峰。

    在動力方面,1.5T的動力更適合家用、2.0T的動力能帶給你非常不俗的駕駛樂趣,在質量方面,榮威背後有着通用這個大集團的撐腰,無論在品控還是質量方面都值得肯定。

    合資的选手實力也不俗!

    雪鐵龍C3-XR

    新車指導價:10.88-17.18萬

    法系車一直不被人看好,車頭採用了更多平直的線條,彰顯飽滿風格。大燈簡單耐看,內部線條與前格柵相連接,整體感更強。而側面的線條緊湊動感,不規則的輪圈樣式也頗為個性。儘管它擁有着同級領先的底盤調校技術,但是配置搭配不合理是它主要的缺點,不過法系車也就有一個優點:那就是底盤紮實好開。

    現代ix25

    新車指導價:11.98-18.68萬

    韓國車一直以高顏值作為賣點,所以無論旗下哪款車型,無疑不是顏值極高的选手,當然韓系車另外一個賣點就是配置比同級別的合資車型配置更高,而且韓系車在終端優惠方面很大,所以在新車落地價上會比較便宜。也可以這麼說,現代ix25在實用性與家用兩方面是做得相當不錯的。

    國產車型配置高、價格更低,性價比十足。很多人對國產車存在偏見,但是這個困境將會隨着國產車型的日益發展得到改善,如果國產車的整體質量上來了,你還會覺得國產車比不上合資嗎?本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

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

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

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

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

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

    ※回頭車貨運收費標準

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

  • 基於 abp vNext 和 .NET Core 開發博客項目 – Blazor 實戰系列(一)

    基於 abp vNext 和 .NET Core 開發博客項目 – Blazor 實戰系列(一)

    系列文章

    1. 基於 abp vNext 和 .NET Core 開發博客項目 – 使用 abp cli 搭建項目
    2. 基於 abp vNext 和 .NET Core 開發博客項目 – 給項目瘦身,讓它跑起來
    3. 基於 abp vNext 和 .NET Core 開發博客項目 – 完善與美化,Swagger登場
    4. 基於 abp vNext 和 .NET Core 開發博客項目 – 數據訪問和代碼優先
    5. 基於 abp vNext 和 .NET Core 開發博客項目 – 自定義倉儲之增刪改查
    6. 基於 abp vNext 和 .NET Core 開發博客項目 – 統一規範API,包裝返回模型
    7. 基於 abp vNext 和 .NET Core 開發博客項目 – 再說Swagger,分組、描述、小綠鎖
    8. 基於 abp vNext 和 .NET Core 開發博客項目 – 接入GitHub,用JWT保護你的API
    9. 基於 abp vNext 和 .NET Core 開發博客項目 – 異常處理和日誌記錄
    10. 基於 abp vNext 和 .NET Core 開發博客項目 – 使用Redis緩存數據
    11. 基於 abp vNext 和 .NET Core 開發博客項目 – 集成Hangfire實現定時任務處理
    12. 基於 abp vNext 和 .NET Core 開發博客項目 – 用AutoMapper搞定對象映射
    13. 基於 abp vNext 和 .NET Core 開發博客項目 – 定時任務最佳實戰(一)
    14. 基於 abp vNext 和 .NET Core 開發博客項目 – 定時任務最佳實戰(二)
    15. 基於 abp vNext 和 .NET Core 開發博客項目 – 定時任務最佳實戰(三)
    16. 基於 abp vNext 和 .NET Core 開發博客項目 – 博客接口實戰篇(一)
    17. 基於 abp vNext 和 .NET Core 開發博客項目 – 博客接口實戰篇(二)
    18. 基於 abp vNext 和 .NET Core 開發博客項目 – 博客接口實戰篇(三)
    19. 基於 abp vNext 和 .NET Core 開發博客項目 – 博客接口實戰篇(四)
    20. 基於 abp vNext 和 .NET Core 開發博客項目 – 博客接口實戰篇(五)

    前言

    從今天開始將使用 Blazor 完成博客的前端開發,如果你不了解 Blazor ,建議你還是去微軟官網學習學習基礎知識。本篇不做普及,因為這是實戰系列,重點是完成項目開發。

    還有,在開始 Blazor 實戰之前,建議動手完成之前的系列文章,這樣更有連貫性,不至於懵圈。

    因為我也是第一次使用 Blazor 開發項目,所以無法保證代碼的最優性,如果有不對的地方,或者有更好的做法,歡迎大家指正,謝謝。

    接下來,我將現學現做帶來一個完整的博客項目,來吧,Just do it 。

    我這裏選擇的是 Blazor WebAssembly,需要你有 .NET Core 3.1 的開發環境,並且你還要有 Visual Studio 2019 IDE。

    給大家看看我的開發環境,終端工具是:Window Terminal ,配置一下用起來太爽了,五星強烈推薦。

    搭建

    Blazor WebAssembly 是一個單頁應用框架,可用它通過 .NET 生成交互式客戶端 Web 應用。 Blazor WebAssembly 使用開放的 Web 標準(沒有插件或代碼轉換),適用於移動瀏覽器等各種新式 Web 瀏覽器。

    不啰嗦了,直接開干吧,在項目中新建 Blazor Web 應用。

    然後將項目設置為啟動項目,Ctrl+F5 運行一下看看,官網默認示例我這裏也懶得說了,直接進入主題吧。

    改造

    我這裏使用的UI還是我目前博客的樣式,你可以選擇任意你喜歡的UI界面,這部分就隨意了,不是本實戰系列的重點,所以有關樣式這些東西我就直接 Ctrl CV 了。

    替換下面css代碼到 wwwroot/css/app.css 中。

    點擊查看代碼

    *,
    *:after,
    *:before {
    	-webkit-box-sizing: border-box;
    	-moz-box-sizing: border-box;
    	box-sizing: border-box;
    }
    
    html {
    	line-height: 1.15;
    	-webkit-text-size-adjust: 100%;
    }
    
    body {
    	margin: 0;
    }
    
    h1 {
    	font-size: 2em;
    	margin: 0.67em 0;
    }
    
    hr {
    	box-sizing: content-box;
    	height: 0;
    	overflow: visible;
    }
    
    pre {
    	font-family: monospace, monospace;
    	font-size: 1em;
    }
    
    a {
    	background-color: transparent;
    }
    
    abbr[title] {
    	border-bottom: none;
    	text-decoration: underline;
    	text-decoration: underline dotted;
    }
    
    b,
    strong {
    	font-weight: bolder;
    }
    
    code,
    kbd,
    samp {
    	font-family: monospace, monospace;
    	font-size: 1em;
    }
    
    small {
    	font-size: 80%;
    }
    
    sub,
    sup {
    	font-size: 75%;
    	line-height: 0;
    	position: relative;
    	vertical-align: baseline;
    }
    
    sub {
    	bottom: -0.25em;
    }
    
    sup {
    	top: -0.5em;
    }
    
    img {
    	border-style: none;
    }
    
    button,
    input,
    optgroup,
    select,
    textarea {
    	font-family: inherit;
    	font-size: 100%;
    	line-height: 1.15;
    	margin: 0;
    }
    
    button,
    input {
    	overflow: visible;
    }
    
    button,
    select {
    	text-transform: none;
    }
    
    button,
    [type="button"],
    [type="reset"],
    [type="submit"] {
    	-webkit-appearance: button;
    }
    
    button::-moz-focus-inner,
        [type="button"]::-moz-focus-inner,
        [type="reset"]::-moz-focus-inner,
        [type="submit"]::-moz-focus-inner {
    	border-style: none;
    	padding: 0;
    }
    
    button:-moz-focusring,
        [type="button"]-moz-focusring,
        [type="reset"]-moz-focusring,
        [type="submit"]-moz-focusring {
    	outline: 1px dotted ButtonText;
    }
    
    fieldset {
    	padding: 0.35em 0.75em 0.625em;
    }
    
    legend {
    	box-sizing: border-box;
    	color: inherit;
    	display: table;
    	max-width: 100%;
    	padding: 0;
    	white-space: normal;
    }
    
    progress {
    	vertical-align: baseline;
    }
    
    textarea {
    	overflow: auto;
    }
    
    [type="checkbox"],
    [type="radio"] {
    	box-sizing: border-box;
    	padding: 0;
    }
    
    [type="number"]::-webkit-inner-spin-button,
    [type="number"]::-webkit-outer-spin-button {
    	height: auto;
    }
    
    [type="search"] {
    	-webkit-appearance: textfield;
    	outline-offset: -2px;
    }
    
        [type="search"]::-webkit-search-decoration {
    	-webkit-appearance: none;
    }
    
    ::-webkit-file-upload-button {
    	-webkit-appearance: button;
    	font: inherit;
    }
    
    details {
    	display: block;
    }
    
    summary {
    	display: list-item;
    }
    
    template {
    	display: none;
    }
    
    [hidden] {
    	display: none;
    }
    
    @font-face {
    	font-family: 'Fira Code Medium';
        src: url('https://static.meowv.com/fonts/FiraCode-Medium.woff2') format('woff2'), url("https://static.meowv.com/fonts/FiraCode-Medium.woff") format("woff");
        font-weight: 500;
        font-style: normal;
    }
    
    html {
    	font-family: 'Fira Code Medium', Microsoft Yahei, monospace;
    	overflow-x: hidden;
    }
    
    html::-webkit-scrollbar {
    	width: 5px;
    	height: 5px;
    }
    
    html::-webkit-scrollbar-thumb {
    	height: 20px;
    	background-color: #5A9600;
    }
    
    html::-webkit-scrollbar-thumb:hover {
    	background-color: #5A9600;
    }
    
    body {
    	font-size: 11pt;
    	font-weight: normal;
    	line-height: 2em;
    	background-color: #fff;
    	color: #161209;
    	transition: color 0.2s ease, border-color 0.2s ease, background 0.2s ease, opacity 0.2s ease;
    }
    
    body:before {
    	content: "";
    	background-repeat: no-repeat;
    	background-position: center;
    	opacity: 0.05;
    	position: fixed;
    	top: 0;
    	left: 0;
    	width: 100%;
    	height: 100%;
    	z-index: -1;
    }
    
    body.dark-theme {
    	background-color: #292a2d;
    	color: #a9a9b3;
    	transition: color 0.2s ease, border-color 0.2s ease, background 0.2s ease, opacity 0.2s ease;
    }
    
    a {
    	color: #161209;
    	text-decoration: none;
    	transition: color 0.2s ease, border-color 0.2s ease, background 0.2s ease, opacity 0.2s ease;
    	cursor: pointer;
    }
    
    a:hover {
    	color: #5A9600;
    	text-decoration: none;
    	transition: color 0.2s ease, border-color 0.2s ease, background 0.2s ease, opacity 0.2s ease;
    }
    
    .dark-theme a {
    	color: #a9a9b3;
    	text-decoration: none;
    	transition: color 0.2s ease, border-color 0.2s ease, background 0.2s ease, opacity 0.2s ease;
    }
    
    .dark-theme a:hover {
    	color: #fff;
    	text-decoration: none;
    	transition: color 0.2s ease, border-color 0.2s ease, background 0.2s ease, opacity 0.2s ease;
    }
    
    .wrapper {
    	display: flex;
    	flex-direction: column;
    	min-height: 100vh;
    	width: 100%;
    }
    
    .navbar {
    	height: 4rem;
    	line-height: 4rem;
    	width: 100%;
    }
    
    .navbar .container {
    	width: auto;
    	max-width: 1200px;
    	text-align: center;
    	margin: 0 auto;
    	display: flex;
    	justify-content: space-between;
    }
    
    .main {
    	flex-grow: 1;
    	flex-shrink: 0;
    	flex-basis: auto;
    }
    
    .container {
    	padding-left: 1em;
    	padding-right: 1em;
    }
    
    .footer {
    	width: 100%;
    	text-align: center;
    }
    
    
    /*input css begin*/
    
    * {
    	-webkit-tap-highlight-color: rgba(0, 0, 0, 0);
    }
    
    input[type="checkbox"],
    input[type="radio"] {
    	display: none;
    	width: 0;
    	height: 0;
    	visibility: hidden;
    }
    
    input[type="checkbox"]:checked + label:after {
    	transition: all 0.3s ease-in;
    }
    
    input[type="checkbox"]:not(:checked) + label:after {
    	transition: all 0.3s ease-out;
    }
    
    input[type="checkbox"]:checked + label,
        input[type="checkbox"]:not(:checked) + label {
    	transition: all 0.3s ease-in-out;
    }
    
    input[type="checkbox"]:checked + label:before,
            input[type="checkbox"]:checked + label i:before,
            input[type="checkbox"]:not(:checked) + label i:before,
            input[type="checkbox"]:checked + label i:after,
            input[type="checkbox"]:not(:checked) + label i:after,
            input[type="checkbox"]:not(:checked) + label:before {
    	transition: all 0.3s ease-in-out;
    }
    
    input[type="radio"]:checked + label:after,
        input[type="radio"]:not(:checked) + label:after {
    	transition: all 0.3s ease-in-out;
    }
    
    .switch_default + label {
    	background-color: #e6e6e6;
    	border-radius: 7px;
    	cursor: pointer;
    	display: inline-block;
    	height: 14px;
    	position: relative;
    	box-shadow: 0.2px 0.2px 1px 0.5px rgb(180, 180, 180);
    	width: 30px;
    }
    
    .switch_default + label:after {
    	background-color: #fff;
    	border-radius: 50%;
    	content: "";
    	height: 12px;
    	left: 1px;
    	position: absolute;
    	top: .5px;
    	width: 12px;
    	box-shadow: 0.2px 0.2px 1px 0.5px rgb(180, 180, 180);
    }
    
    .switch_default:checked + label {
    	background-color: #1ABC9C;
    	box-shadow: none;
    }
    
    .switch_default:checked + label:after {
    	left: 17px;
    }
    
    @font-face {
    	font-family: "iconfont";
        src: url('//at.alicdn.com/t/font_1313145_r9szngeugmj.eot?t=1566619028667'); /* IE9 */
        src: url('//at.alicdn.com/t/font_1313145_r9szngeugmj.eot?t=1566619028667#iefix') format('embedded-opentype'), /* IE6-IE8 */
        url('data:application/x-font-woff2;charset=utf-8;base64,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') format('woff2'), url('//at.alicdn.com/t/font_1313145_r9szngeugmj.woff?t=1566619028667') format('woff'), url('//at.alicdn.com/t/font_1313145_r9szngeugmj.ttf?t=1566619028667') format('truetype'), /* chrome, firefox, opera, Safari, Android, iOS 4.2+ */
        url('//at.alicdn.com/t/font_1313145_r9szngeugmj.svg?t=1566619028667#iconfont') format('svg'); /* iOS 4.1- */
    }
    
    .iconfont {
    	font-family: "iconfont" !important;
    	font-size: 16px;
    	font-style: normal;
    	-webkit-font-smoothing: antialiased;
    	-moz-osx-font-smoothing: grayscale;
    }
    
    .iconread:before {
    	content: "\e742";
    }
    
    .iconweixin:before {
    	content: "\e632";
    }
    
    .iconmanage:before {
    	content: "\e610";
    }
    
    .iconapi:before {
    	content: "\e668";
    }
    
    .iconcode:before {
    	content: "\e654";
    }
    
    .icongithub:before {
    	content: "\ea0a";
    }
    
    .iconnotes:before {
    	content: "\e687";
    }
    
    .header-logo a {
    	padding: 0;
    }
    
    .navbar .menu a {
    	padding: 0 8px;
    }
    
    .navbar .menu .active {
    	font-weight: 900;
    	color: #161209;
    }
    
    .dark-theme .navbar .menu .active {
    	color: #fff;
    }
    
    .navbar-header a:hover,
    .navbar .menu a:hover {
    	background-color: transparent;
    }
    
    header label {
    	margin-left: 15px;
    	position: relative;
    	-webkit-transform: translateY(0.1em) translateX(0.5em);
    }
    
    .copyright {
    	font-size: 14px;
    }
    
    .pagination {
    	display: flex;
    	flex-direction: row;
    	justify-content: center;
    	list-style: none;
    	white-space: nowrap;
    	width: 100%;
    	padding-top: 2em;
    }
    
    .pagination a,
        .pagination span {
    	-webkit-font-smoothing: antialiased;
    	font-size: 12px;
    	color: #bfbfbf;
    	letter-spacing: 0.1em;
    	font-weight: 700;
    	padding: 5px 5px;
    	text-decoration: none;
    	transition: 0.3s;
    }
    
    .pagination .page-number {
    	padding-bottom: 3px;
    	margin: 0 20px;
    	box-sizing: border-box;
    	position: relative;
    	display: inline;
    }
    
    .pagination .page-number.disabled {
    	display: none;
    }
    
    .pagination .page-number:hover a {
    	color: #000;
    }
    
    .dark-theme .pagination .page-number:hover a {
    	color: #fff;
    }
    
    .pagination .page-number:before,
    .pagination .page-number:after {
    	position: absolute;
    	content: "";
    	width: 0;
    	height: 1px;
    	background: #000;
    	transition: 0.3s;
    	bottom: 0px;
    }
    
    .dark-theme .pagination .page-number:before,
    .dark-theme .pagination .page-number:after {
    	background: #fff;
    }
    
    .pagination .page-number:before .current,
    .pagination .page-number:after .current {
    	width: 100%;
    }
    
    .pagination .page-number:before {
    	left: 50%;
    }
    
    .pagination .page-number:after {
    	right: 50%;
    }
    
    .pagination .page-number:hover:before,
    .pagination .page-number:hover:after {
    	width: 50%;
    }
    
    .pagination .page-number.current {
    	color: #000;
    }
    
    .dark-theme .pagination .page-number.current {
    	color: #fff;
    }
    
    .pagination .page-number.current:before,
    .pagination .page-number.current:after {
    	width: 60%;
    }
    
    .intro {
    	transform: translateY(20vh);
    	text-align: center;
    }
    
    .intro .avatar {
    	padding: 10px;
    }
    
    .intro .avatar img {
    	width: 128px;
    	height: auto;
    	display: inline-block;
    	-webkit-border-radius: 100%;
    	border-radius: 100%;
    	-webkit-box-shadow: 0 0 0 0.3618em rgba(0, 0, 0, 0.05);
    	box-shadow: 0 0 0 0.3618em rgba(0, 0, 0, 0.05);
    	margin: 0 auto;
    	-webkit-transition: all ease 0.4s;
    	-moz-transition: all ease 0.4s;
    	-o-transition: all ease 0.4s;
    	transition: all ease 0.4s;
    	cursor: pointer;
    }
    
    .intro .avatar img:hover {
    	position: relative;
    	-webkit-transform: translateY(-0.75em);
    	-moz-transform: translateY(-0.75em);
    	-ms-transform: translateY(-0.75em);
    	-o-transform: translateY(-0.75em);
    	transform: translateY(-0.75em);
    	cursor: pointer;
    }
    
    .nickname {
    	font-size: 2em;
    	font-weight: normal;
    }
    
    .links a {
    	padding: 0 5px;
    }
    
    .links a:hover {
    	background-color: transparent;
    }
    
    .links .iconfont {
    	font-size: 2em;
    }
    
    .post-wrap {
    	position: relative;
    	width: 100%;
    	max-width: 1024px;
    	margin: 0 auto;
    	padding-top: 2rem;
    }
    
    .archive-item-date {
    	float: right;
    	text-align: right;
    	color: #a9a9b3;
    }
    
    .dark-theme .archive-item-date {
    	color: #87878d;
    }
    
    .post-wrap .categories-card {
    	margin: 0 auto;
    	margin-top: 1em;
    	display: flex;
    	align-items: center;
    	justify-content: space-between;
    	flex-direction: row;
    	flex-wrap: wrap;
    	padding: 0 2.5em;
    	line-height: 1.6em;
    }
    
    .post-wrap .categories-card .card-item {
    	font-size: 14px;
    	text-align: left;
    	width: 50%;
    	display: flex;
    	align-items: flex-start;
    	position: relative;
    }
    
    .post-wrap .categories-card .card-item .categories {
    	overflow: hidden;
    }
    
    .categories h3 {
    	display: inline-block;
    }
    
    .categories span {
    	float: right;
    	padding-right: 1em;
    }
    
    .categories .more-post-link {
    	float: right;
    }
    
    .tag-cloud-tags {
    	margin: 10px 0;
    	padding-top: 2em;
    }
    
    .tag-cloud-tags a {
    	display: inline-block;
    	position: relative;
    	margin: 5px 10px;
    	word-wrap: break-word;
    	transition-duration: 0.3s;
    	transition-property: transform;
    	transition-timing-function: ease-out;
    }
    
    .tag-cloud-tags a:active,
            .tag-cloud-tags a:focus,
            .tag-cloud-tags a:hover {
    	color: #5A9600;
    	transform: scale(1.1);
    }
    
    .dark-theme .tag-cloud-tags a:active,
    .dark-theme .tag-cloud-tags a:focus,
    .dark-theme .tag-cloud-tags a:hover {
    	color: #fff;
    }
    
    .tag-cloud-tags a small {
    	margin: 0 0.3em;
    	color: #a9a9b3;
    }
    
    .dark-theme .tag-cloud-tags a small {
    	color: #fff;
    }
    
    .page {
    	padding-top: 0;
    }
    
    .page .post-content {
    	margin: 0;
    	padding-top: 0;
    }
    
    .post-wrap p {
    	font-size: 1em;
    	margin: 0.5em 0 0.5em 0;
    }
    
    .post-wrap .post-header h1 {
    	margin: 0 !important;
    }
    
    .post-wrap .post-title {
    	font-size: 2em;
    	line-height: 1.5em;
    }
    
    .post-wrap .eror-tip {
    	text-align: center;
    	line-height: 1.5em;
    	margin-top: 250px;
    }
    
    .post-wrap .post-meta {
    	color: rgba(85, 85, 85, 0.529) !important;
    }
    
    .dark-theme .post-wrap .post-meta {
    	color: #87878d !important;
    }
    
    .post-wrap .post-meta a {
    	color: #000;
    }
    
    .dark-theme .post-wrap .post-meta a {
    	color: #eee;
    }
    
    .post-wrap .post-meta a:hover {
    	color: #5A9600;
    }
    
    .dark-theme .post-wrap .post-meta a:hover {
    	color: #fff;
    }
    
    .post-content {
    	padding-top: 2rem;
    	text-align: justify;
    }
    
    .post-copyright {
    	margin-top: 5rem;
    	border-top: 1px solid #e8e8e8;
    	border-bottom: 1px solid #e8e8e8;
    }
    
    .post-copyright a {
    	color: #000;
    }
    
    .dark-theme .post-copyright a {
    	color: #eee;
    }
    
    .post-copyright a:hover {
    	color: #5A9600;
    }
    
    .dark-theme .post-copyright a:hover {
    	color: #fff;
    }
    
    .post-copyright .copyright-item {
    	margin: 5px 0;
    }
    
    .post-copyright .lincese {
    	font-weight: bold;
    }
    
    .dark-theme .post-copyright {
    	border-top: 1px solid #909196;
    	border-bottom: 1px solid #909196;
    }
    
    .post-tags {
    	padding: 1rem 0 1rem;
    	display: flex;
    	justify-content: space-between;
    }
    
    .post-nav:before,
    .post-nav:after {
    	content: " ";
    	display: table;
    }
    
    .post-nav a.prev,
    .post-nav a.next {
    	font-weight: 600;
    	font-size: 16px;
    	transition-property: transform;
    	transition-timing-function: ease-out;
    	transition-duration: 0.3s;
    }
    
    .post-nav a.prev {
    	float: left;
    }
    
    .post-nav a.prev::before {
    	content: "<";
    	margin-right: 0.5em;
    }
    
    .post-nav a.prev:hover {
    	transform: translateX(-4px);
    }
    
    .post-nav a.next {
    	float: right;
    }
    
    .post-nav a.next::after {
    	content: ">";
    	margin-left: 0.5em;
    }
    
    .post-nav a.next:hover {
    	transform: translateX(4px);
    }
    
    .post-nav a.prev::before,
        .post-nav a.next::after {
    	font-weight: bold;
    }
    
    .tag:not(:last-child) a::after {
    	content: " / ";
    }
    
    @media only screen and (min-device-width: 320px) and (max-device-width: 1024px) {
    	.main {
    		padding-top: 40pt;
    	}
    
    	.navbar {
    		display: none;
    	}
    
    	.navbar-mobile {
    		display: block !important;
    		position: fixed;
    		width: 100%;
    		z-index: 100;
    		transition: all 0.6s ease 0s;
    	}
    
    	.navbar-mobile .container {
    		padding: 0;
    		margin: 0;
    		line-height: 5.5em;
    		background: #fff;
    	}
    
    	.navbar-mobile .container .navbar-header {
    		display: flex;
    		justify-content: space-between;
    		align-items: center;
    		width: 100%;
    		padding-right: 1em;
    		padding-left: 1em;
    		box-sizing: border-box;
    		position: relative;
    	}
    
    	.navbar-mobile .container .navbar-header .menu-toggle {
    		cursor: pointer;
    		line-height: 5.5em;
    		padding: auto 2em;
    	}
    
    	.navbar-mobile .container .navbar-header .menu-toggle span {
    		display: block;
    		background: #000;
    		width: 36px;
    		height: 2px;
    		-webkit-border-radius: 3px;
    		-moz-border-radius: 3px;
    		border-radius: 3px;
    		-webkit-transition: 0.25s margin 0.25s, 0.25s transform;
    		-moz-transition: 0.25s margin 0.25s, 0.25s transform;
    		transition: 0.25s margin 0.25s, 0.25s transform;
    	}
    
    	.dark-theme .navbar-mobile .container .navbar-header .menu-toggle span {
    		background: #a9a9b3;
    	}
    
    	.navbar-mobile .container .navbar-header .menu-toggle span:nth-child(1) {
    		margin-bottom: 8px;
    	}
    
    	.navbar-mobile .container .navbar-header .menu-toggle span:nth-child(3) {
    		margin-top: 8px;
    	}
    
    	.navbar-mobile .container .navbar-header .menu-toggle.active span {
    		-webkit-transition: 0.25s margin, 0.25s transform 0.25s;
    		-moz-transition: 0.25s margin, 0.25s transform 0.25s;
    		transition: 0.25s margin, 0.25s transform 0.25s;
    	}
    
    	.navbar-mobile .container .navbar-header .menu-toggle.active span:nth-child(1) {
    		-moz-transform: rotate(45deg) translate(4px, 6px);
    		-ms-transform: rotate(45deg) translate(4px, 6px);
    		-webkit-transform: rotate(45deg) translate(4px, 6px);
    		transform: rotate(45deg) translate(4px, 6px);
    	}
    
    	.navbar-mobile .container .navbar-header .menu-toggle.active span:nth-child(2) {
    		opacity: 0;
    	}
    
    	.navbar-mobile .container .navbar-header .menu-toggle.active span:nth-child(3) {
    		-moz-transform: rotate(-45deg) translate(8px, -10px);
    		-ms-transform: rotate(-45deg) translate(8px, -10px);
    		-webkit-transform: rotate(-45deg) translate(8px, -10px);
    		transform: rotate(-45deg) translate(8px, -10px);
    	}
    
    	.navbar-mobile .container .menu {
    		text-align: center;
    		background: #fff;
            /*border-top: 1px solid #000;*/
    		padding-top: 1em;
    		padding-bottom: 1em;
    		display: none;
    		box-shadow: 0px 2px 4px rgba(0, 0, 0, 0.1), 0px 4px 8px rgba(0, 0, 0, 0.1);
    	}
    
    	.navbar-mobile .container .menu a {
    		display: inline-block;
    		margin: 0 1em;
    		line-height: 2.5em;
    	}
    
    	.navbar-mobile .container .menu.active {
    		display: block;
    		white-space: nowrap;
    		box-sizing: border-box;
    		overflow-x: auto;
    	}
    
    	.dark-theme .navbar-mobile .container .menu {
    		background: #292a2d;
            /*border-top: 1px solid #87878d;*/
    	}
    
    	.dark-theme .navbar-mobile .container {
    		background: #292a2d !important;
    	}
    
    	.archive {
    		width: 90%;
    	}
    
    	.archive .archive-item .archive-item-date {
    		display: none;
    	}
    
    	#dynamic-to-top {
    		display: none !important;
    	}
    
    	.footer {
    		height: 3rem;
    		width: 100%;
    		text-align: center;
    		line-height: 1.5rem;
    		padding-top: 2em;
    	}
    
    	.post-warp {
    		padding-top: 6em;
    	}
    
    	.post-warp .archive-item-date {
    		display: none;
    	}
    
    	.categories .categories-card .card-item {
    		width: 100%;
    		display: flex;
    		min-height: 0;
    	}
    
    	.categories .categories-card .card-item .categories {
    		overflow: hidden;
    	}
    
    	.signature-img {
    		width: 100%;
    	}
    
    	.signature-box img {
    		height: 100px !important;
    	}
    
    	.signature-img img {
    		height: 100px;
    	}
    
    	.signature-action, .vip-action {
    		width: 100%;
    	}
    
    	.signature-action select, .vip-action select {
    		width: 100%;
    	}
    
    	.signature-action input, .vip-action input {
    		width: 200px;
    		float: left;
    		margin-top: 5px;
    	}
    
    	.signature-action button, .vip-action button {
    		width: 200px;
    		margin-top: 5px;
    	}
    
    	.mta-box {
    		width: 100% !important;
    	}
    
    	.mta-a ul li {
    		width: 100% !important;
    	}
    
    	.navbar-mobile {
    		display: none;
    	}
    }
    
    @media only screen and (min-device-width: 768px) {
    	.navbar-mobile {
    		display: none;
    	}
    }
    
    @media only screen and (min-width: 1024px) {
    	.navbar-mobile {
    		display: none;
    	}
    }
    
    .loader {
    	box-sizing: content-box;
    	display: block;
    	position: absolute;
    	top: 50%;
    	left: 50%;
    	margin: 0;
    	text-align: center;
    	z-index: 1000;
    	-webkit-transform: translateX(-50%) translateY(-50%);
    	transform: translateX(-50%) translateY(-50%);
    }
    
    .loader:before {
    	position: absolute;
    	content: '';
    	top: 0;
    	left: 50%;
    	width: 50px;
    	height: 50px;
    	margin: 0 0 0 -25px;
    	border-radius: 50px;
    	border: 4px solid rgba(0, 0, 0, .1);
    }
    
    .loader:after {
    	position: absolute;
    	content: '';
    	top: 0;
    	left: 50%;
    	width: 50px;
    	height: 50px;
    	margin: 0 0 0 -25px;
    	animation: loader .6s linear;
    	animation-iteration-count: infinite;
    	border-radius: 50px;
    	border: 4px solid transparent;
    	border-top-color: #767676;
    	box-shadow: 0 0 0 1px transparent;
    }
    
    @keyframes loader {
    	from {
    		-webkit-transform: rotate(0deg);
    		transform: rotate(0deg);
    	}
    
    	to {
    		-webkit-transform: rotate(360deg);
    		transform: rotate(360deg);
    	}
    }
    
    .dark-theme .post-content {
    	background: #292a2d !important;
    	color: #eee !important;
    }
    
    .dark-theme .post-content p code, .dark-theme .post-content ul li code {
    	background: #292a2d !important;
    }
    
    .apps {
    	color: red;
    	font-weight: bold;
    }
    
    .signature-box {
    	margin-top: 100px;
    	text-align: center;
    }
    
    .signature-box img {
    	border: none;
    	height: 145px;
    	margin-bottom: 50px;
    }
    
    .signature-action select, .vip-action select {
    	height: 30px;
    }
    
    .signature-action input, .vip-action input {
    	height: 25px;
    	padding-left: 5px;
    }
    
    .signature-action input:focus, .vip-action input:focus {
    	outline: none;
    }
    
    .signature-action button, .vip-action button {
    	width: 135px;
    	height: 30px;
    }
    
    .tag-cloud-tags-extend {
    	padding-top: 0;
    }
    
    .hidden {
    	display: none;
    }
    
    .vip-action {
    	text-align: center;
    }
    
    .imgbox {
    	width: 70%;
    	text-align: center;
    	margin: 80px auto 0;
    }
    
    .imgbox img {
    	max-width: 100%;
    	max-height: 100%;
    }
    
    .girl-qrcode {
    	text-align: center;
    }
    
    .girl-img {
    	width: 20%;
    }
    
    .btnbox {
    	text-align: center;
    	margin-top: 20px;
    }
    
    .tab-box {
    	margin: 0 auto;
    	margin-top: 50px;
    	width: 1150px;
    }
    
    .top-tab {
    	font-weight: bold;
    	float: left;
    	margin-top: 5px;
    }
    
    .top-tab ul li {
    	list-style: none;
    }
    
    .top-tab ul li a.archive {
    	color: #5A9600;
    }
    
    .top-content {
    	float: left;
    }
    
    .top-content ul li {
    	list-style: none;
    	height: 35px;
    	line-height: 35px;
    	width: 888px;
    	overflow: hidden;
    	text-overflow: ellipsis;
    	white-space: nowrap;
    }
    
    .mta-box {
    	width: 75%;
    	margin: 100px auto 0;
    }
    
    .mta-a {
    	margin: 20px 68px 50px 20px;
    }
    
    .mta-a ul {
    	width: auto;
    	display: none;
    }
    
    .mta-a ul li {
    	float: left;
    	width: 25%;
    	list-style: none;
    }
    
    .mta-a-item {
    	margin: 0 10px;
    	border: 1px solid #e1e1e1;
    	background: #fff;
    	min-height: 60px;
    }
    
    .mta-a-title {
    	padding: 16px 16px 0;
    	height: 20px;
    	line-height: 20px;
    }
    
    .mta-a-value {
    	height: 100%;
    	font-size: 30px;
    	height: 24px;
    	margin: 20px 0 20px 30px;
    }
    
    .mta-date {
    	text-align: right;
    	padding-right: 5px;
    }
    
    .dark-theme .mta-a-item {
    	border: 1px solid #a9a9b3;
    	background: transparent;
    }
    
    .qrcode {
    	width: 120px;
    	z-index: 99999;
    	opacity: 0.8;
    	margin: 20px auto 0;
    }
    
    .qrcode img {
    	width: 100%;
    }
    
    .soul {
    	text-align: center;
    	margin-top: 200px;
    }
    
    .soul-btn {
    	background-color: #5a9600;
    	border: 5px;
    	color: white;
    	padding: 15px 32px;
    	text-align: center;
    	text-decoration: none;
    	display: inline-block;
    	font-size: 16px;
    	margin: 4px 2px;
    	cursor: pointer;
    	-webkit-transition-duration: 0.4s;
    	transition-duration: 0.4s;
    }
    
    .soul-btn:hover {
    	box-shadow: 0 12px 16px 0 rgba(0,0,0,0.24),0 17px 50px 0 rgba(0,0,0,0.19);
    }
    

    在css中用到了開源的 FiraCode 字體,可以自己去下載,不過在css中我已經改為遠程地址了。

    刪掉 wwwroot/sample-data、wwwroot/css/bootstrap、wwwroot/css/open-iconic 三個文件夾。

    在wwwroot文件夾下,有一個index.html,這個是我們網站的入口,注意裏面有一對標籤:<app>Loading...</app>,這個標籤裏面的內容會在 wasm 加載完畢后自動清除掉,所以,一般可以用來做加載提示。

    現在改造一下index.html,代碼如下:

    <!DOCTYPE html>
    <html>
    
    <head>
        <meta charset="utf-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
        <meta name="keywords" content="Meowv,qix,阿星Plus,個人博客">
        <meta name="description" content="阿星Plus的個人博客,用於發表原創文章,關注微信公眾號:『阿星Plus』了解更多。">
        <title>阿星Plus⭐⭐⭐</title>
        <base href="/" />
        <link href="css/app.css" rel="stylesheet" />
    </head>
    
    <body>
        <app>
            <div class="loader"></div>
        </app>
        <script src="_framework/blazor.webassembly.js"></script>
    </body>
    
    </html>
    

    千萬注意,blazor.webassembly.js 這個js不可以刪除,會在項目打包后自動生成這個js文件。

    然後我們一點一點完善,Program.cs默認就行暫時不需要做任何改動。

    Pages文件夾內的Razor組件就是我們的具體頁面了,幹掉默認的Counter.razorFetchData.razor,留下Index.razor,當作我們的首頁。

    Shared文件夾內可以放一些共享的組件,比如我們的模板MainLayout.razor就在裏面,它需要繼承LayoutComponentBase

    所以現在可以來修改一下我們的模板內容。

    以我博客的UI架構而言,博客分為了三個部分,頭部、尾部、內容。

    @inherits LayoutComponentBase
    
    <div class="wrapper">
        <Header />
        @Body
        <Footer />
    </div>
    

    @Body為固定語法,表示這裡是內容部分,其他的不變,只在這裏填充內容。

    在Shared文件夾中添加兩個組件,頭部:Header.razor、尾部:Footer.razor

    Header.razor的內容如下:

    <!-- Header.razor -->
    <header>
        <nav class="navbar">
            <div class="container">
                <div class="navbar-header header-logo">
                    <NavLink class="menu-item" href="/" Match="NavLinkMatch.All">
                        阿星Plus
                    </NavLink>
                </div>
                <div class="menu navbar-right">
                    <NavLink class="menu-item" href="posts">Posts</NavLink>
                    <NavLink class="menu-item" href="categories">Categories</NavLink>
                    <NavLink class="menu-item" href="tags">Tags</NavLink>
                    <NavLink class="menu-item apps" href="apps">Apps</NavLink>
                    <input id="switch_default" type="checkbox" class="switch_default" />
                    <label for="switch_default" class="toggleBtn"></label>
                </div>
            </div>
        </nav>
        <nav class="navbar-mobile">
            <div class="container">
                <div class="navbar-header">
                    <div>
                        <NavLink class="menu-item" href="" Match="NavLinkMatch.All">阿星Plus</NavLink>
                        <NavLink >&nbsp;·&nbsp;Light</NavLink>
                    </div>
                    <div class="menu-toggle">&#9776; Menu</div>
                </div>
                <div class="menu">
                    <NavLink class="menu-item" href="posts">Posts</NavLink>
                    <NavLink class="menu-item" href="categories">Categories</NavLink>
                    <NavLink class="menu-item" href="tags">Tags</NavLink>
                    <NavLink class="menu-item apps" href="apps">Apps</NavLink>
                </div>
            </div>
        </nav>
    </header>
    

    可以看到有很多的NavLink組件,這是我將a標籤轉換后的內容,其實最終生成的也是我們熟悉的a標籤,不過他自然有獨特用處,看介紹:

    創建導航鏈接時,請使用 NavLink 組件代替 HTML 超鏈接元素 (<a>)。 NavLink 組件的行為方式類似於 <a> 元素,但它根據其 href 是否與當前 URL 匹配來切換 active CSS 類。 active 類可幫助用戶了解所显示導航鏈接中的哪個頁面是活動頁面。

    Footer.razor的內容如下:

    <!-- Footer.razor -->
    <footer id="footer" class="footer">
        <div class="copyright">
            <span>
                Powered by <a target="_blank" href="http://dot.net">.NET Core 3.1</a> and <a href="http://blazor.net/">Blazor</a> on Linux
            </span>
        </div>
    </footer>
    

    然後刪掉默認的多餘的組件:NavMenu.razorSurveyPrompt.razor

    還有一個_Imports.razor,這個就是用來導入命名空間的,放在這裏面就相當於全局引用了。

    現在去編輯我們的首頁Index.razor

    @page "/"
    
    <div class="main">
        <div class="container">
            <div class="intro">
                <div class="avatar">
                    <a href="javascript:;"><img src="https://static.meowv.com/images/avatar.jpg"></a>
                </div>
                <div class="nickname">阿星Plus</div>
                <div class="description">
                    <p>
                        生命不息,奮鬥不止
                        <br>Cease to struggle and you cease to live
                    </p>
                </div>
                <div class="links">
                    <NavLink class="link-item" title="Posts" href="posts">
                        <i class="iconfont iconread"></i>
                    </NavLink>
                    <NavLink target="_blank" class="link-item" title="Notes" href="https://notes.meowv.com/">
                        <i class="iconfont iconnotes"></i>
                    </NavLink>
                    <NavLink target="_blank" class="link-item" title="API" href="https://api.meowv.com/">
                        <i class="iconfont iconapi"></i>
                    </NavLink>
                    <NavLink class="link-item" title="Manage" href="/account/auth">
                        <i class="iconfont iconcode"></i>
                    </NavLink>
                    <NavLink target="_blank" class="link-item" title="Github" href="https://github.com/Meowv/">
                        <i class="iconfont icongithub"></i>
                    </NavLink>
                    <NavLink class="link-item weixin" title="掃碼關注微信公眾號:『阿星Plus』查看更多。">
                        <i class="iconfont iconweixin"></i>
                    </NavLink>
                    <div class="qrcode">
                        <img src="https://static.meowv.com/images/wx_qrcode.jpg" />
                    </div>
                </div>
            </div>
        </div>
    </div>
    

    @page指令用於設置頁面路由地址,因為是首頁,所以直接給一個”/”就可以了。

    至此項目算是搭建完成並且將其改造了一番,現在可以去運行一下看看效果了。

    第一次打開或者強制刷新頁面會出現加載中的界面,我這裏就是一個小圈圈在那裡轉,當加載完畢后就會自動消失,什麼都不需要干,太方便了。

    現在已經成功將首頁的显示搞定了,隨便點擊幾個按鈕試試,會輸出一個錯誤提示:Sorry, there’s nothing at this address,因為沒有找到這些路由,所以就…

    默認的有點丑,並且這句提示當然也可以自定義的,現在來看最後的一個組件App.razor

    <Router AppAssembly="@typeof(Program).Assembly">
        <Found Context="routeData">
            <RouteView RouteData="@routeData" DefaultLayout="@typeof(MainLayout)" />
        </Found>
        <NotFound>
            <LayoutView Layout="@typeof(MainLayout)">
                <p>Sorry, there's nothing at this address.</p>
            </LayoutView>
        </NotFound>
    </Router>
    

    通過語義化的代碼不難理解,Found就是找到與之匹配的路由,然後調用模板MainLayoutNotFound就是沒有找到的情況下,使用MainLayout並且在@body輸出一句提示。

    將這句錯誤提示做成一個公共的組件並且美化一下,在Shared文件夾下新建組件:ErrorTip.razor,內容如下:

    <div class="main">
        <div class="post-wrap">
            <h2 class="eror-tip">Sorry, there's nothing at this address.</h2>
        </div>
    </div>
    

    使用組件也很簡單,在App.razor中刪掉默認的p標籤然後調用ErrorTip

    ...
        <NotFound>
            <LayoutView Layout="@typeof(MainLayout)">
                <ErrorTip />
            </LayoutView>
        </NotFound>
    ...
    

    再看一下打開了不存在路由的頁面的錯誤提示吧。

    哈哈哈,是不是好看許多,接下來會完成主題切換,菜單展開關閉等等功能,其實這些可以用JavaScript很方便的實現,但是既然用了 Blazor 開發,所以還是用 .NET 代碼實現吧。

    本篇就先到這裏,未完待續…

    開源地址:https://github.com/Meowv/Blog/tree/blog_tutorial

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

    【其他文章推薦】

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

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

    ※超省錢租車方案

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

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

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

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

  • 別再重複造輪子了,幾個值得應用到項目中的 Java 開源庫送給你

    別再重複造輪子了,幾個值得應用到項目中的 Java 開源庫送給你

    我是風箏,公眾號「古時的風箏」。文章會收錄在 JavaNewBee 中,更有 Java 後端知識圖譜,從小白到大牛要走的路都在裏面。公眾號回復『666』獲取高清大圖。

    風箏我作為一個野路子開發者,直到遇見下面的這幾個工具庫,才知道之前重複造了不少輪子,而且輪子還不一定有人家的圓。相信跟我一樣,沒事兒造輪子的人還不在少數,有些人就是對造輪子感興趣,這個咱也無話可說,但是,比如我,我是造輪子之前不知道這世上已經有好用的輪子了,害,無知限制了我的想象力。

    比如我們在拿到一個 List 集合之後,要對這個集合進行判空操作,以前我一直是這樣寫的:

    List<String> list = getList();
    if (list != null && list.size() > 0) {
        //do something
    }
    

    雖然這樣也沒什麼問題,但是,我懶啊,每次敲這麼多代碼,也挺累啊。有同學說,那你包裝成一個方法不就行了,每次調用個方法就 OK 啦。這不,同學,你就在造輪子了,已經有人幫你寫好了這樣類似的一系列方法了。

    來讓我們認識認識這些輪子吧。

    Java 8 Stream

    Stream 不算是工具庫,但是通過 stream 提供的一系列方法,可以實現集合的過濾、分組、集合轉換等諸多操作。

    例如下面的方法,實現列表元素根據某個字段去重的功能。

    List<User> userList = new ArrayList();
    //添加元素
    userList =  userList.stream().filter(distinctByKey(user->user.getUserId())).collect(Collectors.toList());
    
    private static <T> Predicate<T> distinctByKey(Function<? super T, ?> keyExtractor) {
          Map<Object,Boolean> seen = new ConcurrentHashMap<>();
          return t -> seen.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null;
    }
    

    apache commons

    官方地址:http://commons.apache.org/

    這不是一個庫,而是一系列的工具庫。

    由於包含的庫過多,我就不一一列舉了,可以到官網一探。有集合處理的、數學計算的、IO 操作的等等,其中最常用的莫過於 Apache Commons Lang 和 Apache Commons Collections 這兩個。

    Apache Commons Lang 包括一系列工具類,有字符串相關的、時間處理的、反射的、併發包的等等,Apache Commons Collections 專門用作集合處理。

    下面舉幾個例子說明一下,更詳細的內容可以到官網查看文檔。

    字符串判空操作

    String s = "";
    Boolean isEmpty = StringUtils.isEmpty(s);
    

    獲取類的全名稱

    ClassUtils.getName(ClassUtils.class);
    

    判斷集合是否為空

    Boolean isNotEmpty = CollectionUtils.isNotEmpty(list);
    

    反射獲取某個類的所有 Field

    Field[] fields = FieldUtils.getAllFields(User.class);
    

    Google Guava

    官方地址:https://github.com/google/guava

    和 Apache Commons 有點兒類似,它也是包含了一系列的比如字符串、集合、反射、數學計算等的操作封裝,還可以用作 JVM 緩存。

    舉幾個例子說明:

    New 各種對象

    List<String> list = Lists.newArrayList();
    Set<String> set = Sets.newHashSet();
    Map<String,Object> map = Maps.newConcurrentMap();
    
    // 不可變集合
    ImmutableList<String> immutableList = ImmutableList.of("1", "2", "3");
    

    列錶轉符號分隔的字符串

    List<String> list = new ArrayList<String>();
    list.add("1");
    list.add("2");
    list.add("3");
    String result = Joiner.on("-").join(list);
    
    > 1-2-3
    

    求交集、並集、差集等

    例如下面代碼求 set1 和 set2 的交集

    Set<Integer> set1 = Sets.newHashSet(1, 2, 3, 4, 5, 6);
    Set<Integer> set2 = Sets.newHashSet(1,2,3,4);
           
    Sets.SetView<Integer> intersection = Sets.intersection(set1, set2);
    

    Joda Time

    官方地址:https://www.joda.org/joda-time/

    一個日期、時間處理的工具庫。如果你不是經常做日期處理,那差不多每次需要的時候都需要查詢相關的 API,而有了工具類就不一樣了,只要一個 “.”,你想要的方法就出現了,而 Joda Time 就是一款好用的工具庫。

    比如下面這個方法,計算到新年還有多少天。

    public Days daysToNewYear(LocalDate fromDate) {
      LocalDate newYear = fromDate.plusYears(1).withDayOfYear(1);
      return Days.daysBetween(fromDate, newYear);
    }
    

    OkHttp3

    官方地址:https://square.github.io/okhttp/

    一個 HTTP 客戶端,使用簡單,性能良好,是時候放棄 HttpClient 了。

    一個 get 請求:

    OkHttpClient client = new OkHttpClient();
    
    String run(String url) throws IOException {
      Request request = new Request.Builder()
          .url(url)
          .build();
    
      try (Response response = client.newCall(request).execute()) {
        return response.body().string();
      }
    }
    

    一個 post 請求:

    public static final MediaType JSON
        = MediaType.get("application/json; charset=utf-8");
    
    OkHttpClient client = new OkHttpClient();
    
    String post(String url, String json) throws IOException {
      RequestBody body = RequestBody.create(json, JSON);
      Request request = new Request.Builder()
          .url(url)
          .post(body)
          .build();
      try (Response response = client.newCall(request).execute()) {
        return response.body().string();
      }
    }
    

    Json 系列

    Jackson

    Spring 默認的 Json 序列化工具,其實已經足夠用了。

    Gson

    Google 出品,功能齊全。

    FastJson

    阿里出品,算法良好,性能最優。

    EasyExcel

    官方地址:https://www.yuque.com/easyexcel/doc/easyexcel

    阿里開源的 Excel 操作工具庫,可以看做是 Apache POI 的增強封裝版、優化版。

    如果你的數據量很大,那用 EasyExcel 可以節省內存,提升效率,並且沒有併發風險。

    如果你的 Excel 足夠複雜,那用 EasyExcel 會比你直接用 POI 少些很多代碼。

    比如我實現了下面這個 Excel 動態導出,包括動態表頭、動態合併單元格的功能,只用了很少的代碼,如果是使用 POI 的話,那可能代碼量增加不止一倍啊。

    TinyPinyin

    官方地址:https://github.com/promeG/TinyPinyin

    中文轉拼音,把你輸入的中文轉換成拼音。比如搜索功能要實現這樣的功能,輸入 “fengzheng” 搜索,會匹配到 “風箏”這個詞語,這就需要中文轉拼音了。

    有的同學說了,這不是拼音轉英文嗎?當然不是在輸入“fengzheng”的時候轉換了,而是在包含“風箏”的這條記錄中有一個拼音的額外字段,這樣搜索的時候直接匹配拼音那個字段。

    chinese_name pinyin_name
    風箏 fengzheng

    反射工具庫 – jOOR

    官方地址:https://github.com/jOOQ/jOOR

    它是 JDK 反射包的友好封裝,通過一系列簡單友好的鏈式操作實現反射調用。比如下面這個例子

    public interface StringProxy {
      String substring(int beginIndex);
    }
    
    String substring = on("java.lang.String")
                        .create("Hello World")
                        .as(StringProxy.class)
                        .substring(6);    
    

    簡單的代碼實現 JDK 動態代理,節省了不少代碼。

    MyBatis-Plus

    官方地址:https://mp.baomidou.com/

    只要你的項目中有數據庫訪問,那你肯定用過或者至少聽說過 MyBatis ,但是如果你只用 MyBatis 需要針對每個DAO方法寫對應的 SQL Statement(也就是 mapper.xml 中的代碼塊),當然有一些自動生成的工具,MyBatis 就有它提供的 MyBatis Generator,比如我也稍做加工,做過一個web 版的 MyBatis Generator,開發效率是提高了,但是每個 mapper.xml 文件的代碼量很大,於是 MyBatis-Plus 就要出場了。

    官網上對他的定義如下:

    1. 只做增強不做改變,引入它不會對現有工程產生影響,如絲般順滑。
    2. 只需簡單配置,即可快速進行 CRUD 操作,從而節省大量時間。
    3. 熱加載、代碼生成、分頁、性能分析等功能一應俱全。

    最後,在配上 MybatisX IDEA 插件,也是可以了。

    vjtools

    官方地址:https://github.com/vipshop/vjtools

    這是唯品會的開源工具包,這裏主要介紹其中的 vjkit 模塊,是關於文本,集合,併發等基礎功能的核心類庫。這個庫是我很早之前搜索日期操作的時候偶然發現的,我發現裏面日期處理的 API 相當全面而且很實用,還在我的項目中用過一段時間。

    最後

    好用的工具庫可以提高我們的開發效率,而且也是我們學習源碼的好去處,和其他的開源框架(比如 Spring、Dubbo)一樣,看看優秀的代碼是如何實現的。

    如果你還知道什麼好用、強大的開源工具包,歡迎在留言區分享,好東西不能獨享,讓更多的人受益。

    各位大佬,給個推薦,讓我奮發圖強

    我是風箏,公眾號「古時的風箏」。一個兼具深度與廣度的程序員鼓勵師,一個本打算寫詩卻寫起了代碼的田園碼農!你可選擇現在就關注我,或者看看歷史文章再關注也不遲。

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

    【其他文章推薦】

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

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

    ※回頭車貨運收費標準

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

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

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

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