2014年終總結

2014能夠算做真正意義上參加工做的第一年(雖然2013畢業,可是畢業後的半年基本是處於迷糊狀態),心態上、技術上都有了一個比較大的轉變。之前心態上老是比較浮躁,想着捷徑啊快速什麼的,如今以爲作事情,尤爲是作技術得沉澱下來,慢慢積累。html

工做上的事情基本是循序漸進的進行,感受沒有什麼想說的,可是這一年利用業餘時間看了一些技術書籍,這裏就按時間的順序簡單的總結一下。python

  • 《C++ Primer》

剛畢業的時候對於C++,嗯,基本就是學校課堂上那一點C with class的東西,以及作過幾個課程設計的水平。因此選擇了這本經典的大部頭來學習,以前在網上看到不少人說這本書太厚讀起來困難什麼的,其實我以爲只要真的靜下來讀的話,沒那麼難,做者寫的仍是很是簡單易懂的。算法

由於想比較系統的學習一下C++的語法,在閱讀學習的時候基本上碰到不太理解的地方就會停下來敲代碼實踐思考一下,每一道課後習題都敲代碼作了一遍。最後讀完後統計了一下課後習題的練習代碼都有七八千行,這個是一開始沒想到的。編程

學習整本書的的過程大概花了2-3個月的時間,與大學課堂上學的那一點C with class相比,收穫很是大。緩存

  • 《Effective C++》

讀完了C++ Primer以後就尋思着讀本進階一點的書籍,因而另一本經典的書籍天然的進入了個人視線中。這本書主要是一本談C++經驗、避免踏入各類坑的書籍,裏面講了不少很是好的經驗,好比視C++爲語言聯邦、以對象管理資源(RAII)、儘可能以傳引用代替傳值、儘可能以組合代替繼承、善用智能指針等等。我的認爲。目前來講,對我最爲有益和深入的莫過於RAII了,有了它能夠在必定程度上很好的避免資源泄露。固然裏面也有一些經驗談目前還理解的不是太深入,須要必定的經驗後再去閱讀消化了。大概用了1個半月的時間讀完了這本書。網絡

  • 《Effective STL》

STL始終是C++繞不開的一個東西,可能有些人是STL潔癖,喜歡用c標準庫的東西或者本身造輪子,但我我的來講仍是比較喜歡STL的。由於想多瞭解一些使用STL的技巧、因此就買了這本書回來閱讀了,這本書比較詳細的介紹了使用STL時了一些須要注意的地方,好比各類容器迭代器失效的狀況,好比vector和string的clear函數並無釋放空間,能夠用臨時對象swap的方式釋放空間,好比erase、remove慣用法等等。用了將近一個月的時間來閱讀這本書,讀完了它後對STL的理解加深了很多。數據結構

  • 《大話數據結構》

以前用了不少的業餘時間學習C++方面的東西,想着大學學的數據結構也都忘的記不起多少了,因而在豆瓣上找了一本評價還不錯的書買回來學習了。其實開始的時候是準備學習算法導論的,大概看了前面二三十頁,對裏面一些數學證實讀起來比較吃力,orz。因此就換了本稍微簡單易懂點的。多線程

其實這本書我到沒有很是仔細的閱讀、基本是對書上介紹的每一種數據結構和算法的概念和思想讀完理解一下,而後就本身用C++實現敲代碼去了。架構

主要涉及到了線性表、棧、隊列、串(暴力匹配、KMP)、二叉樹(平衡二叉樹樹、紅黑樹、霍夫曼樹),圖的算法(BFS、DFS、最小生成樹、prim、kruskal、dijkstra、floyd、拓撲排序、關鍵路徑)以及各類排序算法(冒泡排序、簡單排序、插入排序、希爾排序、堆排序、歸併排序、快速排序)。主要是將這些數據結構和算法本身用C++實現了一遍,可是並無去作一些題目、根據不一樣的狀況來選用、綜合這些基本算法。時間一長仍是容易忘記,好比在我寫下這篇blog的時候,上面的一些算法只能說出基本的思想和思路,要實際手寫的話估計仍是得費勁想或者再看書熟悉熟悉才行。不過我以爲另外一方面的好處是知道這些算法的思想、用途以及時間複雜度,在平常編程中,能夠根據狀況選用更有效率的標準庫算法,在使用各類容器的時候,知道其底層模型是什麼、怎麼實現的、用起來也更加自如了。數據結構和算法

  • 《深刻理解計算機系統》 又名《CSAPP》

以前在知乎上看到不少大牛推薦這本書,好比老趙老趙書託系列中就推薦了這本書,因此本着學習瞻仰的目的就買來了這本書學習了,啊哈哈哈。

首先第一章計算機漫遊整體介紹了計算機的從硬件到軟件的基本組成和架構,第一次讓個人腦海裏對計算機的總體模型有了一個基本的認識。後面第二章緊接着介紹了計算機數據的二進制表示,雖然在學校的計算機組成原理這門課上學習了一點這些東西,那時候上課也沒怎麼認真聽(如今想一想估計光想着哪一個妹子和怎麼玩wow去了,orz),好比數據的上溢下溢,數據截斷等等都是很是有用的東西。

第三章做者用短短100頁左右的時間將基本的IA32和x86-64彙編介紹了一遍,讀完以後不說能寫多好的彙編程序,起碼能看懂很多編譯器編譯的彙編代碼,這不只debug的時候是頗有用的,也對理解一些編程語言的機制比較有用,好比經過了解彙編就糾正了以前學C++時候的一個錯誤的觀點,覺得pass by reference必定比pass bay value有效,其實當pass value時候數據位的大小沒有超過寄存器的一次讀取數據的位數上限的話,pass by value實際上會經過pass by register,這樣就更加有效率了。同時也知道了臨時變量大多時候是存放在寄存器中,對臨時變量的理解也更深入了一些。

第四章依次介紹了處理器的體系結構,包括簡單的指令集、流水線結構、分支預測、轉發機制等等。第五章介紹了一下程序優化的技巧,例如循環展開、積累變量、減小存儲器引用、等技巧都是很是有用的,雖然現代編譯器的優化能力很是強大,可是在必要的時候我也是能夠經過這些手段去嘗試着測試、優化、提升效率的。第六章介紹了存儲器的結構、數據存儲加載的基本方式以及緩存命中/未命中、數據局部性對程序性能的影響等等。雖然這些底層的東西可能對咱們上層的程序編寫來講,表面上沒有關聯,但我我的認爲知道一些基本的底層知識能更好的寫出對底層機制更親和的代碼。

後面還介紹了異常控制流引伸出了操做系統內核和用戶態的切換,進程,線程,網絡編程,IO等許多東西,這裏就再也不贅述了。一共花了2個月的時間來閱讀這本書、並動手作了每節的課後習題,可是每章的家庭做業並無作,準備讀第二遍的時候把它們作了。

這本書很是好,也不枉許多大牛的推薦,因爲書中介紹了知識概念不少,時間一久細節的東西比較容易忘記,有時候須要常常翻出來查找某些概念和知識。

  • 《深度探索C++對象模型》

因爲讀完了CSAPP後對底層比較感興趣,就搞到了這本書想了解一些C++底層的實現機制,以及編譯器在背後作了哪些事情。這本書也花了一個多月的時間來閱讀,裏面講解了不少有趣的東西,好比在C++Primer中說的當咱們沒有爲一個類定義構造函數的時候,編譯器會自動合成一個默認構造函數,可是讀了這本書後才明白,其實編譯器這個壞傢伙在背後並不必定會合成默認構造函數,例如當這個類的數據成員是內置類型的時候,編譯器就神馬都不作。C++標準中把這種構造函數叫作trival構造函數、對於trivial默認構造函數編譯器是不會合成的,編譯器只會合成non-trivial構造函數。再好比多態、虛函數的實現機制、運行時類型識別的實現機制等等。裏面頗有不少這樣有意思的東西。

另外也花了很多業餘時間也研究了多線程C++開源網絡庫muduo的源碼、學習陳碩老師的網絡編程思想以及代碼風格等等。

2015年的展望。但願2015年在技術上有所積累、提高一個檔次,主要有三個方面:一方面計劃在15年抽空學一門函數式編程語言,好比lisp或者haskell,瞭解一下另外一種範式的語言,開開眼界;另外一方面也想系統的學習一下python,瞭解這這一門動態語言的設計思想,由於目前只是在工做中偶爾用python寫寫工具腳本,談不上熟悉,總的來講我比較喜歡C++,可是也想多瞭解瞭解不一樣的語言,熟悉多種範式和內在的語言設計思想;最後,但願在網絡編程、多線程方面的技巧、思想有所提高,操做系統、協議棧上的機制有所瞭解和理解。

(完)

相關文章
相關標籤/搜索