可以找到工作嗎?
一、學習過程
1、比較仔細的學習了《c++primer》,并對每個習題都自己寫代碼實現了一遍,包括稍微復雜一點的例子。
2、認真讀完了《effective c++》,《effective stl》。
2、比較仔細的學完了《數據結構與算法分析》,并把其中的每種數據結構和算法都用c++實現了一遍。包括各種線性表,樹(二叉樹、AVL樹、RB樹的各種操作),圖(BFS、DFS、prim、kruskal、djkstra、floyd、拓撲排序、關鍵路徑等)查找算法,排序算法。
4、2-3個月認真學完《csapp》并做完書上的課后習題(由于時間的關系,沒有在做家庭作業),順帶學習了一些gcc的嵌入匯編的用法。
5、讀完了《深度探索C++對象模型》,對象C++底層實現機制有了一定的了解。
6、讀完了《TCP IP詳解卷一》
7、讀了《APUE》的大部分內容以及《UNP卷一》有關TCP/UDP的部分,略過了SCTP的部分。
8、研究學習陳碩的muduo網絡庫源碼,受益良多,在期間發現過其中的一兩個小問題,提了幾個pull request,研究完了muduo源碼后又看了其相關的書《Linux多線程服務端編程 》
9、學習了云風的skynet網絡庫的小部分源碼,主要為了了解actor模式和reactor的異同。
10、學習了google test框架的部分源碼,弄懂了內部的的運行原理。
11、刷《劍指offer》的所有習題。
12、刷leetcode,代碼在liyuan989/leetcode · GitHub,由于時間的關系大約刷了130道就開始找工作了。
二、關于練手項目
寫了簡易STL,C++協程庫,以及一些http server,rpc之類的。
三、關于找工作
由于基本都是同學朋友內推,不存在簡歷被HR篩掉了。
其實自己都驚訝在找工作的時候有些異常順利,因為面試官問的問題很少有答不上來的。絕大多數問題個人感覺不難,大多都是問的一些比較基礎、底層的東西,比如互斥鎖底層是怎么實現的?如何用C語言實現C++的異常,說說基本思路這樣的問題。然后就是根據簡歷上寫的東西來問。
另外一個要說的就是紙上手寫算法題了,手寫代碼和機器上寫代碼的感覺不一樣,我個人是沒事自己在紙上寫寫一些基本的算法來熟悉,比如快排、堆排序之類的。
然后面試要問的算法題一般都不難,多數都是翻轉鏈表,判斷鏈表是否有環,回文數,找出鏈表倒數第k個數這樣的題目。
很少遇到問二叉樹的問題,沒有遇到過問圖的相關問題。唯一碰到一個動態規劃的問題,就是最典型的最長公共子序列問題,難點的就是百度第一面最后問了一個leetcode上hard難度的原題,總的來說刷一些題還是很有必要的。
四、驅動力是什么
對于我來說驅動力就是興趣和堅持吧,再一個就是有一種「做一件事就要把它做好的信念」。
講一下我個人的兩個經歷。
在我中學的時候對籃球很有興趣,但是剛開始的時候運球都運不穩,更別說上籃、突破、三威脅之類的高級動作了。然后我就在網上找到了張衛平老師的籃球教學系列視頻,學基本的運球動作,投籃動作以及基本步法,在家里沒事都會練練步法。每天晚上傍晚看不太清的時候都去練投籃找投籃感覺,然后看NBA學一兩個實用的晃人、假動作技巧,再慢慢練習。最終在高中的時候進了當時的校籃球隊,拿了當時市高中比賽的冠軍。
另一個就是關于WOW了。高中畢業的時候被一幫從地球年代就開始玩的同學拉去玩WOW了,由于之前沒有玩過類似WOW的網游,什么都不懂,完完全全的一個小白,一下副本就被隊友、同學罵。然后呢,我就去NGA看各種攻略貼、精華帖、視頻。仔細研究每一個技能的描述,冷卻時間。慢慢的,下各種副本團隊時候DPS都超過了我的同學,再到后來加入了服務器FD團隊,拿過幾個服務器首殺,單個BOSS的DPS排行也進過WOL全球前10。PVP方面也是的,開始在奧格門口是個人都能虐我,然后我每天觀摩那些高手怎么放技能,怎么銜接,然后每天泡在奧格門口決斗練習,看NGA刀鋒山的各種精華帖,看各種PVP視頻,慢慢的在奧格門口幾乎沒有對手了,成為了所謂的門神。后來覺得決斗沒意思,就開始玩競技場,也是這樣的一個學習過程,最后也打到了角斗士龍。
最后,我很喜歡劉未鵬先生說過的一句話,送給大家:
興趣遍地都是,專注和持之以恒才是真正稀缺的。