豐田7款新能源車型亮相廣州車展

近日,將在豐田廣州車展的5.1館的約1500平米的展臺上共展出概念車以及國產、進口車型共計46輛,其中豐田的混合動力車型將成為本次車展上的重點,同台亮相的有12款為混合動力車型(HEV)、外插充電式混合動力車型(PHEV)以及型(EV),與此同時還包括了1款預計2013年進入中國市場的亞洲首發車和中國首發的新款雷克薩斯LS600hL混動加長版車型。

雲動雙擎

●混合動力概念車

“雲動雙擎”概念車作為豐田“雲動計畫”中所包涵的開發國產混合動力總成這一重要內容的國產混合動力的象徵而誕生,量產車將於2015年左右推出。長軸距延展出的流暢曲線,造就了獨具魅力的整體造型,更突顯了高級的質感。搭載豐田最先進,也是世界最高水準的混合動力系統,同時集高水準的行駛性能以及超凡品質於一身,既實現了“環保駕駛”,又打造了無限的駕乘樂趣。

TOYOTA DEAR“親”

●小型概念車

豐田的全新小型概念車—TOYOTA Dear ~親~,讓小型車也能迸發激情。TOYOTA Dear ~親~是為了贏得更多中國用戶而設計研發的小型概念車。這款概念車計畫在2013年投放中國市場,使豐田在中國的全線車型更加充實,“TOYOTA Dear ~親~”也將成為豐田推進全球戰略的核心車型。考究的外形,大膽而又動感的線條,加以寬敞的車內空間,完全打破了對小型車的傳統印象。車內配備的光感測器等先進技術更增添了行車的樂趣,讓人們對豐田的小型車充滿期待。

PRIUS PLUG-IN HYBRID Concept

●外插充電式混合動力概念車

PRIUS PLUG-IN HYBRID Concept是以鋰離子電池作為驅動電池,以第3代PRIUS普銳斯為原型,可使用家用電源進行外部充電的外插充電式混合動力車。

該車可以選擇純電動模式或混合動力模式行駛,能夠更加充分地使用電能而且不受電池剩餘量和充電設施完善情況的限制,通過減少不可再生資源消耗和二氧化碳排放來防止大氣污染。它的目標是每公升汽油可行駛55公里以上*(二氧化碳排放量42g/km以下),並在充滿電的情況下作為純電動車的行駛距離為20km以上。充電時,該車在100V電源下約180分鐘,200V電源下約100分鐘即可充滿。

2012年,豐田與中國汽車技術研究中心共同在天津開展的實證行駛實驗圓滿結束,預計2012年內提前試銷。

NS4

●外插充電式混合動力概念車

豐田最新一代外插充電式混合動力概念車,兼備高燃油經濟性以及澎湃動力,採用先進的安全技術和“人、車與社會緊密相連”技術,全面展示了豐田在安全與新能源領域的技術成果。

前臉設計獨特,展示淩厲中的魅惑風情,低重心造型凸顯感性魅力,達到令人驚豔的設計效果。配備革新性的HMI(Human Machine Interface,人機交互系統及雙顯示幕),實現輕鬆操控。

配備新一代PCS預碰撞安全系統和行人防撞預警系統等先進技術,大幅提高行車安全性;配有3台後攝像頭,確保後方視野開闊,減少視線移動。

FT-EV III

●電動概念車

豐田FT-EV系列的第三代概念車,適於短途行駛的“超小型輕量設計”電動概念車。

電動車將有望替代化石燃料的電能作為動力源,在行駛中不會排出二氧化碳,未來會成為非常重要的環保汽車。動力系統配備鋰電池,預計一次充電可以行駛105公里,非常適合短途行駛。

車身長度雖然只有3.1米,寬也不到1.7米,卻實現了可供4人乘坐的寬敞空間。

RAV4 EV

●電動概念車

1998年,中國國家科學技術部在廣東省汕頭市南澳島實施電動車行駛實驗,豐田為其提供了RAV4 EV作為行駛實驗車,該車搭載的鎳氫電池可實現達200km的續航距離。

豐田早在40年前就開始潛心研發能夠普及的新能源技術,混合動力技術是目前全球最成熟最先進的環保技術。2012年1月~10月混合動力車全球累計銷量為102.8萬輛,年度銷量首次突破100萬輛大關,今年在豐田銷售的車輛中,混合動力車已經占到其全球銷量的14%。與此同時,豐田混合動力車自1997年上市以來,實現全球累計銷量達到460.3萬輛。截至2012年10月末,在全球範圍內混合動力車與車輛尺寸、及動力性能相同的汽油車相比,累計節約石油約110億升,同時減少約3000萬噸二氧化碳的排放。

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

【其他文章推薦】

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

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

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

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

新北清潔公司,居家、辦公、裝潢細清專業服務

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

上汽榮威550插電式混動車將於2012年年底投放

繼中國首款量產榮威E50之後,榮威品牌的另一款新能源車榮威550插電式混合動力車將於2012年年底投放。

榮威550插電式混合動力車基於榮威550而開發,外觀上與榮威550沒有區別。據透露,榮威550插電式混合動力車搭載的是一款1.5VCT發動機,電池方面採用的則是磷酸鐵鋰電池。

榮威550插電式混合動力車最早亮相於今年的北京車展。此前,上汽乘用車相關負責人透露,這款節油率超過50%,百公里油耗不到3升的插電式混合動力車將在今年年底上市。

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理
【其他文章推薦】

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

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

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

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

※幫你省時又省力,新北清潔一流服務好口碑

※回頭車貨運收費標準

豐田新一代蓄電池技術能讓電動汽車行駛距離翻番

豐田開發出了新一代蓄電池的基礎技術,利用這種電池可以將的連續行駛距離延長至目前2倍以上。新開發的是作為電池主要部分的電極材料,使用的是海水中含量豐富的鈉,與目前主流的鋰離子電池相比價格更低。豐田為在2020年前後投入實際應用,正加快推進研究。

此次開發的是,利用鈉離子來傳輸電子的“鈉離子電池”的正極材料。這種材料是由多種磷氧化物和鎳等金屬、鈉構成的化合物。

在試製硬幣大小的電池時發現,在室溫狀態下其電壓值比鋰離子電池高3成左右。電壓值是衡量電動汽車連續行駛距離的重要指標。雖然仍需進一步分析,但豐田表示“連續行駛距離將大幅延長,500~1000公里的目標已經進入視野”。

從每次加油和充電的行駛距離來看,混合動力車最大約為1000公里。豐田認為,電動汽車要全面走向普及,行駛距離必須達到500~1000公里,但利用目前的汽車電池僅能達到200公里左右。有分析認為,如果使用鋰離子電池,300公里將是極限。

新一代蓄電池的開發已是當務之急,豐田正在開發“全固體電池”和“空氣電池”等。雖然有分析認為鈉離子電池在理論上難以超越鋰離子電池的性能,但借助此次的成果,鈉離子電池已經成為有力候選對象之一。

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

【其他文章推薦】

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

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

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

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

新北清潔公司,居家、辦公、裝潢細清專業服務

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

三菱計畫在美國市場推出Mirage電動車、新歐藍德

隨著日本鈴木在美國市場漸漸沒落的消息傳開,作為本土的汽車品牌對各自品牌在北美市場的前景不免捏一把汗,針對這一嚴峻形勢,日本三菱先發制人,對外透露了其未來今年的整改計畫的細節內容,三菱計畫在美國市場的銷量提升45%,也就是說銷量目標增加8萬輛,而截至明年三月底其銷量目標定在5.5萬輛。

三菱未來的計畫包括在美國市場推出兩款新車型,全新打造的歐藍德跨界車將在2013年7月上市,而三菱Mirage小車2013年9月美國上市,據相關報導,Mirage小車將可能於2013年年底引入中國。隨後,三菱還將推出歐藍德跨界插電式混動車,其將在2014年一月美國上市,其燃油消耗極低,百公里燃油消耗僅2.0升。對於以上幾款新車的推出是否能提升其在美國市場的銷量暫時還不得而知,但是如果三菱不想步鈴木的後路,那麼推出新車計畫還是有必要的。

2013款三菱Mirage

三菱CEO Osamu Masuko確認了三菱將推出Mirage的計畫,但是這款電動車將不太可能在美國市場銷售,因為三菱i-MiEVs 10月在美國市場的銷量僅469輛,這與之前一年銷量達兩萬輛是無可比擬的。

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

【其他文章推薦】

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

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

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

※幫你省時又省力,新北清潔一流服務好口碑

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

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

福特在美國大幅增加混動車銷售認證經銷商

福特C-MAX Energi插電式將於2013年初開始交貨上市,福特汽車公司將對美國的經銷商加以強化,不但要有足夠的混動系統配套設備,還要通過認證才能銷售福特旗下的混動車型。

目前通過福特認證的經銷商在美國約有100多家,福特期望在未來能提升3倍以上的總銷售量。在此計畫中,該公司要求美國50個州中共計900家經銷商,通過混合動力車型及純電動車型的認證作業。目前,已經有200多家的經銷商同意跟進,預計未來會達到350家專業混合動力汽車銷售認證的規模。

這項計畫旨在迅速提升福特旗下混合動力車型的銷售速度,面對2013年初即將開始銷售的Fusion Hybrid、Fusion Energi、C-MAX Energi和純電動福克斯(Focus),節能車型如何迅速銷售到美國各地是福特公司的首要考慮。因此,經銷商的硬體和軟體設施都需要跟上福特的腳步,以具備專業素質的銷售人員和完善的設備來顯著提升銷售業績。

在該項計畫中,福特汽車公司要求通過認證的經銷商至少安裝兩個充電樁,應對Energi及福克斯純電動版的充電需求;銷售人員能為客戶說明技術問題並熟悉安裝流程,還要參加80%以上的電動汽車技術課程與銷售顧問專業訓練。福特汽車展廳的銷售經理、服務經理及服務顧問等員工也必須擁有純電動車的培訓認證。  

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

【其他文章推薦】

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

新北清潔公司,居家、辦公、裝潢細清專業服務

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

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

※超省錢租車方案

FB行銷專家,教你從零開始的技巧

日產CEO戈恩稱放棄2012年電動汽車銷量目標

日產公司CEO 卡洛斯.戈恩最終表示他們的Leaf(聆風)無法達到2012年預期的銷售目標,這也預示著整個電動汽車行業的艱難。

儘管數月來日產的汽車銷量都不盡人意,但日產公司還是堅定地拒絕承認他們無法在2012年實現成倍增長,完成20000輛的目標。而日產在2011年的銷量也只是10000輛。

10月,Leaf的銷量也達到了本年度最高點,共銷售1579輛,與去年相比同比增長86%。今年,日產旗下的Leaf共銷售6791輛,同比下降15.6%。2011年日產共銷售純電動汽車Leaf 9679輛。

四月,日產的一位高管口誤稱日產不太可能在2012年實現純電動汽車Leaf的成倍增長。

戈恩以前就預計到2020年全球銷售的汽車中電動汽車將占10%。

2010年11月,戈恩在華盛頓向記者透露,到2013年底他們將會銷售500000輛電動汽車。在上個月雷諾-日產聯盟許諾:到2016年售出150萬輛電動汽車。

戈恩比其他任何車企高管都看好電動汽車。3月,他在紐約國際車展上表示:“公司在2012年將會實現Leaf的成倍增長,達到20000輛。我們一點也不擔心,我相信我們能圓滿完成這個目標。”

公司的很多高管內部花了數月來討論如何正式放棄這個銷售目標,儘管戈恩已在四月官方表示他們能實現在這目標。

就在最近的10月,日產的產品規劃執行副總裁帕爾默表示他們不會放棄實現電動汽車成倍增長的目標,但是銷量還是無法達到預期。

帕爾默稱公司還是出現了些失誤,比如如何將Leaf投入市場,任命新副總來監察Leaf的全球銷量。近年來,日產和其合作夥伴法國汽車製造商雷諾已投入56億美元在電動汽車方面。

一些在亞利桑那的車主表示十分擔憂,他們擔心Leaf難耐高溫。

日產向美國能源部貸款14億美元,以建立電池廠,改善Leaf在士麥那和田納西州的工廠。週五,日產已邀請很多媒體出席電池廠的盛大開幕式,但卻又突然取消了這個開幕式。

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

【其他文章推薦】

新北清潔公司,居家、辦公、裝潢細清專業服務

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

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

※超省錢租車方案

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

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

代碼和設計是如何一步步腐化的

經歷了幾個從商業角度來看或成功或失敗的項目,都會發現代碼、設計都會慢慢地、在不經意間腐化。而且有一個項目開始的時候,架構是經過精心設計的,也有較為嚴格的代碼規範,並且通過靜態代碼檢查來盡量保證代碼的質量,連code review都有一個可供參考的checklist。但半年一年之後,還是會發現,很多代碼都已經臃腫走樣,到處都是複製粘貼,動輒好幾千行代碼的模塊,能 work、但不 right的代碼。

getting it work is easy
getting it right is hard

不禁想問問代碼和設計是如何一步步腐化的?

本文地址:https://www.cnblogs.com/xybaby/p/13173047.html

代碼如何開始腐爛

其實大家都聽說過 clean code,但不一定真正意識到其重要性,且知道並不等同於做到,而時間更是一把殺豬刀,讓程序員禿了,讓代碼爛了。

一個新項目開始的時候,大家都是滿懷壯志,期待靈活可復用的架構,期待成功的產品。與此同時,敏捷開發告訴我們不要過度設計,當然,本身也是很難預料到以後需求變化的方向,於是應該等到第一次變化的時候才去考慮如何重構以應對這一類型的變化。但問題很可能就會出現在這裏。

也就是說,也許哪一天,當我們需要加一個新功能的時候,會發現原來的設計和代碼不是很方便增加這個新功能。當然,我們不應該過多苛責之前的設計,因為以前沒有預料到這個新功能,也就沒有在這個地方引入抽象。這個時候有兩種解決辦法:第一種是重構術,就是加功能之前先了解、重構已有的代碼,比如調整一下類的基礎體系、抽象出基類、或者引入一個間接層以隔離變化。另一種則是修補術,在現有的函數中加一個 if-else(或者 switch case)、在現有的類中加幾個特殊字段。這兩種方法都能解決問題,修補術治標,重構術治本,但顯然,治標來得更快,治本對程序員的要求更高。

什麼時候程序員會選擇修補術而不是重構術呢?

也許這個程序員看過 clean code、refactor,精通設計模式和面向對象,也非常希望維護一份漂亮的代碼。但我們知道,重構是需要時間的,而且還可能引入bug。也許重構耗費的時間就超過了用修補術 workaround 的時間,就短期來說,修補術的性價比是更高的。那麼長遠來說呢,也許重構術的性價比更高?可是只顧眼前、及時行樂是人的本能,走捷徑、偷懶是無時不存在的誘惑。當然,也許有追求的程序員會抵制這種誘惑,但是社會心理學告訴我們,在壓力、干擾面前我們很難理智思考,自控力也會失效。時間、進度壓力就是垂懸在程序員頭上的達摩克利斯之劍,這壓力可能讓人失眠、讓人頭禿,寫點垃圾代碼似乎也無可厚非。

況且,重構還可能引入bug,重構的前提是要有完備的測試機制,單元測試、功能測試、集成測試一個都不能少。可是,理想很豐滿,現實很骨感,單元測試覆蓋率往往不足,而且還可能依靠手動回歸測試。把代碼重構好了可能壓根沒人知道,沒人來感謝你、給你點個贊,但萬一重構出了bug呢,大家都會收到事故報告,說不定還會影響KPI?不求有功但求無過,Leader、經理是否認可重構的價值,也很大程度影響組員對於重構的积極性。

當然,增加新功能的也許是一個新手,新手加入團隊后,一般就是從維護某個模塊,實現一些小需求入手。新手有可能水平本身就不行,而且業務邏輯和代碼都是陌生的,如果缺乏完善的文檔以及足夠的掌握,新手是萬萬不敢重構的,修補術是最自然的選擇,複製、粘貼、稍微修改一下、build、run,成功啦!又實現了一個需求!你知道,新人是急於證明自己的,快速的實現一個又一個需求是證明自己的最佳辦法。

你有可能說,新人不是應該有個導師嗎,導師得review新人的代碼啊。首先,導師得懂這一塊業務;其次,導師得願意花時間指導新人。指導新人是否影響導師的KPI呢?帶好了是否有獎,出問題了是否有懲?如果全憑導師自律,這個不確定性就太大了。

上面提到的是新人,其實老手也可能寫出“德不配位”的代碼,比如一個需求,可能涉及到多個模塊,有的模塊是這個老手負責的,有的則不是。理想的情況下,各個模塊提供好接口供老手調用即可,但某個模塊的負責人很忙,沒有時間,這個時候老手就會直接去修改相應模塊。可是,可能由於老手特有的自尊、或者面子,老手往往不願意去請教對應模塊的負責人,而是按照自己的經驗魔改出一段可以工作,但既不優雅、也不高效的代碼。

代碼如何加速腐爛

所以說,由於進度壓力、經驗、態度等各種各樣的原因,代碼中慢慢就會開始出現腐朽的問題。可怕的是,垃圾的代碼給出了錯誤的示範,這種示範對於新手或者對於這個模塊不熟悉的同事來說都很強烈,也使得垃圾的代碼、倍增的維護成本、潛在的bug被到處複製,美其名曰“借鑒”。破窗效應,讓後來人寫出垃圾代碼的時候毫無心理負擔,“以前就是這個樣子的”,以前這裡有個變量叫temp,我只是加了個變量叫temp1;以前這裏就有switch case,我只不過加了一個case;以前的代碼就很難讀懂了,於是我copy的一份實現自己的邏輯。

況且,到項目後期,可能不再那麼掙錢了,可能最初寫代碼、制定規範的人已經不再了,誰還會來關心這代碼質量呢?

悲觀的認為,代碼的腐化是必要,只是時間快慢問題。

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

【其他文章推薦】

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

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

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

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

新北清潔公司,居家、辦公、裝潢細清專業服務

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

一個非侵入的Go事務管理庫——如何使用

在文章”清晰架構(Clean Architecture)的Go微服務: 事物管理”中,我談到了如何在清晰架構中實現非侵入的事務管理。

它允許你把事務代碼與業務邏輯代碼分開,並且讓你在編寫業務邏輯時不必考慮事務。但它也有一些缺點。首先,它是整個清晰框架(Clean Architecture)的一部分,所以你不能拋開框架單獨使用它。其次,儘管它對業務邏輯沒有侵入,但它對框架有侵入。你需要修改框架的各個層,使其工作,這使他看起來比較複雜。 第三,正如我在文章中提到的,它存在一個依賴泄漏的漏洞。我雖然在文章中指出了解決方案,但它是一個比較大的改動,因此我當時就把它先放下了。現在,我終於有時間重新拾起它,並做了重要改進,結果令人非常滿意。

項目需求

以下是新的項目需求:

  1. 把事務管理代碼寫成一個單獨的第三方庫,這樣人們就可以在任何框架中使用它。
  2. 使其對框架無侵入,這意味着除了在用例層之外,在清晰架構的任何層中都沒有事務代碼。幾乎所有的事務代碼都在第三方的事務庫中。
  3. 修復以前設計中的依賴泄漏。

最終,我完成了所有的目標,結果出乎意料的好。我將寫兩篇文章來描述它,這篇文章討論如何使用這個第三方庫,下一篇文章討論事務管理庫的工作原理。當你要在應用程序里使用事務管理庫時,你的程序分成了兩部分。一部分是第三方庫的程序,另一部分是應用程序的代碼(它需要調用事務管理庫中的函數)。本文只講應用程序代碼。

如何在項目中使用事務管理庫

要想讓業務函數支持事務,需要做兩件事。首先,創建數據庫鏈接;其次,使用創建的數據庫鏈接運行SQL語句。我假設你在項目中使用了清晰架構。在這種情況下,“創建數據庫鏈接”會在應用程序容器((詳情參見”清晰架構(Clean Architecture)的Go微服務: 程序容器(Application Container)” )中完成,“運行SQL語句”會在業務邏輯(數據持久層)中完成。如果沒有使用清晰架構,你可能會使用某種非常類似的分層架構,結構還是一樣。如果你沒有使用任何框架或分層架構,那麼這兩種代碼可能會在一個地方。

你可能想知道它與沒有事務支持的代碼有什麼不同?幾乎沒有。不管有沒有事務支持,應用程序都要編寫相同的代碼,事務管理庫會在後端處理所有事情。

本文中的所有代碼都在”jfeng45/servicetmpl1″中,這是一個能自我進化的微服務框架,它提供了如何使用事務庫的例子。

創建數據庫鏈接

創建數據庫鏈接有兩種不同的方法,使用哪種方法取決於是否需要緩存數據庫鏈接。

獲取數據庫鏈接

下面是創建數據庫鏈接的代碼。它在”sqlFactory.go”文件中。因為清晰架構使用了工廠方法模式(factory method pattern),這裏的代碼是它的一部分。如果你不想使用工廠方法模式,也是一點問題都沒有的。因為數據庫鏈接在架構中是要被緩存的,所以框架代碼需要調用事務庫中的函數“BuildSqlDB()”,它首先檢查數據庫鏈接是否已經存在。如果沒有,則調用“factory.BuildSqlDB(&tdbc)”來創建一個。在此之前,它獲取需要的參數並將它們保存在“DatabaseConfig”中,“DatabaseConfig”也是在事務庫中定義的。之後它調用內部函數“buildGdbc()”生成合適的“gdbc.SqlGdbc”接口(要根據你是否需要事務)。最後,檢查如果數據庫鏈接不在緩存中,則把它放入緩存。

// implement Build method for SQL database
func (sf *sqlFactory) Build(c container.Container, dsc *config.DataStoreConfig) (DataStoreInterface, error) {
	logger.Log.Debug("sqlFactory")
	key := dsc.Code
	//if it is already in container, return
	if value, found := c.Get(key); found {
		logger.Log.Debug("found db in container for key:", key)
		sdb := value.(*sql.DB)
		return buildGdbc(sdb, dsc.Tx)
	}
	tdbc :=databaseConfig.DatabaseConfig{dsc.DriverName, dsc.UrlAddress, dsc.Tx}
	db, err := factory.BuildSqlDB(&tdbc)
	if err != nil {
		return nil, err
	}
	gdbc, err := buildGdbc(db, dsc.Tx)
	if err != nil {
		return nil, err
	}
	c.Put(key, gdbc)
	return gdbc, nil

}

下面是創建“SqlGdbc”接口的內部函數。”SqlGdbc”接口有兩種實現,一種是”SqlConnTx”,它支持事務。另一個是“SqlDBTx”,它不支持事務。

func buildGdbc(sdb *sql.DB,tx bool) (gdbc.SqlGdbc, error){
	var sdt gdbc.SqlGdbc
	if tx {
		tx, err := sdb.Begin()
		if err != nil {
			return nil, err
		}
		sdt = &gdbc.SqlConnTx{DB: tx}
		logger.Log.Debug("buildGdbc(), create TX:")
	} else {
		sdt = &gdbc.SqlDBTx{sdb}
		logger.Log.Debug("buildGdbc(), create DB:")
	}
	return sdt, nil
}

有一種更簡單的方法可以直接從事務庫中獲得”SqlGdbc”,函數是”factory.Build()”。但是當使用它時,你不能緩存數據庫鏈接,所以我沒有在框架中使用它。但是如果你不需要緩存數據庫鏈接,調用“factory.Build()”是一個更好的方法。

數據庫配置參數

數據庫配置參數是在第三方事務庫中定義的,但數據本身是保存在業務項目中。應用程序首先需要組裝參數並將它們傳遞給事務庫,以便得到合適的數據庫鏈接。在我們的框架中,包括數據庫參數在內的所有應用程序配置數據都保存在一個文件中。框架代碼將負責從文件中獲取數據。你如果不想將參數保存在文件中,直接將參數寫成程序中的硬編碼傳遞給事務庫更容易。

下面是配置文件“appConfigDev.yaml”中的部分代碼。對於數據庫來說,關鍵是如何讓事務庫知道需要的是事務鏈接還是非事務鏈接。它有多種辦法可以完成。例如,你可以為每個函數設置一個事務標誌,但這需要改動大量的代碼。我發現最簡單的方法是將所有支持事務的函數放在一個特殊的用例(Use Case)中。在下面的示例中,有三個用例:“registration”、“listUser”和“registrationTx”,其中只有“registrationTx”是支持事務的,因為它使用“*sqlConfigTx”作為“dataStoreConfig”。

useCaseConfig:
    registration:
        code: registration
        userDataConfig: &userDataConfig
            code: userData
            dataStoreConfig: *sqlConfig
    listUser:
        code: listUser
        userDataConfig: *userDataConfig
        cacheDataConfig: &cacheDataConfig
            code: cacheData
            dataStoreConfig: *cacheGrpcConfig
    registrationTx:
        code: registrationTx
        userDataConfig: &userDataConfigTx
            code: userData
            dataStoreConfig: *sqlConfigTx

下面是來自同一配置文件的部分代碼。可以看到,在“sqlConfigTx”中,有一個參數“tx:ture”,它表明它是支持事務的。

sqlConfig: &sqlConfig
    code: sqldb
    driverName: mysql
    urlAddress: "root:@tcp(localhost:4333)/service_config?charset=utf8"
    dbName:
    tx:  false
sqlConfigTx: &sqlConfigTx
    code: sqldb
    driverName: mysql
    urlAddress: "root:@tcp(localhost:4333)/service_config?charset=utf8"
    dbName:
    tx: true

在業務邏輯中訪問數據庫

我們用一個業務函數做例子,來展示支持事務和不支持事務的兩種不同實現方式,這樣你就能看到他們的區別。

不支持事務的代碼

下面是“ModifyAndUnregister(user *model.User)”的非事務函數, 它在“registration.go”文件中。它是對業務函數“ModifyAndUnregister(ruc.UserDataInterface, user)”的一個簡單封裝,這個業務函數是被事務和非事務代碼共享的。

// The use case of ModifyAndUnregister without transaction
func (ruc *RegistrationUseCase) ModifyAndUnregister(user *model.User) error {
	return ModifyAndUnregister(ruc.UserDataInterface, user)
}

下面是共享的業務函數”ModifyAndUnregister(ruc.UserDataInterface, user)”的代碼,所有的業務邏輯都在這個函數里。

func ModifyAndUnregister(udi dataservice.UserDataInterface, user *model.User) error {
	//loggera.Log.Debug("ModifyAndUnregister")
	err := modifyUser(udi, user)
	if err != nil {
		return errors.Wrap(err, "")
	}
	err = unregisterUser(udi, user.Name)
	if err != nil {
		return errors.Wrap(err, "")
	}
	return nil
}
支持事務的代碼

下面是相同的業務函數,但支持事務的代碼。它在“registrationTx.go”文件中。你要做全部工作就是在“EnableTx()”中調用業務函數。

// The use case of ModifyAndUnregister with transaction
func (rtuc *RegistrationTxUseCase) ModifyAndUnregisterWithTx(user *model.User) error {

	udi := rtuc.UserDataInterface
	return udi.EnableTx(func() error {
		// wrap the business function inside the TxEnd function
		return ModifyAndUnregister(udi, user)
	})
}

下面是函數“EnableTx()”的實現代碼(它在文件“userDataSql.go”中)。 這個代碼是在持久層中。它的實現非常簡單,只需調用事務庫中的函數“TxEnd()”。

func (uds *UserDataSql) EnableTx(txFunc func() error) error {
	return uds.DB.TxEnd(txFunc)
}

以上就是為業務函數添加事務支持所需要做的全部工作,其餘代碼均在事務庫中。

如果你想了解更多關於事務庫本身的信息,請閱讀“一個非侵入的Go事務管理庫——工作原理”,

結論:

我對去年寫的事務管理代碼進行了升級,使其成為一個非侵入式的輕量級事務管理庫。當你使用它時,只需要在應用程序中額外增加兩三行代碼就能搞定,所有其他代碼都放在了事務管理庫。它很好地將業務代碼與數據庫事務代碼隔離開來,這樣你的業務代碼里就只有純粹的業務邏輯。它是一個庫而不是框架,所以不論你使用任何框架都可以使用它。

源代碼:

完整的源碼: “jfeng45/servicetmpl1”

索引:

1 “清晰架構(Clean Architecture)的Go微服務: 事物管理”

2 “清晰架構(Clean Architecture)的Go微服務: 程序容器(Application Container)”

3 “一個非侵入的Go事務管理庫——工作原理”

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理
【其他文章推薦】

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

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

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

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

※幫你省時又省力,新北清潔一流服務好口碑

※回頭車貨運收費標準

C/C++語言的學習方向

這個世界上有太多的坑,如果我們不具備查閱資料的能力和對現實世界的思考能力,入坑是大概率的事情。

C/C++語言能做什麼?C/C++程序員在做什麼?企業需要什麼樣的C/C++程序員?對初學者來說,要搞清楚這些問題並不容易。

一個农民種菜之前,會考慮菜的行情(包括銷量和價錢),如果您打算學習C/C++語言,也應該先了解C/C++程序員的行情。

了解菜的行情要去菜市場,了解C/C++程序員的行情去人才市場,中國最大的IT人才市是前程無憂。

我們先來查一些資料。

一、中國編程語言的排名情況

登錄前程無憂的官網,分別輸入java、C++、python、javascript、.net、C#、PHP、SQL、IOS關鍵字,城市選擇北京、上海、廣州和深圳,查詢到的招聘職位分別是31032、22842、19274、14091、6956、8018、5284、21302、6014個。(這是2020年6月查到的數據,不同時期的查詢結果略有不同)

數據显示企業的JAVA和C++職位比例約6:4,培訓機構的主流課程是JAVA和Python等,進一步導致了C/C++程序員的缺乏。

培訓機構不願意開設C/C++課程,C/C++語言的教學對老師的能力要求非常高,普通講師難以信任。

編程語言的選擇是人生大事,必須慎重,誰都不希望在工作幾年後被迫從一種編程語言轉向另一種編程語言。

JAVA和C/C++是程序員可選的兩個方向(其它編程語言根本不在考慮範圍),無所謂哪一種更好,我個人偏向C/C++,因為JAVA程序員的工作太累了。

更多的人選擇學習JAVA,在較短的時間內就可以上手,從簡單的WEB頁面做起,所見即所得,容易有成就感,但是C/C++不一樣,學生在學完基礎知識后還是不知道它能做什麼,離企業需求仍然差得很遠,堅持下去的人很少,“從入門到放棄”是多數人的無奈的選擇。

二、企業對C/C++程序員的技能要求

從前程無憂的招聘數據看,中國企業對C/C++的技能要求主要有網絡通信、硬件驅動(嵌入式)、數據庫、視頻音頻、網絡遊戲、桌面圖形、機器學習、大數據、物聯網,如下圖。

以上數據可以從前程無憂的官網查詢,分別輸入“C++ 網絡”、“C++ 嵌入式”、“C++ 數據庫”、“C++ 遊戲”等關鍵字,範圍選北京、上海、廣州和深圳。

值得注意的是,近年來被媒體反覆炒作的人工智能、大數據、物聯網、區塊鏈等高大上的概念,企業需求其實很少,現在股票也不抄這個概念了。

輸入“ C++ Linux”關鍵字搜索,結果有9767條記錄,輸入“C++ Windows”關鍵字搜索,只有2500條記錄。這說明windows作為服務器的操作系統,正在被淘汰中。

目前,大部分的學校和培訓機構讓學生windows平台下學習C/C++語言,而企業要求的卻是linux。

我們應該學習主流技術,不能成為非主流,否則有被淘汰的風險。

三、數據比石油更珍貴

在我們的生活中,數據無處不在,但是,常人對它不敏感。

人口戶藉數據在公安局。

駕照數據和車輛數據也在公安局的交警支隊。

醫院保存了每個病人的基本資料和就診數據。每個產婦在醫院生了小孩子,計劃生育部門也會知道,它們與公安局和醫院有聯網交換數據。

銀行有開戶數據,轉帳記錄。

證券公司有行情數據、股東基本數據、持股數據和交易日誌。

電信公司有開戶數據、通話清單、帳單。

電力局有居民的基本數據和用電帳單。

火車票、機票都是數據。

騰訊公司有QQ帳戶數據、微信帳戶數據、聊天日誌、轉帳日誌等。

阿里公司有淘寶帳戶數據,商戶數據,商品數據、交易日誌等。

煤氣公司、自來水公司……

一個人的身高、體重、學歷、年齡是數據。

圖片、視頻、音頻、文章也是數據。

……

四、C/C++程序員在做什麼

用C/C++做桌面程序的比例約11%,其它的C/C++程序都運行在後台Linux服務器上,普通用戶看不見。

在很多培訓機構的教程中,把貪吃蛇、俄羅斯方塊、打地鼠、球球大作戰等程序當成項目實戰,太過兒戲,這些程序的源代碼網上到處都是,真正的程序員不玩這個。

真正的C/C++程序員在工作,掌握的是謀生的技能,不是在玩過家家。

我們每天都在用微信軟件聊天、付款、轉帳等,對普通用戶來說,只看到微信軟件的操作界面,不清楚有後台系統的存在,以轉帳功能為例。

1)付款人在手機微信中輸入轉帳金額和支付密碼;

2)手機微信軟件把轉帳金額和密碼發送給騰訊公司的微信服務器;

3)微信服務器核對用戶的密碼和轉帳金額,向中國銀聯發起轉帳請求,中國銀聯把轉帳請求轉發給付款方的開戶行銀行,開戶銀行從付款人的帳戶中扣除金額。

4)微信服務器把扣款成功信息返回給手機微信軟件,显示轉帳成功。

5)微信服務器向收款人的手機微信軟件發送收錢提醒,收款人點擊收款后,微信服務器把金額存入收款人的微信帳戶中。

在上述轉帳流程中,蘋果手機的微信軟件採用Objective-C語言開發,其它品牌手機的微信軟件採用JAVA開發;微信服務器、中國銀聯和開戶銀行都是非常龐大的系統,系統之間進行了多次數據傳輸,對數據庫進行了查詢、修改和插入操作,都是採用C/C++語言開發,系統運行在UNIX系統上,效率極高、穩定性極強,工程量巨大,是精英程序員們的心血之作。

對騰訊的開發團隊來說,手機上安裝的微信APP軟件,開發的工作量不會超過整個微信項目的5%。

五、總結一下

1)網絡通信和數據處理以C/C++語言為主,數據輸入、數據展示以java為主。

2)作為服務器的操作系統,必選Linux,Windows已被淘汰,以VC、QT等作為C程序的開發環境極不明智。

3)網絡通信是C/C++程序員的必備技能。

4)數據處理是C/C++程序員的必備技能。

5)嵌入式開發的職位比較多,技術上偏硬件(通信、电子等專業),軟件為輔,無硬件基礎者要慎重考慮。

6)放棄幻想,不要追逐那些高大上的潮流(區塊鏈、大數據、人工智能等),也不要聽那些從入門到精通的鬼話,踏實一點,先成為一個普通程序員,這個世界上從來就沒有捷徑。

7)要學會自己查資料,www.51job.com上的信息量非常大,不要視而不見,不能被別人隨便忽悠。

六、關於視頻教程

2019年五月,我計劃錄製C/C++語言基礎知識的視頻課程,打算採用知名的書藉作為教材,在翻閱多本書藉之後,我非常的失望。作為一個骨灰程序員,二十年來,我非常清楚如何成為一個合格的C/C++程序員,包括學習方向、企業的需求和必備技能等。書店裡能買到的C/C++
書藉,絕大部分是教授和講師編寫出來的,普遍存在三個方面的問題:

1)只介紹知識點,不結合應用的場景,示例代碼和課後作業與實際項目開發嚴重脫節;

2)重點內容不突出,C/C++的知識點非常多,很多內容已經過時,在工作中極少使用,這些內容增加了學習的負擔;

3)紙上談編程,不注重培養程序員的感覺。

從職業程序員的角度出發,我把C/C++語言的基礎知識內容寫成文章,在C語言技術網發布,本教程有以下特點:

1)以Linux平台為學習和開發環境,Linux是C/C++程序員的主流工作平台;

2)斷章取義,重點突出實際開發中常用的內容,略過不常用的知識;

3)設計了大量的課後作業,這些作業與實際開發內容息息相關,把培養程序員的感覺放在首位;

4)本教程的目標是為職業C/C++程序員打基礎,不合適在校大學生的畢業考試和計算機等級考試。

七、獲取視頻教程

百萬年薪程序員錄製,《C/C++高性能服務開發基礎》視頻教程已在CSDN學院發布,優惠價12元,地址如下:
https://edu.csdn.net/course/play/29402

八、版權聲明

C語言技術網原創文章,轉載請說明文章的來源、作者和原文的鏈接。

來源:C語言技術網(www.freecplus.net)

作者:碼農有道

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

【其他文章推薦】

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

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

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

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

新北清潔公司,居家、辦公、裝潢細清專業服務

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

SSH免密登錄詳解

SSH免密登錄詳解

SSH(Security Shell)安全外殼協議,是較為可靠的,專為遠程登錄會話和其他網絡服務提供安全保證的協議。

​ 對於傳統的網絡服務程序(例如,FTP,Telnet等)來說,其本質上並不是安全的,主要原因在於,這些網絡應用程序在網絡上都是直接使用明文傳輸口令和數據的,對於別有用心的人來說,這些口令和數據是很容易被截獲的。另外,這些網絡服務程序的安全驗證方式也是存在弱點的,非常容易受到中間人(Man-In-The-Middle)這種方式的攻擊,簡而言之,就是中間人冒充真正的服務器接收你傳輸的數據,然後,再將數據轉發給真正的服務器,通過這種方式中間人就可以神不知鬼不覺地拿到你所有數據。

​ 通過使用SSH,則可以將所有傳輸的數據及口令進行加密,從而防止中間人攻擊,還可以防止DNS和IP欺騙,另外,使用SSH還有加快傳輸速度的好處,原因在於,SSH是可以對數據進行壓縮的。

SSH安裝詳解

SSH是安全外殼協議,而open-ssh則是SSH的開源實現,CentOS通常是默認安裝了open-ssh的。

整個SSH服務是包含SSH服務端(openssh-server)和SSH客戶端(openssh-clients)的,常用的ssh命令就是客戶端一部分。

SSH服務端與SSH客戶端之間的關係:節點A想要控制節點B,則節點A上需要安裝SSH客戶端,而節點B上需要安裝相應的SSH服務端,這樣,節點A才能向節點B發送控制命令和數據。

# 安裝openssh-server
[root@cos1 ~]# yum install -y openssh-server
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.ustc.edu.cn
 * extras: mirrors.ustc.edu.cn
 * updates: mirrors.ustc.edu.cn
Package openssh-server-7.4p1-21.el7.x86_64 already installed and latest version
# 啟動openssh-server
[root@cos1 ~]# systemctl start sshd.service
# 安裝openssh-clients
[root@cos1 ~]# yum install -y openssh-clients
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirrors.ustc.edu.cn
 * extras: mirrors.ustc.edu.cn
 * updates: mirrors.ustc.edu.cn
Package openssh-clients-7.4p1-21.el7.x86_64 already installed and latest version

openssh服務的主配置文件路徑:/etc/ssh/sshd_config

# SSH-Server常見的配置項
# 如果SSH連接提示端口不可用,可以在改文件中查看SSH端口,端口沒問題,就要考慮SSH服務是否正常啟動了
# SSH客戶端與服務端連接的默認端口號
Port 22

默認情況下,SSH服務提供了以下兩個非常有用的功能:

1、類似Telnet遠程連接服務器功能,即SSH服務(安全可靠的遠程登錄會話服務)

# 遠程連接服務
ssh user@hostname/ip

2、類似FTP的sftp-server服務,藉助SSH協議來傳輸數據,提供更安全的SFTP服務(vsftp, proftp).

# 文件拷貝服務
scp files user@hostname:/path/

SSH免密登錄配置

​ 對於分佈式環境組件(例如,Hadoop,HBase等)來說,組件的主/從節點通常需要遠程登錄到集群中其他節點並執行Shell命令,如果不使用SSH,則集群安全就無法保證,使用SSH服務的話,又需要用戶輸入目標服務器的免密,而主/從節點何時訪問其他節點是不可控的,而且,頻繁的需要用戶輸入密碼也是不可行的,這時候,免密登錄就非常重要的。

主機A通過SSH實現免密登錄主機B所需的配置過程大致可以分為以下兩步:

1、主機A在本地通過加密算法生成公鑰和私鑰

通過rsa算法生成公鑰和私鑰key對,默認情況下,身份驗證信息(也就是私鑰)保存在/user/.ssh/id_rsa文件下,而公鑰信息則保存在/user/.ssh/id_rsa.pub文件中。

[root@cos1 .ssh]# pwd
/root/.ssh
[root@cos1 .ssh]# ll
total 8
-rw-------. 1 root root 1679 Jun 22 00:04 id_rsa
-rw-r--r--. 1 root root  391 Jun 22 00:04 id_rsa.pub

2、將主機A的公鑰拷貝到主機B的授權文件(authorized_keys)中

# 通過ssh-copy-id命令將本地服務器公鑰上傳到指定服務器
[root@cos1 ~]# ssh-copy-id root@cos
... ... ... ... ... ... 
Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'root@cos'"
and check to make sure that only the key(s) you wanted were added.
# 現在,可以通過ssh root@cos訪問主機cos了
[root@cos1 ~]# ssh root@cos
Last login: Thu Jun 18 06:38:25 2020 from 192.168.58.1
[root@cos ~]# 

為了安全起見,通常將保存具體哪些主機可以免密訪問當前主機的授權文件authorized_keys文件設置為及root具有查看和修改的權限,用戶組及其他人無權訪問。

通過ssh-copy-id將主機A的公鑰拷貝到主機B之後,本質上,是在主機B的授權文件中添加了主機A的公鑰。

[root@cos .ssh]# ll
total 8
-rw-------. 1 root root 781 Jun 22 00:16 authorized_keys
-rw-r--r--. 1 root root 176 Jun 18 07:34 known_hosts

注意:

1、免密登錄,是用戶對用戶的,切換為其他用戶時,仍需要輸入密碼

2、免密登錄是單向的,也就是說,主機A將公鑰拷貝到主機B后,主機A可以免密登錄主機A,而主機B登錄主機A時仍然需要輸入密碼

圖解SSH免密登錄原理

通過上面一頓操作,主機A就可以免密登錄到主機A了,感覺有點神奇,那麼,免密登錄到底是怎麼實現的呢?也就是說,SSH協議又到底是什麼樣子呢?且看下圖分解~

上圖便是整個SSH免密登錄的配置及原理圖:

1、ServerA生成公鑰並上傳到ServerB上

2、Step 1: ServerA發送鏈接請求到ServerB

3、Step 2: ServerB在authorized_key中檢索ServerA的公鑰,隨機生成字符串,隨後利用公鑰對字符串進行加密,併發送給ServerA

4、Step 3: ServerA接收到密文後,利用私鑰進行解密,並將內容以明文的形式發送給ServerB

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

【其他文章推薦】

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

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

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

※幫你省時又省力,新北清潔一流服務好口碑

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

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