天天看點

從事c++一年的感悟目的為什麼會從事c++開發工作感悟結語

@TOC

坐标成都,2019/6/29

目的

寫這片文章的目的是為了紀念一下這個我覺的有意義的時間點。開始也從一個隻知道竊取網上免費知識成果的一顆白菜,漸變成了學會了學習,總結技能的老白菜吧。 
           

為什麼會從事c++開發

先講講在衆多語言中,為什麼我會選擇了c++吧。各位觀衆,容我慢慢道來吧。
大學大專資訊管理專業,計算機系,學習了一學期的c語言,成果就是列印了一個倒着的楊輝三角;大一大二學習了思科路由和交換,也算了解了網絡世界通信的基石了,給後面的開發提供了幫助,大二又學習了java,css,xml,能做個簡單的表格吧,插上兩張圖檔,說實話:難看。
畢業後,想要從事開發的工作,面試幾次後,飽受挫折,就想到了教育訓練。當時考慮了c++,java。最後因為自己想要争強好勝的心,選了一門難度更強的語言。其實是自己做的界面太醜,不敢直視自己做出來的界面。
選擇達内教育訓練,學習c++,學費很貴,成本效益偏低,個人的看法而已,也許别人覺得還可以。學習了三個月後,第一次面試就被招聘走了,依稀記得當時的心情,當時心中萬馬奔騰,歡呼雀躍,感覺自己能上天騎龍,下地抓鬼。希望能把這種心情傳達給c++的後學者。
           

工作感悟

劃重點了,聯考必考。(聯考剛結束,寫到重要的地方就想起來了,緻敬逝去的青春年華)
先說說我的工作吧,公司是做資料分析的。會經常接觸通信,網絡協定,資料轉發。感興趣的可以了解下IP業務。後面就談談純技術方面的吧,公司的架構采用的多線程,異步處理的方式,涉及到業務的地方全部剝離出來,采用動态加載的方式。友善以後的業務更新和擴充。
主要的子產品劃分:資料輸入輸出子產品,規則比對子產品,會話還原,協定解析子產品,應用還原,外部通信子產品,統計子產品,日志子產品,記憶體管理子產品。大緻如此,其中有許多設計,也還沒有吃透,工作仍需努力啊。這其中設計到的難點有對記憶體的管理(性能和不定長記憶體塊的配置設定),規則比對的性能要求,線程間異步處理,應用協定的還原(很多加密的協定)……,感覺對我來說,想要做好,都是一個難題,感謝公司的同僚,以及優秀代碼貢獻者。
日常是在centos環境下開發,屬于redhat企業版的克隆吧。日常用到的開發庫boost,一個很全很優秀的c++庫,前輩們都叫做标準庫。公司還有一個大神,不用這個,用自己10多年積累下來的庫,基本包含了日常所需,而且性能還可以,也比較為穩定。有很多人說不要重複造輪子,這句話我是相信的,不過哪一位大牛又沒有造過輪子楠。并且在某些特殊的情況下,使用系統api和标準庫有些時候反而是性能的殺手。這個時候就需要自己造輪子了,畢竟大多數庫都是為了使用日常使用,可以結合自己項目中的情況,進行改造。
舉個例子吧,一個得到時間的函數,localtime(),在項目中需要頻繁的調用這個函數擷取時間,根據28原則,%80的性能消耗在了%20的代碼,這話一點不錯。localtime()轉換utc秒數傳回一個存儲了年月日,時分秒的結構體。當時沒有人去關注其中的内部實作,經過大神的提點,自己寫了函數的實作,後面性能果然得到了提升,處理能力提升了幾倍。具體的原因還沒有研究過。大神提點說是其中涉及到時區轉換。
還有很多的例子,比如intel開源的dpdk(資料平面化處理開發套件),将性能做到了極緻,其中的技術讓人大開眼界,比如dpdk的收發包,采用UIO(使用者态IO)技術,就繞過了linux核心,原因是經過核心會多一次拷貝。
又比如malloc,free,系統提供的申請記憶體的api,不過有很多大牛為了自身項目的特性考慮,都對記憶體做了自己的配置設定和管理,例如大頁記憶體。
見識了許許多多,真真切切認識到linux是一個自由度非常高的作業系統,已經有許多優秀的開發者提供了太多優秀的工具。你想要的,基本沒有linux提供不了的。如果你有新的想法,通過修改源代碼都可以實作。
c++是一門很複雜的語言,文法十分複雜,工作一年也有許多文法沒有了解和接觸過。其中的模闆更是天書一樣的代碼(boost庫中可以讓你體驗到),第二點就是c++的優勢就是性能,是以c++永遠不會淘汰,但是難點也在性能,這需要對c++本身的語言非常了解,結合作業系統,cpu,記憶體,各種優化性能的手段了解。我想這都不是幾個月或一年的事情。是以繼續努力吧。
           

結語

第一次的部落格,晚上熬夜寫的,還有許多的感悟,以後結合實際學習情況在說吧,不然難免空談。如有筆誤或認知不當,感謝各位斧正。聯系方式[email protected]

繼續閱讀