剛學完c++primer的前18章,為了準備春招,現在是刷leetcode 更好,還是做些小項目?
題主是三流一本的軟體工程應屆生,靠《C++ Primer 5th》 自學,用最笨的辦法一行一行把書上的代碼敲了一遍。自覺水平不過關,也沒有項目經驗,恐怕小公司的面試也過不了。
春招快要到了,我想要在這之前成長到至少能找到工作養活自己的水平。題主手裡有《STL源碼剖析》,《Effective C++》和《深度探索C++對象模型》三本書,本想多深入學習一下,但時間上恐怕來不及了。不知道現在應該怎麼辦,似乎有三條路可走:1. 刷leetcode 準備面試(這樣就沒有項目經驗了,而且即使過了面試好像也有欺騙面試官的嫌疑)2. 學習一些開源項目並嘗試著模仿一下(硬啃經典項目我對自己沒有信心,貪吃蛇這種恐怕又入不了面試官法眼)?3. 繼續看書深入學習(學而不用恐怕體會不到精髓)?
我很迷茫,行業內的前輩們能不能給我一個建議?謝謝各位,非常感謝。
《Effective C++》一定要看,另外兩本暫時可以不用看,其實《深度探索》不看也沒啥。
剛參加完校招,拿到了幾個大廠的offer,講講我的經歷給樓主參考下。
我本專業是通信方向,研一下學期開始決定轉計算機,在此之前只學過c語言,演算法與數據結構,計算機網路。
1 c++ primer 多翻兩遍,夯實基礎,很好的書。STL源碼剖析內存分配策略可以看看,我面試被問了好幾次(新版gcc實現的STL不是這本書上講的分配策略),vector、deque、list、map、set、unordered_map、unordered_set 適用什麼場合,插入刪除複雜度,迭代器失效情況,底層實現原理等要清楚(要能說明白),effective c++要看,現在出了個新版的叫effective modern c++講了c++11的新增的一些知識(智能指針,右值引用,auto, lambda。。。),有時間可以看看,沒時間等以後工作再看,好像還沒出中文版。深度探索c++沒時間的話可以看看陳皓關於c++內存布局的那篇博客,寫的很好。https://coolshell.cn/articles/12176.html
2 現代操作系統(進程、線程,內存,文件系統),TCP/IP協議卷1(我看的舊版,現在出來新的了),unix網路編程卷1卷2,unix環境編程,linux高性能服務端編程(面試問到很多,),深入理解計算機系統(很推薦,雖然面試沒怎麼問到)
3 演算法與數據結構(對校招面試來說最重要,項目問的少,演算法題就會問得多)。
書籍:ref="https://book.douban.com/subject/1139426/">數據結構與演算法分析(看網易雲課堂浙大陳越老師視頻,他們就是用的這本書)(幾種排序好好看,複雜度牢記,快排,歸併,堆排實現要熟練,思想要清楚),演算法導論翻了對應的幾章。
刷題:劍指offer刷了三遍。leetcode(也可以用lintcode,支持中文)前300題中的easy和medium刷完,hard刷了一部分,堅持每天至少一道(二叉樹,鏈表,動規、字元串、數組多刷幾遍)
4 項目,去年11月開始找項目做,剛開始和同學一起用c實現了一個小型FTP伺服器(二十個左右命令吧,三千多行吧),用到了多進程編程,網路編程,系統編程、linux命令,makefile等知識。過完年看了muduo源碼(很好)和那本對應的書,還有陳碩的視頻,收穫很大,看完之後趁熱寫了個小型HTTP伺服器
校招面試就幾個方面:
基礎知識(操作系統(進程,線程,內存問的多),網路(大多是TCP/IP協議那本書上的),c++(看primer夠了), 常見數據結構(注意別忘了AVL樹和紅黑樹),演算法(排序常問))
講講做的項目,擴展問一些知識,一定要清楚自己的項目。(我的項目難度比較低,但是我準備的比較充分,整理了用到的知識點,項目框圖,遇到的問題,能和面試官扯很久。。。。)
演算法題,幾乎每輪面試必寫(我室友是java後台,幾乎一半多的面試沒讓寫演算法,好奇怪),演算法題幾乎是決定性的,寫不出來或者寫的很爛(沒注意邊界條件,指針為空。。。)很有可能就掛了,所以演算法一定要多花時間,演算法弱幾乎沒戲了(大廠是這樣,小廠不清楚,可能更注重項目吧)
牛客網上有一些公司試題,沒事多刷刷(筆試很重要,不過連面試都沒機會)
可以多看一些牛人的博客,總結的很好,後期看書可能有些慢
演算法題要多刷!!!!!!! 要動手不是只用眼看
項目要有,自己搞不定可以網上找付費的(牛客上好像有,其它網站也很多),模仿著寫,
先把招聘這關過了再想別的吧。
春招是明年3-4月份,招的是實習生,大概還有4個月時間,每天抽點時間刷幾道leetcode. 然後做做小項目(比如你買的STL源碼剖析,可以用c++11仿寫一遍當做小項目).
現在互聯網招c++,基本都是linux c++後台開發,看看《the linux command line》《unix環境高級編程》,《unix網路編程》,仿造一個網路庫,基本就可以了.
當然操作系統,計算機網路,資料庫也都要複習,關於看哪些書,怎麼複習,可以看我在知乎的其他回答,覺得時間不夠可以準備到7-8月份的秋招提前批, 9-10月份的秋招,機會還是有很多的.
另外當初我準備實習春招時,將大部分牛客網,csdn等有關C/C++的面經收集成pdf(並沒有去除重複的,重複出現的說明是考察的重點),然後看面經pdf,將各個不會的知識點一一擊破.然後很順利的就拿到了bat某家的offer,如果各位需要的話,(其實就只不過是很多人寫的面經總和罷了,格式什麼的也沒整理..)
收集的面經鏈接:微雲分享
各位大佬看到這,求關注,會時不時分享乾貨
刷leetcode,別猶豫。
不管是effective cpp還是做小項目可能時間都不太夠。
如果你會別的語言,就不要再看cpp了,python之類最好。如果cpp是你唯一的語言,那...多看看stl的基礎用法,leetcode上記得選cpp,多練練。另外,我要罵人了,你作為軟工的學生,怎麼可能一點項目經驗沒有?!剛開始看還以為是轉專業的學生...軟工的話必然會一門其他語言吧?國內大概率是java。好好繼續看java,短時間內不要入cpp的坑。你要是大一大二還行,現在有點晚了題主,你不說自己的專業知識水平怎麼樣誰也給不好你意見,說說你大學前三年干過啥學過啥擅長啥會更好點,給個 github 或者 技術博客 網址也好啊。
你說的 effective c艹 和 深度探索 兩本本來就沒多少頁,反正大四也沒啥課了,每天花個12h看下一個多星期就能過一遍了,有時間可以把 7e 都過一遍,會很爽的。
再說stl那本,從前往後看涉及到一些 primer 上不會講的技法估計能把你看懵逼,所以先動手寫容器吧,對著 cppreference 上的介面,string vector list deque 一個個來,allocator 不著急先用標準庫自帶的,不會就看書或者 github 搜看別人怎麼寫的,都是寫爛的項目了正好看完 primer 拿來練手。
不知道題主有沒有實習經歷,既沒有實習經歷也沒項目還是雙非學校,找工作可以說是處於劣勢了,沒什麼亮點的話簡歷會被刷的很慘。
可以多看看面經,C艹 一般做 linux 後台的比較多,去牛客網討論區看看各種大廠的面經,如果能回答個七八成的說明基礎不錯,春招能拿個好 offer (可以先過個好年了),下面這些就是錦上添花了。如果基礎不咋滴,還是多刷刷面經,多學習一個了。
演算法不好的話先把 劍指offer 上的題刷熟吧,至少能不假思索地手寫出來不會卡住的程度,筆試都會考點。
項目經驗,我覺得是要有的,給出幾個:
1. 理解C艹 內部實現:
- tiny-stl上面說的自己實現個標準stl子集2. 網路編程相關:
- ftp client/server先寫client,在 linux 安裝個 ftp server,用自己寫的客戶端和它交互,慢慢完善,再寫服務端。參考資料: ftp RFC- http server很多模型,從迭代到多進程到線程池和多路復用的,都可以自己實現並理解。寫完了還可以封裝個自己的網路庫,自己用的順手就行。
參考資料: UNP, @陳碩 聚聚的 muduo 網路庫(裡面的代碼值得學習)3. 其他
- @Milo Yip 聚聚專欄里有個 JSON 庫教程,值得一看 (記得打賞),然後自己試著寫個 xml 的?(真的不要把這個教程項目抄到簡歷上去)- 不知道題主資料庫學的怎麼樣,CS346 Stanford 的資料庫課程,給出框架,實現個簡單的資料庫 Redbase,美滋滋,搞完可以自己寫個當項目。(如你所見,很多國外課程的Project 或者 Lab 都可以拿出來當項目了,自己按照興趣可以 Google 搜搜看,有驚喜)- 有沒有技術博客?沒有的話 gitpage + hexo 快速搭建個開始寫吧,記錄自己寫項目解決問題的過程以及反思總結都是很有意義和好處的。上面都是我實踐過的,秋招也拿了滿意的 offer,其他的不了解就不說了。
題主也沒多少時間了,能做好兩三個就能去面了,當然對自己做的東西理解要深,不然面試官問的啥都不會就尷尬了。
總之,多刷面經多刷題多看書多寫代碼,不要慫,就是干 。首先你要確認去找C++相關職位,是後台崗位,還是客戶端開發,或者是遊戲開發。這樣才能明確需要準備的面試內容。這裡不考慮那麼多,僅從C++語言面試本身來看,強烈認同陳碩的看法,《Effective C++》一定要看。我建議你作為應屆生,可以把《深度探索》放在你書單靠後的位置。先系統的學習一下C++,可以採用思維導圖的方式幫助你梳理出C++主要內容。對於C++的對象模型中有虛函數的對象內存分布之類的,去找個blog看看,然後調試一下,會理解的更快,性價比更高些。STL實際中用的會比較多,多了解一下vector/map/list等常見容器,也是對面試來說極有價值的。C++11/14/17這些要不要看,取決於你的精力。可以看看,了解一些智能指針,右值引用等等。
應屆生的面試更多的時候還是看基礎和邏輯,有小項目和實習經驗固然好。當然,你現在可以準備好基礎,找個實習。面試C++開發工程師的時候一般不僅僅會考察C++,還會問到演算法和數據結構,計算機網路,操作系統,資料庫,設計模式等等,常用的排序查找演算法和基礎的數據結構(棧/隊列)建議寫熟。leetcode要不要刷?建議刷一些中等難度以下的就可以了。之後有時間再看看更難的。
關於面試題,可以找一些往年面試高頻題目,多練練,注意總結和思考。
今年秋招面了十幾家。感覺國內公司考察的主要還是基礎知識和項目經驗,特別偏好技術棧匹配的。C++的坑相對較少,有時間看那三本書不如改學Java 。
演算法方面問的 LeetCode 上的演算法題(特別是難題)沒有什麼太大幫助(除了今日頭條其他演算法面的都比較簡單),《劍指offer》刷熟練就行了。(身邊有人面T兩輪都問翻轉鏈表……)
只有幾個月的時間的話,最好能準備一個能介紹清楚的靠譜項目,常見的基礎知識題目要滾瓜爛熟,不然面試通過的概率很低。
(如果是目標是Google Airbnb Hulu(這些好像沒有春招),以上全是放屁,把LeetCode刷爆即可)
剛找完工作完全從通過面試的角度給出自己的看法。
因為題主目前的目標就是春招,時間並不多了,所以就應該奔著校園招聘一般的考察點去。
題主剛看完c++ primer說明c++剛學習沒多久。如果數據結構和演算法基礎可以,先刷一波題,leetcode題有點多,可以先刷完劍指offer。一來刷題可以讓自己更熟練的使用c++語言,而且是校園招聘的一定會考察的。
effective c++和STL源碼剖析都是面試時愛考的。最好都看,STL源碼比較愛考內存分配器,迭代器實現,vector實現,還有map和unordered_map等。effective的條款就自己去寫代碼驗證咯!只會c++是找不到比較滿意的工作的,你未來想在哪個領域工作先學學相關的知識做做相關的項目,leetcode可以業餘時間刷。演算法只能讓你過筆試或一面,真正決定你是否能留下來還是你的項目經驗和相關領域的知識。
( ??_?? )首先,勸退c++,首推Java/PHP
如果非C++不幹,effective要看,STL的數據結構和演算法部分可以看看(如果DS基本功還可以就別看了),對象模型那本別看了,網上找一下耗子叔的「對象內存布局」看看,有些人面試愛問。 leetcode可以刷一下,寫簡歷上,沒有太明白括弧里說的意思。 沒項目的話翻翻博客,學寫個簡單的httpserver,總結一下重難點,作為自己的項目,寫簡歷上。我覺得門還沒有λ...
真的要準備面c++崗的話,都大四了,就別看那些書了。假設你primer里的東西都懂了,找專門的知識點看吧,虛表虛繼承,特化偏特化,traits,stl里deque咋實現的,內存池咋實現的,元編程了解一點,等等。實在不理解先勉強記住。
數據結構真的很重要,起碼和演算法一樣重要,操作系統和網路也是很重要的。
沒關係,一步一步來,不慌,據我所知,啥都不會的人還是一大堆的。3者並不衝突。
春招時間至少還有4個月吧?一邊刷leetcode,一邊看effective c++,一邊做項目。完全可以同時進行。
編程是種操作技藝,只看書和刷題是不行的,最好和項目同時進行,在實踐中學習。如果是找小公司,小項目經驗有用些,而且沒有項目經驗看太深入的書體會不大,很快就忘了。
找大公司或者外企,毫無疑問刷leetcode,人家壓根不需要你有什麼項目,更談不上欺騙。
同準備春招。現在大約還有三個月左右的準備時間。我準備使用一個月時間刷leetcode。估計能刷150道題左右。刷leetcode時想再了解一下常用的演算法和數據結構。然後一個月學習編程語言。剩下一個月準備網路和操作系統等其他知識。
《Effective C++》目測必看,我準備的書裡面有《Effective Java》,長的好像。
項目的話我感覺應該花10天左右的時間做兩個小東西。面試的時候面試官也主要是看看你有沒有一些奇妙的付諸實踐了的想法。
一起加油,祝找到滿意的工作
我都快半個月沒回答問題了。
為什麼呢?不是不想回答,而是純漢字的表達方式,確實不容易理解。
好吧。
雖然,我知道如果不用圖形化,就是10個贊以內的慘劇發生。
但是不得不說一下。圖形化其實就是架構化。
好吧,架構化之後,腦海里,就有一個形象化的調用過程。
這個看起來像流程圖,其實也是架構圖。
那麼靜止的圖片,弊病也很大,那就是 不知道,流程到底是怎麼進行的。
於是就有了下面這種gif圖。點一下就動了。
那麼cpp的學習也是一個道理。
從ifelse,switchcase,forwhile 等等。
再到class和object。template
然後呢cpp11-1y 等等吧。
學完之後,沒有1000張圖紙,3000張動圖,我覺得你絕對不敢說你精通cpp。
你信不信我的都不重要,因為我在說話的過程中,盡量避免出現個性化的東西,我很提倡共性的東西。
老哥,我跟你情況差不多,同樣三流一本計科專業,所學方向也一樣,遭遇的問題也基本相同,求加好友,共同進步。
做一兩個小項目,沒問題的。
手上的書翻爛,leetcode刷爛,基礎的操作系統和資料庫原理知識掌握
搞項目,作為福布斯世界五十強的企業,理論與實踐都要有,沒人願意帶一個只有理論連環境都不會搭的人
看了多久?代碼量好多?
推薦閱讀:
※學習 OpenGL 用哪個版本好?
※如何理解 C++ 中的深拷貝和淺拷貝?
※c/c++視頻教程哪個比較好? 能學下去的?
※做遊戲與搞圖形學有什麼聯繫?
※C++ 的無鎖數據結構在工業界有真正的應用嗎?